示例#1
0
    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"]
示例#2
0
 def setUp(self):
     self.api = udfsapi.Client()
示例#3
0
 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')
示例#4
0
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()
示例#5
0
 def setUp(self):
     self.api = udfsapi.Client()
     self.multihash = 'QmYA2fn8cMbVWo4v95RwcwJVyQsNtnEwHerfWR8UNtEwoE'
     self.content_size = 248
示例#6
0
 def setUp(self):
     self.api = udfsapi.Client()
     self._olddir = os.getcwd()
     os.chdir(HERE)
示例#7
0
 def setUp(self):
     self.api = udfsapi.Client()
     self.pid = int(os.environ["PY_udfsAPI_TEST_DAEMON_PID"])