ONOS-6096 initial impl of dist. virtual packet store; virtual PacketRequest CLI; PacketRequest codec
Change-Id: Iea0a159a977701685c4487e806b26c85a1fcc1a5
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
index 46b717e..44395ef 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
@@ -66,6 +66,7 @@
import org.onosproject.net.PortNumber;
import org.onosproject.net.device.DeviceService;
import org.onosproject.net.flow.FlowRuleService;
+import org.onosproject.net.flowobjective.FlowObjectiveService;
import org.onosproject.net.group.GroupService;
import org.onosproject.net.host.HostService;
import org.onosproject.net.intent.FakeIntentManager;
@@ -927,6 +928,7 @@
.add(VirtualNetworkFlowObjectiveStore.class, new SimpleVirtualFlowObjectiveStore());
validateServiceGetReturnsSavedInstance(virtualNetwork.id(), FlowRuleService.class);
+ validateServiceGetReturnsSavedInstance(virtualNetwork.id(), FlowObjectiveService.class);
validateServiceGetReturnsSavedInstance(virtualNetwork.id(), PacketService.class);
validateServiceGetReturnsSavedInstance(virtualNetwork.id(), GroupService.class);
}
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPacketManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPacketManagerTest.java
index 1cedd4a..184a30e 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPacketManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPacketManagerTest.java
@@ -50,12 +50,12 @@
import org.onosproject.net.NetTestTools;
import org.onosproject.net.flow.DefaultTrafficSelector;
import org.onosproject.net.flow.DefaultTrafficTreatment;
+import org.onosproject.net.flow.FlowRule;
+import org.onosproject.net.flow.FlowRuleBatchOperation;
import org.onosproject.net.flow.TrafficSelector;
import org.onosproject.net.flowobjective.FlowObjectiveServiceAdapter;
import org.onosproject.net.flowobjective.ForwardingObjective;
import org.onosproject.net.flowobjective.Objective;
-import org.onosproject.net.flow.FlowRule;
-import org.onosproject.net.flow.FlowRuleBatchOperation;
import org.onosproject.net.intent.FakeIntentManager;
import org.onosproject.net.intent.TestableIntentService;
import org.onosproject.net.packet.DefaultOutboundPacket;
@@ -80,15 +80,18 @@
import static org.onosproject.net.packet.PacketPriority.CONTROL;
import static org.onosproject.net.packet.PacketPriority.REACTIVE;
+/**
+ * Junit tests for VirtualNetworkPacketManager using SimpleVirtualPacketStore.
+ */
public class VirtualNetworkPacketManagerTest extends VirtualNetworkTestUtil {
private static final int PROCESSOR_PRIORITY = 1;
- private VirtualNetworkManager manager;
- private DistributedVirtualNetworkStore virtualNetworkManagerStore;
+ protected VirtualNetworkManager manager;
+ protected DistributedVirtualNetworkStore virtualNetworkManagerStore;
private CoreService coreService = new TestCoreService();
private TestableIntentService intentService = new FakeIntentManager();
- private TestServiceDirectory testDirectory;
+ protected TestServiceDirectory testDirectory;
private EventDeliveryService eventDeliveryService;
private VirtualProviderManager providerRegistryService;
@@ -96,9 +99,9 @@
private VirtualNetwork vnet2;
private VirtualPacketProvider provider = new TestPacketProvider();
- private VirtualNetworkPacketStore packetStore = new SimpleVirtualPacketStore();
+ protected VirtualNetworkPacketStore packetStore = new SimpleVirtualPacketStore();
- private VirtualNetworkPacketManager packetManager1;
+ protected VirtualNetworkPacketManager packetManager1;
private VirtualNetworkPacketManager packetManager2;
private ApplicationId appId = new TestApplicationId("VirtualPacketManagerTest");
@@ -106,13 +109,13 @@
private VirtualFlowRuleProvider flowRuleProvider = new TestFlowRuleProvider();
private SimpleVirtualFlowRuleStore flowRuleStore;
private SimpleVirtualFlowObjectiveStore flowObjectiveStore;
+ protected StorageService storageService = new TestStorageService();
@Before
public void setUp() throws TestUtils.TestUtilsException {
virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
- StorageService storageService = new TestStorageService();
TestUtils.setField(virtualNetworkManagerStore, "storageService", storageService);
virtualNetworkManagerStore.activate();
@@ -293,7 +296,7 @@
testFlowObjectiveService.validateObjectives(vnet1Devices, ts, CONTROL, REMOVE);
}
- private static OutboundPacket emittedPacket = null;
+ protected OutboundPacket emittedPacket = null;
/**
* Core service test class.
diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPacketManagerWithDistStoreTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPacketManagerWithDistStoreTest.java
new file mode 100644
index 0000000..0159ae2
--- /dev/null
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkPacketManagerWithDistStoreTest.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2017-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.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<>();
+ }
+ }
+
+}