blob: b4baf4c0add801d7e6468adb9d2155e62b7a4a9d [file] [log] [blame]
pierventre85208182021-09-02 19:16:32 +02001/*
2 * Copyright 2021-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 */
16
17package org.onosproject.drivers.barefoot;
18
19import com.google.common.collect.ImmutableMap;
20import org.junit.Before;
21import org.junit.Test;
22import org.onosproject.net.pi.model.PiMeterId;
23import org.onosproject.net.pi.runtime.PiMeterBand;
24import org.onosproject.net.pi.runtime.PiMeterBandType;
25import org.onosproject.net.pi.runtime.PiMeterCellConfig;
26import org.onosproject.net.pi.runtime.PiMeterCellId;
27
28import java.util.Map;
29
30import static junit.framework.TestCase.assertFalse;
31import static junit.framework.TestCase.assertTrue;
32
33/**
34 * Test for TofinoMeterProgrammable behavior.
35 */
36public class TofinoMeterProgrammableTest {
37
38 private TofinoMeterProgrammable meterProgrammable;
39 private PiMeterCellId meterCellId = PiMeterCellId.ofIndirect(PiMeterId.of("foo"), 0);
40
41 private static final Map<Long, Long> RATES = ImmutableMap.<Long, Long>builder()
42 .put(125000L, 124500L)
43 .put(244800L, 244375L)
44 .put(300000L, 299125L)
45 .build();
46 private static final Map<Long, Long> WRONG_RATES = ImmutableMap.<Long, Long>builder()
47 .put(12500L, 0L)
48 .put(60000L, 0L)
49 .put(124900L, 0L)
50 .put(12501L, 12000L)
51 .put(60001L, 58000L)
52 .put(124901L, 122400L)
53 .put(12502L, 12800L)
54 .put(60002L, 62000L)
55 .put(124902L, 128000L)
56 .build();
57
58 private static final Map<Long, Long> BURSTS = ImmutableMap.<Long, Long>builder()
59 .put(1482L, 1375L)
60 .put(7410L, 7375L)
61 .put(14820L, 14750L)
62 .build();
63
64 private static final Map<Long, Long> WRONG_BURSTS = ImmutableMap.<Long, Long>builder()
65 .put(1482L, 1374L)
66 .put(7410L, 7249L)
67 .put(14820L, 14624L)
68 .put(1483L, 1376L)
69 .put(7411L, 7376L)
70 .put(14821L, 14751L)
71 .build();
72
73 @Before
74 public void setup() {
75 meterProgrammable = new TofinoMeterProgrammable();
76 }
77
78 /**
79 * Test isRateSimilar check of the tofino behavior.
80 */
81 @Test
82 public void testIsRateSimilar() {
83 PiMeterBand onosMeterBand;
84 PiMeterBand deviceMeterBand;
85 PiMeterCellConfig onosMeter;
86 PiMeterCellConfig deviceMeter;
87 for (Map.Entry<Long, Long> entry : RATES.entrySet()) {
88 onosMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, entry.getKey(), 0);
89 deviceMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, entry.getValue(), 0);
90 onosMeter = PiMeterCellConfig.builder()
91 .withMeterCellId(meterCellId)
92 .withMeterBand(onosMeterBand)
93 .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0))
94 .build();
95 deviceMeter = PiMeterCellConfig.builder()
96 .withMeterCellId(meterCellId)
97 .withMeterBand(deviceMeterBand)
98 .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0))
99 .build();
100 assertTrue(meterProgrammable.isSimilar(onosMeter, deviceMeter));
101 }
102 }
103
104 /**
105 * Test wrong isRateSimilar of the tofino behavior.
106 */
107 @Test
108 public void testWrongIsRateSimilar() {
109 PiMeterBand onosMeterBand;
110 PiMeterBand deviceMeterBand;
111 PiMeterCellConfig onosMeter;
112 PiMeterCellConfig deviceMeter;
113 for (Map.Entry<Long, Long> entry : WRONG_RATES.entrySet()) {
114 onosMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, entry.getKey(), 0);
115 deviceMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, entry.getValue(), 0);
116 onosMeter = PiMeterCellConfig.builder()
117 .withMeterCellId(meterCellId)
118 .withMeterBand(onosMeterBand)
119 .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0))
120 .build();
121 deviceMeter = PiMeterCellConfig.builder()
122 .withMeterCellId(meterCellId)
123 .withMeterBand(deviceMeterBand)
124 .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0))
125 .build();
126 assertFalse(meterProgrammable.isSimilar(onosMeter, deviceMeter));
127 }
128 }
129
130 /**
131 * Test isBurstSimilar of the tofino behavior.
132 */
133 @Test
134 public void testIsBurstSimilar() {
135 PiMeterBand onosMeterBand;
136 PiMeterBand deviceMeterBand;
137 PiMeterCellConfig onosMeter;
138 PiMeterCellConfig deviceMeter;
139 for (Map.Entry<Long, Long> entry : BURSTS.entrySet()) {
140 onosMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, 0, entry.getKey());
141 deviceMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, 0, entry.getValue());
142 onosMeter = PiMeterCellConfig.builder()
143 .withMeterCellId(meterCellId)
144 .withMeterBand(onosMeterBand)
145 .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0))
146 .build();
147 deviceMeter = PiMeterCellConfig.builder()
148 .withMeterCellId(meterCellId)
149 .withMeterBand(deviceMeterBand)
150 .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0))
151 .build();
152 assertTrue(meterProgrammable.isSimilar(onosMeter, deviceMeter));
153 }
154 }
155
156 /**
157 * Test wrong isBurstSimilar of the tofino behavior.
158 */
159 @Test
160 public void testWrongIsBurstSimilar() {
161 PiMeterBand onosMeterBand;
162 PiMeterBand deviceMeterBand;
163 PiMeterCellConfig onosMeter;
164 PiMeterCellConfig deviceMeter;
165 for (Map.Entry<Long, Long> entry : WRONG_BURSTS.entrySet()) {
166 onosMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, 0, entry.getKey());
167 deviceMeterBand = new PiMeterBand(PiMeterBandType.COMMITTED, 0, entry.getValue());
168 onosMeter = PiMeterCellConfig.builder()
169 .withMeterCellId(meterCellId)
170 .withMeterBand(onosMeterBand)
171 .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0))
172 .build();
173 deviceMeter = PiMeterCellConfig.builder()
174 .withMeterCellId(meterCellId)
175 .withMeterBand(deviceMeterBand)
176 .withMeterBand(new PiMeterBand(PiMeterBandType.PEAK, 0, 0))
177 .build();
178 assertFalse(meterProgrammable.isSimilar(onosMeter, deviceMeter));
179 }
180 }
181
182}