blob: 81c2368211b291085bbff433d20313e387406233 [file] [log] [blame]
Andrea Campanella5b240532016-02-05 09:44:41 -08001/*
Brian O'Connora09fe5b2017-08-03 21:12:30 -07002 * Copyright 2016-present Open Networking Foundation
Andrea Campanella5b240532016-02-05 09:44:41 -08003 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package org.onosproject.net.packet.impl;
18
19import com.google.common.collect.ImmutableList;
20import com.google.common.collect.ImmutableMap;
21import org.junit.Before;
22import org.junit.Test;
23import org.onosproject.cluster.ClusterServiceAdapter;
24import org.onosproject.common.event.impl.TestEventDispatcher;
25import org.onosproject.core.CoreServiceAdapter;
26import org.onosproject.core.IdGenerator;
27import org.onosproject.event.TestListener;
28import org.onosproject.net.AnnotationKeys;
29import org.onosproject.net.DefaultAnnotations;
30import org.onosproject.net.DefaultDevice;
31import org.onosproject.net.Device;
32import org.onosproject.net.DeviceId;
Carmelo Cascone0761cd32018-08-29 19:22:50 -070033import org.onosproject.net.config.NetworkConfigServiceAdapter;
Andrea Campanella5b240532016-02-05 09:44:41 -080034import org.onosproject.net.device.DeviceServiceAdapter;
35import org.onosproject.net.driver.AbstractHandlerBehaviour;
36import org.onosproject.net.driver.DefaultDriver;
Thomas Vachuska11b99fc2017-04-27 12:51:04 -070037import org.onosproject.net.driver.DriverRegistry;
Andrea Campanella5b240532016-02-05 09:44:41 -080038import org.onosproject.net.driver.impl.DriverManager;
Thomas Vachuska11b99fc2017-04-27 12:51:04 -070039import org.onosproject.net.driver.impl.DriverRegistryManager;
Andrea Campanella5b240532016-02-05 09:44:41 -080040import org.onosproject.net.flow.DefaultTrafficTreatment;
41import org.onosproject.net.packet.DefaultOutboundPacket;
42import org.onosproject.net.packet.OutboundPacket;
43import org.onosproject.net.packet.PacketProgrammable;
44import org.onosproject.net.packet.PacketProviderRegistry;
Carmelo Cascone0761cd32018-08-29 19:22:50 -070045import org.onosproject.net.pi.PiPipeconfServiceAdapter;
Andrea Campanella5b240532016-02-05 09:44:41 -080046import org.onosproject.net.provider.ProviderId;
47import org.onosproject.net.provider.TestProvider;
48import org.onosproject.store.trivial.SimplePacketStore;
49
50import java.nio.ByteBuffer;
51import java.util.concurrent.atomic.AtomicLong;
52
53import static org.junit.Assert.assertEquals;
54import static org.onosproject.net.NetTestTools.injectEventDispatcher;
55
56/**
57 * Test packet manager activity.
58 */
59public class PacketManagerTest {
60
61 private static final ProviderId FOO_PID = new ProviderId("foo", "foo");
62
63 private static final DeviceId FOO_DID = DeviceId.deviceId("foo:002");
64
65 private static final DefaultAnnotations ANNOTATIONS =
66 DefaultAnnotations.builder().set(AnnotationKeys.DRIVER, "foo").build();
67
68 private static final Device FOO_DEV =
69 new DefaultDevice(FOO_PID, FOO_DID, Device.Type.SWITCH, "", "", "", "", null, ANNOTATIONS);
70
71 private PacketManager mgr;
72
73 protected TestProvider provider;
74 protected TestListener listener = new TestListener();
75
76 private PacketProviderRegistry providerRegistry;
77
78 private TestDriverManager driverService;
79
80 @Before
81 public void setUp() {
82 mgr = new PacketManager();
83 injectEventDispatcher(mgr, new TestEventDispatcher());
84 mgr.store = new SimplePacketStore();
85 mgr.clusterService = new ClusterServiceAdapter();
86 mgr.deviceService = new TestDeviceService();
87 mgr.deviceService = new TestDeviceService();
88 mgr.coreService = new TestCoreService();
89 providerRegistry = mgr;
90 mgr.activate();
Thomas Vachuska11b99fc2017-04-27 12:51:04 -070091
92 DriverRegistryManager driverRegistry = new DriverRegistryManager();
93 driverService = new TestDriverManager(driverRegistry);
94 driverRegistry.addDriver(new DefaultDriver("foo", ImmutableList.of(), "", "", "",
95 ImmutableMap.of(PacketProgrammable.class,
96 TestPacketProgrammable.class),
97 ImmutableMap.of()));
Andrea Campanella5b240532016-02-05 09:44:41 -080098 }
99
100 /**
101 * Tests the correct usage of fallback driver provider for packets.
102 */
103 @Test
104 public void packetProviderfallbackBasics() {
105 OutboundPacket packet =
106 new DefaultOutboundPacket(FOO_DID, DefaultTrafficTreatment.emptyTreatment(), ByteBuffer.allocate(5));
107 mgr.emit(packet);
108 assertEquals("Packet not emitted correctly", packet, emittedPacket);
109 }
110
111 private static class TestDeviceService extends DeviceServiceAdapter {
112 @Override
113 public int getDeviceCount() {
114 return 1;
115 }
116
117 @Override
118 public Iterable<Device> getDevices() {
119 return ImmutableList.of(FOO_DEV);
120 }
121
122 @Override
123 public Iterable<Device> getAvailableDevices() {
124 return getDevices();
125 }
126
127 @Override
128 public Device getDevice(DeviceId deviceId) {
129 return FOO_DEV;
130 }
131 }
132
133 private class TestCoreService extends CoreServiceAdapter {
134
135 @Override
136 public IdGenerator getIdGenerator(String topic) {
137 return new IdGenerator() {
138 private AtomicLong counter = new AtomicLong(0);
139
140 @Override
141 public long getNewId() {
142 return counter.getAndIncrement();
143 }
144 };
145 }
146 }
147
148 private class TestDriverManager extends DriverManager {
Thomas Vachuska11b99fc2017-04-27 12:51:04 -0700149 TestDriverManager(DriverRegistry registry) {
150 this.registry = registry;
Andrea Campanella5b240532016-02-05 09:44:41 -0800151 this.deviceService = mgr.deviceService;
Carmelo Cascone0761cd32018-08-29 19:22:50 -0700152 this.pipeconfService = new PiPipeconfServiceAdapter();
153 this.networkConfigService = new NetworkConfigServiceAdapter();
Andrea Campanella5b240532016-02-05 09:44:41 -0800154 activate();
155 }
156 }
157
158 private static OutboundPacket emittedPacket = null;
159
160 public static class TestPacketProgrammable extends AbstractHandlerBehaviour implements PacketProgrammable {
161
162 @Override
163 public void emit(OutboundPacket packet) {
164 emittedPacket = packet;
165 }
166 }
167}