test_hdfsClientUtility.py 3.42 KB
Newer Older
liuzhe-lz's avatar
liuzhe-lz committed
1
2
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT license.
3

chicm-ms's avatar
chicm-ms committed
4
5
6
7
import os
import shutil
import random
import string
8
9
10
11
import unittest
import json
import sys
from pyhdfs import HdfsClient
chicm-ms's avatar
chicm-ms committed
12
from tools.nni_trial_tool.hdfsClientUtility import copyFileToHdfs, copyDirectoryToHdfs
13
sys.path.append("..")
chicm-ms's avatar
chicm-ms committed
14

15
16
17
18
19
20
21
22
23
24
25

class HDFSClientUtilityTest(unittest.TestCase):
    '''Unit test for hdfsClientUtility.py'''
    def setUp(self):
        self.hdfs_file_path = '../../.vscode/hdfsInfo.json'
        self.hdfs_config = None
        try:
            with open(self.hdfs_file_path, 'r') as file:
                self.hdfs_config = json.load(file)
        except Exception as exception:
            print(exception)
26

27
        self.hdfs_client = HdfsClient(hosts='{0}:{1}'.format(self.hdfs_config['host'], '50070'), user_name=self.hdfs_config['userName'])
28

29
30
31
32
33
34
35
    def get_random_name(self, length):
        return ''.join(random.sample(string.ascii_letters + string.digits, length))

    def test_copy_file_run(self):
        '''test copyFileToHdfs'''
        file_name = self.get_random_name(8)
        file_content = 'hello world!'
36

37
        with open('./{}'.format(file_name), 'w') as file:
38
39
            file.write(file_content)

40
41
42
43
44
        result = copyFileToHdfs('./{}'.format(file_name), '/{0}/{1}'.format(self.hdfs_config['userName'], file_name), self.hdfs_client)
        self.assertTrue(result)

        file_list = self.hdfs_client.listdir('/{0}'.format(self.hdfs_config['userName']))
        self.assertIn(file_name, file_list)
45

46
47
48
        hdfs_file_name = self.get_random_name(8)
        self.hdfs_client.copy_to_local('/{0}/{1}'.format(self.hdfs_config['userName'], file_name), './{}'.format(hdfs_file_name))
        self.assertTrue(os.path.exists('./{}'.format(hdfs_file_name)))
49

50
51
52
53
54
55
56
        with open('./{}'.format(hdfs_file_name), 'r') as file:
            content = file.readline()
            self.assertEqual(file_content, content)
        #clean up
        os.remove('./{}'.format(file_name))
        os.remove('./{}'.format(hdfs_file_name))
        self.hdfs_client.delete('/{0}/{1}'.format(self.hdfs_config['userName'], file_name))
57

58
59
60
61
62
    def test_copy_directory_run(self):
        '''test copyDirectoryToHdfs'''
        directory_name = self.get_random_name(8)
        file_name_list = [self.get_random_name(8), self.get_random_name(8)]
        file_content = 'hello world!'
63

64
65
66
67
        os.makedirs('./{}'.format(directory_name))
        for file_name in file_name_list:
            with open('./{0}/{1}'.format(directory_name, file_name), 'w') as file:
                file.write(file_content)
68

chicm-ms's avatar
chicm-ms committed
69
70
        result = copyDirectoryToHdfs('./{}'.format(directory_name),
                                     '/{0}/{1}'.format(self.hdfs_config['userName'], directory_name), self.hdfs_client)
71
        self.assertTrue(result)
72

73
74
75
76
77
78
79
80
81
        directory_list = self.hdfs_client.listdir('/{0}'.format(self.hdfs_config['userName']))
        self.assertIn(directory_name, directory_list)

        sub_file_list = self.hdfs_client.listdir('/{0}/{1}'.format(self.hdfs_config['userName'], directory_name))
        for file_name in file_name_list:
            self.assertIn(file_name, sub_file_list)
            #clean up
            self.hdfs_client.delete('/{0}/{1}/{2}'.format(self.hdfs_config['userName'], directory_name, file_name))
        self.hdfs_client.delete('/{0}/{1}'.format(self.hdfs_config['userName'], directory_name))
82

83
84
85
        shutil.rmtree('./{}'.format(directory_name))

if __name__ == '__main__':
liuzhe-lz's avatar
liuzhe-lz committed
86
    unittest.main()