blob: 4bf65d63b7b9472f65196c49fdd3efa1472abe90 [file] [log] [blame]
/*
* 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.openstackvtap.impl;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import org.onlab.packet.IPv4;
import org.onlab.packet.IpAddress;
import org.onlab.packet.IpPrefix;
import org.onlab.packet.TpPort;
import org.onosproject.TestApplicationId;
import org.onosproject.cfg.ComponentConfigAdapter;
import org.onosproject.cluster.ClusterServiceAdapter;
import org.onosproject.cluster.LeadershipServiceAdapter;
import org.onosproject.core.ApplicationId;
import org.onosproject.core.CoreServiceAdapter;
import org.onosproject.event.DefaultEventSinkRegistry;
import org.onosproject.event.Event;
import org.onosproject.event.EventDeliveryService;
import org.onosproject.event.EventSink;
import org.onosproject.net.DeviceId;
import org.onosproject.net.device.DeviceServiceAdapter;
import org.onosproject.net.flow.FlowRuleServiceAdapter;
import org.onosproject.net.group.GroupServiceAdapter;
import org.onosproject.net.host.HostServiceAdapter;
import org.onosproject.openstacknode.api.OpenstackNode;
import org.onosproject.openstacknode.api.OpenstackNodeListener;
import org.onosproject.openstacknode.api.OpenstackNodeService;
import org.onosproject.openstackvtap.api.OpenstackVtap;
import org.onosproject.openstackvtap.api.OpenstackVtapCriterion;
import org.onosproject.openstackvtap.api.OpenstackVtapEvent;
import org.onosproject.openstackvtap.api.OpenstackVtapId;
import org.onosproject.openstackvtap.api.OpenstackVtapListener;
import org.onosproject.openstackvtap.api.OpenstackVtapNetwork;
import java.util.List;
import java.util.Set;
import static com.google.common.base.Preconditions.checkState;
/**
* Provides a set of test OpenstackVtapNetwork, OpenstackVtap parameters
* for use with OpenstackVtapNetwork, OpenstackVtap related tests.
*/
public abstract class OpenstackVtapTest {
protected static final String APP_NAME = "org.onosproject.openstackvtap";
protected static final ApplicationId APP_ID = TestApplicationId.create(APP_NAME);
protected static final String ERR_SIZE = "Number of vtap or vtap network did not match";
protected static final String ERR_NOT_MATCH = "Vtap or vtap network did not match";
protected static final String ERR_NOT_FOUND = "Vtap or vtap network did not exist";
protected static final int VTAP_NETWORK_KEY = 0;
protected static final OpenstackVtapNetwork.Mode VTAP_NETWORK_MODE_1 = OpenstackVtapNetwork.Mode.VXLAN;
protected static final OpenstackVtapNetwork.Mode VTAP_NETWORK_MODE_2 = OpenstackVtapNetwork.Mode.GRE;
protected static final int VTAP_NETWORK_NETWORK_ID_1 = 1;
protected static final int VTAP_NETWORK_NETWORK_ID_2 = 2;
protected static final IpAddress SERVER_IP_1 = IpAddress.valueOf("20.10.10.1");
protected static final IpAddress SERVER_IP_2 = IpAddress.valueOf("20.10.20.1");
protected static final OpenstackVtapNetwork VTAP_NETWORK_1 =
createVtapNetwork(VTAP_NETWORK_MODE_1, VTAP_NETWORK_NETWORK_ID_1, SERVER_IP_1);
protected static final OpenstackVtapNetwork VTAP_NETWORK_2 =
createVtapNetwork(VTAP_NETWORK_MODE_2, VTAP_NETWORK_NETWORK_ID_2, SERVER_IP_2);
protected static final IpPrefix SRC_IP_PREFIX_1 =
IpPrefix.valueOf(IpAddress.valueOf("10.10.10.1"), 32);
protected static final IpPrefix SRC_IP_PREFIX_2 =
IpPrefix.valueOf(IpAddress.valueOf("10.10.20.1"), 32);
protected static final IpPrefix DST_IP_PREFIX_1 =
IpPrefix.valueOf(IpAddress.valueOf("10.10.30.2"), 32);
protected static final IpPrefix DST_IP_PREFIX_2 =
IpPrefix.valueOf(IpAddress.valueOf("10.10.40.2"), 32);
protected static final TpPort SRC_PORT_1 = TpPort.tpPort(10);
protected static final TpPort SRC_PORT_2 = TpPort.tpPort(20);
protected static final TpPort DST_PORT_1 = TpPort.tpPort(30);
protected static final TpPort DST_PORT_2 = TpPort.tpPort(40);
protected static final byte IP_PROTOCOL_1 = IPv4.PROTOCOL_TCP;
protected static final byte IP_PROTOCOL_2 = IPv4.PROTOCOL_UDP;
protected static final OpenstackVtapCriterion VTAP_CRITERION_1 =
createCriterion(SRC_IP_PREFIX_1, DST_IP_PREFIX_1, SRC_PORT_1, DST_PORT_1, IP_PROTOCOL_1);
protected static final OpenstackVtapCriterion VTAP_CRITERION_2 =
createCriterion(SRC_IP_PREFIX_2, DST_IP_PREFIX_2, SRC_PORT_2, DST_PORT_2, IP_PROTOCOL_2);
protected static final OpenstackVtapId VTAP_ID_1 = OpenstackVtapId.vtapId();
protected static final OpenstackVtapId VTAP_ID_2 = OpenstackVtapId.vtapId();
protected static final OpenstackVtap.Type VTAP_TYPE_1 = OpenstackVtap.Type.VTAP_ALL;
protected static final OpenstackVtap.Type VTAP_TYPE_2 = OpenstackVtap.Type.VTAP_TX;
protected static final DeviceId DEVICE_ID_1 = DeviceId.deviceId("of:00000000000000a1");
protected static final DeviceId DEVICE_ID_2 = DeviceId.deviceId("of:00000000000000a2");
protected static final DeviceId DEVICE_ID_3 = DeviceId.deviceId("of:00000000000000a3");
protected static final DeviceId DEVICE_ID_4 = DeviceId.deviceId("of:00000000000000a4");
protected static final Set<DeviceId> TX_DEVICE_IDS_1 = ImmutableSet.of(DEVICE_ID_1);
protected static final Set<DeviceId> RX_DEVICE_IDS_1 = ImmutableSet.of(DEVICE_ID_2);
protected static final Set<DeviceId> TX_DEVICE_IDS_2 = ImmutableSet.of(DEVICE_ID_3);
protected static final Set<DeviceId> RX_DEVICE_IDS_2 = ImmutableSet.of(DEVICE_ID_4);
protected static final OpenstackVtap VTAP_1 =
createVtap(VTAP_ID_1, VTAP_TYPE_1, VTAP_CRITERION_1, TX_DEVICE_IDS_1, RX_DEVICE_IDS_1);
protected static final OpenstackVtap VTAP_2 =
createVtap(VTAP_ID_2, VTAP_TYPE_2, VTAP_CRITERION_2, TX_DEVICE_IDS_2, RX_DEVICE_IDS_2);
public static class TestOpenstackVtapListener implements OpenstackVtapListener {
public List<OpenstackVtapEvent> events = Lists.newArrayList();
@Override
public void event(OpenstackVtapEvent event) {
events.add(event);
}
}
public static class TestCoreService extends CoreServiceAdapter {
@Override
public ApplicationId registerApplication(String name) {
return APP_ID;
}
}
public static class TestClusterService extends ClusterServiceAdapter {
}
public static class TestLeadershipService extends LeadershipServiceAdapter {
}
public static class TestFlowRuleService extends FlowRuleServiceAdapter {
}
public static class TestGroupService extends GroupServiceAdapter {
}
public static class TestDeviceService extends DeviceServiceAdapter {
}
public static class TestOpenstackNodeService implements OpenstackNodeService {
@Override
public Set<OpenstackNode> nodes() {
return ImmutableSet.of();
}
@Override
public Set<OpenstackNode> nodes(OpenstackNode.NodeType type) {
return ImmutableSet.of();
}
@Override
public Set<OpenstackNode> completeNodes() {
return ImmutableSet.of();
}
@Override
public Set<OpenstackNode> completeNodes(OpenstackNode.NodeType type) {
return ImmutableSet.of();
}
@Override
public OpenstackNode node(String hostname) {
return null;
}
@Override
public OpenstackNode node(DeviceId deviceId) {
return null;
}
@Override
public OpenstackNode node(IpAddress mgmtIp) {
return null;
}
@Override
public void addVfPort(OpenstackNode osNode, String portName) {
}
@Override
public void removeVfPort(OpenstackNode osNode, String portName) {
}
@Override
public void addListener(OpenstackNodeListener listener) {
}
@Override
public void removeListener(OpenstackNodeListener listener) {
}
}
public static class TestHostService extends HostServiceAdapter {
}
public static class TestComponentConfigService extends ComponentConfigAdapter {
}
/**
* A mock of event dispatcher.
*/
public class TestEventDispatcher extends DefaultEventSinkRegistry
implements EventDeliveryService {
@Override
@SuppressWarnings("unchecked")
public synchronized void post(Event event) {
EventSink sink = getSink(event.getClass());
checkState(sink != null, "No sink for event %s", event);
sink.process(event);
}
@Override
public void setDispatchTimeLimit(long millis) {
}
@Override
public long getDispatchTimeLimit() {
return 0;
}
}
public static OpenstackVtapNetwork createVtapNetwork(OpenstackVtapNetwork.Mode mode,
Integer networkId,
IpAddress serverIp) {
return DefaultOpenstackVtapNetwork.builder()
.mode(mode)
.networkId(networkId)
.serverIp(serverIp)
.build();
}
public static OpenstackVtap createVtap(OpenstackVtapId id,
OpenstackVtap.Type type,
OpenstackVtapCriterion vtapCriterion,
Set<DeviceId> txDevices,
Set<DeviceId> rxDevices) {
return DefaultOpenstackVtap.builder()
.id(id)
.type(type)
.vtapCriterion(vtapCriterion)
.txDeviceIds(txDevices)
.rxDeviceIds(rxDevices)
.build();
}
public static OpenstackVtapCriterion createCriterion(IpPrefix srcIpPrefix, IpPrefix dstIpPrefix,
TpPort srcPort, TpPort dstPort,
byte ipProtocol) {
return DefaultOpenstackVtapCriterion.builder()
.srcIpPrefix(srcIpPrefix)
.dstIpPrefix(dstIpPrefix)
.srcTpPort(srcPort)
.dstTpPort(dstPort)
.ipProtocol(ipProtocol)
.build();
}
}