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' })
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" ] })