blob: bc5a4d65f3fca92d346280b7fca5f2b5389a6582 [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> {
84
85 @Override
86 public void invalidateAll() {
87
88 }
89
90 @Override
91 public void invalidateId(String id) {
92
93 }
94
95 @Override
96 public BandwidthProfileInformation get(String id) {
97 return bpInformation.get(id);
98 }
99
100 @Override
101 public BandwidthProfileInformation getfromCache(String id) {
102 return null;
103 }
104 }
105
106 private class MockSubService implements BaseInformationService<SubscriberAndDeviceInformation> {
107 MockSubscriberAndDeviceInformation sub =
108 new MockSubscriberAndDeviceInformation(CLIENT_NAS_PORT_ID,
109 CLIENT_NAS_PORT_ID, CLIENT_CIRCUIT_ID, null, null);
110
111 @Override
112 public SubscriberAndDeviceInformation get(String id) {
113 return sub;
114 }
115
116 @Override
117 public void invalidateAll() {
118 }
119
120 @Override
121 public void invalidateId(String id) {
122 }
123
124 @Override
125 public SubscriberAndDeviceInformation getfromCache(String id) {
126 return null;
127 }
128 }
129
130 private class MockSubscriberAndDeviceInformation extends SubscriberAndDeviceInformation {
131
132 MockSubscriberAndDeviceInformation(String id, String nasPortId,
133 String circuitId, MacAddress hardId,
134 Ip4Address ipAddress) {
135 this.setHardwareIdentifier(hardId);
136 this.setId(id);
137 this.setIPAddress(ipAddress);
138 this.setNasPortId(nasPortId);
139 this.setCircuitId(circuitId);
140 }
141 }
Jonathan Hart4f178fa2020-02-03 10:46:01 -0800142
143 class MockConsistentMultimap<K, V> implements ConsistentMultimap<K, V> {
144 private HashMultimap<K, Versioned<V>> innermap;
145 private AtomicLong counter = new AtomicLong();
146
147 public MockConsistentMultimap() {
148 this.innermap = HashMultimap.create();
149 }
150
151 private Versioned<V> version(V v) {
152 return new Versioned<>(v, counter.incrementAndGet(), System.currentTimeMillis());
153 }
154
155 private Versioned<Collection<? extends V>> versionCollection(Collection<? extends V> collection) {
156 return new Versioned<>(collection, counter.incrementAndGet(), System.currentTimeMillis());
157 }
158
159 @Override
160 public int size() {
161 return innermap.size();
162 }
163
164 @Override
165 public boolean isEmpty() {
166 return innermap.isEmpty();
167 }
168
169 @Override
170 public boolean containsKey(K key) {
171 return innermap.containsKey(key);
172 }
173
174 @Override
175 public boolean containsValue(V value) {
176 return innermap.containsValue(value);
177 }
178
179 @Override
180 public boolean containsEntry(K key, V value) {
181 return innermap.containsEntry(key, value);
182 }
183
184 @Override
185 public boolean put(K key, V value) {
186 return innermap.put(key, version(value));
187 }
188
189 @Override
190 public Versioned<Collection<? extends V>> putAndGet(K key, V value) {
191 innermap.put(key, version(value));
192 return (Versioned<Collection<? extends V>>) innermap.get(key);
193 }
194
195 @Override
196 public boolean remove(K key, V value) {
197 return innermap.remove(key, value);
198 }
199
200 @Override
201 public Versioned<Collection<? extends V>> removeAndGet(K key, V value) {
202 innermap.remove(key, value);
203 return (Versioned<Collection<? extends V>>) innermap.get(key);
204 }
205
206 @Override
207 public boolean removeAll(K key, Collection<? extends V> values) {
208 return false;
209 }
210
211 @Override
212 public Versioned<Collection<? extends V>> removeAll(K key) {
213 return null;
214 }
215
216 @Override
217 public boolean putAll(K key, Collection<? extends V> values) {
218 return false;
219 }
220
221 @Override
222 public Versioned<Collection<? extends V>> replaceValues(K key, Collection<V> values) {
223 return null;
224 }
225
226 @Override
227 public void clear() {
228 innermap.clear();
229 }
230
231 @Override
232 public Versioned<Collection<? extends V>> get(K key) {
233 Collection<? extends V> values = innermap.get(key).stream()
234 .map(v -> v.value())
235 .collect(Collectors.toList());
236 return versionCollection(values);
237 }
238
239 @Override
240 public Set<K> keySet() {
241 return innermap.keySet();
242 }
243
244 @Override
245 public Multiset<K> keys() {
246 return innermap.keys();
247 }
248
249 @Override
250 public Multiset<V> values() {
251 return null;
252 }
253
254 @Override
255 public Collection<Map.Entry<K, V>> entries() {
256 return null;
257 }
258
259 @Override
260 public Iterator<Map.Entry<K, V>> iterator() {
261 return new ConsistentMultimapIterator(innermap.entries().iterator());
262 }
263
264 @Override
265 public Map<K, Collection<V>> asMap() {
266 return null;
267 }
268
269 @Override
270 public void addListener(MultimapEventListener<K, V> listener, Executor executor) {
271 }
272
273 @Override
274 public void removeListener(MultimapEventListener<K, V> listener) {
275 }
276
277 @Override
278 public String name() {
279 return "mock multimap";
280 }
281
282 @Override
283 public Type primitiveType() {
284 return null;
285 }
286
287 private class ConsistentMultimapIterator implements Iterator<Map.Entry<K, V>> {
288
289 private final Iterator<Map.Entry<K, Versioned<V>>> it;
290
291 public ConsistentMultimapIterator(Iterator<Map.Entry<K, Versioned<V>>> it) {
292 this.it = it;
293 }
294
295 @Override
296 public boolean hasNext() {
297 return it.hasNext();
298 }
299
300 @Override
301 public Map.Entry<K, V> next() {
302 Map.Entry<K, Versioned<V>> e = it.next();
303 return new AbstractMap.SimpleEntry<>(e.getKey(), e.getValue().value());
304 }
305 }
306
307 }
308
309 public static TestConsistentMultimap.Builder builder() {
310 return new TestConsistentMultimap.Builder();
311 }
312
313 public static class Builder<K, V> extends ConsistentMultimapBuilder<K, V> {
314
315 @Override
316 public AsyncConsistentMultimap<K, V> buildMultimap() {
317 return null;
318 }
319
320 @Override
321 public ConsistentMultimap<K, V> build() {
322 return new TestConsistentMultimap<K, V>();
323 }
324 }
Andrea Campanellacbbb7952019-11-25 06:38:41 +0000325}