Ejemplo n.º 1
0
    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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
 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)
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
    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)
Ejemplo n.º 6
0
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))
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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
Ejemplo n.º 9
0
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)
Ejemplo n.º 10
0
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')
Ejemplo n.º 12
0
# 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))

Ejemplo n.º 13
0
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))
Ejemplo n.º 14
0
          "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()
Ejemplo n.º 15
0
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))
Ejemplo n.º 16
0
        "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)
Ejemplo n.º 17
0
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)
Ejemplo n.º 18
0
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)
Ejemplo n.º 19
0
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)