示例#1
0
class ModelTestCase(TestCase):

    def setUp(self):
        # set up hierarchy of fake objects for bag
        self.c1 = Collection(id='collection_1',
                             name='test-collection-1', created=now())
        self.c1.save()
        self.p1 = Project(id='project_1', name='test-project-1',
                          collection=self.c1, created=now())
        self.p1.save()
        self.i1 = Item(id='item_1', title='test-item-1',
                       project=self.p1, created=now(), original_item_type='1')
        self.i1.save()
        self.m1 = Machine(name='test-machine-1', url='http://test.url.com',
                          www_root='/bags/')
        self.m1.save()

        # load bag with raw data
        self.bag = Bag(bagname='test-bag-11', created=now(), item=self.i1,
                       machine=self.m1,
                       absolute_filesystem_path='/bags/partition1/test-bag-11',
                       bag_type='1')
        self.bag.stats = self.bag.collect_stats()
        self.bag.save()

    def test_payload(self):
        self.assertEqual(self.bag.stats['total_size'], 0)
        self.assertEqual(self.bag.stats['total_count'], 0)
        self.assertEqual(len(self.bag.stats['types'].keys()), 0)

        # now add payload data
        self.bag.payload = """/data/METADATA/0123456789-dc.xml 2655
/data/METADATA/0123456789-MRC.xml 3256
/data/IMAGES/0123456789_pg1.jp2 1778740
/data/IMAGES/0123456789_pg2.jp2 1878756
/data/IMAGES/0123456789_pg3.jp2 1915879
/data/IMAGES/0123456789_pg1.tiff 1778740
/data/IMAGES/0123456789_pg2.tiff 1878756
/data/IMAGES/0123456789_pg3.tiff 1915879
"""
        # compare output of parsing method with expected result
        expect = {
            'total_count': 8,
            'total_size': 11152661,
            'types': {
                'xml': {'count': 2, 'size': 5911},
                'jp2': {'count': 3, 'size': 5573375},
                'tiff': {'count': 3, 'size': 5573375}
            }
        }
        self.bag.stats = self.bag.collect_stats()
        self.bag.save()
        self.assertEqual(expect['total_size'], self.bag.stats['total_size'])
        self.assertEqual(expect['total_count'], self.bag.stats['total_count'])
        for t in expect['types'].keys():
            self.assertEqual(expect['types'][t]['count'],
                             self.bag.stats['types'][t]['count'])
            self.assertEqual(expect['types'][t]['size'],
                             self.bag.stats['types'][t]['size'])

    def test_bag_access_path(self):
        self.assertEqual(self.bag.access_url(),
                         'http://test.url.com/partition1/test-bag-11')
        self.m1.www_root = '/bags'
        self.assertEqual(self.bag.access_url(),
                         'http://test.url.com/partition1/test-bag-11')
        self.m1.www_root = 'bags'
        self.assertEqual(self.bag.access_url(),
                         'http://test.url.com/partition1/test-bag-11')

    @skipIf(not settings.TEST_IDSERVICE.get('url') or
            not settings.TEST_IDSERVICE.get('requester') or
            not settings.TEST_IDSERVICE.get('minter'),
            'Test IDService not set')
    def test_auto_id_creation(self):
        # test collection
        c1 = Collection(name='Test Collection autoID')
        c1.save()
        self.assertTrue(c1.id)
        self.assertTrue(c1.created)
        # test project
        p1 = Project(name='Test Project autoID', collection=c1)
        p1.save()
        self.assertTrue(p1.id)
        self.assertTrue(p1.created)
        # test item
        i1 = Item(title='Test Item autoID', collection=c1, project=p1,
                  original_item_type='1')
        i1.save()
        self.assertTrue(i1.id)
        self.assertTrue(i1.created)
        # test bag + machine
        m1 = Machine(name='test machine zzz', url='zzz.gwu.edu')
        m1.save()
        b1 = Bag(created=now(), item=i1, machine=m1,
                 absolute_filesystem_path='blah/blah', bag_type='1')
        b1.save()
        # test copy numbers for duplicate bags
        b2 = Bag(created=now(), item=i1, machine=m1,
                 absolute_filesystem_path='blah/blah', bag_type='1')
        b2.save()
        self.assertNotEqual(b1.bagname, b2.bagname)
        self.assertTrue(b1.bagname.endswith('1'))
        self.assertTrue(b2.bagname.endswith('2'))
        parts1 = b1.bagname.split('_')
        parts2 = b2.bagname.split('_')
        for x, val in enumerate(parts1):
            if x != len(parts1) - 1:
                self.assertEqual(val, parts2[x])
            else:
                self.assertTrue(int(parts2[x]) - int(val) == 1)
        # make sure bagname does not contain forward slash
        i1.id = '12345/123456789'
        i1.save()
        b3 = Bag(created=now(), item=i1, machine=m1,
                 absolute_filesystem_path='xxxx', bag_type='1')
        b3.save()
        self.assertFalse('/' in b3.bagname)
