def test_get_if_match(self): if pithos_settings.UPDATE_MD5: etag = md5_hash(self.odata) else: etag = merkle(self.odata) r = self.view(self.view_url, HTTP_IF_MATCH=etag) # assert get success self.assertEqual(r.status_code, 200) # assert response content self.assertEqual(r.content, self.odata)
def test_get_multiple_if_match(self): if pithos_settings.UPDATE_MD5: etag = md5_hash(self.odata) else: etag = merkle(self.odata) quoted = lambda s: '"%s"' % s r = self.view(self.view_url, HTTP_IF_MATCH=','.join( [quoted(etag), quoted(get_random_data(64))])) # assert get success self.assertEqual(r.status_code, 200) # assert response content self.assertEqual(r.content, self.odata)
def test_if_none_match(self): if pithos_settings.UPDATE_MD5: etag = md5_hash(self.odata) else: etag = merkle(self.odata) # perform get with If-None-Match r = self.view(self.view_url, HTTP_IF_NONE_MATCH=etag) # assert precondition_failed self.assertEqual(r.status_code, 304) # update object data r = self.append_object_data(self.cname, self.oname)[-1] self.assertTrue(etag != r['ETag']) # perform get with If-None-Match r = self.view(self.view_url, HTTP_IF_NONE_MATCH=etag) # assert get success self.assertEqual(r.status_code, 200)
def test_hashes(self): l = random.randint(2, 5) * pithos_settings.BACKEND_BLOCK_SIZE oname, odata = self.upload_object(self.cname, length=l)[:-1] size = len(odata) view_url = join_urls(self.view_path, self.user, self.cname, oname) r = self.view('%s?format=json&hashmap' % view_url) self.assertEqual(r.status_code, 200) body = json.loads(r.content) hashes = body['hashes'] block_size = body['block_size'] block_num = size / block_size if size / block_size == 0 else\ size / block_size + 1 self.assertTrue(len(hashes), block_num) i = 0 for h in hashes: start = i * block_size end = (i + 1) * block_size hash = merkle(odata[start:end]) self.assertEqual(h, hash) i += 1