blob: 6e7606db49b1fc197137c9d84de26376d4b17ebd [file] [log] [blame]
Ray Milkey8d3ce432014-11-07 16:21:10 -08001/*
2 * Copyright 2014 Open Networking Laboratory
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 */
Sho SHIMIZU3a7c98e2015-02-25 17:27:04 -080016package org.onosproject.net.intent.impl.installer;
Ray Milkey8d3ce432014-11-07 16:21:10 -080017
Sho SHIMIZUb7052172015-02-20 11:09:21 -080018import org.junit.Before;
Ray Milkey8d3ce432014-11-07 16:21:10 -080019import org.junit.Test;
Sho SHIMIZUb7052172015-02-20 11:09:21 -080020import org.onosproject.net.ConnectPoint;
21import org.onosproject.net.DefaultLink;
22import org.onosproject.net.DefaultPath;
23import org.onosproject.net.Link;
Ray Milkey71ade562015-02-18 15:08:07 -080024import org.onosproject.net.flow.FlowRuleOperation;
Brian O'Connorabafb502014-12-02 22:26:20 -080025import org.onosproject.net.intent.AbstractIntentTest;
26import org.onosproject.net.intent.Constraint;
Brian O'Connorabafb502014-12-02 22:26:20 -080027import org.onosproject.net.intent.IntentTestsMocks;
28import org.onosproject.net.intent.PathIntent;
Brian O'Connorabafb502014-12-02 22:26:20 -080029import org.onosproject.net.intent.constraint.BandwidthConstraint;
30import org.onosproject.net.intent.constraint.LambdaConstraint;
31import org.onosproject.net.resource.Bandwidth;
32import org.onosproject.net.resource.Lambda;
Ray Milkey8d3ce432014-11-07 16:21:10 -080033
Sho SHIMIZUb7052172015-02-20 11:09:21 -080034import java.util.Arrays;
Brian O'Connor64a0369d2015-02-20 22:02:59 -080035import java.util.Collection;
Brian O'Connor64a0369d2015-02-20 22:02:59 -080036import java.util.List;
37
Ray Milkey8d3ce432014-11-07 16:21:10 -080038import static org.hamcrest.MatcherAssert.assertThat;
Sho SHIMIZUb7052172015-02-20 11:09:21 -080039import static org.hamcrest.Matchers.hasSize;
40import static org.hamcrest.Matchers.instanceOf;
41import static org.hamcrest.Matchers.notNullValue;
Ray Milkey8d3ce432014-11-07 16:21:10 -080042import static org.junit.Assert.fail;
Sho SHIMIZUb7052172015-02-20 11:09:21 -080043import static org.onosproject.net.DefaultEdgeLink.createEdgeLink;
44import static org.onosproject.net.Link.Type.DIRECT;
Brian O'Connorabafb502014-12-02 22:26:20 -080045import static org.onosproject.net.NetTestTools.APP_ID;
Sho SHIMIZUb7052172015-02-20 11:09:21 -080046import static org.onosproject.net.NetTestTools.PID;
Brian O'Connorabafb502014-12-02 22:26:20 -080047import static org.onosproject.net.NetTestTools.connectPoint;
Sho SHIMIZUb7052172015-02-20 11:09:21 -080048import static org.onosproject.net.intent.IntentTestsMocks.MockResourceService.makeBandwidthResourceService;
49import static org.onosproject.net.intent.IntentTestsMocks.MockResourceService.makeLambdaResourceService;
Ray Milkey8d3ce432014-11-07 16:21:10 -080050
51/**
52 * Unit tests for calculating paths for intents with constraints.
53 */
54
Brian O'Connor520c0522014-11-23 23:50:47 -080055public class PathConstraintCalculationTest extends AbstractIntentTest {
Ray Milkey8d3ce432014-11-07 16:21:10 -080056
Sho SHIMIZUb7052172015-02-20 11:09:21 -080057 private final IntentTestsMocks.MockSelector selector = new IntentTestsMocks.MockSelector();
58 private final IntentTestsMocks.MockTreatment treatment = new IntentTestsMocks.MockTreatment();
59 private final ConnectPoint d1p1 = connectPoint("s1", 0);
60 private final ConnectPoint d2p0 = connectPoint("s2", 0);
61 private final ConnectPoint d2p1 = connectPoint("s2", 1);
62 private final ConnectPoint d3p1 = connectPoint("s3", 1);
63 private final ConnectPoint d3p0 = connectPoint("s3", 10);
64 private final ConnectPoint d1p0 = connectPoint("s1", 10);
65
66 private PathIntentInstaller sut;
67
68 @Before
69 public void setUpIntentInstaller() {
70 sut = new PathIntentInstaller();
71 sut.appId = APP_ID;
Ray Milkey8d3ce432014-11-07 16:21:10 -080072 }
73
Ray Milkey67c221f2015-02-25 08:34:55 -080074 private PathIntent createPathIntent(List<Link> links, List<Constraint> constraints) {
Sho SHIMIZUb7052172015-02-20 11:09:21 -080075 int hops = links.size() - 1;
Ray Milkeyebc5d222015-03-18 15:45:36 -070076 return PathIntent.builder()
77 .appId(APP_ID)
78 .selector(selector)
79 .treatment(treatment)
80 .path(new DefaultPath(PID, links, hops))
81 .constraints(constraints)
82 .priority(333)
83 .build();
Ray Milkey8d3ce432014-11-07 16:21:10 -080084 }
85
86 /**
Ray Milkey8d3ce432014-11-07 16:21:10 -080087 * Tests that installation of bandwidth constrained path intents are
88 * successful.
89 */
90 @Test
91 public void testInstallBandwidthConstrainedIntentSuccess() {
92
Sho SHIMIZU0ce220a2015-01-23 15:54:47 -080093 final Constraint constraint = new BandwidthConstraint(Bandwidth.bps(100.0));
Ray Milkey8d3ce432014-11-07 16:21:10 -080094
Sho SHIMIZUb7052172015-02-20 11:09:21 -080095 List<Link> links = Arrays.asList(
96 createEdgeLink(d1p0, true),
97 new DefaultLink(PID, d1p1, d2p0, DIRECT),
98 new DefaultLink(PID, d2p1, d3p1, DIRECT),
99 createEdgeLink(d3p0, false)
100 );
101 PathIntent installable = createPathIntent(links, Arrays.asList(constraint));
Ray Milkey8d3ce432014-11-07 16:21:10 -0800102
Sho SHIMIZUb7052172015-02-20 11:09:21 -0800103 sut.resourceService = makeBandwidthResourceService(1000.0);
104
105 final List<Collection<FlowRuleOperation>> flowOperations = sut.install(installable);
Ray Milkey8d3ce432014-11-07 16:21:10 -0800106
107 assertThat(flowOperations, notNullValue());
108 assertThat(flowOperations, hasSize(1));
109 }
110
111 /**
112 * Tests that installation of bandwidth constrained path intents fail
113 * if there are no available resources.
114 */
115 @Test
116 public void testInstallBandwidthConstrainedIntentFailure() {
117
Sho SHIMIZU0ce220a2015-01-23 15:54:47 -0800118 final Constraint constraint = new BandwidthConstraint(Bandwidth.bps(100.0));
Ray Milkey8d3ce432014-11-07 16:21:10 -0800119
Sho SHIMIZUb7052172015-02-20 11:09:21 -0800120 List<Link> links = Arrays.asList(
121 createEdgeLink(d1p0, true),
122 new DefaultLink(PID, d1p1, d2p0, DIRECT),
123 new DefaultLink(PID, d2p1, d3p1, DIRECT),
124 createEdgeLink(d3p0, false)
125 );
126 PathIntent installable = createPathIntent(links, Arrays.asList(constraint));
Ray Milkey8d3ce432014-11-07 16:21:10 -0800127
128 // Make it look like the available bandwidth was consumed
Sho SHIMIZUb7052172015-02-20 11:09:21 -0800129 final IntentTestsMocks.MockResourceService resourceService = makeBandwidthResourceService(1000.0);
Ray Milkey8d3ce432014-11-07 16:21:10 -0800130 resourceService.setAvailableBandwidth(1.0);
Sho SHIMIZUb7052172015-02-20 11:09:21 -0800131 sut.resourceService = resourceService;
Ray Milkey8d3ce432014-11-07 16:21:10 -0800132
133 try {
Sho SHIMIZUb7052172015-02-20 11:09:21 -0800134 sut.install(installable);
Ray Milkey8d3ce432014-11-07 16:21:10 -0800135 fail("Bandwidth request with no available bandwidth did not fail.");
136 } catch (IntentTestsMocks.MockedAllocationFailure failure) {
137 assertThat(failure,
138 instanceOf(IntentTestsMocks.MockedAllocationFailure.class));
139 }
140 }
141
142 /**
143 * Tests that installation of lambda constrained path intents are
144 * successful.
145 */
146 @Test
147 public void testInstallLambdaConstrainedIntentSuccess() {
148
Ray Milkey8d3ce432014-11-07 16:21:10 -0800149 final Constraint constraint = new LambdaConstraint(Lambda.valueOf(1));
150
Sho SHIMIZUb7052172015-02-20 11:09:21 -0800151 List<Link> links = Arrays.asList(
152 createEdgeLink(d1p0, true),
153 new DefaultLink(PID, d1p1, d2p0, DIRECT),
154 new DefaultLink(PID, d2p1, d3p1, DIRECT),
155 createEdgeLink(d3p0, false)
156 );
157 PathIntent installable = createPathIntent(links, Arrays.asList(constraint));
Ray Milkey8d3ce432014-11-07 16:21:10 -0800158
Sho SHIMIZUb7052172015-02-20 11:09:21 -0800159 sut.resourceService = makeLambdaResourceService(1);
160
161 final List<Collection<FlowRuleOperation>> flowOperations = sut.install(installable);
Ray Milkey8d3ce432014-11-07 16:21:10 -0800162
163 assertThat(flowOperations, notNullValue());
164 assertThat(flowOperations, hasSize(1));
165 }
166
167 /**
168 * Tests that installation of lambda constrained path intents fail
169 * if there are no available resources.
170 */
171 @Test
172 public void testInstallLambdaConstrainedIntentFailure() {
173
Ray Milkey8d3ce432014-11-07 16:21:10 -0800174 final Constraint constraint = new LambdaConstraint(Lambda.valueOf(1));
175
Sho SHIMIZUb7052172015-02-20 11:09:21 -0800176 List<Link> links = Arrays.asList(
177 createEdgeLink(d1p0, true),
178 new DefaultLink(PID, d1p1, d2p0, DIRECT),
179 new DefaultLink(PID, d2p1, d3p1, DIRECT),
180 createEdgeLink(d3p0, false)
181 );
182 PathIntent installable = createPathIntent(links, Arrays.asList(constraint));
Ray Milkey8d3ce432014-11-07 16:21:10 -0800183
184 // Make it look like the available lambda was consumed
Sho SHIMIZUb7052172015-02-20 11:09:21 -0800185 final IntentTestsMocks.MockResourceService resourceService = makeLambdaResourceService(1);
Ray Milkey8d3ce432014-11-07 16:21:10 -0800186 resourceService.setAvailableLambda(0);
Sho SHIMIZUb7052172015-02-20 11:09:21 -0800187 sut.resourceService = resourceService;
Ray Milkey8d3ce432014-11-07 16:21:10 -0800188
189 try {
Sho SHIMIZUb7052172015-02-20 11:09:21 -0800190 sut.install(installable);
Ray Milkey8d3ce432014-11-07 16:21:10 -0800191 fail("Lambda request with no available lambda did not fail.");
192 } catch (IntentTestsMocks.MockedAllocationFailure failure) {
193 assertThat(failure,
194 instanceOf(IntentTestsMocks.MockedAllocationFailure.class));
195 }
196 }
197
198}