import jsonschema from inventory_provider import juniper def test_interface_list(netconf_doc): schema = { "$schema": "http://json-schema.org/draft-07/schema#", "type": "array", "items": { "type": "object", "properties": { "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 } } interfaces = list(juniper.list_interfaces(netconf_doc)) jsonschema.validate(interfaces, schema) assert interfaces # at least shouldn't be empty def test_bgp_peering_data(netconf_doc): schema = { "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { "instance-peering": { "type": "object", "properties": { "instance": {"type": "string"}, "group": {"type": "string"}, "description": {"type": "string"}, "address": {"type": "string"}, "remote-asn": {"type": "integer"}, "local-asn": {"type": "integer"} }, # description and-or local-asn is not always present, # just based on empirical tests - not a problem "required": ["instance", "group", "address", "remote-asn"], "additionalProperties": False }, "logical-system-peering": { "type": "object", "properties": { "logical-system": {"type": "string"}, "group": {"type": "string"}, "description": {"type": "string"}, "address": {"type": "string"}, "remote-asn": {"type": "integer"}, "local-asn": {"type": "integer"} }, # local/remote-asn and/or description are not always present, # just based on empirical tests - not a problem "required": ["logical-system", "group", "address"], "additionalProperties": False }, "peering": { "oneOf": [ {"$ref": "#/definitions/instance-peering"}, {"$ref": "#/definitions/logical-system-peering"} ] } }, "type": "array", "items": {"$ref": "#/definitions/peering"} } peerings = list(juniper.all_bgp_peers(netconf_doc)) jsonschema.validate(peerings, schema) assert peerings # there's always at least one def test_snmp_community_string(mocked_netifaces, netconf_doc): assert juniper.snmp_community_string(netconf_doc) == '0pBiFbD' def test_interface_addresses_list(netconf_doc): schema = { "$schema": "http://json-schema.org/draft-07/schema#", "definitions": { "v4a": { "type": "string", "pattern": r'^(\d+\.){3}\d+$' }, "v6a": { "type": "string", "pattern": r'^([a-f\d]{4}:){7}[a-f\d]{4}$' }, "v4i": { "type": "string", "pattern": r'^(\d+\.){3}\d+/\d+$' }, "v6i": { "type": "string", "pattern": r'^[a-f\d:]+/\d+$' } }, "type": "array", "items": { "type": "object", "properties": { "name": { "oneOf": [ {"$ref": "#/definitions/v4a"}, {"$ref": "#/definitions/v6a"} ] }, "interface address": { "oneOf": [ {"$ref": "#/definitions/v4i"}, {"$ref": "#/definitions/v6i"} ] }, "interface name": {"type": "string"}, }, "required": ["name", "interface address", "interface name"], "additionalProperties": False } } addresses = list(juniper.interface_addresses(netconf_doc)) jsonschema.validate(addresses, schema)