def test_simple(self): # Test case: (version, message, embedded). cases = ( (1, [], {}), (255, [], {}), (1, ["Hello"], {}), (1, [], {"a": "b"}), (1, ["", "some", "more"], {"a": "b", "_i": "d"}), ) for version, message, embedded in cases: tok = tokens.encode_token(self.algo, version, "secret", message, embedded) self.assertTrue(URL_SAFE_ALPHABET.issuperset(tok)) decoded_version, decoded_embedded = tokens.decode_token(self.algo, tok, ["secret"], message) self.assertEqual(version, decoded_version) self.assertEqual(embedded, decoded_embedded)
def test_simple(self): # Test case: (version, message, embedded). cases = ( (1, [], {}), (255, [], {}), (1, ['Hello'], {}), (1, [], {'a': 'b'}), (1, ['', 'some', 'more'], {'a': 'b', '_i': 'd'}), ) for version, message, embedded in cases: tok = tokens.encode_token(self.algo, version, 'secret', message, embedded) self.assertTrue(URL_SAFE_ALPHABET.issuperset(tok)) decoded_version, decoded_embedded = tokens.decode_token( self.algo, tok, ['secret'], message) self.assertEqual(version, decoded_version) self.assertEqual(embedded, decoded_embedded)
def test_rejects_modified(self): tok = tokens.encode_token(self.algo, 1, 'secret', ['msg'], {'a': 'b'}) decode = lambda x: tokens.decode_token(self.algo, x, ['secret'], ['msg']) # Works if not modified. decode(tok) # Try simple modifications. for i in xrange(len(tok)): # Truncation. with self.assertRaises(tokens.InvalidTokenError): decode(tok[:i]) # Insertion. with self.assertRaises(tokens.InvalidTokenError): decode(tok[:i] + 'A' + tok[i:]) # Substitution. with self.assertRaises(tokens.InvalidTokenError): decode(tok[:i] + chr((ord(tok[i]) + 1) % 255) + tok[i+1:]) # Expansion. with self.assertRaises(tokens.InvalidTokenError): decode('A' + tok) with self.assertRaises(tokens.InvalidTokenError): decode(tok + 'A')
def test_rejects_modified(self): tok = tokens.encode_token(self.algo, 1, "secret", ["msg"], {"a": "b"}) decode = lambda x: tokens.decode_token(self.algo, x, ["secret"], ["msg"]) # Works if not modified. decode(tok) # Try simple modifications. for i in xrange(len(tok)): # Truncation. with self.assertRaises(tokens.InvalidTokenError): decode(tok[:i]) # Insertion. with self.assertRaises(tokens.InvalidTokenError): decode(tok[:i] + "A" + tok[i:]) # Substitution. with self.assertRaises(tokens.InvalidTokenError): decode(tok[:i] + chr((ord(tok[i]) + 1) % 255) + tok[i + 1 :]) # Expansion. with self.assertRaises(tokens.InvalidTokenError): decode("A" + tok) with self.assertRaises(tokens.InvalidTokenError): decode(tok + "A")
def test_bad_secret(self): tok = tokens.encode_token(self.algo, 1, 'ancient', ['msg'], {'a': 'b'}) with self.assertRaises(tokens.InvalidTokenError): tokens.decode_token(self.algo, tok, ['new', 'old'], ['msg'])
def test_many_secrets(self): tok = tokens.encode_token(self.algo, 1, 'old', ['msg'], {'a': 'b'}) self.assertEqual((1, { 'a': 'b' }), tokens.decode_token(self.algo, tok, ['new', 'old'], ['msg']))
def test_many_secrets(self): tok = tokens.encode_token(self.algo, 1, 'old', ['msg'], {'a': 'b'}) self.assertEqual( (1, {'a': 'b'}), tokens.decode_token(self.algo, tok, ['new', 'old'], ['msg']))
def test_bad_secret(self): tok = tokens.encode_token(self.algo, 1, "ancient", ["msg"], {"a": "b"}) with self.assertRaises(tokens.InvalidTokenError): tokens.decode_token(self.algo, tok, ["new", "old"], ["msg"])
def test_many_secrets(self): tok = tokens.encode_token(self.algo, 1, "old", ["msg"], {"a": "b"}) self.assertEqual((1, {"a": "b"}), tokens.decode_token(self.algo, tok, ["new", "old"], ["msg"]))