blob: b6546d0531003bb2372bce2459c548acefaa2fe4 [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;
Andrea Campanellacbbb7952019-11-25 06:38:41 +000021import org.onlab.packet.Ip4Address;
22import org.onlab.packet.MacAddress;
23import org.onosproject.core.DefaultApplicationId;
24import org.onosproject.net.DeviceId;
25import org.onosproject.net.meter.MeterId;
Jonathan Hart4f178fa2020-02-03 10:46:01 -080026import org.onosproject.store.service.AsyncConsistentMultimap;
27import org.onosproject.store.service.ConsistentMultimap;
28import org.onosproject.store.service.ConsistentMultimapBuilder;
29import org.onosproject.store.service.MultimapEventListener;
30import org.onosproject.store.service.TestConsistentMultimap;
31import org.onosproject.store.service.Versioned;
Andrea Campanellacbbb7952019-11-25 06:38:41 +000032import org.opencord.sadis.BandwidthProfileInformation;
33import org.opencord.sadis.BaseInformationService;
34import org.opencord.sadis.SadisService;
35import org.opencord.sadis.SubscriberAndDeviceInformation;
36
Jonathan Hart4f178fa2020-02-03 10:46:01 -080037import java.util.AbstractMap;
38import java.util.Collection;
39import java.util.Iterator;
Andrea Campanellacbbb7952019-11-25 06:38:41 +000040import java.util.Map;
Jonathan Hart4f178fa2020-02-03 10:46:01 -080041import java.util.Set;
42import java.util.concurrent.Executor;
43import java.util.concurrent.atomic.AtomicLong;
44import java.util.stream.Collectors;
Andrea Campanellacbbb7952019-11-25 06:38:41 +000045
46public class TestBase {
47
48 protected static final String CLIENT_NAS_PORT_ID = "PON 1/1";
49 protected static final String CLIENT_CIRCUIT_ID = "CIR-PON 1/1";
50 protected static final String OLT_DEV_ID = "of:00000000000000aa";
51 protected static final DeviceId DEVICE_ID_1 = DeviceId.deviceId(OLT_DEV_ID);
52 protected MeterId usMeterId = MeterId.meterId(1);
53 protected MeterId dsMeterId = MeterId.meterId(2);
54 protected String usBpId = "HSIA-US";
55 protected String dsBpId = "HSIA-DS";
56 protected DefaultApplicationId appId = new DefaultApplicationId(1, "OltServices");
57
58 Map<String, BandwidthProfileInformation> bpInformation = Maps.newConcurrentMap();
59
60 protected void addBandwidthProfile(String id) {
61 BandwidthProfileInformation bpInfo = new BandwidthProfileInformation();
62 bpInfo.setAssuredInformationRate(0);
63 bpInfo.setCommittedInformationRate(10000);
64 bpInfo.setCommittedBurstSize(1000L);
65 bpInfo.setExceededBurstSize(2000L);
66 bpInfo.setExceededInformationRate(20000);
67 bpInformation.put(id, bpInfo);
68 }
69
70 protected class MockSadisService implements SadisService {
71
72 @Override
73 public BaseInformationService<SubscriberAndDeviceInformation> getSubscriberInfoService() {
74 return new MockSubService();
75 }
76
77 @Override
78 public BaseInformationService<BandwidthProfileInformation> getBandwidthProfileService() {
79 return new MockBpService();
80 }
81 }
82
83 private class MockBpService implements BaseInformationService<BandwidthProfileInformation> {
Andrea Campanellacbbb7952019-11-25 06:38:41 +000084 @Override
Ilayda Ozdemir90a93622021-02-25 09:40:58 +000085 public void clearLocalData() {
86
87 }
88
89 @Override
Andrea Campanellacbbb7952019-11-25 06:38:41 +000090 public void invalidateAll() {
91
92 }
93
94 @Override
95 public void invalidateId(String id) {
96
97 }
98
99 @Override
100 public BandwidthProfileInformation get(String id) {
101 return bpInformation.get(id);
102 }
103
104 @Override
105 public BandwidthProfileInformation getfromCache(String id) {
106 return null;
107 }
108 }
109
110 private class MockSubService implements BaseInformationService<SubscriberAndDeviceInformation> {
111 MockSubscriberAndDeviceInformation sub =
112 new MockSubscriberAndDeviceInformation(CLIENT_NAS_PORT_ID,
113 CLIENT_NAS_PORT_ID, CLIENT_CIRCUIT_ID, null, null);
114
115 @Override
116 public SubscriberAndDeviceInformation get(String id) {
117 return sub;
118 }
119
120 @Override
Ilayda Ozdemir90a93622021-02-25 09:40:58 +0000121 public void clearLocalData() {
122
123 }
124
125 @Override
Andrea Campanellacbbb7952019-11-25 06:38:41 +0000126 public void invalidateAll() {
127 }
128
129 @Override
130 public void invalidateId(String id) {
131 }
132
133 @Override
134 public SubscriberAndDeviceInformation getfromCache(String id) {
135 return null;
136 }
137 }
138
139 private class MockSubscriberAndDeviceInformation extends SubscriberAndDeviceInformation {
140
141 MockSubscriberAndDeviceInformation(String id, String nasPortId,
142 String circuitId, MacAddress hardId,
143 Ip4Address ipAddress) {
144 this.setHardwareIdentifier(hardId);
145 this.setId(id);
146 this.setIPAddress(ipAddress);
147 this.setNasPortId(nasPortId);
148 this.setCircuitId(circuitId);
149 }
150 }
Jonathan Hart4f178fa2020-02-03 10:46:01 -0800151
152 class MockConsistentMultimap<K, V> implements ConsistentMultimap<K, V> {
153 private HashMultimap<K, Versioned<V>> innermap;
154 private AtomicLong counter = new AtomicLong();
155
156 public MockConsistentMultimap() {
157 this.innermap = HashMultimap.create();
158 }
159
160 private Versioned<V> version(V v) {
161 return new Versioned<>(v, counter.incrementAndGet(), System.currentTimeMillis());
162 }
163
164 private Versioned<Collection<? extends V>> versionCollection(Collection<? extends V> collection) {
165 return new Versioned<>(collection, counter.incrementAndGet(), System.currentTimeMillis());
166 }
167
168 @Override
169 public int size() {
170 return innermap.size();
171 }
172
173 @Override
174 public boolean isEmpty() {
175 return innermap.isEmpty();
176 }
177
178 @Override
179 public boolean containsKey(K key) {
180 return innermap.containsKey(key);
181 }
182
183 @Override
184 public boolean containsValue(V value) {
185 return innermap.containsValue(value);
186 }
187
188 @Override
189 public boolean containsEntry(K key, V value) {
190 return innermap.containsEntry(key, value);
191 }
192
193 @Override
194 public boolean put(K key, V value) {
195 return innermap.put(key, version(value));
196 }
197
198 @Override
199 public Versioned<Collection<? extends V>> putAndGet(K key, V value) {
200 innermap.put(key, version(value));
201 return (Versioned<Collection<? extends V>>) innermap.get(key);
202 }
203
204 @Override
205 public boolean remove(K key, V value) {
206 return innermap.remove(key, value);
207 }
208
209 @Override
210 public Versioned<Collection<? extends V>> removeAndGet(K key, V value) {
211 innermap.remove(key, value);
212 return (Versioned<Collection<? extends V>>) innermap.get(key);
213 }
214
215 @Override
216 public boolean removeAll(K key, Collection<? extends V> values) {
217 return false;
218 }
219
220 @Override
221 public Versioned<Collection<? extends V>> removeAll(K key) {
222 return null;
223 }
224
225 @Override
226 public boolean putAll(K key, Collection<? extends V> values) {
227 return false;
228 }
229
230 @Override
231 public Versioned<Collection<? extends V>> replaceValues(K key, Collection<V> values) {
232 return null;
233 }
234
235 @Override
236 public void clear() {
237 innermap.clear();
238 }
239
240 @Override
241 public Versioned<Collection<? extends V>> get(K key) {
242 Collection<? extends V> values = innermap.get(key).stream()
243 .map(v -> v.value())
244 .collect(Collectors.toList());
245 return versionCollection(values);
246 }
247
248 @Override
249 public Set<K> keySet() {
250 return innermap.keySet();
251 }
252
253 @Override
254 public Multiset<K> keys() {
255 return innermap.keys();
256 }
257
258 @Override
259 public Multiset<V> values() {
260 return null;
261 }
262
263 @Override
264 public Collection<Map.Entry<K, V>> entries() {
265 return null;
266 }
267
268 @Override
269 public Iterator<Map.Entry<K, V>> iterator() {
270 return new ConsistentMultimapIterator(innermap.entries().iterator());
271 }
272
273 @Override
274 public Map<K, Collection<V>> asMap() {
275 return null;
276 }
277
278 @Override
279 public void addListener(MultimapEventListener<K, V> listener, Executor executor) {
280 }
281
282 @Override
283 public void removeListener(MultimapEventListener<K, V> listener) {
284 }
285
286 @Override
287 public String name() {
288 return "mock multimap";
289 }
290
291 @Override
292 public Type primitiveType() {
293 return null;
294 }
295
296 private class ConsistentMultimapIterator implements Iterator<Map.Entry<K, V>> {
297
298 private final Iterator<Map.Entry<K, Versioned<V>>> it;
299
300 public ConsistentMultimapIterator(Iterator<Map.Entry<K, Versioned<V>>> it) {
301 this.it = it;
302 }
303
304 @Override
305 public boolean hasNext() {
306 return it.hasNext();
307 }
308
309 @Override
310 public Map.Entry<K, V> next() {
311 Map.Entry<K, Versioned<V>> e = it.next();
312 return new AbstractMap.SimpleEntry<>(e.getKey(), e.getValue().value());
313 }
314 }
315
316 }
317
318 public static TestConsistentMultimap.Builder builder() {
319 return new TestConsistentMultimap.Builder();
320 }
321
322 public static class Builder<K, V> extends ConsistentMultimapBuilder<K, V> {
323
324 @Override
325 public AsyncConsistentMultimap<K, V> buildMultimap() {
326 return null;
327 }
328
329 @Override
330 public ConsistentMultimap<K, V> build() {
331 return new TestConsistentMultimap<K, V>();
332 }
333 }
Andrea Campanellacbbb7952019-11-25 06:38:41 +0000334}