Exemplo n.º 1
0
 def test05_add_version(self):
     """Test add_version method."""
     self.maxDiff = None
     oo = Object(digest_algorithm="md5")
     inventory = {'manifest': {}, 'versions': {}}
     oo.add_version(inventory,
                    'fixtures/1.0/content/spec-ex-full/v1',
                    vdir='v1',
                    metadata=VersionMetadata())
     self.assertEqual(inventory['head'], 'v1')
     self.assertEqual(
         inventory['manifest'], {
             '184f84e28cbe75e050e9c25ea7f2e939': ['v1/content/foo/bar.xml'],
             'c289c8ccd4bab6e385f5afdd89b5bda2': ['v1/content/image.tiff'],
             'd41d8cd98f00b204e9800998ecf8427e': ['v1/content/empty.txt']
         })
     self.assertEqual(
         inventory['versions'], {
             "v1": {
                 'created': '2018-01-01T01:01:01Z',
                 'message': 'Initial import',
                 'state': {
                     '184f84e28cbe75e050e9c25ea7f2e939': ['foo/bar.xml'],
                     'c289c8ccd4bab6e385f5afdd89b5bda2': ['image.tiff'],
                     'd41d8cd98f00b204e9800998ecf8427e': ['empty.txt']
                 },
                 'user': {
                     'address': '*****@*****.**',
                     'name': 'Alice'
                 }
             }
         })
     self.assertNotIn('fixity', inventory)
     # Now add second version to check forward delta
     oo.add_version(inventory,
                    'fixtures/1.0/content/spec-ex-full/v2',
                    vdir='v2',
                    metadata=VersionMetadata())
     self.assertEqual(inventory['head'], 'v2')
     self.assertEqual(
         inventory['manifest'], {
             '184f84e28cbe75e050e9c25ea7f2e939': ['v1/content/foo/bar.xml'],
             '2673a7b11a70bc7ff960ad8127b4adeb': ['v2/content/foo/bar.xml'],
             'c289c8ccd4bab6e385f5afdd89b5bda2': ['v1/content/image.tiff'],
             'd41d8cd98f00b204e9800998ecf8427e': ['v1/content/empty.txt']
         })
     self.assertEqual(
         inventory['versions']['v2'], {
             'created': '2018-02-02T02:02:02Z',
             'message': 'Fix bar.xml, remove image.tiff, add empty2.txt',
             'state': {
                 '2673a7b11a70bc7ff960ad8127b4adeb': ['foo/bar.xml'],
                 'd41d8cd98f00b204e9800998ecf8427e':
                 ['empty.txt', 'empty2.txt']
             },
             'user': {
                 'address': '*****@*****.**',
                 'name': 'Bob'
             }
         })
     # Now with fixity
     oo = Object(digest_algorithm="md5", fixity=['sha1'])
     inventory = {'manifest': {}, 'versions': {}, 'fixity': {'sha1': {}}}
     manifest_to_srcfile = oo.add_version(
         inventory,
         'fixtures/1.0/content/spec-ex-full/v1',
         vdir='v1',
         metadata=VersionMetadata())
     self.assertEqual(
         manifest_to_srcfile, {
             'v1/content/image.tiff':
             'fixtures/1.0/content/spec-ex-full/v1/image.tiff',
             'v1/content/empty.txt':
             'fixtures/1.0/content/spec-ex-full/v1/empty.txt',
             'v1/content/foo/bar.xml':
             'fixtures/1.0/content/spec-ex-full/v1/foo/bar.xml'
         })
