blob: 87db5d1840c4e6f0e12627e73faf904df2c3face [file] [log] [blame]
Andrea Campanellacbbb7952019-11-25 06:38:41 +00001/*
2 * Copyright 2016-present Open Networking Foundation
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.opencord.olt.impl;
17
Jonathan Hart4f178fa2020-02-03 10:46:01 -080018import com.google.common.collect.HashMultimap;
Andrea Campanellacbbb7952019-11-25 06:38:41 +000019import com.google.common.collect.Maps;
Jonathan Hart4f178fa2020-02-03 10:46:01 -080020import com.google.common.collect.Multiset;
Tunahan Sezenf0843b92021-04-30 07:13:16 +000021import org.onlab.packet.ChassisId;
Andrea Campanellacbbb7952019-11-25 06:38:41 +000022import org.onlab.packet.Ip4Address;
23import org.onlab.packet.MacAddress;
24import org.onosproject.core.DefaultApplicationId;
Tunahan Sezenf0843b92021-04-30 07:13:16 +000025import org.onosproject.net.DefaultDevice;
26import org.onosproject.net.Device;
Andrea Campanellacbbb7952019-11-25 06:38:41 +000027import org.onosproject.net.DeviceId;
28import org.onosproject.net.meter.MeterId;
Jonathan Hart4f178fa2020-02-03 10:46:01 -080029import org.onosproject.store.service.AsyncConsistentMultimap;
30import org.onosproject.store.service.ConsistentMultimap;
31import org.onosproject.store.service.ConsistentMultimapBuilder;
32import org.onosproject.store.service.MultimapEventListener;
33import org.onosproject.store.service.TestConsistentMultimap;
34import org.onosproject.store.service.Versioned;
Andrea Campanellacbbb7952019-11-25 06:38:41 +000035import org.opencord.sadis.BandwidthProfileInformation;
36import org.opencord.sadis.BaseInformationService;
37import org.opencord.sadis.SadisService;
38import org.opencord.sadis.SubscriberAndDeviceInformation;
39
Jonathan Hart4f178fa2020-02-03 10:46:01 -080040import java.util.AbstractMap;
41import java.util.Collection;
42import java.util.Iterator;
Andrea Campanellacbbb7952019-11-25 06:38:41 +000043import java.util.Map;
Jonathan Hart4f178fa2020-02-03 10:46:01 -080044import java.util.Set;
45import java.util.concurrent.Executor;
46import java.util.concurrent.atomic.AtomicLong;
47import java.util.stream.Collectors;
Andrea Campanellacbbb7952019-11-25 06:38:41 +000048
49public class TestBase {
50
51 protected static final String CLIENT_NAS_PORT_ID = "PON 1/1";
52 protected static final String CLIENT_CIRCUIT_ID = "CIR-PON 1/1";
53 protected static final String OLT_DEV_ID = "of:00000000000000aa";
54 protected static final DeviceId DEVICE_ID_1 = DeviceId.deviceId(OLT_DEV_ID);
55 protected MeterId usMeterId = MeterId.meterId(1);
56 protected MeterId dsMeterId = MeterId.meterId(2);
yasin saplib4b8ee12021-06-13 18:25:20 +000057 protected MeterId usOltMeterId = MeterId.meterId(3);
58 protected MeterId dsOltMeterId = MeterId.meterId(4);
Andrea Campanellacbbb7952019-11-25 06:38:41 +000059 protected String usBpId = "HSIA-US";
60 protected String dsBpId = "HSIA-DS";
61 protected DefaultApplicationId appId = new DefaultApplicationId(1, "OltServices");
62
Tunahan Sezenf0843b92021-04-30 07:13:16 +000063 protected static Device olt = new DefaultDevice(null, DeviceId.deviceId(OLT_DEV_ID), Device.Type.SWITCH,
64 "VOLTHA Project", "open_pon", "open_pon", "BBSIM_OLT_1", new ChassisId("a0a0a0a0a01"));
65
Andrea Campanellacbbb7952019-11-25 06:38:41 +000066 Map<String, BandwidthProfileInformation> bpInformation = Maps.newConcurrentMap();
67
68 protected void addBandwidthProfile(String id) {
69 BandwidthProfileInformation bpInfo = new BandwidthProfileInformation();
Gamze Abakaf46ab432021-03-03 10:51:17 +000070 bpInfo.setGuaranteedInformationRate(0);
Andrea Campanellacbbb7952019-11-25 06:38:41 +000071 bpInfo.setCommittedInformationRate(10000);
72 bpInfo.setCommittedBurstSize(1000L);
73 bpInfo.setExceededBurstSize(2000L);
74 bpInfo.setExceededInformationRate(20000);
75 bpInformation.put(id, bpInfo);
76 }
77
78 protected class MockSadisService implements SadisService {
79
80 @Override
81 public BaseInformationService<SubscriberAndDeviceInformation> getSubscriberInfoService() {
82 return new MockSubService();
83 }
84
85 @Override
86 public BaseInformationService<BandwidthProfileInformation> getBandwidthProfileService() {
87 return new MockBpService();
88 }
89 }
90
91 private class MockBpService implements BaseInformationService<BandwidthProfileInformation> {
Andrea Campanellacbbb7952019-11-25 06:38:41 +000092 @Override
Ilayda Ozdemir90a93622021-02-25 09:40:58 +000093 public void clearLocalData() {
94
95 }
96
97 @Override
Andrea Campanellacbbb7952019-11-25 06:38:41 +000098 public void invalidateAll() {
99
100 }
101
102 @Override
103 public void invalidateId(String id) {
104
105 }
106
107 @Override
108 public BandwidthProfileInformation get(String id) {
109 return bpInformation.get(id);
110 }
111
112 @Override
113 public BandwidthProfileInformation getfromCache(String id) {
114 return null;
115 }
116 }
117
118 private class MockSubService implements BaseInformationService<SubscriberAndDeviceInformation> {
119 MockSubscriberAndDeviceInformation sub =
120 new MockSubscriberAndDeviceInformation(CLIENT_NAS_PORT_ID,
121 CLIENT_NAS_PORT_ID, CLIENT_CIRCUIT_ID, null, null);
122
123 @Override
124 public SubscriberAndDeviceInformation get(String id) {
125 return sub;
126 }
127
128 @Override
Ilayda Ozdemir90a93622021-02-25 09:40:58 +0000129 public void clearLocalData() {
130
131 }
132
133 @Override
Andrea Campanellacbbb7952019-11-25 06:38:41 +0000134 public void invalidateAll() {
135 }
136
137 @Override
138 public void invalidateId(String id) {
139 }
140
141 @Override
142 public SubscriberAndDeviceInformation getfromCache(String id) {
143 return null;
144 }
145 }
146
147 private class MockSubscriberAndDeviceInformation extends SubscriberAndDeviceInformation {
148
149 MockSubscriberAndDeviceInformation(String id, String nasPortId,
150 String circuitId, MacAddress hardId,
151 Ip4Address ipAddress) {
152 this.setHardwareIdentifier(hardId);
153 this.setId(id);
154 this.setIPAddress(ipAddress);
155 this.setNasPortId(nasPortId);
156 this.setCircuitId(circuitId);
157 }
158 }
Jonathan Hart4f178fa2020-02-03 10:46:01 -0800159
160 class MockConsistentMultimap<K, V> implements ConsistentMultimap<K, V> {
161 private HashMultimap<K, Versioned<V>> innermap;
162 private AtomicLong counter = new AtomicLong();
163
164 public MockConsistentMultimap() {
165 this.innermap = HashMultimap.create();
166 }
167
168 private Versioned<V> version(V v) {
169 return new Versioned<>(v, counter.incrementAndGet(), System.currentTimeMillis());
170 }
171
172 private Versioned<Collection<? extends V>> versionCollection(Collection<? extends V> collection) {
173 return new Versioned<>(collection, counter.incrementAndGet(), System.currentTimeMillis());
174 }
175
176 @Override
177 public int size() {
178 return innermap.size();
179 }
180
181 @Override
182 public boolean isEmpty() {
183 return innermap.isEmpty();
184 }
185
186 @Override
187 public boolean containsKey(K key) {
188 return innermap.containsKey(key);
189 }
190
191 @Override
192 public boolean containsValue(V value) {
193 return innermap.containsValue(value);
194 }
195
196 @Override
197 public boolean containsEntry(K key, V value) {
198 return innermap.containsEntry(key, value);
199 }
200
201 @Override
202 public boolean put(K key, V value) {
203 return innermap.put(key, version(value));
204 }
205
206 @Override
207 public Versioned<Collection<? extends V>> putAndGet(K key, V value) {
208 innermap.put(key, version(value));
209 return (Versioned<Collection<? extends V>>) innermap.get(key);
210 }
211
212 @Override
213 public boolean remove(K key, V value) {
214 return innermap.remove(key, value);
215 }
216
217 @Override
218 public Versioned<Collection<? extends V>> removeAndGet(K key, V value) {
219 innermap.remove(key, value);
220 return (Versioned<Collection<? extends V>>) innermap.get(key);
221 }
222
223 @Override
224 public boolean removeAll(K key, Collection<? extends V> values) {
225 return false;
226 }
227
228 @Override
229 public Versioned<Collection<? extends V>> removeAll(K key) {
230 return null;
231 }
232
233 @Override
Andrea Campanellabfb47af2021-06-03 11:09:45 +0200234 public boolean removeAll(Map<K, Collection<? extends V>> mapping) {
235 return false;
236 }
237
238 @Override
Jonathan Hart4f178fa2020-02-03 10:46:01 -0800239 public boolean putAll(K key, Collection<? extends V> values) {
240 return false;
241 }
242
243 @Override
Andrea Campanellabfb47af2021-06-03 11:09:45 +0200244 public boolean putAll(Map<K, Collection<? extends V>> mapping) {
245 return false;
246 }
247
248 @Override
Jonathan Hart4f178fa2020-02-03 10:46:01 -0800249 public Versioned<Collection<? extends V>> replaceValues(K key, Collection<V> values) {
250 return null;
251 }
252
253 @Override
254 public void clear() {
255 innermap.clear();
256 }
257
258 @Override
259 public Versioned<Collection<? extends V>> get(K key) {
260 Collection<? extends V> values = innermap.get(key).stream()
261 .map(v -> v.value())
262 .collect(Collectors.toList());
263 return versionCollection(values);
264 }
265
266 @Override
267 public Set<K> keySet() {
268 return innermap.keySet();
269 }
270
271 @Override
272 public Multiset<K> keys() {
273 return innermap.keys();
274 }
275
276 @Override
277 public Multiset<V> values() {
278 return null;
279 }
280
281 @Override
282 public Collection<Map.Entry<K, V>> entries() {
283 return null;
284 }
285
286 @Override
287 public Iterator<Map.Entry<K, V>> iterator() {
288 return new ConsistentMultimapIterator(innermap.entries().iterator());
289 }
290
291 @Override
292 public Map<K, Collection<V>> asMap() {
293 return null;
294 }
295
296 @Override
297 public void addListener(MultimapEventListener<K, V> listener, Executor executor) {
298 }
299
300 @Override
301 public void removeListener(MultimapEventListener<K, V> listener) {
302 }
303
304 @Override
305 public String name() {
306 return "mock multimap";
307 }
308
309 @Override
310 public Type primitiveType() {
311 return null;
312 }
313
314 private class ConsistentMultimapIterator implements Iterator<Map.Entry<K, V>> {
315
316 private final Iterator<Map.Entry<K, Versioned<V>>> it;
317
318 public ConsistentMultimapIterator(Iterator<Map.Entry<K, Versioned<V>>> it) {
319 this.it = it;
320 }
321
322 @Override
323 public boolean hasNext() {
324 return it.hasNext();
325 }
326
327 @Override
328 public Map.Entry<K, V> next() {
329 Map.Entry<K, Versioned<V>> e = it.next();
330 return new AbstractMap.SimpleEntry<>(e.getKey(), e.getValue().value());
331 }
332 }
333
334 }
335
336 public static TestConsistentMultimap.Builder builder() {
337 return new TestConsistentMultimap.Builder();
338 }
339
340 public static class Builder<K, V> extends ConsistentMultimapBuilder<K, V> {
341
342 @Override
343 public AsyncConsistentMultimap<K, V> buildMultimap() {
344 return null;
345 }
346
347 @Override
348 public ConsistentMultimap<K, V> build() {
349 return new TestConsistentMultimap<K, V>();
350 }
351 }
Andrea Campanellacbbb7952019-11-25 06:38:41 +0000352}