Example #1
0
def aci_response(result, rawoutput, rest_type='xml'):
    ''' Handle APIC response output '''

    if rest_type == 'json':
        aci_response_json(result, rawoutput)
    else:
        aci_response_xml(result, rawoutput)

    # Use APICs built-in idempotency
    if HAS_URLPARSE:
        result['changed'] = aci_changed(result)
Example #2
0
    def test_empty_response(self):
        self.maxDiffi = None

        if PY2:
            error_text = "Unable to parse output as JSON, see 'raw' output. No JSON object could be decoded"
        else:
            error_text = "Unable to parse output as JSON, see 'raw' output. Expecting value: line 1 column 1 (char 0)"

        expected_json_result = {
            'error_code': -1,
            'error_text': error_text,
            'raw': '',
        }

        json_response = ''
        json_result = dict()
        aci_response_json(json_result, json_response)
        self.assertEqual(expected_json_result, json_result)

        # Python 2.7+ is needed for xmljson
        if sys.version_info < (2, 7):
            return

        elif etree.LXML_VERSION < (3, 3, 0, 0):
            error_text = "Unable to parse output as XML, see 'raw' output. None",
        elif etree.LXML_VERSION < (4, 0, 0, 0):
            error_text = to_native(
                u"Unable to parse output as XML, see 'raw' output. None (line 0)",
                errors='surrogate_or_strict')
        elif PY2:
            error_text = "Unable to parse output as XML, see 'raw' output. Document is empty, line 1, column 1 (line 1)"
        elif sys.version_info >= (3, 7):
            error_text = to_native(
                u"Unable to parse output as XML, see 'raw' output. None (line 0)",
                errors='surrogate_or_strict')
        else:
            error_text = "Unable to parse output as XML, see 'raw' output. Document is empty, line 1, column 1 (<string>, line 1)"

        expected_xml_result = {
            'error_code': -1,
            'error_text': error_text,
            'raw': '',
        }

        xml_response = ''
        xml_result = dict()
        aci_response_xml(xml_result, xml_response)
        self.assertEqual(expected_xml_result, xml_result)
Example #3
0
    def test_invalid_response(self):
        self.maxDiff = None

        if sys.version_info < (2, 7):
            error_text = "Unable to parse output as JSON, see 'raw' output. Expecting object: line 1 column 8 (char 8)"
        elif PY2:
            error_text = "Unable to parse output as JSON, see 'raw' output. No JSON object could be decoded"
        else:
            error_text = "Unable to parse output as JSON, see 'raw' output. Expecting value: line 1 column 9 (char 8)"

        expected_json_result = {
            'error_code': -1,
            'error_text': error_text,
            'raw': '{ "aaa":',
        }

        json_response = '{ "aaa":'
        json_result = dict()
        aci_response_json(json_result, json_response)
        self.assertEqual(expected_json_result, json_result)

        # Python 2.7+ is needed for xmljson
        if sys.version_info < (2, 7):
            return

        elif etree.LXML_VERSION < (3, 3, 0, 0):
            error_text = "Unable to parse output as XML, see 'raw' output. Couldn't find end of Start Tag aaa line 1, line 1, column 5"  # NOQA

        elif PY2:
            error_text = "Unable to parse output as XML, see 'raw' output. Couldn't find end of Start Tag aaa line 1, line 1, column 6 (line 1)"  # NOQA

        else:
            error_text = "Unable to parse output as XML, see 'raw' output. Couldn't find end of Start Tag aaa line 1, line 1, column 6 (<string>, line 1)"  # NOQA

        expected_xml_result = {
            'error_code': -1,
            'error_text': error_text,
            'raw': '<aaa ',
        }

        xml_response = '<aaa '
        xml_result = dict()
        aci_response_xml(xml_result, xml_response)
        self.assertEqual(expected_xml_result, xml_result)