Exemplo n.º 2
0
 def test05_add_version(self):
     """Test add_version method."""
     self.maxDiff = None
     oo = Object(digest_algorithm="md5")
     inventory = {'manifest': {}, 'versions': {}}
     with open('fixtures/1.0/content/spec-ex-full/v1_inventory.json') as fh:
         v_inventory = json.load(fh)
     metadata = VersionMetadata(inventory=v_inventory, version='v1')
     src_fs = fs.open_fs('fixtures/1.0/content/spec-ex-full')
     oo.add_version(inventory,
                    src_fs,
                    src_dir='v1',
                    vdir='v1',
                    metadata=metadata)
     self.assertEqual(inventory['head'], 'v1')
     self.assertEqual(
         inventory['manifest'], {
             '184f84e28cbe75e050e9c25ea7f2e939': ['v1/content/foo/bar.xml'],
             'c289c8ccd4bab6e385f5afdd89b5bda2': ['v1/content/image.tiff'],
             'd41d8cd98f00b204e9800998ecf8427e': ['v1/content/empty.txt']
         })
     self.assertEqual(
         inventory['versions'], {
             "v1": {
                 'created': '2018-01-01T01:01:01Z',
                 'message': 'Initial import',
                 'state': {
                     '184f84e28cbe75e050e9c25ea7f2e939': ['foo/bar.xml'],
                     'c289c8ccd4bab6e385f5afdd89b5bda2': ['image.tiff'],
                     'd41d8cd98f00b204e9800998ecf8427e': ['empty.txt']
                 },
                 'user': {
                     'address': '*****@*****.**',
                     'name': 'Alice'
                 }
             }
         })
     self.assertNotIn('fixity', inventory)
     # Now add second version to check forward delta
     with open('fixtures/1.0/content/spec-ex-full/v2_inventory.json') as fh:
         v_inventory = json.load(fh)
     metadata = VersionMetadata(inventory=v_inventory, version='v2')
     src_fs = fs.open_fs('fixtures/1.0/content/spec-ex-full/v2')
     oo.add_version(inventory,
                    src_fs,
                    src_dir='',
                    vdir='v2',
                    metadata=metadata)
     self.assertEqual(inventory['head'], 'v2')
     self.assertEqual(
         inventory['manifest'], {
             '184f84e28cbe75e050e9c25ea7f2e939': ['v1/content/foo/bar.xml'],
             '2673a7b11a70bc7ff960ad8127b4adeb': ['v2/content/foo/bar.xml'],
             'c289c8ccd4bab6e385f5afdd89b5bda2': ['v1/content/image.tiff'],
             'd41d8cd98f00b204e9800998ecf8427e': ['v1/content/empty.txt']
         })
     self.assertEqual(
         inventory['versions']['v2'], {
             'created': '2018-02-02T02:02:02Z',
             'message': 'Fix bar.xml, remove image.tiff, add empty2.txt',
             'state': {
                 '2673a7b11a70bc7ff960ad8127b4adeb': ['foo/bar.xml'],
                 'd41d8cd98f00b204e9800998ecf8427e':
                 ['empty.txt', 'empty2.txt']
             },
             'user': {
                 'address': '*****@*****.**',
                 'name': 'Bob'
             }
         })
     # Now with fixity
     oo = Object(digest_algorithm="md5", fixity=['sha1'])
     inventory = {'manifest': {}, 'versions': {}, 'fixity': {'sha1': {}}}
     md1 = VersionMetadata()
     with open('fixtures/1.0/content/spec-ex-full/v1_inventory.json') as fh:
         v_inventory = json.load(fh)
     md1 = VersionMetadata(inventory=v_inventory, version='v1')
     src_fs = fs.open_fs('fixtures/1.0/content/spec-ex-full/v1')
     manifest_to_srcfile = oo.add_version(inventory,
                                          src_fs,
                                          src_dir='',
                                          vdir='v1',
                                          metadata=md1)
     self.assertEqual(
         manifest_to_srcfile, {
             'v1/content/image.tiff': 'image.tiff',
             'v1/content/empty.txt': 'empty.txt',
             'v1/content/foo/bar.xml': 'foo/bar.xml'
         })
     self.assertEqual(len(inventory['fixity']['sha1']), 3)
     # Test dedupe=False and forward_delta=False settings
     oo = Object(dedupe=False, forward_delta=False, fixity=['md5'])
     inventory = {'manifest': {}, 'versions': {}, 'fixity': {'md5': {}}}
     md1 = VersionMetadata(inventory={
         "id": "http://example.org/dedupe_content",
         "versions": {
             "v1": {
                 "created": "2020-07-15T17:40:00",
                 "message": "Initial import",
                 "user": {
                     "address": "mailto:[email protected]",
                     "name": "Alice"
                 }
             }
         }
     },
                           version='v1')
     src_fs = fs.open_fs('extra_fixtures/content/dedupe_content')
     manifest_to_srcfile = oo.add_version(inventory,
                                          src_fs,
                                          src_dir='v1',
                                          vdir='v1',
                                          metadata=md1)
     # Because of dedupe=False we will have multiple copies of empty files
     self.assertEqual(
         manifest_to_srcfile, {
             'v1/content/empty1.txt': 'v1/empty1.txt',
             'v1/content/empty2.txt': 'v1/empty2.txt',
             'v1/content/empty3.txt': 'v1/empty3.txt'
         })
     self.assertEqual(
         inventory['fixity']['md5'], {
             "d41d8cd98f00b204e9800998ecf8427e": [
                 "v1/content/empty1.txt", "v1/content/empty2.txt",
                 "v1/content/empty3.txt"
             ]
         })
     # Add a second version which will test for forward_delta=False
     md2 = VersionMetadata(inventory={
         "id": "http://example.org/dedupe_content",
         "versions": {
             "v2": {
                 "created": "2020-07-15T17:54:00",
                 "message": "Update",
                 "user": {
                     "address": "mailto:[email protected]",
                     "name": "Bob"
                 }
             }
         }
     },
                           version='v2')
     manifest_to_srcfile = oo.add_version(inventory,
                                          src_fs,
                                          src_dir='v2',
                                          vdir='v2',
                                          metadata=md2)
     # Because of forward_delta=False we will have an additional copy of the empty file
     self.assertEqual(manifest_to_srcfile,
                      {'v2/content/empty4.txt': 'v2/empty4.txt'})
     self.assertEqual(
         inventory['fixity']['md5'], {
             "d41d8cd98f00b204e9800998ecf8427e": [
                 "v1/content/empty1.txt", "v1/content/empty2.txt",
                 "v1/content/empty3.txt", "v2/content/empty4.txt"
             ]
         })