| /* |
| * Copyright 2017-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.incubator.net.virtual.impl; |
| |
| import org.junit.After; |
| import org.junit.Before; |
| import org.junit.Ignore; |
| import org.junit.Test; |
| import org.onlab.junit.TestUtils; |
| import org.onlab.osgi.ComponentContextAdapter; |
| import org.onosproject.cfg.ComponentConfigAdapter; |
| import org.onosproject.cluster.ClusterService; |
| import org.onosproject.cluster.ClusterServiceAdapter; |
| import org.onosproject.cluster.NodeId; |
| import org.onosproject.incubator.store.virtual.impl.DistributedVirtualPacketStore; |
| import org.onosproject.mastership.MastershipServiceAdapter; |
| import org.onosproject.net.DeviceId; |
| import org.onosproject.net.flow.DefaultTrafficTreatment; |
| import org.onosproject.net.packet.DefaultOutboundPacket; |
| import org.onosproject.net.packet.OutboundPacket; |
| import org.onosproject.store.cluster.messaging.ClusterCommunicationServiceAdapter; |
| import org.onosproject.store.cluster.messaging.MessageSubject; |
| |
| import java.nio.ByteBuffer; |
| import java.util.concurrent.CompletableFuture; |
| import java.util.function.Function; |
| |
| import static org.junit.Assert.assertNull; |
| |
| /** |
| * Junit tests for VirtualNetworkPacketManager using DistributedVirtualPacketStore.. |
| * This test class extends VirtualNetworkPacketManagerTest - all the tests defined in |
| * VirtualNetworkPacketManagerTest will run using DistributedVirtualPacketStore. |
| */ |
| public class VirtualNetworkPacketManagerWithDistStoreTest extends VirtualNetworkPacketManagerTest { |
| |
| private DistributedVirtualPacketStore distStore; |
| private ClusterService clusterService = new ClusterServiceAdapter(); |
| |
| @Before |
| public void setUp() throws TestUtils.TestUtilsException { |
| setUpDistPacketStore(); |
| super.setUp(); |
| TestUtils.setField(packetManager1, "storageService", storageService); |
| } |
| |
| private void setUpDistPacketStore() throws TestUtils.TestUtilsException { |
| distStore = new DistributedVirtualPacketStore(); |
| TestUtils.setField(distStore, "cfgService", new ComponentConfigAdapter()); |
| TestUtils.setField(distStore, "storageService", storageService); |
| TestUtils.setField(distStore, "clusterService", clusterService); |
| TestUtils.setField(distStore, "communicationService", new TestClusterCommunicationService()); |
| TestUtils.setField(distStore, "mastershipService", new TestMastershipService()); |
| |
| distStore.activate(new ComponentContextAdapter()); |
| packetStore = distStore; // super.setUp() will cause Distributed store to be used. |
| } |
| |
| @After |
| public void tearDown() { |
| distStore.deactivate(); |
| } |
| |
| @Override |
| @Test |
| @Ignore("Ignore until there is MastershipService support for virtual devices") |
| public void emitTest() { |
| super.emitTest(); |
| } |
| |
| /** |
| * Tests the correct usage of emit() for a outbound packet - master of packet's |
| * sendThrough is not local node. |
| */ |
| @Test |
| @Ignore("Ignore until there is MastershipService support for virtual devices") |
| public void emit2Test() { |
| OutboundPacket packet = |
| new DefaultOutboundPacket(VDID2, DefaultTrafficTreatment.emptyTreatment(), ByteBuffer.allocate(5)); |
| packetManager1.emit(packet); |
| assertNull("Packet should not have been emmitted", emittedPacket); |
| } |
| |
| private final class TestMastershipService extends MastershipServiceAdapter { |
| @Override |
| public NodeId getMasterFor(DeviceId deviceId) { |
| if (VDID1.equals(deviceId)) { |
| return clusterService.getLocalNode().id(); |
| } |
| return new NodeId("abc"); |
| } |
| } |
| |
| private final class TestClusterCommunicationService extends ClusterCommunicationServiceAdapter { |
| @Override |
| public <M> CompletableFuture<Void> unicast(M message, MessageSubject subject, |
| Function<M, byte[]> encoder, NodeId toNodeId) { |
| return new CompletableFuture<>(); |
| } |
| } |
| |
| } |