1# 2# This file is part of pyasn1 software. 3# 4# Copyright (c) 2005-2017, Ilya Etingof <etingof@gmail.com> 5# License: http://snmplabs.com/pyasn1/license.html 6# 7import sys 8 9try: 10 import unittest2 as unittest 11 12except ImportError: 13 import unittest 14 15from tests.base import BaseTestCase 16 17from pyasn1.type import univ 18from pyasn1.type import tag 19from pyasn1.type import namedtype 20from pyasn1.type import opentype 21from pyasn1.compat.octets import str2octs 22from pyasn1.error import PyAsn1Error 23 24 25class UntaggedAnyTestCase(BaseTestCase): 26 27 def setUp(self): 28 BaseTestCase.setUp(self) 29 30 class Sequence(univ.Sequence): 31 componentType = namedtype.NamedTypes( 32 namedtype.NamedType('id', univ.Integer()), 33 namedtype.NamedType('blob', univ.Any()) 34 ) 35 36 self.s = Sequence() 37 38 def testTypeCheckOnAssignment(self): 39 40 self.s.clear() 41 42 self.s['blob'] = univ.Any(str2octs('xxx')) 43 44 # this should succeed because Any is untagged and unconstrained 45 self.s['blob'] = univ.Integer(123) 46 47 48class TaggedAnyTestCase(BaseTestCase): 49 50 def setUp(self): 51 BaseTestCase.setUp(self) 52 53 self.taggedAny = univ.Any().subtype(implicitTag=tag.Tag(tag.tagClassPrivate, tag.tagFormatSimple, 20)) 54 55 class Sequence(univ.Sequence): 56 componentType = namedtype.NamedTypes( 57 namedtype.NamedType('id', univ.Integer()), 58 namedtype.NamedType('blob', self.taggedAny) 59 ) 60 61 self.s = Sequence() 62 63 def testTypeCheckOnAssignment(self): 64 65 self.s.clear() 66 67 self.s['blob'] = self.taggedAny.clone('xxx') 68 69 try: 70 self.s.setComponentByName('blob', univ.Integer(123)) 71 72 except PyAsn1Error: 73 pass 74 75 else: 76 assert False, 'non-open type assignment tolerated' 77 78 79class TaggedAnyOpenTypeTestCase(BaseTestCase): 80 81 def setUp(self): 82 BaseTestCase.setUp(self) 83 84 self.taggedAny = univ.Any().subtype(implicitTag=tag.Tag(tag.tagClassPrivate, tag.tagFormatSimple, 20)) 85 86 class Sequence(univ.Sequence): 87 componentType = namedtype.NamedTypes( 88 namedtype.NamedType('id', univ.Integer()), 89 namedtype.NamedType('blob', self.taggedAny, openType=opentype.OpenType(name='id')) 90 ) 91 92 self.s = Sequence() 93 94 def testTypeCheckOnAssignment(self): 95 96 self.s.clear() 97 98 self.s['blob'] = univ.Any(str2octs('xxx')) 99 self.s['blob'] = univ.Integer(123) 100 101 102suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__]) 103 104 105if __name__ == '__main__': 106 unittest.TextTestRunner(verbosity=2).run(suite) 107