Java tutorial
/* * 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 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 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 com.google.common.io.CharSource; public class OpenConfigDeviceDiscoveryTest { @Test public void testToPortDescription() throws ConfigurationException, IOException { // CHECKSTYLE:OFF String input = "<data>\n" + "<components xmlns=\"http://openconfig.net/yang/platform\">\n" + "\n" + " <component>\n" + " <name>TPC_1_1_4_N2_200G</name>\n" + " <config>\n" + " <name>TPC_1_1_4_N2_200G</name>\n" + " </config>\n" + " <state>\n" + " <name>TPC_1_1_4_N2_200G</name>\n" + " <type xmlns:oc-platform-types=\"http://openconfig.net/yang/platform-types\">oc-platform-types:LINECARD</type>\n" + " </state>\n" + " </component>\n" + "\n" + " <component>\n" + " <name>CLIPORT_1_1_4_1</name>\n" + " <config>\n" + " <name>CLIPORT_1_1_4_1</name>\n" + " </config>\n" + " <state>\n" + " <name>CLIPORT_1_1_4_1</name>\n" + " <type xmlns:oc-platform-types=\"http://openconfig.net/yang/platform-types\">oc-platform-types:PORT</type>\n" + " </state>\n" + " </component>\n" + "\n" + " <component>\n" + " <name>LINEPORT_1_1_4</name>\n" + " <config>\n" + " <name>LINEPORT_1_1_4</name>\n" + " </config>\n" + " <state>\n" + " <name>LINEPORT_1_1_4</name>\n" + " <type xmlns:oc-platform-types=\"http://openconfig.net/yang/platform-types\">oc-platform-types:PORT</type>\n" + " </state>\n" + " </component>\n" + "\n" + " <component>\n" + " <name>TRANSCEIVER_1_1_4_1</name>\n" + " <config>\n" + " <name>TRANSCEIVER_1_1_4_1</name> \n" + " </config>\n" + " <state>\n" + " <name>TRANSCEIVER_1_1_4_1</name>\n" + " <type xmlns:oc-platform-types=\"http://openconfig.net/yang/platform-types\">oc-platform-types:TRANSCEIVER</type>\n" + " </state>\n" + " <properties>\n" + " <property>\n" + " <name>onos-index</name>\n" + " <config>\n" + " <name>onos-index</name>\n" + " <value>42</value>\n" + " </config>\n" + " </property>\n" + " </properties>\n" + " <transceiver xmlns=\"http://openconfig.net/yang/platform/transceiver\">\n" + " <config>\n" + " <enabled>true</enabled>\n" + " <form-factor-preconf xmlns:oc-opt-types=\"http://openconfig.net/yang/transport-types\">oc-opt-types:QSFP28</form-factor-preconf>\n" + " <ethernet-pmd-preconf xmlns:oc-opt-types=\"http://openconfig.net/yang/transport-types\">oc-opt-types:ETH_100GBASE_LR4</ethernet-pmd-preconf>\n" + " </config>\n" + " <state>\n" + " <enabled>true</enabled>\n" + " <form-factor-preconf xmlns:oc-opt-types=\"http://openconfig.net/yang/transport-types\">oc-opt-types:QSFP28</form-factor-preconf>\n" + " <ethernet-pmd-preconf xmlns:oc-opt-types=\"http://openconfig.net/yang/transport-types\">oc-opt-types:ETH_100GBASE_LR4</ethernet-pmd-preconf>\n" + " </state>\n" + " </transceiver>\n" + " </component>\n" + "\n" + " <component>\n" + " <name>OPTCHANNEL_1_1_4</name>\n" + " <config>\n" + " <name>OPTCHANNEL_1_1_4</name>\n" + " </config>\n" + " <state>\n" + " <name>OPTCHANNEL_1_1_4</name>\n" + " <type xmlns:oc-opt-types=\"http://openconfig.net/yang/transport-types\">oc-opt-types:OPTICAL_CHANNEL</type>\n" + " </state>\n" + " <optical-channel xmlns=\"http://openconfig.net/yang/terminal-device\">\n" + " <config>\n" + " <frequency>191500000</frequency>\n" + " <target-output-power>0.0</target-output-power>\n" + " </config>\n" + " <state>\n" + " <frequency>191500000</frequency>\n" + " <target-output-power>0.0</target-output-power>\n" + " </state>\n" + " </optical-channel>\n" + " </component>\n" + "\n" + "</components>\n" + "</data>"; // CHECKSTYLE:ON OpenConfigDeviceDiscovery sut = new OpenConfigDeviceDiscovery(); XMLConfiguration cfg = new XMLConfiguration(); cfg.load(CharSource.wrap(input).openStream()); List<PortDescription> ports = sut.discoverPorts(cfg); assertThat(ports, hasSize(1)); PortDescription portDescription = ports.get(0); assertThat(portDescription.portNumber().toLong(), is(42L)); assertThat(portDescription.portNumber().name(), is("TRANSCEIVER_1_1_4_1")); assertThat(portDescription.annotations().value(OC_NAME), is("TRANSCEIVER_1_1_4_1")); assertThat(portDescription.annotations().value(OC_TYPE), is("oc-platform-types:TRANSCEIVER")); } }