示例#2
0
    def setUp(self):
        c1 = Collection(id='collection_1_1', name='test-collection-1',
                        created=now())
        c1.save()
        p1 = Project(id='project_1_1', name='test-project-1',
                     collection=c1, created=now())
        p1.save()
        i1 = Item(id='item_1_1', title='test-item-1', project=p1,
                  collection=c1, created=now(), original_item_type='1')
        i1.save()
        i2 = Item(id='item_1_2', title='test-item-2', project=p1,
                  collection=c1, created=now(), original_item_type='1')
        i2.save()
        i3 = Item(id='item_1_3', title='test-item-3', project=p1,
                  collection=c1, created=now(), original_item_type='1')
        i3.save()
        m1 = Machine(name='test-machine-1', url='test-url-1')
        m1.save()
        b1 = Bag(bagname='test-bag-1', created=now(), item=i1,
                 machine=m1, absolute_filesystem_path='test-path1',
                 bag_type='1')
        b1.payload = """/data/METADATA/0123456789-dc.xml 11111
/data/METADATA/0123456789-MRC.xml 22222
/data/IMAGES/0123456789_pg1.jp2 3333333
/data/IMAGES/0123456789_pg2.jp2 4444444
/data/IMAGES/0123456789_pg3.jp2 5555555
/data/IMAGES/0123456789_pg1.tiff 666666
/data/IMAGES/0123456789_pg2.tiff 777777
/data/IMAGES/0123456789_pg3.tiff 888888
"""
        b1.stats = b1.collect_stats()
        b1.save()
        b2 = Bag(bagname='test-bag-2', created=now(), item=i1,
                 machine=m1, absolute_filesystem_path='test-path2',
                 bag_type='1')
        b2.payload = """/data/METADATA/0123456789-dc.xml 12121
/data/METADATA/0123456789-MRC.xml 23232
/data/IMAGES/0123456789_pg1.jp2 3434343
/data/IMAGES/0123456789_pg2.jp2 4545454
/data/IMAGES/0123456789_pg3.jp2 5656565
/data/IMAGES/0123456789_pg1.tiff 676767
/data/IMAGES/0123456789_pg2.tiff 787878
/data/IMAGES/0123456789_pg3.tiff 898989
"""
        b2.stats = b2.collect_stats()
        b2.save()

        b3 = Bag(bagname='test-bag-3', created=now(), item=i2,
                 machine=m1, absolute_filesystem_path='test-path3',
                 bag_type='1')
        b3.payload = """/data/METADATA/0123456789-dc.xml 12121
/data/METADATA/0123456789-MRC.xml 23232
/data/IMAGES/0123456789_pg1.jp2 3434343
/data/IMAGES/0123456789_pg2.jp2 4545454
/data/IMAGES/0123456789_pg3.jp2 5656565
/data/IMAGES/0123456789_pg1.tiff 676767
/data/IMAGES/0123456789_pg2.tiff 787878
/data/IMAGES/0123456789_pg3.tiff 898989
"""
        b3.stats = b3.collect_stats()
        b3.save()
        b4 = Bag(bagname='test-bag-4', created=now(), item=i2,
                 machine=m1, absolute_filesystem_path='test-path4',
                 bag_type='1')
        b4.payload = """/data/METADATA/0123456789-dc.xml 12345
/data/METADATA/0123456789-MRC.xml 34578
/data/IMAGES/0123456789_pg1.jp2 987654
/data/IMAGES/0123456789_pg2.jp2 3214567
/data/IMAGES/0123456789_pg3.jp2 654789
/data/IMAGES/0123456789_pg1.tiff 489751
/data/IMAGES/0123456789_pg2.tiff 584321
/data/IMAGES/0123456789_pg3.tiff 782345
"""
        b4.stats = b4.collect_stats()
        b4.save()

        b5 = Bag(bagname='test-bag-5', created=now(), item=i3,
                 machine=m1, absolute_filesystem_path='test-path5',
                 bag_type='1')
        b5.payload = """/data/METADATA/0123456789-dc.xml 12121
/data/METADATA/0123456789-MRC.xml 23232
/data/IMAGES/0123456789_pg1.tiff 676767
/data/IMAGES/0123456789_pg2.tiff 787878
/data/IMAGES/0123456789_pg3.tiff 898989
"""
        b5.stats = b5.collect_stats()
        b5.save()
        b6 = Bag(bagname='test-bag-6', created=now(), item=i3,
                 machine=m1, absolute_filesystem_path='test-path6',
                 bag_type='1')
        b6.payload = """/data/METADATA/0123456789-dc.xml 38479
/data/METADATA/0123456789-MRC.xml 62134
/data/IMAGES/0123456789_pg1.jp2 6489723
/data/IMAGES/0123456789_pg2.jp2 8984567
/data/IMAGES/0123456789_pg3.jp2 1568974
"""
        b6.stats = b6.collect_stats()
        b6.save()

        self.empty_stats = {'total_count': 0, 'total_size': 0, 'types': {}}

        self.expected = {
            'items': {
                'i1': {
                    'total_count': 16,
                    'total_size': 31735345,
                    'types': {
                        'xml': {'count': 4, 'size': 68686},
                        'jp2': {'count': 6, 'size': 26969694},
                        'tiff': {'count': 6, 'size': 4696965}
                    }
                },
                'i2': {
                    'total_count': 16,
                    'total_size': 22795699,
                    'types': {
                        'xml': {'count': 4, 'size': 82276},
                        'jp2': {'count': 6, 'size': 18493372},
                        'tiff': {'count': 6, 'size': 4220051}
                    }
                },
                'i3': {
                    'total_count': 10,
                    'total_size': 19542864,
                    'types': {
                        'xml': {'count': 4, 'size': 135966},
                        'jp2': {'count': 3, 'size': 17043264},
                        'tiff': {'count': 3, 'size': 2363634}
                    }
                }
            },
            'projects': {
                'p1': {
                    'total_count': 42,
                    'total_size': 74073908,
                    'types': {
                        'xml': {'count': 12, 'size': 286928},
                        'jp2': {'count': 15, 'size': 62506330},
                        'tiff': {'count': 15, 'size': 11280650}
                    }
                }
            },
            'collections': {
                'c1': {
                    'total_count': 42,
                    'total_size': 74073908,
                    'types': {
                        'xml': {'count': 12, 'size': 286928},
                        'jp2': {'count': 15, 'size': 62506330},
                        'tiff': {'count': 15, 'size': 11280650}
                    }
                }
            }
        }