blob: 288f14177db9087e0626892fdebebc09730d868a [file] [log] [blame]
Jian Li152b8852015-12-07 14:47:25 -08001/*
2 * Copyright 2015 Open Networking Laboratory
3 *
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 */
16package org.onosproject.openflow.controller.driver;
17
18import org.junit.Before;
19import org.junit.Test;
Jian Li28247b52016-01-07 17:24:15 -080020import org.onosproject.openflow.controller.Dpid;
21import org.onosproject.openflow.controller.OpenFlowEventListener;
Jian Li152b8852015-12-07 14:47:25 -080022import org.projectfloodlight.openflow.protocol.OFMessage;
23import org.jboss.netty.channel.Channel;
24import java.util.ArrayList;
25import java.util.List;
26import java.util.concurrent.Future;
27
28import static org.hamcrest.MatcherAssert.assertThat;
29import static org.hamcrest.Matchers.hasSize;
30import static org.hamcrest.Matchers.is;
31
32/**
33 * Tests for packet processing in the abstract openflow switch class.
34 */
35public class AbstractOpenFlowSwitchTest {
36
37 OpenFlowSwitchImpl ofSwitch;
38 TestExecutorService executorService;
39
40 /**
41 * Mock executor service that tracks submits.
42 */
43 static class TestExecutorService extends ExecutorServiceAdapter {
44 private List<OFMessage> submittedMessages = new ArrayList<>();
45
46 List<OFMessage> submittedMessages() {
47 return submittedMessages;
48 }
49
50 @Override
51 public Future<?> submit(Runnable task) {
52 AbstractOpenFlowSwitch.OFMessageHandler handler =
53 (AbstractOpenFlowSwitch.OFMessageHandler) task;
54 submittedMessages.add(handler.msg);
55 return null;
56 }
57 }
58
59 /**
60 * Sets up switches to use as data.
61 */
62 @Before
63 public void setUp() {
64 ofSwitch = new OpenFlowSwitchImpl();
65
66 executorService = new TestExecutorService();
67 ofSwitch.executorMsgs = executorService;
68 Channel channel = new ChannelAdapter();
69 ofSwitch.setChannel(channel);
Jian Li28247b52016-01-07 17:24:15 -080070 ofSwitch.addEventListener(new OpenFlowEventListenerAdapter());
Jian Li152b8852015-12-07 14:47:25 -080071 }
72
73 /**
74 * Tests a packet out operation.
75 */
76 @Test
77 public void testPacketOut() {
78 OFMessage ofPacketOut = new MockOfPacketOut();
79 ofSwitch.sendMsg(ofPacketOut);
80 assertThat(executorService.submittedMessages(), hasSize(1));
81 assertThat(executorService.submittedMessages().get(0), is(ofPacketOut));
82 }
83
84 /**
85 * Tests a flow mod operation.
86 */
87 @Test
88 public void testFlowMod() {
89 OFMessage ofFlowMod = new MockOfFlowMod();
90 ofSwitch.sendMsg(ofFlowMod);
91 assertThat(executorService.submittedMessages(), hasSize(1));
92 assertThat(executorService.submittedMessages().get(0), is(ofFlowMod));
93 }
94
95 /**
96 * Tests a stats request operation.
97 */
98 @Test
99 public void testStatsRequest() {
100 OFMessage ofStatsRequest = new MockOfStatsRequest();
101 ofSwitch.sendMsg(ofStatsRequest);
102 assertThat(executorService.submittedMessages(), hasSize(1));
103 assertThat(executorService.submittedMessages().get(0), is(ofStatsRequest));
104 }
105
106 protected class OpenFlowSwitchImpl extends AbstractOpenFlowSwitch {
107
108 @Override
109 public Boolean supportNxRole() {
110 return null;
111 }
112
113 @Override
114 public void startDriverHandshake() {
115 }
116
117 @Override
118 public boolean isDriverHandshakeComplete() {
119 return false;
120 }
121
122 @Override
123 public void processDriverHandshakeMessage(OFMessage m) {
124 }
125 }
Jian Li28247b52016-01-07 17:24:15 -0800126
127 private class OpenFlowEventListenerAdapter implements OpenFlowEventListener {
128
129 @Override
130 public void handleMessage(Dpid dpid, OFMessage msg) {
131 }
132 }
Jian Li152b8852015-12-07 14:47:25 -0800133}