def test_conversion_CONFD_XML_to_JSON_convert_error_2(self): self.maxDiff = None xml = _collapse_string(''' <?xml version="1.0" encoding="UTF-8"?> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:b5b5fd30-8eeb-11e5-8001-fa163e05ddfa" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><rpc-error> <error-type>application</error-type> <error-tag>data-missing</error-tag> <error-severity>error</error-severity> <error-app-tag>instance-required</error-app-tag> <error-path xmlns:rw-mc="http://riftio.com/ns/riftware-1.0/rw-mc"> /rpc/edit-config/config/rw-mc:network-pool/rw-mc:pool[rw-mc:name='n1']/rw-mc:cloud-account </error-path> <error-message xml:lang="en">illegal reference /network-pool/pool[name='n1']/cloud-account</error-message> <error-info xmlns:tailf="http://tail-f.com/ns/netconf/params/1.1" xmlns:rw-mc="http://riftio.com/ns/riftware-1.0/rw-mc"> <tailf:bad-keyref> <tailf:bad-element>/rw-mc:network-pool/rw-mc:pool[rw-mc:name='n1']/rw-mc:cloud-account</tailf:bad-element> <tailf:missing-element>/rw-mc:cloud/rw-mc:account[rw-mc:name='c1']</tailf:missing-element> </tailf:bad-keyref> </error-info> </rpc-error> </rpc-reply> ''') expected_json = _collapse_string(''' {"rpc-reply" : {"rpc-error" : {"error-type" : "application","error-tag" : "data-missing","error-severity" : "error","error-app-tag" : "instance-required","error-path" : "/rpc/edit-config/config/rw-mc:network-pool/rw-mc:pool[rw-mc:name='n1']/rw-mc:cloud-account","error-message" : "illegal reference /network-pool/pool[name='n1']/cloud-account","error-info" : {"bad-keyref" : {"bad-element" : "/rw-mc:network-pool/rw-mc:pool[rw-mc:name='n1']/rw-mc:cloud-account","missing-element" : "/rw-mc:cloud/rw-mc:account[rw-mc:name='c1']"}}}}} ''') actual_json = naive_xml_to_json(bytes(xml, "utf-8")) actual = _ordered(json.loads(actual_json)) expected = _ordered(json.loads(expected_json)) self.assertEquals(actual, expected)
def test_conversion_CONFD_XML_to_JSON_convert_error_1(self): self.maxDiff = None xml = _collapse_string(''' <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:2bdd6476-92d4-11e5-86ca-fa163e622f12" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <rpc-error> <error-type>application</error-type> <error-tag>data-missing</error-tag> <error-severity>error</error-severity> <error-path xmlns:rw-mc="http://riftio.com/ns/riftware-1.0/rw-mc" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> /nc:rpc/nc:edit-config/nc:config/rw-mc:cloud/rw-mc:account[rw-mc:name=\'cloudname\'] </error-path> <error-info> <bad-element>account</bad-element> </error-info> </rpc-error> </rpc-reply> ''') expected_json = _collapse_string(''' {"rpc-reply" : {"rpc-error" : {"error-type" : "application","error-tag" : "data-missing","error-severity" : "error","error-path" : "/nc:rpc/nc:edit-config/nc:config/rw-mc:cloud/rw-mc:account[rw-mc:name='cloudname']","error-info" : {"bad-element" : "account"}}}} ''') actual_json = naive_xml_to_json(bytes(xml, "utf-8")) actual = _ordered(json.loads(actual_json)) expected = _ordered(json.loads(expected_json)) self.assertEquals(actual, expected)
def test_conversion_rpc_to_json_output(self): self.maxDiff = None url = "/api/operations/ping" xml = _collapse_string( """ <?xml version="1.0" encoding="UTF-8"?> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:0ba69bd8-938c-11e5-a933-fa163e622f12" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <out xmlns='http://riftio.com/ns/riftware-1.0/rw-restconf'>true</out> </rpc-reply> """ ) expected_json = _collapse_string( """ {"output": {"out": "true"}} """ ) intermediate_json = naive_xml_to_json(bytes(xml, "utf-8")) actual_json = convert_rpc_to_json_output(intermediate_json) actual = _ordered(json.loads(actual_json)) expected = _ordered(json.loads(expected_json)) self.assertEqual(actual, expected)
def test_conversion_CONFD_XML_to_JSON_convert_error_1(self): self.maxDiff = None xml = _collapse_string( """ <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:2bdd6476-92d4-11e5-86ca-fa163e622f12" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <rpc-error> <error-type>application</error-type> <error-tag>data-missing</error-tag> <error-severity>error</error-severity> <error-path xmlns:rw-mc="http://riftio.com/ns/riftware-1.0/rw-mc" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> /nc:rpc/nc:edit-config/nc:config/rw-mc:cloud/rw-mc:account[rw-mc:name=\'cloudname\'] </error-path> <error-info> <bad-element>account</bad-element> </error-info> </rpc-error> </rpc-reply> """ ) expected_json = _collapse_string( """ {"rpc-reply" : {"rpc-error" : {"error-type" : "application","error-tag" : "data-missing","error-severity" : "error","error-path" : "/nc:rpc/nc:edit-config/nc:config/rw-mc:cloud/rw-mc:account[rw-mc:name='cloudname']","error-info" : {"bad-element" : "account"}}}} """ ) actual_json = naive_xml_to_json(bytes(xml, "utf-8")) actual = _ordered(json.loads(actual_json)) expected = _ordered(json.loads(expected_json)) self.assertEquals(actual, expected)
def test_conversion_CONFD_XML_to_JSON_convert_error_2(self): self.maxDiff = None xml = _collapse_string(''' <?xml version="1.0" encoding="UTF-8"?> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:b5b5fd30-8eeb-11e5-8001-fa163e05ddfa" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><rpc-error> <error-type>application</error-type> <error-tag>data-missing</error-tag> <error-severity>error</error-severity> <error-app-tag>instance-required</error-app-tag> <error-path xmlns:rw-mc="http://riftio.com/ns/riftware-1.0/rw-mc"> /rpc/edit-config/config/rw-mc:network-pool/rw-mc:pool[rw-mc:name='n1']/rw-mc:cloud-account </error-path> <error-message xml:lang="en">illegal reference /network-pool/pool[name='n1']/cloud-account</error-message> <error-info xmlns:tailf="http://tail-f.com/ns/netconf/params/1.1" xmlns:rw-mc="http://riftio.com/ns/riftware-1.0/rw-mc"> <tailf:bad-keyref> <tailf:bad-element>/rw-mc:network-pool/rw-mc:pool[rw-mc:name='n1']/rw-mc:cloud-account</tailf:bad-element> <tailf:missing-element>/rw-mc:cloud/rw-mc:account[rw-mc:name='c1']</tailf:missing-element> </tailf:bad-keyref> </error-info> </rpc-error> </rpc-reply> ''') expected_json = _collapse_string(''' {"rpc-reply" : {"rpc-error" : {"error-type" : "application","error-tag" : "data-missing","error-severity" : "error","error-app-tag" : "instance-required","error-path" : "/rpc/edit-config/config/rw-mc:network-pool/rw-mc:pool[rw-mc:name='n1']/rw-mc:cloud-account","error-message" : "illegal reference /network-pool/pool[name='n1']/cloud-account","error-info" : {"bad-keyref" : {"bad-element" : "/rw-mc:network-pool/rw-mc:pool[rw-mc:name='n1']/rw-mc:cloud-account","missing-element" : "/rw-mc:cloud/rw-mc:account[rw-mc:name='c1']"}}}}} ''') actual_json = naive_xml_to_json(bytes(xml,"utf-8")) actual = _ordered(json.loads(actual_json)) expected = _ordered(json.loads(expected_json)) self.assertEquals(actual, expected)
def test_conversion_CONFD_XML_to_JSON_convert_error_3(self): self.maxDiff = None xml = _collapse_string(''' <?xml version="1.0" encoding="UTF-8"?> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:ab56ec5e-92e3-11e5-83c5-fa163e622f12" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <ok/> </rpc-reply> ''') expected_json = _collapse_string(''' {"rpc-reply" : {"ok" : ""}} ''') actual_json = naive_xml_to_json(bytes(xml, "utf-8")) actual = _ordered(json.loads(actual_json)) expected = _ordered(json.loads(expected_json)) self.assertEquals(actual, expected)
def test_conversion_CONFD_XML_to_JSON_convert_error_3(self): self.maxDiff = None xml = _collapse_string(''' <?xml version="1.0" encoding="UTF-8"?> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:ab56ec5e-92e3-11e5-83c5-fa163e622f12" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <ok/> </rpc-reply> ''') expected_json = _collapse_string(''' {"rpc-reply" : {"ok" : ""}} ''') actual_json = naive_xml_to_json(bytes(xml,"utf-8")) actual = _ordered(json.loads(actual_json)) expected = _ordered(json.loads(expected_json)) self.assertEquals(actual, expected)
def test_conversion_rpc_to_json_output(self): self.maxDiff = None url = "/api/operations/ping" xml = _collapse_string(''' <?xml version="1.0" encoding="UTF-8"?> <rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:0ba69bd8-938c-11e5-a933-fa163e622f12" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"> <out xmlns='http://riftio.com/ns/riftware-1.0/rw-restconf'>true</out> </rpc-reply> ''') expected_json = _collapse_string(''' {"output": {"out": "true"}} ''') intermediate_json = naive_xml_to_json(bytes(xml, "utf-8")) actual_json = convert_rpc_to_json_output(intermediate_json) actual = _ordered(json.loads(actual_json)) expected = _ordered(json.loads(expected_json)) self.assertEqual(actual, expected)