class AnyTest(type_test_base.TypeTestBase): asn1_type = types.Any repeated = False keyed = False initializers = ( # Decoded and undecoded initializers. # Test with a few simple types. (types.Boolean(value=True).encode(), types.Boolean(value=True)), (types.Integer(value=3).encode(), types.Integer(value=3)), (types.OctetString("hello").encode(), types.OctetString("hello")), # We don't currently check that the encoded value encodes a valid # tag-length-value triplet, so this will also succeed, ( "0000ff", ), ("", )) bad_initializers = ((types.Any("hello"), TypeError), ) encode_test_vectors = ( # A Boolean True. ("\x01\x01\xff", "0101ff"), # An Integer 3. ("\x02\x01\x03", "020103"), # An octet string "hello". ("\x04\x05\x68\x65\x6c\x6c\x6f", "040568656c6c6f"), ) bad_encodings = () bad_strict_encodings = () def test_decode_inner(self): dummy = Dummy(value="hello") a = types.Any(dummy) self.assertTrue(a.decoded) self.assertEqual(a.decoded_value, dummy) enc = dummy.encode() a2 = types.Any(enc) self.assertFalse(a2.decoded) self.assertEqual(a, a2) self.assertEqual(a.value, a2.value) a2.decode_inner(value_type=Dummy) self.assertTrue(a2.decoded) self.assertEqual(a2.decoded_value, dummy) def test_modify(self): dummy = DummySequence(value={"bool": True, "any": "\x01\x01\xff"}) a = types.Any(dummy) self.assertFalse(a.modified()) a.decoded_value["bool"] = False self.assertTrue(a.modified()) enc = dummy.encode() a2 = types.Any(enc) self.assertFalse(a2.modified()) a2.decode_inner(value_type=DummySequence) self.assertFalse(a2.modified()) a2.decoded_value["bool"] = True self.assertTrue(a2.modified())
class ChoiceTest(type_test_base.TypeTestBase): class MyChoice(types.Choice): components = { "bool": types.Boolean, "int": types.Integer, "oct": types.OctetString, } asn1_type = MyChoice immutable = False repeated = False keyed = True initializers = ( ({"bool": types.Boolean(value=False)}, {"bool": False}), ({"int": types.Integer(value=3)}, {"int": 3}), ({"oct": types.OctetString(value="hello")}, {"oct": "hello"}), ({}, {"bool": None}, {"int": None}, {"oct": None}) ) bad_initializers = ( # Multiple values set at once. ({"bool": False, "int": 3}, ValueError), # Invalid key. ({"boo": False}, ValueError), ) encode_test_vectors = ( ({"bool": True}, "0101ff"), ({"int": 3}, "020103"), ({"oct": "hello"}, "040568656c6c6f"), ) bad_encodings = () bad_strict_encodings = () def test_modify(self): m = self.MyChoice(value={"bool": True}) self.assertFalse(m.modified()) m["bool"] = False self.assertTrue(m.modified()) self.assertFalse(m["bool"]) # Back to original; but the modified bit is never cleared. m["bool"] = True self.assertTrue(m.modified()) self.assertTrue(m["bool"])
def test_string_value_octetstring(self): b = str(types.OctetString(value="\x42\xac")) self.assertTrue("42" in b) self.assertTrue("ac" in b.lower())