mirror of
https://github.com/opennetworkinglab/onos.git
synced 2025-11-03 17:51:26 +01:00
Merge "Unit tests for the DefaultFlowRule class"
This commit is contained in:
commit
702dae8905
@ -58,7 +58,7 @@ public class DefaultFlowRule implements FlowRule {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public DefaultFlowRule(DeviceId deviceId, TrafficSelector selector,
|
public DefaultFlowRule(DeviceId deviceId, TrafficSelector selector,
|
||||||
TrafficTreatment treatement, int priority, ApplicationId appId,
|
TrafficTreatment treatment, int priority, ApplicationId appId,
|
||||||
int timeout, boolean permanent) {
|
int timeout, boolean permanent) {
|
||||||
|
|
||||||
if (priority < FlowRule.MIN_PRIORITY) {
|
if (priority < FlowRule.MIN_PRIORITY) {
|
||||||
@ -68,7 +68,7 @@ public class DefaultFlowRule implements FlowRule {
|
|||||||
this.deviceId = deviceId;
|
this.deviceId = deviceId;
|
||||||
this.priority = priority;
|
this.priority = priority;
|
||||||
this.selector = selector;
|
this.selector = selector;
|
||||||
this.treatment = treatement;
|
this.treatment = treatment;
|
||||||
this.appId = appId.id();
|
this.appId = appId.id();
|
||||||
this.timeout = timeout;
|
this.timeout = timeout;
|
||||||
this.permanent = permanent;
|
this.permanent = permanent;
|
||||||
|
|||||||
@ -0,0 +1,166 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2014 Open Networking Laboratory
|
||||||
|
*
|
||||||
|
* 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.onlab.onos.net.flow;
|
||||||
|
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.onlab.onos.net.DeviceId;
|
||||||
|
import org.onlab.onos.net.intent.IntentTestsMocks;
|
||||||
|
|
||||||
|
import com.google.common.testing.EqualsTester;
|
||||||
|
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
import static org.hamcrest.Matchers.is;
|
||||||
|
import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutableBaseClass;
|
||||||
|
import static org.onlab.onos.net.NetTestTools.did;
|
||||||
|
import static org.onlab.onos.net.NetTestTools.APP_ID;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Unit tests for the default flow rule class.
|
||||||
|
*/
|
||||||
|
public class DefaultFlowRuleTest {
|
||||||
|
private static final IntentTestsMocks.MockSelector SELECTOR =
|
||||||
|
new IntentTestsMocks.MockSelector();
|
||||||
|
private static final IntentTestsMocks.MockTreatment TREATMENT =
|
||||||
|
new IntentTestsMocks.MockTreatment();
|
||||||
|
|
||||||
|
final FlowRule flowRule1 = new MockFlowRule(1);
|
||||||
|
final FlowRule sameAsFlowRule1 = new MockFlowRule(1);
|
||||||
|
final FlowRule flowRule2 = new MockFlowRule(2);
|
||||||
|
final DefaultFlowRule defaultFlowRule1 = new DefaultFlowRule(flowRule1);
|
||||||
|
final DefaultFlowRule sameAsDefaultFlowRule1 = new DefaultFlowRule(sameAsFlowRule1);
|
||||||
|
final DefaultFlowRule defaultFlowRule2 = new DefaultFlowRule(flowRule2);
|
||||||
|
|
||||||
|
private static class MockFlowRule implements FlowRule {
|
||||||
|
|
||||||
|
int priority;
|
||||||
|
MockFlowRule(int priority) {
|
||||||
|
this.priority = priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public FlowId id() {
|
||||||
|
return FlowId.valueOf(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public short appId() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int priority() {
|
||||||
|
return priority;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public DeviceId deviceId() {
|
||||||
|
return did("1");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TrafficSelector selector() {
|
||||||
|
return SELECTOR;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public TrafficTreatment treatment() {
|
||||||
|
return TREATMENT;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int timeout() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isPermanent() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Checks that the DefaultFlowRule class is immutable but can be inherited
|
||||||
|
* from.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testImmutability() {
|
||||||
|
assertThatClassIsImmutableBaseClass(DefaultFlowRule.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the equals, hashCode and toString methods using Guava EqualsTester.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testEquals() {
|
||||||
|
new EqualsTester()
|
||||||
|
.addEqualityGroup(defaultFlowRule1, sameAsDefaultFlowRule1)
|
||||||
|
.addEqualityGroup(defaultFlowRule2)
|
||||||
|
.testEquals();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests creation of a DefaultFlowRule using a FlowRule constructor.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testCreationFromFlowRule() {
|
||||||
|
assertThat(defaultFlowRule1.deviceId(), is(flowRule1.deviceId()));
|
||||||
|
assertThat(defaultFlowRule1.appId(), is(flowRule1.appId()));
|
||||||
|
assertThat(defaultFlowRule1.id(), is(flowRule1.id()));
|
||||||
|
assertThat(defaultFlowRule1.isPermanent(), is(flowRule1.isPermanent()));
|
||||||
|
assertThat(defaultFlowRule1.priority(), is(flowRule1.priority()));
|
||||||
|
assertThat(defaultFlowRule1.selector(), is(flowRule1.selector()));
|
||||||
|
assertThat(defaultFlowRule1.treatment(), is(flowRule1.treatment()));
|
||||||
|
assertThat(defaultFlowRule1.timeout(), is(flowRule1.timeout()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests creation of a DefaultFlowRule using a FlowId constructor.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testCreationWithFlowId() {
|
||||||
|
final DefaultFlowRule rule =
|
||||||
|
new DefaultFlowRule(did("1"), SELECTOR,
|
||||||
|
TREATMENT, 22, 33,
|
||||||
|
44, false);
|
||||||
|
assertThat(rule.deviceId(), is(did("1")));
|
||||||
|
assertThat(rule.id().value(), is(33L));
|
||||||
|
assertThat(rule.isPermanent(), is(false));
|
||||||
|
assertThat(rule.priority(), is(22));
|
||||||
|
assertThat(rule.selector(), is(SELECTOR));
|
||||||
|
assertThat(rule.treatment(), is(TREATMENT));
|
||||||
|
assertThat(rule.timeout(), is(44));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tests the creation of a DefaultFlowRule using an AppId constructor.
|
||||||
|
*/
|
||||||
|
@Test
|
||||||
|
public void testCreationWithAppId() {
|
||||||
|
final DefaultFlowRule rule =
|
||||||
|
new DefaultFlowRule(did("1"), SELECTOR,
|
||||||
|
TREATMENT, 22, APP_ID,
|
||||||
|
44, false);
|
||||||
|
assertThat(rule.deviceId(), is(did("1")));
|
||||||
|
assertThat(rule.isPermanent(), is(false));
|
||||||
|
assertThat(rule.priority(), is(22));
|
||||||
|
assertThat(rule.selector(), is(SELECTOR));
|
||||||
|
assertThat(rule.treatment(), is(TREATMENT));
|
||||||
|
assertThat(rule.timeout(), is(44));
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -43,9 +43,9 @@ public class ImmutableClassChecker {
|
|||||||
* @param clazz the class to check
|
* @param clazz the class to check
|
||||||
* @return true if the given class is a properly specified immutable class.
|
* @return true if the given class is a properly specified immutable class.
|
||||||
*/
|
*/
|
||||||
private boolean isImmutableClass(Class<?> clazz) {
|
private boolean isImmutableClass(Class<?> clazz, boolean allowNonFinalClass) {
|
||||||
// class must be declared final
|
// class must be declared final
|
||||||
if (!Modifier.isFinal(clazz.getModifiers())) {
|
if (!allowNonFinalClass && !Modifier.isFinal(clazz.getModifiers())) {
|
||||||
failureReason = "a class that is not final";
|
failureReason = "a class that is not final";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -113,16 +113,16 @@ public class ImmutableClassChecker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Assert that the given class adheres to the utility class rules.
|
* Assert that the given class adheres to the immutable class rules.
|
||||||
*
|
*
|
||||||
* @param clazz the class to check
|
* @param clazz the class to check
|
||||||
*
|
*
|
||||||
* @throws java.lang.AssertionError if the class is not a valid
|
* @throws java.lang.AssertionError if the class is not an
|
||||||
* utility class
|
* immutable class
|
||||||
*/
|
*/
|
||||||
public static void assertThatClassIsImmutable(Class<?> clazz) {
|
public static void assertThatClassIsImmutable(Class<?> clazz) {
|
||||||
final ImmutableClassChecker checker = new ImmutableClassChecker();
|
final ImmutableClassChecker checker = new ImmutableClassChecker();
|
||||||
if (!checker.isImmutableClass(clazz)) {
|
if (!checker.isImmutableClass(clazz, false)) {
|
||||||
final Description toDescription = new StringDescription();
|
final Description toDescription = new StringDescription();
|
||||||
final Description mismatchDescription = new StringDescription();
|
final Description mismatchDescription = new StringDescription();
|
||||||
|
|
||||||
@ -136,4 +136,31 @@ public class ImmutableClassChecker {
|
|||||||
throw new AssertionError(reason);
|
throw new AssertionError(reason);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assert that the given class adheres to the immutable class rules, but
|
||||||
|
* is not declared final. Classes that need to be inherited from cannot be
|
||||||
|
* declared final.
|
||||||
|
*
|
||||||
|
* @param clazz the class to check
|
||||||
|
*
|
||||||
|
* @throws java.lang.AssertionError if the class is not an
|
||||||
|
* immutable class
|
||||||
|
*/
|
||||||
|
public static void assertThatClassIsImmutableBaseClass(Class<?> clazz) {
|
||||||
|
final ImmutableClassChecker checker = new ImmutableClassChecker();
|
||||||
|
if (!checker.isImmutableClass(clazz, true)) {
|
||||||
|
final Description toDescription = new StringDescription();
|
||||||
|
final Description mismatchDescription = new StringDescription();
|
||||||
|
|
||||||
|
checker.describeTo(toDescription);
|
||||||
|
checker.describeMismatch(mismatchDescription);
|
||||||
|
final String reason =
|
||||||
|
"\n" +
|
||||||
|
"Expected: is \"" + toDescription.toString() + "\"\n" +
|
||||||
|
" but : was \"" + mismatchDescription.toString() + "\"";
|
||||||
|
|
||||||
|
throw new AssertionError(reason);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user