Skip to content
Snippets Groups Projects
test_general_routes.py 1.87 KiB
import json
import jsonschema

from inventory_provider.routes import common
from inventory_provider.routes.default import VERSION_SCHEMA

DEFAULT_REQUEST_HEADERS = {
    'Content-type': 'application/json',
    'Accept': ['application/json']
}


def test_version_request(client, mocked_redis):

    rv = client.post(
        'version',
        headers=DEFAULT_REQUEST_HEADERS)
    assert rv.status_code == 200
    jsonschema.validate(
        json.loads(rv.data.decode('utf-8')),
        VERSION_SCHEMA)


def test_load_json_docs(data_config, mocked_redis):

    INTERFACE_SCHEMA = {
        '$schema': 'http://json-schema.org/draft-07/schema#',

        'definitions': {
            'interface': {
                'type': 'object',
                'properties': {
                    'logical-system': {'type': 'string'},
                    'name': {'type': 'string'},
                    'description': {'type': 'string'},
                    'bundle': {
                        'type': 'array',
                        'items': {'type': 'string'}
                    },
                    'ipv4': {
                        'type': 'array',
                        'items': {'type': 'string'}
                    },
                    'ipv6': {
                        'type': 'array',
                        'items': {'type': 'string'}
                    }
                },
                'required': ['name', 'description', 'ipv4', 'ipv6'],
                'additionalProperties': False
            }
        },

        'type': 'object',
        'properties': {
            'key': {'type': 'string'},
            'value': {'$ref': '#/definitions/interface'}
        },
        'required': ['key', 'value'],
        'additionalProperties': False
    }

    for ifc in common.load_json_docs(
            data_config, 'netconf-interfaces:*', num_threads=20):
        jsonschema.validate(ifc, INTERFACE_SCHEMA)