blob: b9771e49972de28edca5c205d42feef2d5403955 [file] [log] [blame]
/*
* 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.Before;
import org.junit.Test;
import org.onlab.junit.TestUtils;
import org.onlab.osgi.TestServiceDirectory;
import org.onosproject.cluster.ClusterService;
import org.onosproject.cluster.ClusterServiceAdapter;
import org.onosproject.common.event.impl.TestEventDispatcher;
import org.onosproject.core.CoreService;
import org.onosproject.core.CoreServiceAdapter;
import org.onosproject.core.IdGenerator;
import org.onosproject.event.EventDeliveryService;
import org.onosproject.incubator.net.virtual.NetworkId;
import org.onosproject.incubator.net.virtual.VirtualNetwork;
import org.onosproject.incubator.net.virtual.VirtualNetworkPacketStore;
import org.onosproject.incubator.net.virtual.VirtualNetworkStore;
import org.onosproject.incubator.net.virtual.impl.provider.VirtualProviderManager;
import org.onosproject.incubator.net.virtual.provider.AbstractVirtualProvider;
import org.onosproject.incubator.net.virtual.provider.VirtualPacketProvider;
import org.onosproject.incubator.net.virtual.provider.VirtualProviderRegistryService;
import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
import org.onosproject.incubator.store.virtual.impl.SimpleVirtualPacketStore;
import org.onosproject.net.NetTestTools;
import org.onosproject.net.flow.DefaultTrafficTreatment;
import org.onosproject.net.intent.FakeIntentManager;
import org.onosproject.net.intent.TestableIntentService;
import org.onosproject.net.packet.DefaultOutboundPacket;
import org.onosproject.net.packet.OutboundPacket;
import org.onosproject.net.packet.PacketContext;
import org.onosproject.net.packet.PacketProcessor;
import org.onosproject.net.provider.ProviderId;
import org.onosproject.store.service.TestStorageService;
import java.nio.ByteBuffer;
import java.util.concurrent.atomic.AtomicLong;
import static org.junit.Assert.*;
public class VirtualNetworkPacketManagerTest extends VirtualNetworkTestUtil {
private static final int PROCESSOR_PRIORITY = 1;
private VirtualNetworkManager manager;
private DistributedVirtualNetworkStore virtualNetworkManagerStore;
private CoreService coreService = new TestCoreService();
private TestableIntentService intentService = new FakeIntentManager();
private TestServiceDirectory testDirectory;
private EventDeliveryService eventDeliveryService;
private VirtualProviderManager providerRegistryService;
private VirtualNetwork vnet1;
private VirtualNetwork vnet2;
private VirtualPacketProvider provider = new TestPacketProvider();
private VirtualNetworkPacketStore packetStore = new SimpleVirtualPacketStore();
private VirtualNetworkPacketManager packetManager1;
private VirtualNetworkPacketManager packetManager2;
@Before
public void setUp() throws TestUtils.TestUtilsException {
virtualNetworkManagerStore = new DistributedVirtualNetworkStore();
TestUtils.setField(virtualNetworkManagerStore, "coreService", coreService);
TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
virtualNetworkManagerStore.activate();
manager = new VirtualNetworkManager();
manager.store = virtualNetworkManagerStore;
manager.coreService = coreService;
manager.intentService = intentService;
NetTestTools.injectEventDispatcher(manager, new TestEventDispatcher());
providerRegistryService = new VirtualProviderManager();
providerRegistryService.registerProvider(provider);
testDirectory = new TestServiceDirectory()
.add(VirtualNetworkStore.class, virtualNetworkManagerStore)
.add(CoreService.class, coreService)
.add(VirtualProviderRegistryService.class, providerRegistryService)
.add(EventDeliveryService.class, eventDeliveryService)
.add(ClusterService.class, new ClusterServiceAdapter())
.add(VirtualNetworkPacketStore.class, packetStore);
TestUtils.setField(manager, "serviceDirectory", testDirectory);
eventDeliveryService = new TestEventDispatcher();
NetTestTools.injectEventDispatcher(manager, eventDeliveryService);
manager.activate();
vnet1 = VirtualNetworkTestUtil.setupVirtualNetworkTopology(manager, TID1);
vnet2 = VirtualNetworkTestUtil.setupVirtualNetworkTopology(manager, TID2);
packetManager1 = new VirtualNetworkPacketManager(manager, vnet1.id());
packetManager2 = new VirtualNetworkPacketManager(manager, vnet2.id());
}
/**
* Tests the correct usage of addProcessor() for a outbound packet.
*/
@Test
public void addProcessorTest() {
PacketProcessor testProcessor = new TestProcessor();
packetManager1.addProcessor(testProcessor, PROCESSOR_PRIORITY);
assertEquals("1 processor expected", 1,
packetManager1.getProcessors().size());
assertEquals("0 processor expected", 0,
packetManager2.getProcessors().size());
assertEquals("not equal packet processor", testProcessor,
packetManager1.getProcessors().get(0).processor());
assertEquals("not equal packet processor priority", PROCESSOR_PRIORITY,
packetManager1.getProcessors().get(0).priority());
}
/**
* Tests the correct usage of addProcessor() for a outbound packet.
*/
@Test
public void removeProcessorTest() {
PacketProcessor testProcessor = new TestProcessor();
packetManager1.addProcessor(testProcessor, PROCESSOR_PRIORITY);
assertEquals("1 processor expected", 1,
packetManager1.getProcessors().size());
assertEquals("0 processor expected", 0,
packetManager2.getProcessors().size());
packetManager1.removeProcessor(testProcessor);
assertEquals("0 processor expected", 0,
packetManager1.getProcessors().size());
assertEquals("0 processor expected", 0,
packetManager2.getProcessors().size());
}
/**
* Tests the correct usage of emit() for a outbound packet.
*/
@Test
public void emitTest() {
OutboundPacket packet =
new DefaultOutboundPacket(VDID1, DefaultTrafficTreatment.emptyTreatment(), ByteBuffer.allocate(5));
packetManager1.emit(packet);
assertEquals("Packet not emitted correctly", packet, emittedPacket);
}
private static OutboundPacket emittedPacket = null;
/**
* Core service test class.
*/
private class TestCoreService extends CoreServiceAdapter {
@Override
public IdGenerator getIdGenerator(String topic) {
return new IdGenerator() {
private AtomicLong counter = new AtomicLong(0);
@Override
public long getNewId() {
return counter.getAndIncrement();
}
};
}
}
private class TestPacketProvider extends AbstractVirtualProvider
implements VirtualPacketProvider {
/**
* Creates a provider with the supplied identifier.
*/
protected TestPacketProvider() {
super(new ProviderId("test-packet",
"org.onosproject.virtual.test-packet"));
}
@Override
public void emit(NetworkId networkId, OutboundPacket packet) {
emittedPacket = packet;
}
}
private class TestProcessor implements PacketProcessor {
@Override
public void process(PacketContext context) {
}
}
}