HIGUCHI Yuta
Committed by Gerrit Code Review

ONOS-3224 HostToHostIntent should have implicit non-OPTICAL constraint

Change-Id: Ibd6214e9b12199f56f0761cfdaa1eb45a600eb1c
...@@ -17,11 +17,15 @@ package org.onosproject.net.intent; ...@@ -17,11 +17,15 @@ package org.onosproject.net.intent;
17 17
18 import com.google.common.annotations.Beta; 18 import com.google.common.annotations.Beta;
19 import com.google.common.base.MoreObjects; 19 import com.google.common.base.MoreObjects;
20 +import com.google.common.collect.ImmutableList;
20 import com.google.common.collect.ImmutableSet; 21 import com.google.common.collect.ImmutableSet;
22 +
21 import org.onosproject.core.ApplicationId; 23 import org.onosproject.core.ApplicationId;
22 import org.onosproject.net.HostId; 24 import org.onosproject.net.HostId;
25 +import org.onosproject.net.Link;
23 import org.onosproject.net.flow.TrafficSelector; 26 import org.onosproject.net.flow.TrafficSelector;
24 import org.onosproject.net.flow.TrafficTreatment; 27 import org.onosproject.net.flow.TrafficTreatment;
28 +import org.onosproject.net.intent.constraint.LinkTypeConstraint;
25 29
26 import java.util.List; 30 import java.util.List;
27 31
...@@ -33,6 +37,8 @@ import static com.google.common.base.Preconditions.checkNotNull; ...@@ -33,6 +37,8 @@ import static com.google.common.base.Preconditions.checkNotNull;
33 @Beta 37 @Beta
34 public final class HostToHostIntent extends ConnectivityIntent { 38 public final class HostToHostIntent extends ConnectivityIntent {
35 39
40 + static final LinkTypeConstraint NOT_OPTICAL = new LinkTypeConstraint(false, Link.Type.OPTICAL);
41 +
36 private final HostId one; 42 private final HostId one;
37 private final HostId two; 43 private final HostId two;
38 44
...@@ -115,6 +121,15 @@ public final class HostToHostIntent extends ConnectivityIntent { ...@@ -115,6 +121,15 @@ public final class HostToHostIntent extends ConnectivityIntent {
115 */ 121 */
116 public HostToHostIntent build() { 122 public HostToHostIntent build() {
117 123
124 + List<Constraint> theConstraints = constraints;
125 + // If not-OPTICAL constraint hasn't been specified, add them
126 + if (!constraints.contains(NOT_OPTICAL)) {
127 + theConstraints = ImmutableList.<Constraint>builder()
128 + .add(NOT_OPTICAL)
129 + .addAll(constraints)
130 + .build();
131 + }
132 +
118 return new HostToHostIntent( 133 return new HostToHostIntent(
119 appId, 134 appId,
120 key, 135 key,
...@@ -122,7 +137,7 @@ public final class HostToHostIntent extends ConnectivityIntent { ...@@ -122,7 +137,7 @@ public final class HostToHostIntent extends ConnectivityIntent {
122 two, 137 two,
123 selector, 138 selector,
124 treatment, 139 treatment,
125 - constraints, 140 + theConstraints,
126 priority 141 priority
127 ); 142 );
128 } 143 }
......
...@@ -16,15 +16,20 @@ ...@@ -16,15 +16,20 @@
16 package org.onosproject.net.intent; 16 package org.onosproject.net.intent;
17 17
18 import org.junit.Test; 18 import org.junit.Test;
19 +import org.onlab.util.Bandwidth;
19 import org.onosproject.TestApplicationId; 20 import org.onosproject.TestApplicationId;
20 import org.onosproject.core.ApplicationId; 21 import org.onosproject.core.ApplicationId;
21 import org.onosproject.net.HostId; 22 import org.onosproject.net.HostId;
22 import org.onosproject.net.flow.TrafficSelector; 23 import org.onosproject.net.flow.TrafficSelector;
24 +import org.onosproject.net.intent.constraint.BandwidthConstraint;
25 +import org.onosproject.net.resource.link.BandwidthResource;
23 26
27 +import com.google.common.collect.ImmutableList;
24 import com.google.common.testing.EqualsTester; 28 import com.google.common.testing.EqualsTester;
25 29
26 import static org.hamcrest.MatcherAssert.assertThat; 30 import static org.hamcrest.MatcherAssert.assertThat;
27 import static org.hamcrest.Matchers.equalTo; 31 import static org.hamcrest.Matchers.equalTo;
32 +import static org.hamcrest.Matchers.hasItem;
28 import static org.hamcrest.Matchers.is; 33 import static org.hamcrest.Matchers.is;
29 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable; 34 import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
30 import static org.onosproject.net.NetTestTools.hid; 35 import static org.onosproject.net.NetTestTools.hid;
...@@ -102,6 +107,56 @@ public class HostToHostIntentTest extends IntentTest { ...@@ -102,6 +107,56 @@ public class HostToHostIntentTest extends IntentTest {
102 .testEquals(); 107 .testEquals();
103 } 108 }
104 109
110 + @Test
111 + public void testImplicitConstraintsAreAdded() {
112 + final BandwidthConstraint other = new BandwidthConstraint(
113 + new BandwidthResource(Bandwidth.gbps(1)));
114 + final HostToHostIntent intent = HostToHostIntent.builder()
115 + .appId(APPID)
116 + .one(id1)
117 + .two(id2)
118 + .selector(selector)
119 + .treatment(treatment)
120 + .constraints(ImmutableList.of(other))
121 + .build();
122 +
123 + assertThat(intent.constraints(), hasItem(HostToHostIntent.NOT_OPTICAL));
124 + }
125 +
126 + @Test
127 + public void testImplicitConstraints() {
128 + final HostToHostIntent implicit = HostToHostIntent.builder()
129 + .appId(APPID)
130 + .one(id1)
131 + .two(id2)
132 + .selector(selector)
133 + .treatment(treatment)
134 + .build();
135 + final HostToHostIntent empty = HostToHostIntent.builder()
136 + .appId(APPID)
137 + .one(id1)
138 + .two(id2)
139 + .selector(selector)
140 + .treatment(treatment)
141 + .constraints(ImmutableList.of())
142 + .build();
143 + final HostToHostIntent exact = HostToHostIntent.builder()
144 + .appId(APPID)
145 + .one(id1)
146 + .two(id2)
147 + .selector(selector)
148 + .treatment(treatment)
149 + .constraints(ImmutableList.of(HostToHostIntent.NOT_OPTICAL))
150 + .build();
151 +
152 + new EqualsTester()
153 + .addEqualityGroup(implicit.constraints(),
154 + empty.constraints(),
155 + exact.constraints())
156 + .testEquals();
157 +
158 + }
159 +
105 @Override 160 @Override
106 protected Intent createOne() { 161 protected Intent createOne() {
107 return HostToHostIntent.builder() 162 return HostToHostIntent.builder()
......