/* * Copyright 2016-present Open Networking Laboratory * * 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.ui.model.topo; import org.junit.Test; import org.onlab.packet.MacAddress; import org.onosproject.net.ConnectPoint; import org.onosproject.net.DefaultLink; import org.onosproject.net.DeviceId; import org.onosproject.net.HostId; import org.onosproject.net.Link; import org.onosproject.net.LinkKey; import org.onosproject.net.PortNumber; import org.onosproject.net.provider.ProviderId; import org.onosproject.net.region.RegionId; import org.onosproject.ui.model.AbstractUiModelTest; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.onosproject.net.DeviceId.deviceId; import static org.onosproject.net.HostId.hostId; import static org.onosproject.net.PortNumber.P0; import static org.onosproject.net.PortNumber.portNumber; /** * Unit tests for {@link UiLinkId}. */ public class UiLinkIdTest extends AbstractUiModelTest { private static final RegionId REG_1 = RegionId.regionId("Region-1"); private static final RegionId REG_2 = RegionId.regionId("Region-2"); private static final MacAddress MAC_A = MacAddress.valueOf(0x123456L); private static final HostId HOST_A = hostId(MAC_A); private static final DeviceId DEV_X = deviceId("device-X"); private static final DeviceId DEV_Y = deviceId("device-Y"); private static final PortNumber P1 = portNumber(1); private static final PortNumber P2 = portNumber(2); private static final PortNumber P3 = portNumber(3); private static final ConnectPoint CP_X1 = new ConnectPoint(DEV_X, P1); private static final ConnectPoint CP_Y2 = new ConnectPoint(DEV_Y, P2); private static final ConnectPoint CP_Y3 = new ConnectPoint(DEV_Y, P3); private static final ConnectPoint CP_HA = new ConnectPoint(HOST_A, P0); private static final Link LINK_X1_TO_Y2 = DefaultLink.builder() .providerId(ProviderId.NONE) .src(CP_X1) .dst(CP_Y2) .type(Link.Type.DIRECT) .build(); private static final Link LINK_Y2_TO_X1 = DefaultLink.builder() .providerId(ProviderId.NONE) .src(CP_Y2) .dst(CP_X1) .type(Link.Type.DIRECT) .build(); private static final Link LINK_X1_TO_Y3 = DefaultLink.builder() .providerId(ProviderId.NONE) .src(CP_X1) .dst(CP_Y3) .type(Link.Type.DIRECT) .build(); private static final Link LINK_HA_TO_X1 = DefaultLink.builder() .providerId(ProviderId.NONE) .src(CP_HA) .dst(CP_X1) .type(Link.Type.EDGE) .build(); @Test public void canonical() { title("canonical"); UiLinkId one = UiLinkId.uiLinkId(LINK_X1_TO_Y2); UiLinkId two = UiLinkId.uiLinkId(LINK_Y2_TO_X1); print("link one: %s", one); print("link two: %s", two); assertEquals("not equiv", one, two); } @Test public void sameDevsDiffPorts() { title("sameDevsDiffPorts"); UiLinkId one = UiLinkId.uiLinkId(LINK_X1_TO_Y2); UiLinkId other = UiLinkId.uiLinkId(LINK_X1_TO_Y3); print("link one: %s", one); print("link other: %s", other); assertNotEquals("equiv?", one, other); } @Test public void edgeLink() { title("edgeLink"); UiLinkId id = UiLinkId.uiLinkId(LINK_HA_TO_X1); print("link: %s", id); assertEquals("wrong port A", P0, id.portA()); assertEquals("wrong element A", HOST_A, id.elementA()); assertEquals("wrong port B", P1, id.portB()); assertEquals("wrong element B", DEV_X, id.elementB()); assertNull("region A?", id.regionA()); assertNull("region B?", id.regionB()); assertEquals("not H-D", UiLinkId.Type.HOST_DEVICE, id.type()); assertTrue("not host-dev", id.isHostDevice()); assertFalse("dev-dev?", id.isDeviceDevice()); } @Test public void deviceLink() { title("deviceLink"); UiLinkId id = UiLinkId.uiLinkId(LINK_X1_TO_Y2); print("link: %s", id); assertEquals("wrong port A", P1, id.portA()); assertEquals("wrong element A", DEV_X, id.elementA()); assertEquals("wrong port B", P2, id.portB()); assertEquals("wrong element B", DEV_Y, id.elementB()); assertNull("region A?", id.regionA()); assertNull("region B?", id.regionB()); assertEquals("not D-D", UiLinkId.Type.DEVICE_DEVICE, id.type()); assertTrue("not dev-dev", id.isDeviceDevice()); } @Test public void regionLink() { title("regionLink"); UiLinkId idFirst = UiLinkId.uiLinkId(REG_1, REG_2); UiLinkId idSecond = UiLinkId.uiLinkId(REG_2, REG_1); print(" first: %s", idFirst); print("second: %s", idSecond); assertEquals("Not same ID", idFirst, idSecond); assertEquals("not R-R", UiLinkId.Type.REGION_REGION, idFirst.type()); assertTrue("not reg-reg", idFirst.isRegionRegion()); } @Test(expected = IllegalArgumentException.class) public void identicalRegionBad() { UiLinkId.uiLinkId(REG_1, REG_1); } @Test(expected = NullPointerException.class) public void nullRegionBad() { UiLinkId.uiLinkId(REG_1, (RegionId) null); } @Test public void regionDeviceLink() { title("regionDeviceLink"); UiLinkId id = UiLinkId.uiLinkId(REG_1, DEV_X, P1); print("id: %s", id); assertEquals("region ID", REG_1, id.regionA()); assertEquals("device ID", DEV_X, id.elementB()); assertEquals("port", P1, id.portB()); assertEquals("not R-D", UiLinkId.Type.REGION_DEVICE, id.type()); assertTrue("not reg-dev", id.isRegionDevice()); } @Test public void fromLinkKey() { title("fromLinkKey"); LinkKey lk1 = LinkKey.linkKey(CP_X1, CP_Y2); print("link-key-1: %s", lk1); LinkKey lk2 = LinkKey.linkKey(CP_Y2, CP_X1); print("link-key-2: %s", lk2); UiLinkId id1 = UiLinkId.uiLinkId(lk1); print("identifier-1: %s", id1); UiLinkId id2 = UiLinkId.uiLinkId(lk2); print("identifier-2: %s", id2); assertEquals("unequal canon-ids", id1, id2); } @Test public void devToDevId() { title("devToDevId"); UiLinkId id = UiLinkId.uiLinkId(DEV_X, P1, DEV_Y, P2); print(id); assertEquals("not dev x", DEV_X, id.elementA()); assertEquals("not dev y", DEV_Y, id.elementB()); assertEquals("not port 1", P1, id.portA()); assertEquals("not port 2", P2, id.portB()); assertTrue("not dev-dev", id.isDeviceDevice()); } @Test public void devToDevCanon() { title("devToDevCanon"); UiLinkId id1 = UiLinkId.uiLinkId(DEV_X, P1, DEV_Y, P2); UiLinkId id2 = UiLinkId.uiLinkId(DEV_Y, P2, DEV_X, P1); print(id1); print(id2); assertEquals("not canonical", id1, id2); assertEquals("not flipped", DEV_X, id2.elementA()); } @Test public void hostToDevId() { title("hostToDevId"); UiLinkId id = UiLinkId.uiLinkId(HOST_A, DEV_Y, P2); print(id); assertEquals("not host a", HOST_A, id.elementA()); assertEquals("not port 0", P0, id.portA()); assertEquals("not dev y", DEV_Y, id.elementB()); assertEquals("not port 2", P2, id.portB()); assertTrue("not host-dev", id.isHostDevice()); } }