def setUp(self): self.api = udfsapi.Client() # Add resources to be pinned. self.resource = self.api.add_str('Mary had a little lamb') resp_add = self.api.add('test/functional/fake_dir', recursive=True) self.fake_dir_hashes = [el['Hash'] for el in resp_add if 'Hash' in el] for resp in resp_add: if resp["Name"] == "fake_dir": self.fake_dir_hash = resp["Hash"] elif resp["Name"] == "fake_dir/test2": self.fake_dir_test2_hash = resp["Hash"]
def setUp(self): self.api = udfsapi.Client()
def setUp(self): self.api = udfsapi.Client() self._olddir = os.getcwd() os.chdir(HERE) # Add a resource to get the stats for. self.resource = self.api.add_str('Mary had a little lamb')
class udfsApiTest(unittest.TestCase): api = udfsapi.Client() fake = [{ 'Hash': u'QmQcCtMgLVwvMQGu6mvsRYLjwqrZJcYtH4mboM9urWW9vX', 'Name': 'fake_dir/fsdfgh' }, { 'Hash': u'QmYAhvKYu46rh5NcHzeu6Bhc7NG9SqkF9wySj2jvB74Rkv', 'Name': 'fake_dir/popoiopiu' }, { 'Hash': u'QmeMbJSHNCesAh7EeopackUdjutTJznum1Fn7knPm873Fe', 'Name': 'fake_dir/test3/ppppoooooooooo' }, { 'Hash': u'QmRphRr6ULDEj7YnXpLdnxhnPiVjv5RDtGX3er94Ec6v4Q', 'Name': 'fake_dir/test3' }, { 'Hash': u'QmNuvmuFeeWWpxjCQwLkHshr8iqhGLWXFzSGzafBeawTTZ', 'Name': 'fake_dir/test2/llllg' }, { 'Hash': u'Qmb1NPqPzdHCMvHRfCkk6TWLcnpGJ71KnafacCMm6TKLcD', 'Name': 'fake_dir/test2/fssdf' }, { 'Hash': u'QmX1dd5DtkgoiYRKaPQPTCtXArUu4jEZ62rJBUcd5WhxAZ', 'Name': 'fake_dir/test2' }, { 'Hash': u'QmRphRr6ULDEj7YnXpLdnxhnPiVjv5RDtGX3er94Ec6v4Q', 'Name': 'fake_dir/test3' }, { 'Hash': u'QmNx8xVu9mpdz9k6etbh2S8JwZygatsZVCH4XhgtfUYAJi', 'Name': 'fake_dir' }] fake_lookup = dict((i['Name'], i['Hash']) for i in fake) ## test_add_multiple_from_list fake_file = 'fake_dir/fsdfgh' fake_file_only_res = { 'Hash': 'QmQcCtMgLVwvMQGu6mvsRYLjwqrZJcYtH4mboM9urWW9vX', 'Name': 'fsdfgh', 'Size': '16' } fake_file_dir_res = [{ 'Hash': 'QmQcCtMgLVwvMQGu6mvsRYLjwqrZJcYtH4mboM9urWW9vX', 'Name': 'fsdfgh', 'Size': '16' }, { 'Hash': 'Qme7vmxd4LAAYL7vpho3suQeT3gvMeLLtPdp7myCb9Db55', 'Name': '', 'Size': '68' }] fake_file2 = 'fake_dir/popoiopiu' fake_files_res = [{ 'Hash': 'QmQcCtMgLVwvMQGu6mvsRYLjwqrZJcYtH4mboM9urWW9vX', 'Name': 'fsdfgh', 'Size': '16' }, { 'Hash': 'QmYAhvKYu46rh5NcHzeu6Bhc7NG9SqkF9wySj2jvB74Rkv', 'Name': 'popoiopiu', 'Size': '23' }] ## test_add_multiple_from_dirname fake_dir_test2 = 'fake_dir/test2' fake_dir_res = [{ 'Hash': 'QmStL6TPbJfMHQhHjoVT93kCynVx3GwLf7xwgrtScqABhU', 'Name': 'test2', 'Size': '297' }, { 'Hash': 'QmV3n14G8iQoNG8zpHCUZnmQpcQbhEfhQZ8NHvUEdoiXAN', 'Name': 'test2/high', 'Size': '114' }, { 'Hash': 'QmZazHsY4nbhRTHTEp5SUWd4At6aSXia1kxEuywHTicayE', 'Name': 'test2/high/five', 'Size': '64' }, { 'Hash': 'QmW8tRcpqy5siMNAU9Lx3GADAxQbVUrx8XJGFDjkd6vqLT', 'Name': 'test2/high/five/dummy', 'Size': '13' }, { 'Hash': 'Qmb1NPqPzdHCMvHRfCkk6TWLcnpGJ71KnafacCMm6TKLcD', 'Name': 'test2/fssdf', 'Size': '22' }, { 'Hash': 'QmNuvmuFeeWWpxjCQwLkHshr8iqhGLWXFzSGzafBeawTTZ', 'Name': 'test2/llllg', 'Size': '17' }] ## test_add_filepattern_from_dirname pattern = '**/fss*' # the hash of the folder is not same as above because the content of the folder # added is not same. fake_dir_fnpattern_res = [{ 'Name': 'fake_dir/test2/fssdf', 'Hash': 'Qmb1NPqPzdHCMvHRfCkk6TWLcnpGJ71KnafacCMm6TKLcD', 'Size': '22' }, { 'Name': 'fake_dir/test2', 'Hash': 'QmT5rV6EsKNSW619SntLrkCxbUXXQh4BrKm3JazF2zEgEe', 'Size': '73' }, { 'Name': 'fake_dir', 'Hash': 'QmbPzQruAEFjUU3gQfupns6b8USr8VrD9H71GrqGDXQSxm', 'Size': '124' }] ## test_add_filepattern_subdir_wildcard pattern2 = 'test2/**/high' fake_dir_fnpattern2_res = [{ 'Hash': 'QmUXuNHpV6cdeTngSkEMbP2nQDPuyE2MFXNYtTXzZvLZHf', 'Name': 'fake_dir', 'Size': '216' }, { 'Hash': 'QmZGuwqaXMmSwJcfTsvseHwy3mvDPD9zrs9WVowAZcQN4W', 'Name': 'fake_dir/test2', 'Size': '164' }, { 'Hash': 'QmV3n14G8iQoNG8zpHCUZnmQpcQbhEfhQZ8NHvUEdoiXAN', 'Name': 'fake_dir/test2/high', 'Size': '114' }, { 'Hash': 'QmZazHsY4nbhRTHTEp5SUWd4At6aSXia1kxEuywHTicayE', 'Name': 'fake_dir/test2/high/five', 'Size': '64' }, { 'Hash': 'QmW8tRcpqy5siMNAU9Lx3GADAxQbVUrx8XJGFDjkd6vqLT', 'Name': 'fake_dir/test2/high/five/dummy', 'Size': '13' }] ## test_add_recursive fake_dir = 'fake_dir' fake_dir_recursive_res = [{ 'Hash': 'QmNx8xVu9mpdz9k6etbh2S8JwZygatsZVCH4XhgtfUYAJi', 'Name': 'fake_dir', 'Size': '610' }, { 'Hash': 'QmQcCtMgLVwvMQGu6mvsRYLjwqrZJcYtH4mboM9urWW9vX', 'Name': 'fake_dir/fsdfgh', 'Size': '16' }, { 'Hash': 'QmYAhvKYu46rh5NcHzeu6Bhc7NG9SqkF9wySj2jvB74Rkv', 'Name': 'fake_dir/popoiopiu', 'Size': '23' }, { 'Hash': 'QmStL6TPbJfMHQhHjoVT93kCynVx3GwLf7xwgrtScqABhU', 'Name': 'fake_dir/test2', 'Size': '297' }, { 'Hash': 'Qmb1NPqPzdHCMvHRfCkk6TWLcnpGJ71KnafacCMm6TKLcD', 'Name': 'fake_dir/test2/fssdf', 'Size': '22' }, { 'Hash': 'QmV3n14G8iQoNG8zpHCUZnmQpcQbhEfhQZ8NHvUEdoiXAN', 'Name': 'fake_dir/test2/high', 'Size': '114' }, { 'Hash': 'QmZazHsY4nbhRTHTEp5SUWd4At6aSXia1kxEuywHTicayE', 'Name': 'fake_dir/test2/high/five', 'Size': '64' }, { 'Hash': 'QmW8tRcpqy5siMNAU9Lx3GADAxQbVUrx8XJGFDjkd6vqLT', 'Name': 'fake_dir/test2/high/five/dummy', 'Size': '13' }, { 'Hash': 'QmNuvmuFeeWWpxjCQwLkHshr8iqhGLWXFzSGzafBeawTTZ', 'Name': 'fake_dir/test2/llllg', 'Size': '17' }, { 'Hash': 'QmRphRr6ULDEj7YnXpLdnxhnPiVjv5RDtGX3er94Ec6v4Q', 'Name': 'fake_dir/test3', 'Size': '76' }, { 'Hash': 'QmeMbJSHNCesAh7EeopackUdjutTJznum1Fn7knPm873Fe', 'Name': 'fake_dir/test3/ppppoooooooooo', 'Size': '16' }] ## test_refs refs_res = [{ 'Err': '', 'Ref': 'QmQcCtMgLVwvMQGu6mvsRYLjwqrZJcYtH4mboM9urWW9vX' }, { 'Err': '', 'Ref': 'QmYAhvKYu46rh5NcHzeu6Bhc7NG9SqkF9wySj2jvB74Rkv' }, { 'Err': '', 'Ref': 'QmStL6TPbJfMHQhHjoVT93kCynVx3GwLf7xwgrtScqABhU' }, { 'Err': '', 'Ref': 'QmRphRr6ULDEj7YnXpLdnxhnPiVjv5RDtGX3er94Ec6v4Q' }] def setUp(self): self._olddir = os.getcwd() os.chdir(HERE) # Makes all of the diff visible if the hashes change for some reason self.maxDiff = None self.pinned = set(self.api.pin_ls(type="recursive")["Keys"]) def tearDown(self): os.chdir(self._olddir) def _clean_up_pins(self): for multihash in self.api.pin_ls(type="recursive")["Keys"]: if multihash not in self.pinned: self.api.pin_rm(multihash) @staticmethod def _sort_by_key(items, key="Name"): return sorted(items, key=lambda x: x[key]) ######### # TESTS # ######### def test_version(self): expected = ['Repo', 'Commit', 'Version'] resp_version = self.api.version() for key in expected: assert key in resp_version def test_id(self): expected = [ 'PublicKey', 'ProtocolVersion', 'ID', 'AgentVersion', 'Addresses' ] resp_id = self.api.id() for key in expected: assert key in resp_id def test_add_single_from_str(self): res = self.api.add(self.fake_file, pin=False) assert self.fake_file_only_res == res assert res["Hash"] not in self.api.pin_ls(type="recursive") assert res["Hash"] in list( map(lambda i: i["Ref"], self.api.refs_local())) def test_add_single_from_fp(self): with open(self.fake_file, 'rb') as fp: res = self.api.add(fp, pin=False) assert self.fake_file_only_res == res assert res["Hash"] not in self.api.pin_ls(type="recursive") assert res["Hash"] in list( map(lambda i: i["Ref"], self.api.refs_local())) def test_add_single_from_str_with_dir(self): res = self.api.add(self.fake_file, wrap_with_directory=True) try: assert self.fake_file_dir_res == res dir_hash = None for item in res: if item["Name"] == "": dir_hash = item["Hash"] assert dir_hash in self.api.pin_ls(type="recursive")["Keys"] finally: self._clean_up_pins() def test_only_hash_file(self): self.api.repo_gc() res = self.api.add(self.fake_file, only_hash=True) assert self.fake_file_only_res == res assert res["Hash"] not in self.api.pin_ls(type="recursive") assert res["Hash"] not in list( map(lambda i: i["Ref"], self.api.refs_local())) def test_add_multiple_from_list(self): res = self.api.add([self.fake_file, self.fake_file2]) try: assert self.fake_files_res == res finally: self._clean_up_pins() def test_add_multiple_from_dirname(self): res = self.api.add(self.fake_dir_test2) try: assert self._sort_by_key( self.fake_dir_res) == self._sort_by_key(res) finally: self._clean_up_pins() def test_add_filepattern_from_dirname(self): res = self.api.add(self.fake_dir, pattern=self.pattern) try: assert self._sort_by_key( self.fake_dir_fnpattern_res) == self._sort_by_key(res) finally: self._clean_up_pins() def test_add_filepattern_subdir_wildcard(self): res = self.api.add(self.fake_dir, pattern=self.pattern2) try: assert self._sort_by_key( self.fake_dir_fnpattern2_res) == self._sort_by_key(res) finally: self._clean_up_pins() def test_add_recursive(self): res = self.api.add(self.fake_dir, recursive=True) try: assert self._sort_by_key( self.fake_dir_recursive_res) == self._sort_by_key(res) finally: self._clean_up_pins() def test_add_json(self): data = {'Action': 'Open', 'Type': 'PR', 'Name': 'udfs', 'Pubkey': 7} res = self.api.add_json(data) try: assert data == self.api.get_json(res) # have to test the string added to udfs, deserializing JSON will not # test order of keys assert '{"Action":"Open","Name":"udfs","Pubkey":7,"Type":"PR"}' == self.api.cat( res).decode('utf-8') finally: self._clean_up_pins() def test_add_get_pyobject(self): data = [-1, 3.14, u'Hän€', b'23'] res = self.api.add_pyobj(data) try: assert data == self.api.get_pyobj(res) finally: self._clean_up_pins() def test_get_file(self): self.api.add(self.fake_file) try: test_hash = self.fake[0]['Hash'] self.api.get(test_hash) assert test_hash in os.listdir(os.getcwd()) os.remove(test_hash) assert test_hash not in os.listdir(os.getcwd()) finally: self._clean_up_pins() def test_get_dir(self): self.api.add(self.fake_dir, recursive=True) try: test_hash = self.fake[8]['Hash'] self.api.get(test_hash) assert test_hash in os.listdir(os.getcwd()) shutil.rmtree(test_hash) assert test_hash not in os.listdir(os.getcwd()) finally: self._clean_up_pins() def test_get_path(self): self.api.add(self.fake_file) try: test_hash = self.fake[8]['Hash'] + '/fsdfgh' self.api.get(test_hash) assert 'fsdfgh' in os.listdir(os.getcwd()) os.remove('fsdfgh') assert 'fsdfgh' not in os.listdir(os.getcwd()) finally: self._clean_up_pins() def test_refs(self): self.api.add(self.fake_dir, recursive=True) try: refs = self.api.refs(self.fake[8]['Hash']) assert self._sort_by_key(self.refs_res, "Ref") == self._sort_by_key(refs, "Ref") finally: self._clean_up_pins() def test_cat_single_file_str(self): self.api.add(self.fake_file) try: content = self.api.cat( 'QmQcCtMgLVwvMQGu6mvsRYLjwqrZJcYtH4mboM9urWW9vX') assert content == b"dsadsad\n" finally: self._clean_up_pins() def test_cat_file_block(self): self.api.add(self.fake_file) content = b"dsadsad\n" try: for offset in range(len(content)): for length in range(len(content)): block = self.api.cat( 'QmQcCtMgLVwvMQGu6mvsRYLjwqrZJcYtH4mboM9urWW9vX', offset=offset, length=length) assert block == content[offset:offset + length] finally: self._clean_up_pins()
def setUp(self): self.api = udfsapi.Client() self.multihash = 'QmYA2fn8cMbVWo4v95RwcwJVyQsNtnEwHerfWR8UNtEwoE' self.content_size = 248
def setUp(self): self.api = udfsapi.Client() self._olddir = os.getcwd() os.chdir(HERE)
def setUp(self): self.api = udfsapi.Client() self.pid = int(os.environ["PY_udfsAPI_TEST_DAEMON_PID"])