Exemple #1
0
 def test_metadata_digest(self):
     settings.SYNC_NEEDS_AUTHENTICATION = False
     client = Client()
     resource = resourceInfoType_model.objects.all()[0]
     resource_uuid = resource.storage_object.identifier
     expected_digest = resource.storage_object.digest_checksum
     response = client.get('{0}{1}/metadata/'.format(self.SYNC_BASE, resource_uuid))
     self.assertEquals(expected_digest, compute_checksum(StringIO(response.content)))
Exemple #2
0
def get_full_metadata(opener, full_metadata_url, expected_digest):
    '''
    Obtain the full metadata record for one resource.
    Returns a pair of storage_json_string, resource_xml_string.
    
    Raises CorruptDataException if the zip data received from full_metadata_url
    does not have an md5 digest identical to expected_digest.
    '''
    with contextlib.closing(opener.open(full_metadata_url)) as response:
        data = response.read()
        if not expected_digest == compute_checksum(StringIO(data)):
            raise CorruptDataException("Checksum error for resource '{0}'.".format(full_metadata_url))
        with ZipFile(StringIO(data), 'r') as inzip:
            with inzip.open('storage-global.json') as storage_file:
                # should be a json object, not string
                storage_json = json.loads(storage_file.read())
            with inzip.open('metadata.xml') as resource_xml:
                resource_xml_string = resource_xml.read()
            return storage_json, resource_xml_string