Example #4
0
    def test_invalid_aci_login(self):
        self.maxDiff = None

        expected_result = {
            'error_code':
            '401',
            'error_text':
            'Username or password is incorrect - FAILED local authentication',
            'imdata': [{
                'error': {
                    'attributes': {
                        'code':
                        '401',
                        'text':
                        'Username or password is incorrect - FAILED local authentication',
                    },
                },
            }],
            'totalCount':
            '1',
        }

        json_response = '{"totalCount":"1","imdata":[{"error":{"attributes":{"code":"401","text":"Username or password is incorrect - FAILED local authentication"}}}]}'  # NOQA
        json_result = dict()
        aci_response_json(json_result, json_response)
        self.assertEqual(expected_result, json_result)

        # Python 2.7+ is needed for xmljson
        if sys.version_info < (2, 7):
            return

        xml_response = '''<?xml version="1.0" encoding="UTF-8"?><imdata totalCount="1">
        <error code="401" text="Username or password is incorrect - FAILED local authentication"/>
        </imdata>
        '''
        xml_result = dict()
        aci_response_xml(xml_result, xml_response)
        self.assertEqual(json_result, xml_result)
Example #5
0
    def test_valid_aci_login(self):
        self.maxDiff = None

        expected_result = {
            'error_code':
            0,
            'error_text':
            'Success',
            'imdata': [{
                'aaaLogin': {
                    'attributes': {
                        'token':
                        'ZldYAsoO9d0FfAQM8xaEVWvQPSOYwpnqzhwpIC1r4MaToknJjlIuAt9+TvXqrZ8lWYIGPj6VnZkWiS8nJfaiaX/AyrdD35jsSxiP3zydh+849xym7ALCw/fFNsc7b5ik1HaMuSUtdrN8fmCEUy7Pq/QNpGEqkE8m7HaxAuHpmvXgtdW1bA+KKJu2zY1c/tem',  # NOQA
                        'siteFingerprint': 'NdxD72K/uXaUK0wn',
                        'refreshTimeoutSeconds': '600',
                        'maximumLifetimeSeconds': '86400',
                        'guiIdleTimeoutSeconds': '1200',
                        'restTimeoutSeconds': '90',
                        'creationTime': '1500134817',
                        'firstLoginTime': '1500134817',
                        'userName': '******',
                        'remoteUser': '******',
                        'unixUserId': '15374',
                        'sessionId': 'o7hObsqNTfCmDGcZI5c4ng==',
                        'lastName': '',
                        'firstName': '',
                        'version': '2.0(2f)',
                        'buildTime': 'Sat Aug 20 23:07:07 PDT 2016',
                        'node': 'topology/pod-1/node-1',
                    },
                    'children': [{
                        'aaaUserDomain': {
                            'attributes': {
                                'name': 'all',
                                'rolesR': 'admin',
                                'rolesW': 'admin',
                            },
                            'children': [{
                                'aaaReadRoles': {
                                    'attributes': {},
                                },
                            }, {
                                'aaaWriteRoles': {
                                    'attributes': {},
                                    'children': [{
                                        'role': {
                                            'attributes': {
                                                'name': 'admin',
                                            },
                                        },
                                    }],
                                },
                            }],
                        },
                    }, {
                        'DnDomainMapEntry': {
                            'attributes': {
                                'dn': 'uni/tn-common',
                                'readPrivileges': 'admin',
                                'writePrivileges': 'admin',
                            },
                        },
                    }, {
                        'DnDomainMapEntry': {
                            'attributes': {
                                'dn': 'uni/tn-infra',
                                'readPrivileges': 'admin',
                                'writePrivileges': 'admin',
                            },
                        },
                    }, {
                        'DnDomainMapEntry': {
                            'attributes': {
                                'dn': 'uni/tn-mgmt',
                                'readPrivileges': 'admin',
                                'writePrivileges': 'admin',
                            },
                        },
                    }],
                },
            }],
            'totalCount':
            '1',
        }

        json_response = '{"totalCount":"1","imdata":[{"aaaLogin":{"attributes":{"token":"ZldYAsoO9d0FfAQM8xaEVWvQPSOYwpnqzhwpIC1r4MaToknJjlIuAt9+TvXqrZ8lWYIGPj6VnZkWiS8nJfaiaX/AyrdD35jsSxiP3zydh+849xym7ALCw/fFNsc7b5ik1HaMuSUtdrN8fmCEUy7Pq/QNpGEqkE8m7HaxAuHpmvXgtdW1bA+KKJu2zY1c/tem","siteFingerprint":"NdxD72K/uXaUK0wn","refreshTimeoutSeconds":"600","maximumLifetimeSeconds":"86400","guiIdleTimeoutSeconds":"1200","restTimeoutSeconds":"90","creationTime":"1500134817","firstLoginTime":"1500134817","userName":"******","remoteUser":"******","unixUserId":"15374","sessionId":"o7hObsqNTfCmDGcZI5c4ng==","lastName":"","firstName":"","version":"2.0(2f)","buildTime":"Sat Aug 20 23:07:07 PDT 2016","node":"topology/pod-1/node-1"},"children":[{"aaaUserDomain":{"attributes":{"name":"all","rolesR":"admin","rolesW":"admin"},"children":[{"aaaReadRoles":{"attributes":{}}},{"aaaWriteRoles":{"attributes":{},"children":[{"role":{"attributes":{"name":"admin"}}}]}}]}},{"DnDomainMapEntry":{"attributes":{"dn":"uni/tn-common","readPrivileges":"admin","writePrivileges":"admin"}}},{"DnDomainMapEntry":{"attributes":{"dn":"uni/tn-infra","readPrivileges":"admin","writePrivileges":"admin"}}},{"DnDomainMapEntry":{"attributes":{"dn":"uni/tn-mgmt","readPrivileges":"admin","writePrivileges":"admin"}}}]}}]}'  # NOQA
        json_result = dict()
        aci_response_json(json_result, json_response)
        self.assertEqual(expected_result, json_result)

        # Python 2.7+ is needed for xmljson
        if sys.version_info < (2, 7):
            return

        xml_response = '<?xml version="1.0" encoding="UTF-8"?><imdata totalCount="1">\n<aaaLogin token="ZldYAsoO9d0FfAQM8xaEVWvQPSOYwpnqzhwpIC1r4MaToknJjlIuAt9+TvXqrZ8lWYIGPj6VnZkWiS8nJfaiaX/AyrdD35jsSxiP3zydh+849xym7ALCw/fFNsc7b5ik1HaMuSUtdrN8fmCEUy7Pq/QNpGEqkE8m7HaxAuHpmvXgtdW1bA+KKJu2zY1c/tem" siteFingerprint="NdxD72K/uXaUK0wn" refreshTimeoutSeconds="600" maximumLifetimeSeconds="86400" guiIdleTimeoutSeconds="1200" restTimeoutSeconds="90" creationTime="1500134817" firstLoginTime="1500134817" userName="******" remoteUser="******" unixUserId="15374" sessionId="o7hObsqNTfCmDGcZI5c4ng==" lastName="" firstName="" version="2.0(2f)" buildTime="Sat Aug 20 23:07:07 PDT 2016" node="topology/pod-1/node-1">\n<aaaUserDomain name="all" rolesR="admin" rolesW="admin">\n<aaaReadRoles/>\n<aaaWriteRoles>\n<role name="admin"/>\n</aaaWriteRoles>\n</aaaUserDomain>\n<DnDomainMapEntry dn="uni/tn-common" readPrivileges="admin" writePrivileges="admin"/>\n<DnDomainMapEntry dn="uni/tn-infra" readPrivileges="admin" writePrivileges="admin"/>\n<DnDomainMapEntry dn="uni/tn-mgmt" readPrivileges="admin" writePrivileges="admin"/>\n</aaaLogin></imdata>\n' ''  # NOQA
        xml_result = dict()
        aci_response_xml(xml_result, xml_response)
        self.assertEqual(json_result, xml_result)