def test_signing_and_validation_with_extensions(self): uri = '/content/jit.rpm' extensions = dict(remote_ip='10.2.3.4') url = URL('http://redhat.com{r}'.format(r=uri)) url = url.sign(KEY, **extensions) resource = url.validate(PUB, **extensions) self.assertEqual(resource, uri)
def test_sign(self, time, policy): time.return_value = 10 url = URL('http://redhat.com:1234/path;p1;p2?age=10') key = Mock() expiration = 10 signature = 's1234[' encoded_policy = 'p1234[' _policy = Mock() _policy.sign.return_value = (encoded_policy, signature) policy.return_value = _policy extensions = dict(remote_ip='10.1.1.1') # test signed = url.sign(key, expiration, **extensions) # validation query = dict(Query.decode(url.query)) query[URL.POLICY] = encoded_policy query[URL.SIGNATURE] = signature policy.assert_called_once_with(url.resource, expiration + time.return_value) self.assertEqual(signed.scheme, url.scheme) self.assertEqual(signed.netloc, url.netloc) self.assertEqual(signed.params, url.params) self.assertEqual(signed.path, url.path) self.assertEqual(signed.query, url.query) self.assertEqual(signed.bundle, (encoded_policy, signature))
def test_properties(self): url = URL('http://redhat.com:1234/path;p1;p2?age=10') self.assertEqual(url.scheme, 'http') self.assertEqual(url.netloc, 'redhat.com:1234') self.assertEqual(url.path, '/path') self.assertEqual(url.params, 'p1;p2') self.assertEqual(url.query, 'age=10') self.assertEqual(url.resource, '/path;p1;p2?age=10')
def test_str(self): url = 'https://redhat.com:443/path;p1;p2?q1=1;q2=2' self.assertEqual(str(URL(url)), url)
def test_init(self, urlparse): s = 'http://host:port?age=10' url = URL(s) urlparse.assert_called_once_with(s) self.assertEqual(url.content, urlparse.return_value)
def test_validate_resources_not_matched(self): url = URL('http://redhat.com/content/jit.rpm') url = url.sign(KEY) content = str(url) url = SignedURL(content.replace('content', 'free/content')) self.assertRaises(NotValid, url.validate, PUB)
def test_policy_expired(self, time): time.side_effect = [1, 2] url = URL('http://redhat.com/content/jit.rpm') url = url.sign(KEY, 1) self.assertRaises(PolicyExpired, url.validate, PUB)
def test_signing_and_validation_with_params(self): uri = '/content/jit.rpm;hello=world' url = URL('http://redhat.com{r}'.format(r=uri)) url = url.sign(KEY) resource = url.validate(PUB) self.assertEqual(resource, uri)
def test_basic_signing(self): url = URL('http://redhat.com/content/jit.rpm') url = url.sign(KEY) print url
def test_no_signature(self): url = URL('http://redhat.com/content/jit.rpm') url = url.sign(KEY) content = str(url) url = SignedURL(content.replace('signature=', 'age=')) self.assertRaises(NotSigned, url.validate, PUB)
def test_signature_decoding(self): url = URL('http://redhat.com/content/jit.rpm') url = url.sign(KEY) content = str(url) url = SignedURL(content.replace('signature=', 'signature=XXX')) self.assertRaises(DecodingError, url.validate, PUB)
def test_policy_altered(self): url = URL('http://redhat.com/content/jit.rpm') url = url.sign(KEY) content = str(url) url = SignedURL(content.replace('policy=', 'policy=1')) self.assertRaises(PolicyNotAuthenticated, url.validate, PUB)