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)))
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