[ONOS-7003] Policer implementation
Changes:
- Introduce trafficcontrol package
- Add policer
- Add policer id
- Add policing resource
- Add token bucket
- Add unit tests
Change-Id: I70065d58d3df7033e67a81943ebf60187c33c3e2
diff --git a/core/api/src/test/java/org/onosproject/net/behaviour/trafficcontrol/PolicerIdTest.java b/core/api/src/test/java/org/onosproject/net/behaviour/trafficcontrol/PolicerIdTest.java
new file mode 100644
index 0000000..883f40d
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/net/behaviour/trafficcontrol/PolicerIdTest.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2017-present Open Networking Foundation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.net.behaviour.trafficcontrol;
+
+import com.google.common.base.Strings;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.onlab.junit.ImmutableClassChecker;
+
+import java.net.URI;
+
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Test class for PolicerId.
+ */
+public class PolicerIdTest {
+
+ // Test scheme
+ private static final String FOO_SCHEME = "foo";
+ // OpenFlow scheme
+ private static final String OF_SCHEME = "of";
+ // Some test ids
+ private static final Short ONE = 1;
+ private static final Short TWO = 15;
+ private static final String A = "A";
+ private static final String LA = "a";
+
+ /**
+ * Test policer id creation from URI.
+ */
+ @Test
+ public void testfromUriCreation() {
+ // Create URI representing the id
+ URI uriOne = URI.create(OF_SCHEME + ":" + Integer.toHexString(ONE));
+ // Create policer id
+ PolicerId one = PolicerId.policerId(uriOne);
+ // Verify proper creation
+ assertThat(one, notNullValue());
+ assertThat(one.id(), is(uriOne.toString().toLowerCase()));
+ assertThat(one.uri(), is(uriOne));
+ }
+
+ /**
+ * Test policer id creation from string.
+ */
+ @Test
+ public void testfromStringCreation() {
+ // Create String representing the id
+ String stringTwo = OF_SCHEME + ":" + Integer.toHexString(TWO);
+ // Create policer id
+ PolicerId two = PolicerId.policerId(stringTwo);
+ // Verify proper creation
+ assertThat(two, notNullValue());
+ assertThat(two.id(), is(stringTwo));
+ assertThat(two.uri(), is(URI.create(stringTwo)));
+ }
+
+ /**
+ * Exception expected to raise when creating a wrong policer id.
+ */
+ @Rule
+ public ExpectedException exceptionWrongId = ExpectedException.none();
+
+ /**
+ * Test wrong creation of a policer id.
+ */
+ @Test
+ public void testWrongCreation() {
+ // Build not allowed string
+ String wrongString = Strings.repeat("x", 1025);
+ // Define expected exception
+ exceptionWrongId.expect(IllegalArgumentException.class);
+ // Create policer id
+ PolicerId.policerId(wrongString);
+ }
+
+ /**
+ * Test equality between policer ids.
+ */
+ @Test
+ public void testEquality() {
+ // Create URI representing the id one
+ URI uriOne = URI.create(OF_SCHEME + ":" + Integer.toHexString(ONE));
+ // Create String representing the id one
+ String stringOne = OF_SCHEME + ":" + Integer.toHexString(ONE);
+ // Create String representing the id two
+ String stringTwo = OF_SCHEME + ":" + Integer.toHexString(TWO);
+ // Create String representing the id A
+ String stringA = FOO_SCHEME + ":" + A;
+ // Create String representing the id LA
+ String stringLA = FOO_SCHEME + ":" + LA;
+ // Create policer id one
+ PolicerId one = PolicerId.policerId(uriOne);
+ // Create policer id one
+ PolicerId copyOfOne = PolicerId.policerId(stringOne);
+ // Verify equality
+ assertEquals(one, copyOfOne);
+ // Create a different policer id
+ PolicerId two = PolicerId.policerId(stringTwo);
+ // Verify not equals
+ assertNotEquals(two, one);
+ assertNotEquals(two, copyOfOne);
+ // Create policer id A
+ PolicerId a = PolicerId.policerId(A);
+ // Create policer id LA
+ PolicerId la = PolicerId.policerId(LA);
+ // Verify not equals
+ assertNotEquals(a, la);
+ }
+
+ /**
+ * Tests immutability of PolicerId.
+ */
+ @Test
+ public void testImmutability() {
+ ImmutableClassChecker.assertThatClassIsImmutable(PolicerId.class);
+ }
+
+}