blob: f2f4edbb1ec0c9f8801b0caf2b5f7d8e8b311ed6 [file] [log] [blame]
alshabibab984662014-12-04 18:56:18 -08001/*
2 * Copyright 2014 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 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.net.intent.impl;
Brian O'Connor427a1762014-11-19 18:40:32 -080017
Brian O'Connor5811ac22015-02-09 19:17:07 -080018import com.google.common.collect.Sets;
Brian O'Connorabafb502014-12-02 22:26:20 -080019import org.onosproject.core.ApplicationId;
20import org.onosproject.net.DeviceId;
21import org.onosproject.net.flow.CompletedBatchOperation;
Brian O'Connor5811ac22015-02-09 19:17:07 -080022import org.onosproject.net.flow.DefaultFlowEntry;
Brian O'Connorabafb502014-12-02 22:26:20 -080023import org.onosproject.net.flow.FlowEntry;
24import org.onosproject.net.flow.FlowRule;
Brian O'Connorabafb502014-12-02 22:26:20 -080025import org.onosproject.net.flow.FlowRuleBatchOperation;
26import org.onosproject.net.flow.FlowRuleListener;
Brian O'Connor72cb19a2015-01-16 16:14:41 -080027import org.onosproject.net.flow.FlowRuleOperations;
Brian O'Connorabafb502014-12-02 22:26:20 -080028import org.onosproject.net.flow.FlowRuleService;
Brian O'Connor427a1762014-11-19 18:40:32 -080029
Brian O'Connor5811ac22015-02-09 19:17:07 -080030import java.util.Set;
31import java.util.concurrent.Future;
32import java.util.stream.Collectors;
Brian O'Connor427a1762014-11-19 18:40:32 -080033
34
35public class MockFlowRuleService implements FlowRuleService {
36
Brian O'Connor427a1762014-11-19 18:40:32 -080037 final Set<FlowRule> flows = Sets.newHashSet();
Brian O'Connor5811ac22015-02-09 19:17:07 -080038 boolean success;
Brian O'Connor427a1762014-11-19 18:40:32 -080039
40 public void setFuture(boolean success) {
Brian O'Connor5811ac22015-02-09 19:17:07 -080041 this.success = success;
Brian O'Connor427a1762014-11-19 18:40:32 -080042 }
43
44 @Override
45 public Future<CompletedBatchOperation> applyBatch(FlowRuleBatchOperation batch) {
Brian O'Connor5811ac22015-02-09 19:17:07 -080046 throw new UnsupportedOperationException("deprecated");
Brian O'Connor427a1762014-11-19 18:40:32 -080047 }
48
49 @Override
Brian O'Connor72cb19a2015-01-16 16:14:41 -080050 public void apply(FlowRuleOperations ops) {
Brian O'Connor5811ac22015-02-09 19:17:07 -080051 ops.stages().forEach(stage -> stage.forEach(flow -> {
52 switch (flow.type()) {
53 case ADD:
54 case MODIFY: //TODO is this the right behavior for modify?
55 flows.add(flow.rule());
56 break;
57 case REMOVE:
58 flows.remove(flow.rule());
59 break;
60 default:
61 break;
62 }
63 }));
64 if (success) {
65 ops.callback().onSuccess(ops);
66 } else {
67 ops.callback().onError(ops);
68 }
69 }
Brian O'Connor72cb19a2015-01-16 16:14:41 -080070
Brian O'Connor5811ac22015-02-09 19:17:07 -080071 @Override
72 public void addListener(FlowRuleListener listener) {
73 //TODO not implemented
74 }
75
76 @Override
77 public void removeListener(FlowRuleListener listener) {
78 //TODO not implemented
Brian O'Connor72cb19a2015-01-16 16:14:41 -080079 }
80
81 @Override
Brian O'Connor427a1762014-11-19 18:40:32 -080082 public int getFlowRuleCount() {
83 return flows.size();
84 }
85
86 @Override
87 public Iterable<FlowEntry> getFlowEntries(DeviceId deviceId) {
Brian O'Connor5811ac22015-02-09 19:17:07 -080088 return flows.stream()
89 .filter(flow -> flow.deviceId().equals(deviceId))
90 .map(DefaultFlowEntry::new)
91 .collect(Collectors.toList());
Brian O'Connor427a1762014-11-19 18:40:32 -080092 }
93
94 @Override
95 public void applyFlowRules(FlowRule... flowRules) {
Brian O'Connor5811ac22015-02-09 19:17:07 -080096 for (FlowRule flow : flowRules) {
97 flows.add(flow);
98 }
Brian O'Connor427a1762014-11-19 18:40:32 -080099 }
100
101 @Override
102 public void removeFlowRules(FlowRule... flowRules) {
Brian O'Connor5811ac22015-02-09 19:17:07 -0800103 for (FlowRule flow : flowRules) {
104 flows.remove(flow);
105 }
Brian O'Connor427a1762014-11-19 18:40:32 -0800106 }
107
108 @Override
109 public void removeFlowRulesById(ApplicationId appId) {
Brian O'Connor5811ac22015-02-09 19:17:07 -0800110 //TODO not implemented
Brian O'Connor427a1762014-11-19 18:40:32 -0800111 }
112
113 @Override
114 public Iterable<FlowRule> getFlowRulesById(ApplicationId id) {
Brian O'Connor5811ac22015-02-09 19:17:07 -0800115 return flows.stream()
116 .filter(flow -> flow.appId() == id.id())
117 .collect(Collectors.toList());
Brian O'Connor427a1762014-11-19 18:40:32 -0800118 }
119
120 @Override
121 public Iterable<FlowRule> getFlowRulesByGroupId(ApplicationId appId, short groupId) {
Brian O'Connor5811ac22015-02-09 19:17:07 -0800122 return flows.stream()
123 .filter(flow -> flow.appId() == appId.id() && flow.groupId().id() == groupId)
124 .collect(Collectors.toList());
Brian O'Connor427a1762014-11-19 18:40:32 -0800125 }
126}
127