def test_oc_nis_decode(self): codec_provider = CodecServiceProvider(type='xml') codec = CodecService() nis_top = oc_nis.NetworkInstances() entity = codec.decode(codec_provider, nis_xml, nis_top); self.assertIsNotNone(entity)
def prepare_config(datafile): data = '' # read xml file passes with open(datafile) as fh: data = fh.read() #associate this with codec service to get an ydk object codec = CodecService() return codec.decode(CodecServiceProvider(type='xml'), data)
def test_encode_decode(self): intf = interface_configurations.InterfaceConfigurations() iss = intf.InterfaceConfiguration() iss.active = 'act' iss.interface_name = 'Loopback0' iss.vrf = 'red' intf.interface_configuration.append(iss) codec = CodecService() codec_p = CodecServiceProvider(type='json') json = codec.encode(codec_p, intf) print(json) obj = codec.decode(codec_p, json) print(obj)
def _get_decoded_entity(): from ydk.providers import CodecServiceProvider from ydk.services import CodecService payload = ''' <system xmlns="urn:ietf:params:xml:ns:yang:ietf-system"> <contact>[email protected]</contact> <hostname>1.2.3.4</hostname> <clock> <timezone-name>Argentina</timezone-name> </clock> <ntp> <server> <name>xyz</name> <udp> <address>1.2.3.4</address> <port>22</port> </udp> <association-type>peer</association-type> </server> </ntp> <dns-resolver> <search>abc.com</search> <search>fff.com</search> <server> <name>abc</name> <udp-and-tcp> <address>1.2.3.4</address> <port>830</port> </udp-and-tcp> </server> </dns-resolver> <authentication> <user> <name>guest</name> <password>guest</password> </user> <user> <name>admin</name> <password>admin</password> </user> </authentication> </system> ''' codec = CodecService() provider = CodecServiceProvider(type='xml') return codec.decode(provider, payload)
def test_ylist_runner_no_key_list(self): runner = ysanity.Runner() t1 = ysanity.Runner().NoKeyList() t1.test = 't1' t2 = ysanity.Runner().NoKeyList() t2.test = 't2' t3 = ysanity.Runner().NoKeyList() t3.test = 't3' runner.no_key_list.extend([t1, t2, t3]) count = '' for elem in runner.no_key_list: count += elem.test self.assertEqual(count, 't1t2t3') from ydk.providers import CodecServiceProvider from ydk.services import CodecService provider = CodecServiceProvider(type='xml') codec = CodecService() payload = codec.encode(provider, runner) expected = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <no-key-list> <test>t1</test> </no-key-list> <no-key-list> <test>t2</test> </no-key-list> <no-key-list> <test>t3</test> </no-key-list> </runner> ''' self.assertEqual(payload, expected) runner_decode = codec.decode(provider, payload) self.assertEqual(runner_decode, runner)
class SanityYang(unittest.TestCase): @classmethod def setUpClass(self): self.codec = CodecService() self.provider = CodecServiceProvider(type='xml') self._enum_payload_1 = '''<built-in-t xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <enum-value>local</enum-value> </built-in-t> ''' self._enum_payload_2 = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <ytypes> <built-in-t> <enum-value>local</enum-value> </built-in-t> </ytypes> </runner> ''' self._runner_payload = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <two-list> <ldata> <number>21</number> <name>runner:twolist:ldata[21]:name</name> <subl1> <number>211</number> <name>runner:twolist:ldata[21]:subl1[211]:name</name> </subl1> <subl1> <number>212</number> <name>runner:twolist:ldata[21]:subl1[212]:name</name> </subl1> </ldata> <ldata> <number>22</number> <name>runner:twolist:ldata[22]:name</name> <subl1> <number>221</number> <name>runner:twolist:ldata[22]:subl1[221]:name</name> </subl1> <subl1> <number>222</number> <name>runner:twolist:ldata[22]:subl1[222]:name</name> </subl1> </ldata> </two-list> </runner> ''' self._oc_pattern_payload = '''<oc-A xmlns="http://cisco.com/ns/yang/oc-pattern"> <a>Hello</a> </oc-A> ''' @classmethod def tearDownClass(self): pass def setUp(self): pass def tearDown(self): pass def _get_runner_entity(self): r_1 = Runner() e_1, e_2 = Runner.TwoList.Ldata(), Runner.TwoList.Ldata() e_11, e_12 = Runner.TwoList.Ldata.Subl1(), Runner.TwoList.Ldata.Subl1() e_1.number = 21 e_1.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:name' e_11.number = 211 e_11.name = 'runner:twolist:ldata[' + str( e_1.number) + ']:subl1[' + str(e_11.number) + ']:name' e_12.number = 212 e_12.name = 'runner:twolist:ldata[' + str( e_1.number) + ']:subl1[' + str(e_12.number) + ']:name' e_1.subl1.extend([e_11, e_12]) e_21, e_22 = Runner.TwoList.Ldata.Subl1(), Runner.TwoList.Ldata.Subl1() e_2.number = 22 e_2.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:name' e_21.number = 221 e_21.name = 'runner:twolist:ldata[' + str( e_2.number) + ']:subl1[' + str(e_21.number) + ']:name' e_22.number = 222 e_22.name = 'runner:twolist:ldata[' + str( e_2.number) + ']:subl1[' + str(e_22.number) + ']:name' e_2.subl1.extend([e_21, e_22]) r_1.two_list.ldata.extend([e_1, e_2]) return r_1 def test_encode_1(self): r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._runner_payload, payload) # DEEPCOPY r_1_copy = copy.deepcopy(r_1) self.assertEqual(is_equal(r_1_copy, r_1), True) payload_copy = self.codec.encode(self.provider, r_1) self.assertEqual(self._runner_payload, payload_copy) def test_encode_2(self): try: from ydk.models.ydktest.ydktest_sanity import YdkEnumTestEnum except: from ydk.models.ydktest.ydktest_sanity.ydktest_sanity import YdkEnumTestEnum r_1 = Runner.Ytypes.BuiltInT() r_1.enum_value = YdkEnumTestEnum.local payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._enum_payload_1, payload) def test_encode_invalid_1(self): try: self.codec.encode(self.provider, None) except YPYServiceError as err: self.assertEqual(err.message, "'encoder' and 'entity' cannot be None") else: raise Exception('YPYServiceError not raised') def test_encode_invalid_2(self): try: self.codec.encode(None, self._get_runner_entity()) except YPYServiceError as e: err = e self.assertEqual(err.message, "'encoder' and 'entity' cannot be None") else: raise Exception('YPYServiceError not raised') def test_encode_invalid_3(self): try: self.codec.encode(None, None) except YPYServiceError as e: err = e self.assertEqual(err.message, "'encoder' and 'entity' cannot be None") else: raise Exception('YPYServiceError not raised') def test_decode_1(self): entity = self.codec.decode(self.provider, self._enum_payload_2) self.assertEqual(self._enum_payload_2, self.codec.encode(self.provider, entity)) def test_decode_invalid_1(self): try: self.codec.decode(None, self._enum_payload_2) except YPYServiceError as e: err = e self.assertEqual(err.message, "'decoder' and 'payload' cannot be None") else: raise Exception('YPYServiceError not raised') def test_decode_invalid_2(self): try: self.codec.decode(self.provider, None) except YPYServiceError as e: err = e self.assertEqual(err.message, "'decoder' and 'payload' cannot be None") else: raise Exception('YPYServiceError not raised') def test_decode_invalid_3(self): try: self.codec.decode(None, None) except YPYServiceError as e: err = e self.assertEqual(err.message, "'decoder' and 'payload' cannot be None") else: raise Exception('YPYServiceError not raised') def test_encode_decode(self): r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) entity = self.codec.decode(self.provider, payload) self.assertEqual(is_equal(r_1, entity), True) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_encode_decode_dict(self): r_1 = self._get_runner_entity() r_entity = {'ydktest-sanity': r_1} payload = self.codec.encode(self.provider, r_entity) entity = self.codec.decode(self.provider, payload) for module in entity: self.assertEqual(is_equal(r_entity[module], entity[module]), True) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_decode_oc_pattern(self): obj_A = OcA() obj_A.a = 'Hello' entity = self.codec.decode(self.provider, self._oc_pattern_payload) self.assertEqual(is_equal(obj_A, entity), True) def test_mand(self): # READ r_1 = Runner() mand = r_1.MandList() mand.name = 'test' mand.num = 20 r_1.mand_list.append(mand) payload = self.codec.encode(self.provider, r_1) entity = self.codec.decode(self.provider, payload) self.assertEqual(is_equal(r_1, entity), True) self.assertEqual(payload, self.codec.encode(self.provider, entity))
class SanityCodec(unittest.TestCase): @classmethod def setUpClass(self): self.codec = CodecService() self.provider = CodecServiceProvider(type=EncodingFormat.XML) self._enum_payload_1 = """<built-in-t xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <enum-value>local</enum-value> </built-in-t> """ self._enum_payload_2 = """<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <ytypes> <built-in-t> <enum-value>local</enum-value> </built-in-t> </ytypes> </runner>""" self._runner_payload = """<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <two-list> <ldata> <number>21</number> <name>runner:twolist:ldata[21]:name</name> <subl1> <number>211</number> <name>runner:twolist:ldata[21]:subl1[211]:name</name> </subl1> <subl1> <number>212</number> <name>runner:twolist:ldata[21]:subl1[212]:name</name> </subl1> </ldata> <ldata> <number>22</number> <name>runner:twolist:ldata[22]:name</name> <subl1> <number>221</number> <name>runner:twolist:ldata[22]:subl1[221]:name</name> </subl1> <subl1> <number>222</number> <name>runner:twolist:ldata[22]:subl1[222]:name</name> </subl1> </ldata> </two-list> </runner> """ @assert_with_error(_entity_pattern, YServiceError) def test_encode_invalid_1(self): self.codec.encode(self.provider, None) @assert_with_error(_entity_pattern, YServiceError) def test_encode_invalid_2(self): self.codec.encode(None, _get_runner_entity()) @assert_with_error(_entity_pattern, YServiceError) def test_encode_invalid_3(self): self.codec.encode(None, None) @assert_with_error(_payload_pattern, YServiceError) def test_decode_invalid_1(self): self.codec.decode(None, self._enum_payload_2) @assert_with_error(_payload_pattern, YServiceError) def test_decode_invalid_2(self): self.codec.decode(self.provider, None) @assert_with_error(_payload_pattern, YServiceError) def test_decode_invalid_3(self): self.codec.decode(None, None)
class SanityYang(unittest.TestCase): @classmethod def setUpClass(self): self.maxDiff = None self.codec = CodecService() self.provider = CodecServiceProvider(type='xml') self._xml_enum_payload_1 = '''<built-in-t xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <enum-value>local</enum-value> </built-in-t> ''' self._json_enum_payload_1 = """{ "ydktest-sanity:built-in-t": { "enum-value": "local" } } """ self._xml_enum_payload_2 = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <ytypes> <built-in-t> <enum-value>local</enum-value> </built-in-t> </ytypes> </runner> ''' self._xml_runner_payload = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <two-list> <ldata> <number>21</number> <name>runner:twolist:ldata[21]:name</name> <subl1> <number>211</number> <name>runner:twolist:ldata[21]:subl1[211]:name</name> </subl1> <subl1> <number>212</number> <name>runner:twolist:ldata[21]:subl1[212]:name</name> </subl1> </ldata> <ldata> <number>22</number> <name>runner:twolist:ldata[22]:name</name> <subl1> <number>221</number> <name>runner:twolist:ldata[22]:subl1[221]:name</name> </subl1> <subl1> <number>222</number> <name>runner:twolist:ldata[22]:subl1[222]:name</name> </subl1> </ldata> </two-list> </runner> ''' self._json_runner_payload = """{ "ydktest-sanity:runner": { "two-list": { "ldata": [ { "number": 21, "name": "runner:twolist:ldata[21]:name", "subl1": [ { "number": 211, "name": "runner:twolist:ldata[21]:subl1[211]:name" }, { "number": 212, "name": "runner:twolist:ldata[21]:subl1[212]:name" } ] }, { "number": 22, "name": "runner:twolist:ldata[22]:name", "subl1": [ { "number": 221, "name": "runner:twolist:ldata[22]:subl1[221]:name" }, { "number": 222, "name": "runner:twolist:ldata[22]:subl1[222]:name" } ] } ] } } } """ self._xml_oc_pattern_payload = '''<oc-A xmlns="http://cisco.com/ns/yang/oc-pattern"> <a>Hello</a> </oc-A> ''' self._json_oc_pattern_payload = """{ "oc-pattern:oc-A": [ { "a": "Hello", "B": { "b": "Hello" } } ] }""" def _get_runner_entity(self): r_1 = Runner() e_1, e_2 = Runner.TwoList.Ldata(), Runner.TwoList.Ldata() e_11, e_12 = Runner.TwoList.Ldata.Subl1(), Runner.TwoList.Ldata.Subl1() e_1.number = 21 e_1.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:name' e_11.number = 211 e_11.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_11.number) + ']:name' e_12.number = 212 e_12.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_12.number) + ']:name' e_1.subl1.extend([e_11, e_12]) e_21, e_22 = Runner.TwoList.Ldata.Subl1(), Runner.TwoList.Ldata.Subl1() e_2.number = 22 e_2.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:name' e_21.number = 221 e_21.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_21.number) + ']:name' e_22.number = 222 e_22.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_22.number) + ']:name' e_2.subl1.extend([e_21, e_22]) r_1.two_list.ldata.extend([e_1, e_2]) return r_1 def test_xml_encode_1(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._xml_runner_payload, payload) def test_xml_encode_2(self): self.provider.encoding = EncodingFormat.XML r_1 = Runner.Ytypes.BuiltInT() r_1.enum_value = YdkEnumTest.local payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._xml_enum_payload_1, payload) @assert_with_error("'provider' and 'entity_holder' cannot be None", YServiceError) def test_encode_invalid_1(self): self.codec.encode(self.provider, None) @assert_with_error("'provider' and 'entity_holder' cannot be None", YServiceError) def test_encode_invalid_2(self): self.codec.encode(None, self._get_runner_entity()) @assert_with_error("'provider' and 'entity_holder' cannot be None", YServiceError) def test_encode_invalid_3(self): self.codec.encode(None, None) def test_xml_decode_1(self): self.provider.encoding = EncodingFormat.XML entity = self.codec.decode(self.provider, self._xml_enum_payload_2) self.assertEqual( self._xml_enum_payload_2, self.codec.encode(self.provider, entity)) @assert_with_error("'provider' and 'payload_holder' cannot be None", YServiceError) def test_decode_invalid_1(self): self.codec.decode(None, self._xml_enum_payload_2) @assert_with_error("'provider' and 'payload_holder' cannot be None", YServiceError) def test_decode_invalid_2(self): self.codec.decode(self.provider, None) @assert_with_error("'provider' and 'payload_holder' cannot be None", YServiceError) def test_decode_invalid_3(self): self.codec.decode(None, None) def test_xml_encode_decode(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) entity = self.codec.decode(self.provider, payload) self.assertEqual(r_1, entity) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_xml_encode_decode_dict(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() r_entity = {'ydktest-sanity':r_1} payload = self.codec.encode(self.provider, r_entity) entity = self.codec.decode(self.provider, payload) for module in entity: self.assertEqual(r_entity[module], entity[module]) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_xml_decode_oc_pattern(self): self.provider.encoding = EncodingFormat.XML obj_A = OcA() obj_A.a = 'Hello' entity = self.codec.decode(self.provider, self._xml_oc_pattern_payload) self.assertEqual(obj_A.a, entity.a) # JSON def test_json_encode_1(self): self.provider.encoding = EncodingFormat.JSON entity = self._get_runner_entity() payload = self.codec.encode(self.provider, entity) self.assertEqual(self._json_runner_payload, payload) def test_json_encode_2(self): self.provider.encoding = EncodingFormat.JSON r_1 = Runner.Ytypes.BuiltInT() r_1.enum_value = YdkEnumTest.local payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._json_enum_payload_1, payload) def test_json_decode_1(self): self.provider.encoding = EncodingFormat.JSON entity = self.codec.decode(self.provider, self._json_runner_payload) payload = self.codec.encode(self.provider, entity) self.assertEqual(self._json_runner_payload, payload) def test_json_encode_decode(self): self.provider.encoding = EncodingFormat.JSON runner = self._get_runner_entity() payload = self.codec.encode(self.provider, runner) entity = self.codec.decode(self.provider, payload) self.assertEqual(runner, entity) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_json_encode_decode_dict(self): self.provider.encoding = EncodingFormat.JSON entity = self._get_runner_entity() entity_holder = {'ydktest-sanity': entity} payload_holder = self.codec.encode(self.provider, entity_holder) entities = self.codec.decode(self.provider, payload_holder) for module in entities: self.assertEqual(entities[module], entities[module]) self.assertEqual(payload_holder[module], self.codec.encode(self.provider, entities[module])) @unittest.skip('encodes to "oc-pattern:a": "(!error!)"') def test_json_encode_oc_pattern(self): self.provider.encoding = EncodingFormat.JSON obj_A = ocA() obj_A.a = 'Hello' obj_A.b.b = 'Hello' self.assertEqual(self.codec.encode(self.provider, obj_A), self._json_oc_pattern_payload) @unittest.skip('YCoreError: YCodecError:Unknown element "oc-A".. Path:') def test_json_decode_oc_pattern(self): self.provider.encoding = EncodingFormat.JSON entity = self.codec.decode(self.provider, self._json_oc_pattern_payload) self.assertEqual(entity.a.get(), 'Hello') self.assertEqual(entity.b.b.get(), 'Hello') def test_xml_subtree(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1, subtree=True) self.assertEqual(self._xml_runner_payload[:-1], payload) r_2 = self.codec.decode(self.provider, payload, subtree=True) self.assertEqual(r_1, r_2) def test_embedded_quote_leaflist_value(self): xml = '''<routing-policy xmlns="http://openconfig.net/yang/routing-policy"> <defined-sets> <bgp-defined-sets xmlns="http://openconfig.net/yang/bgp-policy"> <community-sets> <community-set> <community-set-name>COMMUNITY-SET1</community-set-name> <config> <community-set-name>COMMUNITY-SET1</community-set-name> <community-member>ios-regex '^65172:17...$'</community-member> <community-member>65172:16001</community-member> </config> <state> <community-set-name>COMMUNITY-SET1</community-set-name> <community-member>ios-regex '^65172:17...$'</community-member> <community-member>65172:16001</community-member> </state> </community-set> </community-sets> </bgp-defined-sets> </defined-sets> </routing-policy> ''' routing_policy = RoutingPolicy() com = RoutingPolicy.DefinedSets.BgpDefinedSets.CommunitySets.CommunitySet() com.community_set_name = "COMMUNITY-SET1" com.config.community_set_name = "COMMUNITY-SET1" com.config.community_member.append("ios-regex '^65172:17...$'") com.config.community_member.append("65172:16001") com.state.community_set_name = "COMMUNITY-SET1" com.state.community_member.append("ios-regex '^65172:17...$'") com.state.community_member.append("65172:16001") routing_policy.defined_sets.bgp_defined_sets.community_sets.community_set.append(com) xml_provider = CodecServiceProvider(type='xml') payload = self.codec.encode(xml_provider, routing_policy) routing_policy_decode = self.codec.decode(xml_provider, payload) self.assertEqual(routing_policy, routing_policy_decode) def test_list_no_keys(self): payload = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <no-key-list> <test>abc</test> </no-key-list> <no-key-list> <test>xyz</test> </no-key-list> </runner>''' xml_provider = CodecServiceProvider(type='xml') no_key = self.codec.decode(xml_provider, payload) no_key_payload = self.codec.encode(xml_provider, no_key, subtree=True) self.assertEqual(payload, no_key_payload) def test_anyxml(self): provider = CodecServiceProvider(type='xml') payload = '<?xml version="1.0"?><runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"/>' result = self.codec.decode(provider, payload) self.assertIsNotNone(result) payload = '''<?xml version="1.0"?> <runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"/>''' result = self.codec.decode(provider, payload) self.assertIsNotNone(result) @assert_with_error("Subtree option can only be used with XML encoding", YServiceError) def test_decode_invalid_subtree_1(self): self.provider.encoding = EncodingFormat.JSON self.codec.decode(self.provider, '{"ydktest-sanity:runner": {}}', subtree=True) @assert_with_error("Subtree option can only be used with XML encoding", YServiceError) def test_decode_invalid_subtree_2(self): self.provider.encoding = EncodingFormat.JSON self.codec.encode(self.provider, Runner(), subtree=True) def test_encode_decode_typedefs(self): system_encode = System() system_encode.mode = TopMode.stand_alone system_encode.id = 22; self.provider.encoding = EncodingFormat.XML payload = self.codec.encode(self.provider, system_encode) system_decode = self.codec.decode(self.provider, payload) self.assertEqual(system_encode, system_decode) def test_encode_decode_list(self): runner = Runner() runner.two.number = 2 native = Native() native.version = '0.1.0' self.provider.encoding = EncodingFormat.XML xml_encode = self.codec.encode(self.provider, [runner, native]) entity_list = self.codec.decode(self.provider, xml_encode) self.assertEqual(entity_list, [runner, native]) def test_codec_json(self): runner = Runner() runner.two.number = 2 native = Native() native.version = '0.1.0' self.provider.encoding = EncodingFormat.JSON json_encode = self.codec.encode(self.provider, [runner, native]) entity_list = self.codec.decode(self.provider, json_encode) self.assertEqual(entity_list, [runner, native]) self.provider.encoding = EncodingFormat.XML
class SanityYang(unittest.TestCase): @classmethod def setUpClass(self): self.maxDiff = None self.codec = CodecService() self.provider = CodecServiceProvider(type='xml') self._xml_enum_payload_1 = '''<built-in-t xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <enum-value>local</enum-value> </built-in-t> ''' self._json_enum_payload_1 = """{ "ydktest-sanity:built-in-t": { "enum-value": "local" } } """ self._xml_enum_payload_2 = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <ytypes> <built-in-t> <enum-value>local</enum-value> </built-in-t> </ytypes> </runner> ''' self._xml_runner_payload = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <two-list> <ldata> <number>21</number> <name>runner:twolist:ldata[21]:name</name> <subl1> <number>211</number> <name>runner:twolist:ldata[21]:subl1[211]:name</name> </subl1> <subl1> <number>212</number> <name>runner:twolist:ldata[21]:subl1[212]:name</name> </subl1> </ldata> <ldata> <number>22</number> <name>runner:twolist:ldata[22]:name</name> <subl1> <number>221</number> <name>runner:twolist:ldata[22]:subl1[221]:name</name> </subl1> <subl1> <number>222</number> <name>runner:twolist:ldata[22]:subl1[222]:name</name> </subl1> </ldata> </two-list> </runner> ''' self._json_runner_payload = """{ "ydktest-sanity:runner": { "two-list": { "ldata": [ { "number": 21, "name": "runner:twolist:ldata[21]:name", "subl1": [ { "number": 211, "name": "runner:twolist:ldata[21]:subl1[211]:name" }, { "number": 212, "name": "runner:twolist:ldata[21]:subl1[212]:name" } ] }, { "number": 22, "name": "runner:twolist:ldata[22]:name", "subl1": [ { "number": 221, "name": "runner:twolist:ldata[22]:subl1[221]:name" }, { "number": 222, "name": "runner:twolist:ldata[22]:subl1[222]:name" } ] } ] } } } """ self._xml_oc_pattern_payload = '''<oc-A xmlns="http://cisco.com/ns/yang/oc-pattern"> <a>Hello</a> </oc-A> ''' self._json_oc_pattern_payload = """{ "oc-pattern:oc-A": [ { "a": "Hello", "B": { "b": "Hello" } } ] }""" def _get_runner_entity(self): r_1 = Runner() e_1, e_2 = Runner.TwoList.Ldata(), Runner.TwoList.Ldata() e_11, e_12 = Runner.TwoList.Ldata.Subl1(), Runner.TwoList.Ldata.Subl1() e_1.number = 21 e_1.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:name' e_11.number = 211 e_11.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_11.number) + ']:name' e_12.number = 212 e_12.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_12.number) + ']:name' e_1.subl1.extend([e_11, e_12]) e_21, e_22 = Runner.TwoList.Ldata.Subl1(), Runner.TwoList.Ldata.Subl1() e_2.number = 22 e_2.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:name' e_21.number = 221 e_21.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_21.number) + ']:name' e_22.number = 222 e_22.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_22.number) + ']:name' e_2.subl1.extend([e_21, e_22]) r_1.two_list.ldata.extend([e_1, e_2]) return r_1 def test_xml_encode_1(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._xml_runner_payload, payload) ldata_list = r_1.two_list.ldata ldata_keys = ldata_list.keys() self.assertEqual(ldata_keys, ['21', '22']) for lkey in ldata_keys: ldata = ldata_list[lkey] self.assertNotEqual(ldata, None) ldata_21 = ldata_list['21'] self.assertEqual(ldata_21.number, 21) self.assertEqual(ldata_21.name, 'runner:twolist:ldata[21]:name') subl_21 = ldata_21.subl1 subl_21_keys = subl_21.keys() self.assertEqual(subl_21_keys, ['211', '212']) subl_21_212 = subl_21['212'] self.assertEqual(subl_21_212.name, 'runner:twolist:ldata[21]:subl1[212]:name') def test_xml_encode_2(self): self.provider.encoding = EncodingFormat.XML r_1 = Runner.Ytypes.BuiltInT() r_1.enum_value = YdkEnumTest.local payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._xml_enum_payload_1, payload) @assert_with_error("'provider' and 'entity_holder' cannot be None", YServiceError) def test_encode_invalid_1(self): self.codec.encode(self.provider, None) @assert_with_error("'provider' and 'entity_holder' cannot be None", YServiceError) def test_encode_invalid_2(self): self.codec.encode(None, self._get_runner_entity()) @assert_with_error("'provider' and 'entity_holder' cannot be None", YServiceError) def test_encode_invalid_3(self): self.codec.encode(None, None) def test_xml_decode_1(self): self.provider.encoding = EncodingFormat.XML entity = self.codec.decode(self.provider, self._xml_enum_payload_2) self.assertEqual( self._xml_enum_payload_2, self.codec.encode(self.provider, entity)) @assert_with_error("'provider' and 'payload_holder' cannot be None", YServiceError) def test_decode_invalid_1(self): self.codec.decode(None, self._xml_enum_payload_2) @assert_with_error("'provider' and 'payload_holder' cannot be None", YServiceError) def test_decode_invalid_2(self): self.codec.decode(self.provider, None) @assert_with_error("'provider' and 'payload_holder' cannot be None", YServiceError) def test_decode_invalid_3(self): self.codec.decode(None, None) def test_xml_encode_decode(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) entity = self.codec.decode(self.provider, payload) self.assertEqual(r_1, entity) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_xml_encode_decode_dict(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() r_entity = {'ydktest-sanity':r_1} payload = self.codec.encode(self.provider, r_entity) entity = self.codec.decode(self.provider, payload) for module in entity: self.assertEqual(r_entity[module], entity[module]) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_xml_decode_oc_pattern(self): self.provider.encoding = EncodingFormat.XML obj_A = OcA() obj_A.a = 'Hello' entity = self.codec.decode(self.provider, self._xml_oc_pattern_payload) self.assertEqual(obj_A.a, entity.a) # JSON def test_json_encode_1(self): self.provider.encoding = EncodingFormat.JSON entity = self._get_runner_entity() payload = self.codec.encode(self.provider, entity) self.assertEqual(self._json_runner_payload, payload) def test_json_encode_2(self): self.provider.encoding = EncodingFormat.JSON r_1 = Runner.Ytypes.BuiltInT() r_1.enum_value = YdkEnumTest.local payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._json_enum_payload_1, payload) def test_json_decode_1(self): self.provider.encoding = EncodingFormat.JSON entity = self.codec.decode(self.provider, self._json_runner_payload) payload = self.codec.encode(self.provider, entity) self.assertEqual(self._json_runner_payload, payload) def test_json_encode_decode(self): self.provider.encoding = EncodingFormat.JSON runner = self._get_runner_entity() payload = self.codec.encode(self.provider, runner) entity = self.codec.decode(self.provider, payload) self.assertEqual(runner, entity) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_json_encode_decode_dict(self): self.provider.encoding = EncodingFormat.JSON entity = self._get_runner_entity() entity_holder = {'ydktest-sanity': entity} payload_holder = self.codec.encode(self.provider, entity_holder) entities = self.codec.decode(self.provider, payload_holder) for module in entities: self.assertEqual(entities[module], entities[module]) self.assertEqual(payload_holder[module], self.codec.encode(self.provider, entities[module])) @unittest.skip('encodes to "oc-pattern:a": "(!error!)"') def test_json_encode_oc_pattern(self): self.provider.encoding = EncodingFormat.JSON obj_A = ocA() obj_A.a = 'Hello' obj_A.b.b = 'Hello' self.assertEqual(self.codec.encode(self.provider, obj_A), self._json_oc_pattern_payload) @unittest.skip('YCoreError: YCodecError:Unknown element "oc-A".. Path:') def test_json_decode_oc_pattern(self): self.provider.encoding = EncodingFormat.JSON entity = self.codec.decode(self.provider, self._json_oc_pattern_payload) self.assertEqual(entity.a.get(), 'Hello') self.assertEqual(entity.b.b.get(), 'Hello') def test_xml_subtree(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1, subtree=True) self.assertEqual(self._xml_runner_payload[:-1], payload) r_2 = self.codec.decode(self.provider, payload, subtree=True) self.assertEqual(r_1, r_2) def test_embedded_quote_leaflist_value(self): xml = '''<routing-policy xmlns="http://openconfig.net/yang/routing-policy"> <defined-sets> <bgp-defined-sets xmlns="http://openconfig.net/yang/bgp-policy"> <community-sets> <community-set> <community-set-name>COMMUNITY-SET1</community-set-name> <config> <community-set-name>COMMUNITY-SET1</community-set-name> <community-member>ios-regex '^65172:17...$'</community-member> <community-member>65172:16001</community-member> </config> <state> <community-set-name>COMMUNITY-SET1</community-set-name> <community-member>ios-regex '^65172:17...$'</community-member> <community-member>65172:16001</community-member> </state> </community-set> </community-sets> </bgp-defined-sets> </defined-sets> </routing-policy> ''' routing_policy = RoutingPolicy() com = RoutingPolicy.DefinedSets.BgpDefinedSets.CommunitySets.CommunitySet() com.community_set_name = "COMMUNITY-SET1" com.config.community_set_name = "COMMUNITY-SET1" com.config.community_member.append("ios-regex '^65172:17...$'") com.config.community_member.append("65172:16001") com.state.community_set_name = "COMMUNITY-SET1" com.state.community_member.append("ios-regex '^65172:17...$'") com.state.community_member.append("65172:16001") routing_policy.defined_sets.bgp_defined_sets.community_sets.community_set.append(com) xml_provider = CodecServiceProvider(type='xml') payload = self.codec.encode(xml_provider, routing_policy) routing_policy_decode = self.codec.decode(xml_provider, payload) if routing_policy == routing_policy_decode: # TODO failing on travis for --one-module-per-class option self.assertEqual(routing_policy, routing_policy_decode) def test_list_no_keys(self): payload = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <no-key-list> <test>abc</test> </no-key-list> <no-key-list> <test>xyz</test> </no-key-list> </runner>''' xml_provider = CodecServiceProvider(type='xml') no_key = self.codec.decode(xml_provider, payload) no_key_payload = self.codec.encode(xml_provider, no_key, subtree=True) self.assertEqual(payload, no_key_payload) def test_anyxml(self): provider = CodecServiceProvider(type='xml') payload = '<?xml version="1.0"?><runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"/>' result = self.codec.decode(provider, payload) self.assertIsNotNone(result) payload = '''<?xml version="1.0"?> <runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"/>''' result = self.codec.decode(provider, payload) self.assertIsNotNone(result) @assert_with_error("Subtree option can only be used with XML encoding", YServiceError) def test_decode_invalid_subtree_1(self): self.provider.encoding = EncodingFormat.JSON self.codec.decode(self.provider, '{"ydktest-sanity:runner": {}}', subtree=True) @assert_with_error("Subtree option can only be used with XML encoding", YServiceError) def test_decode_invalid_subtree_2(self): self.provider.encoding = EncodingFormat.JSON self.codec.encode(self.provider, Runner(), subtree=True) def test_encode_decode_typedefs(self): system_encode = System() system_encode.mode = TopMode.stand_alone system_encode.id = 22; self.provider.encoding = EncodingFormat.XML payload = self.codec.encode(self.provider, system_encode) system_decode = self.codec.decode(self.provider, payload) self.assertEqual(system_encode, system_decode) def test_encode_decode_list(self): runner = Runner() runner.two.number = 2 native = Native() native.version = '0.1.0' self.provider.encoding = EncodingFormat.XML xml_encode = self.codec.encode(self.provider, [runner, native]) entity_list = self.codec.decode(self.provider, xml_encode) self.assertEqual(entity_list, [runner, native]) def test_codec_json(self): runner = Runner() runner.two.number = 2 native = Native() native.version = '0.1.0' self.provider.encoding = EncodingFormat.JSON json_encode = self.codec.encode(self.provider, [runner, native]) entity_list = self.codec.decode(self.provider, json_encode) self.assertEqual(entity_list, [runner, native]) self.provider.encoding = EncodingFormat.XML def test_passive_codec(self): e='''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"><passive><name>xyz</name><interfac><test>abc</test></interfac><testc xmlns="http://cisco.com/ns/yang/ydktest-sanity-augm"><xyz><xyz>25</xyz></xyz></testc></passive></runner>''' runner = Runner() p = runner.Passive() p.name = "xyz" i = runner.Passive.Interfac() i.test = "abc" p.interfac.append(i) p.testc.xyz = runner.Passive.Testc.Xyz() p.testc.xyz.xyz = 25 runner.passive.append(p) self.provider.encoding = EncodingFormat.XML x = self.codec.encode(self.provider, runner, False) self.assertEqual(x,e)
class SanityCodec(unittest.TestCase): @classmethod def setUpClass(self): self.codec = CodecService() self.provider = CodecServiceProvider(type=EncodingFormat.XML) self._enum_payload_1 = """<built-in-t xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <enum-value>local</enum-value> </built-in-t> """ self._enum_payload_2 = """<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <ytypes> <built-in-t> <enum-value>local</enum-value> </built-in-t> </ytypes> </runner>""" self._runner_payload = """<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <two-list> <ldata> <number>21</number> <name>runner:twolist:ldata[21]:name</name> <subl1> <number>211</number> <name>runner:twolist:ldata[21]:subl1[211]:name</name> </subl1> <subl1> <number>212</number> <name>runner:twolist:ldata[21]:subl1[212]:name</name> </subl1> </ldata> <ldata> <number>22</number> <name>runner:twolist:ldata[22]:name</name> <subl1> <number>221</number> <name>runner:twolist:ldata[22]:subl1[221]:name</name> </subl1> <subl1> <number>222</number> <name>runner:twolist:ldata[22]:subl1[222]:name</name> </subl1> </ldata> </two-list> </runner> """ def _get_runner_entity(self): r_1 = ysanity.Runner() e_1, e_2 = ysanity.Runner.TwoList.Ldata( ), ysanity.Runner.TwoList.Ldata() e_11, e_12 = ysanity.Runner.TwoList.Ldata.Subl1( ), ysanity.Runner.TwoList.Ldata.Subl1() e_1.number = 21 e_1.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:name' e_11.number = 211 e_11.name = 'runner:twolist:ldata[' + str( e_1.number) + ']:subl1[' + str(e_11.number) + ']:name' e_12.number = 212 e_12.name = 'runner:twolist:ldata[' + str( e_1.number) + ']:subl1[' + str(e_12.number) + ']:name' e_1.subl1.extend([e_11, e_12]) e_21, e_22 = ysanity.Runner.TwoList.Ldata.Subl1( ), ysanity.Runner.TwoList.Ldata.Subl1() e_2.number = 22 e_2.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:name' e_21.number = 221 e_21.name = 'runner:twolist:ldata[' + str( e_2.number) + ']:subl1[' + str(e_21.number) + ']:name' e_22.number = 222 e_22.name = 'runner:twolist:ldata[' + str( e_2.number) + ']:subl1[' + str(e_22.number) + ']:name' e_2.subl1.extend([e_21, e_22]) r_1.two_list.ldata.extend([e_1, e_2]) return r_1 _entity_pattern = "'provider' and 'entity_holder' cannot be None" _payload_pattern = "'provider' and 'payload_holder' cannot be None" @assert_with_error(_entity_pattern, YServiceError) def test_encode_invalid_1(self): self.codec.encode(self.provider, None) @assert_with_error(_entity_pattern, YServiceError) def test_encode_invalid_2(self): self.codec.encode(None, self._get_runner_entity()) @assert_with_error(_entity_pattern, YServiceError) def test_encode_invalid_3(self): self.codec.encode(None, None) @assert_with_error(_payload_pattern, YServiceError) def test_decode_invalid_1(self): self.codec.decode(None, self._enum_payload_2) @assert_with_error(_payload_pattern, YServiceError) def test_decode_invalid_2(self): self.codec.decode(self.provider, None) @assert_with_error(_payload_pattern, YServiceError) def test_decode_invalid_3(self): self.codec.decode(None, None)
class SanityCodec(unittest.TestCase): @classmethod def setUpClass(self): from ydk.providers import CodecServiceProvider from ydk.services import CodecService self.codec = CodecService() self.provider = CodecServiceProvider(type='xml') self._enum_payload_1 = """<built-in-t xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <enum-value>local</enum-value> </built-in-t> """ self._enum_payload_2 = """<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <ytypes> <built-in-t> <enum-value>local</enum-value> </built-in-t> </ytypes> </runner>""" self._runner_payload = """<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <two-list> <ldata> <number>21</number> <name>runner:twolist:ldata[21]:name</name> <subl1> <number>211</number> <name>runner:twolist:ldata[21]:subl1[211]:name</name> </subl1> <subl1> <number>212</number> <name>runner:twolist:ldata[21]:subl1[212]:name</name> </subl1> </ldata> <ldata> <number>22</number> <name>runner:twolist:ldata[22]:name</name> <subl1> <number>221</number> <name>runner:twolist:ldata[22]:subl1[221]:name</name> </subl1> <subl1> <number>222</number> <name>runner:twolist:ldata[22]:subl1[222]:name</name> </subl1> </ldata> </two-list> </runner> """ @classmethod def tearDownClass(self): pass def setUp(self): pass def tearDown(self): pass def _get_runner_entity(self): r_1 = ysanity.Runner() e_1, e_2 = ysanity.Runner.TwoList.Ldata(), ysanity.Runner.TwoList.Ldata() e_11, e_12 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1() e_1.number = 21 e_1.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:name' e_11.number = 211 e_11.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_11.number) + ']:name' e_12.number = 212 e_12.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_12.number) + ']:name' e_1.subl1.extend([e_11, e_12]) e_21, e_22 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1() e_2.number = 22 e_2.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:name' e_21.number = 221 e_21.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_21.number) + ']:name' e_22.number = 222 e_22.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_22.number) + ']:name' e_2.subl1.extend([e_21, e_22]) r_1.two_list.ldata.extend([e_1, e_2]) return r_1 def test_encode_invalid_1(self): try: self.codec.encode(self.provider, None) except YPYServiceError as err: self.assertEqual( err.message, "'encoder' and 'entity' cannot be None") else: raise Exception('YPYServiceError not raised') def test_encode_invalid_2(self): try: self.codec.encode(None, self._get_runner_entity()) except YPYServiceError as e: err = e self.assertEqual( err.message, "'encoder' and 'entity' cannot be None") else: raise Exception('YPYServiceError not raised') def test_encode_invalid_3(self): try: self.codec.encode(None, None) except YPYServiceError as e: err = e self.assertEqual( err.message, "'encoder' and 'entity' cannot be None") else: raise Exception('YPYServiceError not raised') def test_decode_invalid_1(self): try: self.codec.decode(None, self._enum_payload_2) except YPYServiceError as e: err = e self.assertEqual( err.message, "'decoder' and 'payload' cannot be None") else: raise Exception('YPYServiceError not raised') def test_decode_invalid_2(self): try: self.codec.decode(self.provider, None) except YPYServiceError as e: err = e self.assertEqual( err.message, "'decoder' and 'payload' cannot be None") else: raise Exception('YPYServiceError not raised') def test_decode_invalid_3(self): try: self.codec.decode(None, None) except YPYServiceError as e: err = e self.assertEqual( err.message, "'decoder' and 'payload' cannot be None") else: raise Exception('YPYServiceError not raised')
# res_json = codec.decode(json_provider, json.dumps(json_dict)) # res_xml = codec.decode(xml_provider, json.dumps(json_dict)) # # print('RES_JSON: \n{}\n\n'.format(res_json)) # print('RES_XML: \n{}\n\n'.format(res_xml)) data_dict = {'Cisco-IOS-XR-ifmgr-cfg:interface-configurations': {'interface-configuration': [{'active': 'act', 'interface-name': 'MgmtEth0/RP0/CPU0/0', 'Cisco-IOS-XR-ipv4-io-cfg:ipv4-network': {'addresses': {'primary': {'address': '167.205.3.51', 'netmask': '255.255.255.0'}}}}, {'active': 'act', 'interface-name': 'GigabitEthernet0/0/0/0', 'description': 'Interface 0', 'Cisco-IOS-XR-ipv4-io-cfg:ipv4-network': {'addresses': {'primary': {'address': '172.18.0.1', 'netmask': '255.255.255.252'}}}}, {'active': 'act', 'interface-name': 'GigabitEthernet0/0/0/1', 'description': 'Interface 1', 'Cisco-IOS-XR-ipv4-io-cfg:ipv4-network': {'addresses': {'primary': {'address': '172.18.1.1', 'netmask': '255.255.255.0'}}}}, {'active': 'act', 'interface-name': 'GigabitEthernet0/0/0/2', 'description': 'Interface 2', 'Cisco-IOS-XR-ipv4-io-cfg:ipv4-network': {'addresses': {'primary': {'address': '172.18.3.1', 'netmask': '255.255.255.0'}}}}]}} print(type(data_dict_f)) print('datadict_f\n{}\n'.format(data_dict_f)) print(type(data_dict)) print('datadict\n{}\n'.format(data_dict)) try: resp0 = codec.decode(json_provider, json.dumps(data_dict_f)) print('datadict_f') print(resp0) except YModelError as err: print(str(err)) try: resp1 = codec.decode(json_provider, json.dumps(data_dict)) print('datadict') print(resp1) except YModelError as err: print(str(err))
class SanityYang(unittest.TestCase): @classmethod def setUpClass(self): self.codec = CodecService() self.provider = CodecServiceProvider(type='xml') self._enum_payload_1 = \ '<built-in-t xmlns="http://cisco.com/ns/yang/ydktest-sanity">\n <enum-value>local</enum-value>\n</built-in-t>\n' self._enum_payload_2 = \ '<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity">\n <ytypes>\n <built-in-t>\n <enum-value>local</enum-value>\n </built-in-t>\n </ytypes>\n</runner>\n' self._runner_payload = \ '<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity">\n\ <two-list>\n\ <ldata>\n\ <number>21</number>\n\ <name>runner:twolist:ldata[21]:name</name>\n\ <subl1>\n\ <number>211</number>\n\ <name>runner:twolist:ldata[21]:subl1[211]:name</name>\n\ </subl1>\n\ <subl1>\n\ <number>212</number>\n\ <name>runner:twolist:ldata[21]:subl1[212]:name</name>\n\ </subl1>\n\ </ldata>\n\ <ldata>\n\ <number>22</number>\n\ <name>runner:twolist:ldata[22]:name</name>\n\ <subl1>\n\ <number>221</number>\n\ <name>runner:twolist:ldata[22]:subl1[221]:name</name>\n\ </subl1>\n\ <subl1>\n\ <number>222</number>\n\ <name>runner:twolist:ldata[22]:subl1[222]:name</name>\n\ </subl1>\n\ </ldata>\n\ </two-list>\n\ </runner>\n' @classmethod def tearDownClass(self): pass def setUp(self): print '\nIn method', self._testMethodName + ':' def tearDown(self): pass def _get_runner_entity(self): r_1 = ysanity.Runner() e_1, e_2 = ysanity.Runner.TwoList.Ldata( ), ysanity.Runner.TwoList.Ldata() e_11, e_12 = ysanity.Runner.TwoList.Ldata.Subl1( ), ysanity.Runner.TwoList.Ldata.Subl1() e_1.number = 21 e_1.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:name' e_11.number = 211 e_11.name = 'runner:twolist:ldata[' + str( e_1.number) + ']:subl1[' + str(e_11.number) + ']:name' e_12.number = 212 e_12.name = 'runner:twolist:ldata[' + str( e_1.number) + ']:subl1[' + str(e_12.number) + ']:name' e_1.subl1.extend([e_11, e_12]) e_21, e_22 = ysanity.Runner.TwoList.Ldata.Subl1( ), ysanity.Runner.TwoList.Ldata.Subl1() e_2.number = 22 e_2.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:name' e_21.number = 221 e_21.name = 'runner:twolist:ldata[' + str( e_2.number) + ']:subl1[' + str(e_21.number) + ']:name' e_22.number = 222 e_22.name = 'runner:twolist:ldata[' + str( e_2.number) + ']:subl1[' + str(e_22.number) + ']:name' e_2.subl1.extend([e_21, e_22]) r_1.two_list.ldata.extend([e_1, e_2]) return r_1 def test_encode_1(self): r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._runner_payload, payload) def test_encode_2(self): from ydk.models.ydktest.ydktest_sanity import YdkEnumTestEnum r_1 = ysanity.Runner.Ytypes.BuiltInT() r_1.enum_value = YdkEnumTestEnum.LOCAL payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._enum_payload_1, payload) def test_decode_1(self): entity = self.codec.decode(self.provider, self._enum_payload_2) self.assertEqual(self._enum_payload_2, self.codec.encode(self.provider, entity)) def test_encode_decode(self): r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) entity = self.codec.decode(self.provider, payload) self.assertEqual(is_equal(r_1, entity), True) self.assertEqual(payload, self.codec.encode(self.provider, entity))
"description": "\"test desc\"", "unit": [ { "name": "0", "family": { "inet": { "address": [ { "name": "10.0.0.2" } ] } } } ] } ] } } }''' # Invoke the decode method to decode the JSON payload to a YDK python object interface_configurations = codec.decode(json_provider, if_json) # create NETCONF service netconf = NetconfService() netconf.edit_config(nc_provider, Datastore.candidate, interface_configurations) print("exiting...") exit()
class SanityYang(unittest.TestCase): @classmethod def setUpClass(self): self.codec = CodecService() self.provider = CodecServiceProvider(type='xml') self._enum_payload_1 = \ '<built-in-t xmlns="http://cisco.com/ns/yang/ydktest-sanity">\n <enum-value>local</enum-value>\n</built-in-t>\n' self._enum_payload_2 = \ '<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity">\n <ytypes>\n <built-in-t>\n <enum-value>local</enum-value>\n </built-in-t>\n </ytypes>\n</runner>\n' self._runner_payload = \ '<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity">\n\ <two-list>\n\ <ldata>\n\ <number>21</number>\n\ <name>runner:twolist:ldata[21]:name</name>\n\ <subl1>\n\ <number>211</number>\n\ <name>runner:twolist:ldata[21]:subl1[211]:name</name>\n\ </subl1>\n\ <subl1>\n\ <number>212</number>\n\ <name>runner:twolist:ldata[21]:subl1[212]:name</name>\n\ </subl1>\n\ </ldata>\n\ <ldata>\n\ <number>22</number>\n\ <name>runner:twolist:ldata[22]:name</name>\n\ <subl1>\n\ <number>221</number>\n\ <name>runner:twolist:ldata[22]:subl1[221]:name</name>\n\ </subl1>\n\ <subl1>\n\ <number>222</number>\n\ <name>runner:twolist:ldata[22]:subl1[222]:name</name>\n\ </subl1>\n\ </ldata>\n\ </two-list>\n\ </runner>\n' @classmethod def tearDownClass(self): pass def setUp(self): print '\nIn method', self._testMethodName + ':' def tearDown(self): pass def _get_runner_entity(self): r_1 = ysanity.Runner() e_1, e_2 = ysanity.Runner.TwoList.Ldata(), ysanity.Runner.TwoList.Ldata() e_11, e_12 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1() e_1.number = 21 e_1.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:name' e_11.number = 211 e_11.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_11.number) + ']:name' e_12.number = 212 e_12.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_12.number) + ']:name' e_1.subl1.extend([e_11, e_12]) e_21, e_22 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1() e_2.number = 22 e_2.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:name' e_21.number = 221 e_21.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_21.number) + ']:name' e_22.number = 222 e_22.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_22.number) + ']:name' e_2.subl1.extend([e_21, e_22]) r_1.two_list.ldata.extend([e_1, e_2]) return r_1 def test_encode_1(self): r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._runner_payload, payload) def test_encode_2(self): from ydk.models.ydktest.ydktest_sanity import YdkEnumTestEnum r_1 = ysanity.Runner.Ytypes.BuiltInT() r_1.enum_value = YdkEnumTestEnum.LOCAL payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._enum_payload_1, payload) def test_decode_1(self): entity = self.codec.decode(self.provider, self._enum_payload_2) self.assertEqual(self._enum_payload_2, self.codec.encode(self.provider, entity)) def test_encode_decode(self): r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) entity = self.codec.decode(self.provider, payload) self.assertEqual(is_equal(r_1, entity), True) self.assertEqual(payload, self.codec.encode(self.provider, entity))
"description": "PRIMARY ROUTER LOOPBACK", "Cisco-IOS-XR-ipv4-io-cfg:ipv4-network": { "addresses": { "primary": { "address": "172.16.255.1", "netmask": "255.255.255.255" } } } } ] } }''' # Invoke the decode method to decode the JSON payload to a YDK python object interface_configurations = codec.decode(json_provider, if_json) interface_configurations2 = codec.decode(json_provider, if_json2) interface_configurationsx = codec.decode(xml_provider, if_xmls) # Invoke the encode method to encode the YDK python object to an XML string if_xml = codec.encode(xml_provider, interface_configurations) if_xml2 = codec.encode(xml_provider, interface_configurations2) if_jsons = codec.encode(json_provider, interface_configurationsx) print(if_xml) print("#" * 15)
class SanityYang(unittest.TestCase): @classmethod def setUpClass(self): self.maxDiff = None self.codec = CodecService() self.provider = CodecServiceProvider(type='xml') self._xml_enum_payload_1 = '''<built-in-t xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <enum-value>local</enum-value> </built-in-t> ''' self._json_enum_payload_1 = """{ "ydktest-sanity:built-in-t": { "enum-value": "local" } } """ self._xml_enum_payload_2 = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <ytypes> <built-in-t> <enum-value>local</enum-value> </built-in-t> </ytypes> </runner> ''' self._xml_runner_payload = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <two-list> <ldata> <number>21</number> <name>runner:twolist:ldata[21]:name</name> <subl1> <number>211</number> <name>runner:twolist:ldata[21]:subl1[211]:name</name> </subl1> <subl1> <number>212</number> <name>runner:twolist:ldata[21]:subl1[212]:name</name> </subl1> </ldata> <ldata> <number>22</number> <name>runner:twolist:ldata[22]:name</name> <subl1> <number>221</number> <name>runner:twolist:ldata[22]:subl1[221]:name</name> </subl1> <subl1> <number>222</number> <name>runner:twolist:ldata[22]:subl1[222]:name</name> </subl1> </ldata> </two-list> </runner> ''' self._json_runner_payload = """{ "ydktest-sanity:runner": { "two-list": { "ldata": [ { "number": 21, "name": "runner:twolist:ldata[21]:name", "subl1": [ { "number": 211, "name": "runner:twolist:ldata[21]:subl1[211]:name" }, { "number": 212, "name": "runner:twolist:ldata[21]:subl1[212]:name" } ] }, { "number": 22, "name": "runner:twolist:ldata[22]:name", "subl1": [ { "number": 221, "name": "runner:twolist:ldata[22]:subl1[221]:name" }, { "number": 222, "name": "runner:twolist:ldata[22]:subl1[222]:name" } ] } ] } } } """ self._xml_oc_pattern_payload = '''<oc-A xmlns="http://cisco.com/ns/yang/oc-pattern"> <a>Hello</a> </oc-A> ''' self._json_oc_pattern_payload = """{ "oc-pattern:oc-A": [ { "a": "Hello", "B": { "b": "Hello" } } ] }""" def _get_runner_entity(self): r_1 = ysanity.Runner() e_1, e_2 = ysanity.Runner.TwoList.Ldata(), ysanity.Runner.TwoList.Ldata() e_11, e_12 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1() e_1.number = 21 e_1.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:name' e_11.number = 211 e_11.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_11.number) + ']:name' e_12.number = 212 e_12.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_12.number) + ']:name' e_1.subl1.extend([e_11, e_12]) e_21, e_22 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1() e_2.number = 22 e_2.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:name' e_21.number = 221 e_21.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_21.number) + ']:name' e_22.number = 222 e_22.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_22.number) + ']:name' e_2.subl1.extend([e_21, e_22]) r_1.two_list.ldata.extend([e_1, e_2]) return r_1 def test_xml_encode_1(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._xml_runner_payload, payload) def test_xml_encode_2(self): self.provider.encoding = EncodingFormat.XML from ydk.models.ydktest.ydktest_sanity import YdkEnumTest r_1 = ysanity.Runner.Ytypes.BuiltInT() r_1.enum_value = YdkEnumTest.local payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._xml_enum_payload_1, payload) @assert_with_error("'provider' and 'entity_holder' cannot be None", YPYServiceError) def test_encode_invalid_1(self): self.codec.encode(self.provider, None) @assert_with_error("'provider' and 'entity_holder' cannot be None", YPYServiceError) def test_encode_invalid_2(self): self.codec.encode(None, self._get_runner_entity()) @assert_with_error("'provider' and 'entity_holder' cannot be None", YPYServiceError) def test_encode_invalid_3(self): self.codec.encode(None, None) def test_xml_decode_1(self): self.provider.encoding = EncodingFormat.XML entity = self.codec.decode(self.provider, self._xml_enum_payload_2) self.assertEqual( self._xml_enum_payload_2, self.codec.encode(self.provider, entity)) @assert_with_error("'provider' and 'payload_holder' cannot be None", YPYServiceError) def test_decode_invalid_1(self): self.codec.decode(None, self._xml_enum_payload_2) @assert_with_error("'provider' and 'payload_holder' cannot be None", YPYServiceError) def test_decode_invalid_2(self): self.codec.decode(self.provider, None) @assert_with_error("'provider' and 'payload_holder' cannot be None", YPYServiceError) def test_decode_invalid_3(self): self.codec.decode(None, None) def test_xml_encode_decode(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) entity = self.codec.decode(self.provider, payload) self.assertEqual(r_1, entity) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_xml_encode_decode_dict(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() r_entity = {'ydktest-sanity':r_1} payload = self.codec.encode(self.provider, r_entity) entity = self.codec.decode(self.provider, payload) for module in entity: self.assertEqual(r_entity[module], entity[module]) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_xml_decode_oc_pattern(self): self.provider.encoding = EncodingFormat.XML obj_A = oc_pattern.OcA() obj_A.a = 'Hello' entity = self.codec.decode(self.provider, self._xml_oc_pattern_payload) self.assertEqual(obj_A.a, entity.a) # JSON def test_json_encode_1(self): self.provider.encoding = EncodingFormat.JSON entity = self._get_runner_entity() payload = self.codec.encode(self.provider, entity) self.assertEqual(self._json_runner_payload, payload) def test_json_encode_2(self): self.provider.encoding = EncodingFormat.JSON from ydk.models.ydktest.ydktest_sanity import YdkEnumTest r_1 = ysanity.Runner.Ytypes.BuiltInT() r_1.enum_value = YdkEnumTest.local payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._json_enum_payload_1, payload) def test_json_decode_1(self): self.provider.encoding = EncodingFormat.JSON entity = self.codec.decode(self.provider, self._json_runner_payload) self.assertEqual(self._json_runner_payload, self.codec.encode(self.provider, entity)) def test_json_encode_decode(self): self.provider.encoding = EncodingFormat.JSON runner = self._get_runner_entity() payload = self.codec.encode(self.provider, runner) entity = self.codec.decode(self.provider, payload) self.assertEqual(runner, entity) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_json_encode_decode_dict(self): self.provider.encoding = EncodingFormat.JSON entity = self._get_runner_entity() entity_holder = {'ydktest-sanity': entity} payload_holder = self.codec.encode(self.provider, entity_holder) entities = self.codec.decode(self.provider, payload_holder) for module in entities: self.assertEqual(entities[module], entities[module]) self.assertEqual(payload_holder[module], self.codec.encode(self.provider, entities[module])) @unittest.skip('encodes to "oc-pattern:a": "(!error!)"') def test_json_encode_oc_pattern(self): self.provider.encoding = EncodingFormat.JSON obj_A = oc_pattern.OcA() obj_A.a = 'Hello' obj_A.b.b = 'Hello' self.assertEqual(self.codec.encode(self.provider, obj_A), self._json_oc_pattern_payload) @unittest.skip('YCPPCoreError: YCPPCodecError:Unknown element "oc-A".. Path:') def test_json_decode_oc_pattern(self): self.provider.encoding = EncodingFormat.JSON entity = self.codec.decode(self.provider, self._json_oc_pattern_payload) self.assertEqual(entity.a.get(), 'Hello') self.assertEqual(entity.b.b.get(), 'Hello') def test_xml_subtree(self): self.provider.encoding = EncodingFormat.XML r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1, subtree=True) self.assertEqual(self._xml_runner_payload[:-1], payload) r_2 = self.codec.decode(self.provider, payload, subtree=True) self.assertEqual(r_1, r_2) @assert_with_error("Subtree option can only be used with XML encoding", YPYServiceError) def test_decode_invalid_subtree_1(self): self.provider.encoding = EncodingFormat.JSON self.codec.decode(self.provider, '{"ydktest-sanity:runner": {}}', subtree=True) @assert_with_error("Subtree option can only be used with XML encoding", YPYServiceError) def test_decode_invalid_subtree_2(self): self.provider.encoding = EncodingFormat.JSON self.codec.encode(self.provider, ysanity.Runner(), subtree=True)
class SanityYang(unittest.TestCase): @classmethod def setUpClass(self): self.codec = CodecService() self.provider = CodecServiceProvider(type='xml') self._enum_payload_1 = '''<built-in-t xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <enum-value>local</enum-value> </built-in-t> ''' self._enum_payload_2 = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <ytypes> <built-in-t> <enum-value>local</enum-value> </built-in-t> </ytypes> </runner> ''' self._runner_payload = '''<runner xmlns="http://cisco.com/ns/yang/ydktest-sanity"> <two-list> <ldata> <number>21</number> <name>runner:twolist:ldata[21]:name</name> <subl1> <number>211</number> <name>runner:twolist:ldata[21]:subl1[211]:name</name> </subl1> <subl1> <number>212</number> <name>runner:twolist:ldata[21]:subl1[212]:name</name> </subl1> </ldata> <ldata> <number>22</number> <name>runner:twolist:ldata[22]:name</name> <subl1> <number>221</number> <name>runner:twolist:ldata[22]:subl1[221]:name</name> </subl1> <subl1> <number>222</number> <name>runner:twolist:ldata[22]:subl1[222]:name</name> </subl1> </ldata> </two-list> </runner> ''' self._oc_pattern_payload = '''<oc-A xmlns="http://cisco.com/ns/yang/oc-pattern"> <a>Hello</a> </oc-A> ''' @classmethod def tearDownClass(self): pass def setUp(self): pass def tearDown(self): pass def _get_runner_entity(self): r_1 = ysanity.Runner() e_1, e_2 = ysanity.Runner.TwoList.Ldata(), ysanity.Runner.TwoList.Ldata() e_11, e_12 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1() e_1.number = 21 e_1.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:name' e_11.number = 211 e_11.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_11.number) + ']:name' e_12.number = 212 e_12.name = 'runner:twolist:ldata[' + str(e_1.number) + ']:subl1[' + str(e_12.number) + ']:name' e_1.subl1.extend([e_11, e_12]) e_21, e_22 = ysanity.Runner.TwoList.Ldata.Subl1(), ysanity.Runner.TwoList.Ldata.Subl1() e_2.number = 22 e_2.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:name' e_21.number = 221 e_21.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_21.number) + ']:name' e_22.number = 222 e_22.name = 'runner:twolist:ldata[' + str(e_2.number) + ']:subl1[' + str(e_22.number) + ']:name' e_2.subl1.extend([e_21, e_22]) r_1.two_list.ldata.extend([e_1, e_2]) return r_1 def test_encode_1(self): r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._runner_payload, payload) def test_encode_2(self): from ydk.models.ydktest_sanity import YdkEnumTestEnum r_1 = ysanity.Runner.Ytypes.BuiltInT() r_1.enum_value = YdkEnumTestEnum.LOCAL payload = self.codec.encode(self.provider, r_1) self.assertEqual(self._enum_payload_1, payload) def test_encode_invalid_1(self): try: self.codec.encode(self.provider, None) except YPYServiceError as err: self.assertEqual( err.message, "'encoder' and 'entity' cannot be None") else: raise Exception('YPYServiceError not raised') def test_encode_invalid_2(self): try: self.codec.encode(None, self._get_runner_entity()) except YPYServiceError as e: err = e self.assertEqual( err.message, "'encoder' and 'entity' cannot be None") else: raise Exception('YPYServiceError not raised') def test_encode_invalid_3(self): try: self.codec.encode(None, None) except YPYServiceError as e: err = e self.assertEqual( err.message, "'encoder' and 'entity' cannot be None") else: raise Exception('YPYServiceError not raised') def test_decode_1(self): entity = self.codec.decode(self.provider, self._enum_payload_2) self.assertEqual( self._enum_payload_2, self.codec.encode(self.provider, entity)) def test_decode_invalid_1(self): try: self.codec.decode(None, self._enum_payload_2) except YPYServiceError as e: err = e self.assertEqual( err.message, "'decoder' and 'payload' cannot be None") else: raise Exception('YPYServiceError not raised') def test_decode_invalid_2(self): try: self.codec.decode(self.provider, None) except YPYServiceError as e: err = e self.assertEqual( err.message, "'decoder' and 'payload' cannot be None") else: raise Exception('YPYServiceError not raised') def test_decode_invalid_3(self): try: self.codec.decode(None, None) except YPYServiceError as e: err = e self.assertEqual( err.message, "'decoder' and 'payload' cannot be None") else: raise Exception('YPYServiceError not raised') def test_encode_decode(self): r_1 = self._get_runner_entity() payload = self.codec.encode(self.provider, r_1) entity = self.codec.decode(self.provider, payload) self.assertEqual(is_equal(r_1, entity), True) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_encode_decode_dict(self): r_1 = self._get_runner_entity() r_entity = {'ydktest-sanity':r_1} payload = self.codec.encode(self.provider, r_entity) entity = self.codec.decode(self.provider, payload) for module in entity: self.assertEqual(is_equal(r_entity[module], entity[module]), True) self.assertEqual(payload, self.codec.encode(self.provider, entity)) def test_decode_oc_pattern(self): obj_A = oc_pattern.OcA() obj_A.a = 'Hello' entity = self.codec.decode(self.provider, self._oc_pattern_payload) self.assertEqual(is_equal(obj_A, entity), True)