| /* |
| * Copyright 2018-present Open Networking Foundation |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package org.onosproject.drivers.odtn; |
| |
| import com.google.common.io.CharSource; |
| import java.io.IOException; |
| import java.util.List; |
| import org.apache.commons.configuration.ConfigurationException; |
| import org.apache.commons.configuration.XMLConfiguration; |
| import org.junit.Test; |
| import org.onosproject.net.device.PortDescription; |
| import org.onosproject.odtn.behaviour.OdtnDeviceDescriptionDiscovery; |
| |
| import static org.hamcrest.Matchers.hasSize; |
| import static org.hamcrest.Matchers.is; |
| import static org.junit.Assert.assertThat; |
| import static org.onosproject.odtn.behaviour.OdtnDeviceDescriptionDiscovery.OC_NAME; |
| import static org.onosproject.odtn.behaviour.OdtnDeviceDescriptionDiscovery.OC_TYPE; |
| import static org.onosproject.odtn.utils.tapi.TapiObjectHandler.ODTN_PORT_TYPE; |
| |
| public class InfineraOpenConfigDeviceDiscoveryTest { |
| |
| @Test |
| public void testToPortDescription() throws ConfigurationException, IOException { |
| // CHECKSTYLE:OFF |
| String input = |
| "<data>\n" + |
| " <interfaces xmlns=\"http://openconfig.net/yang/interfaces\">\n" + |
| " <interface>\n" + |
| " <name>CARRIERCTP.1-L1-1</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>CARRIERCTP.1-L1-1</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>CARRIERCTP.1-L1-2</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>CARRIERCTP.1-L1-2</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>CARRIERCTP.1-L1-3</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>CARRIERCTP.1-L1-3</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>CARRIERCTP.1-L1-4</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>CARRIERCTP.1-L1-4</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>CARRIERCTP.1-L1-5</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>CARRIERCTP.1-L1-5</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>CARRIERCTP.1-L1-6</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>CARRIERCTP.1-L1-6</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>GIGECLIENTCTP.1-A-2-T1</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>GIGECLIENTCTP.1-A-2-T1</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>GIGECLIENTCTP.1-A-2-T2</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>GIGECLIENTCTP.1-A-2-T2</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>GIGECLIENTCTP.1-L1-1-1</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>GIGECLIENTCTP.1-L1-1-1</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>GIGECLIENTCTP.1-L2-1-1</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>GIGECLIENTCTP.1-L2-1-1</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>NCTGIGE.1-NCT-1</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:ethernetCsmacd</type>\n" + |
| " <name>NCTGIGE.1-NCT-1</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>NCTGIGE.1-NCT-2</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:ethernetCsmacd</type>\n" + |
| " <name>NCTGIGE.1-NCT-2</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>OCHCTP.1-L1-1</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>OCHCTP.1-L1-1</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>SCHCTP.1-L1-1</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>SCHCTP.1-L1-1</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>TRIBPTP.1-A-2-T1</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>TRIBPTP.1-A-2-T1</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>TRIBPTP.1-A-2-T2</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>TRIBPTP.1-A-2-T2</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " <interface>\n" + |
| " <name>XTSCGPTP.1-L1</name>\n" + |
| " <config>\n" + |
| " <type xmlns:ianaift=\"urn:ietf:params:xml:ns:yang:iana-if-type\">ianaift:opticalTransport</type>\n" + |
| " <name>XTSCGPTP.1-L1</name>\n" + |
| " <description/>\n" + |
| " <enabled>true</enabled>\n" + |
| " </config>\n" + |
| " </interface>\n" + |
| " </interfaces>\n" + |
| "</data>\n"; |
| // CHECKSTYLE:ON |
| |
| InfineraOpenConfigDeviceDiscovery sut = new InfineraOpenConfigDeviceDiscovery(); |
| |
| XMLConfiguration cfg = new XMLConfiguration(); |
| cfg.load(CharSource.wrap(input).openStream()); |
| |
| List<PortDescription> ports = sut.discoverPorts(cfg); |
| |
| assertThat(ports, hasSize(4)); |
| |
| PortDescription portDescription; |
| portDescription = ports.get(0); |
| assertThat(portDescription.portNumber().toLong(), is(1L)); |
| assertThat(portDescription.portNumber().name(), is("GIGECLIENTCTP.1-A-2-T1")); |
| assertThat(portDescription.annotations().value(OC_NAME), is("GIGECLIENTCTP.1-A-2-T1")); |
| assertThat(portDescription.annotations().value(OC_TYPE), is("GIGECLIENTCTP.1-A-2-T1")); |
| assertThat(portDescription.annotations().value(ODTN_PORT_TYPE), |
| is(OdtnDeviceDescriptionDiscovery.OdtnPortType.CLIENT.value())); |
| |
| portDescription = ports.get(3); |
| assertThat(portDescription.portNumber().toLong(), is(102L)); |
| assertThat(portDescription.portNumber().name(), is("GIGECLIENTCTP.1-L2-1-1")); |
| assertThat(portDescription.annotations().value(OC_NAME), is("GIGECLIENTCTP.1-L2-1-1")); |
| assertThat(portDescription.annotations().value(OC_TYPE), is("GIGECLIENTCTP.1-L2-1-1")); |
| assertThat(portDescription.annotations().value(ODTN_PORT_TYPE), |
| is(OdtnDeviceDescriptionDiscovery.OdtnPortType.LINE.value())); |
| } |
| } |