Pavlin Radoslavov

Updates related to SDN-IP submitting intent operations:

  * Updated IntentSynchronizer.submitPeerIntents() to use intent batch
    operation

  * Refactored the SDN-IP unit tests:
    The verification for intent service operations is moved to a new class
    TestIntentServiceHeler

Change-Id: Id6766ebb4d6bf492e8f9787c2c2247ac38d42964
...@@ -210,10 +210,11 @@ public class IntentSynchronizer { ...@@ -210,10 +210,11 @@ public class IntentSynchronizer {
210 // Push the intents 210 // Push the intents
211 if (isElectedLeader && isActivatedLeader) { 211 if (isElectedLeader && isActivatedLeader) {
212 log.debug("Submitting all SDN-IP Peer Intents..."); 212 log.debug("Submitting all SDN-IP Peer Intents...");
213 - // TODO: We should use a single Intent batch operation 213 + IntentOperations.Builder builder = IntentOperations.builder();
214 for (Intent intent : intents) { 214 for (Intent intent : intents) {
215 - intentService.submit(intent); 215 + builder.addSubmitOperation(intent);
216 } 216 }
217 + intentService.execute(builder.build());
217 } 218 }
218 } 219 }
219 } 220 }
......
...@@ -5,7 +5,6 @@ import static org.easymock.EasyMock.createMock; ...@@ -5,7 +5,6 @@ import static org.easymock.EasyMock.createMock;
5 import static org.easymock.EasyMock.expect; 5 import static org.easymock.EasyMock.expect;
6 import static org.easymock.EasyMock.expectLastCall; 6 import static org.easymock.EasyMock.expectLastCall;
7 import static org.easymock.EasyMock.replay; 7 import static org.easymock.EasyMock.replay;
8 -import static org.easymock.EasyMock.reportMatcher;
9 import static org.easymock.EasyMock.reset; 8 import static org.easymock.EasyMock.reset;
10 import static org.easymock.EasyMock.verify; 9 import static org.easymock.EasyMock.verify;
11 import static org.hamcrest.Matchers.is; 10 import static org.hamcrest.Matchers.is;
...@@ -15,13 +14,9 @@ import static org.junit.Assert.assertThat; ...@@ -15,13 +14,9 @@ import static org.junit.Assert.assertThat;
15 import static org.junit.Assert.assertTrue; 14 import static org.junit.Assert.assertTrue;
16 15
17 import java.util.HashSet; 16 import java.util.HashSet;
18 -import java.util.LinkedList;
19 -import java.util.List;
20 import java.util.Set; 17 import java.util.Set;
21 import java.util.concurrent.ConcurrentHashMap; 18 import java.util.concurrent.ConcurrentHashMap;
22 19
23 -import org.apache.commons.collections4.CollectionUtils;
24 -import org.easymock.IArgumentMatcher;
25 import org.junit.Before; 20 import org.junit.Before;
26 import org.junit.Test; 21 import org.junit.Test;
27 import org.onlab.junit.TestUtils; 22 import org.onlab.junit.TestUtils;
...@@ -42,14 +37,11 @@ import org.onlab.onos.net.host.HostListener; ...@@ -42,14 +37,11 @@ import org.onlab.onos.net.host.HostListener;
42 import org.onlab.onos.net.host.HostService; 37 import org.onlab.onos.net.host.HostService;
43 import org.onlab.onos.net.host.InterfaceIpAddress; 38 import org.onlab.onos.net.host.InterfaceIpAddress;
44 import org.onlab.onos.net.intent.Intent; 39 import org.onlab.onos.net.intent.Intent;
45 -import org.onlab.onos.net.intent.IntentId;
46 -import org.onlab.onos.net.intent.IntentOperation;
47 import org.onlab.onos.net.intent.IntentOperations; 40 import org.onlab.onos.net.intent.IntentOperations;
48 import org.onlab.onos.net.intent.IntentService; 41 import org.onlab.onos.net.intent.IntentService;
49 import org.onlab.onos.net.intent.IntentState; 42 import org.onlab.onos.net.intent.IntentState;
50 import org.onlab.onos.net.intent.MultiPointToSinglePointIntent; 43 import org.onlab.onos.net.intent.MultiPointToSinglePointIntent;
51 import org.onlab.onos.net.provider.ProviderId; 44 import org.onlab.onos.net.provider.ProviderId;
52 -import org.onlab.onos.sdnip.IntentSynchronizer.IntentKey;
53 import org.onlab.onos.sdnip.config.Interface; 45 import org.onlab.onos.sdnip.config.Interface;
54 import org.onlab.packet.Ethernet; 46 import org.onlab.packet.Ethernet;
55 import org.onlab.packet.IpAddress; 47 import org.onlab.packet.IpAddress;
...@@ -334,14 +326,16 @@ public class IntentSyncTest { ...@@ -334,14 +326,16 @@ public class IntentSyncTest {
334 IntentOperations.Builder builder = IntentOperations.builder(); 326 IntentOperations.Builder builder = IntentOperations.builder();
335 builder.addWithdrawOperation(intent2.id()); 327 builder.addWithdrawOperation(intent2.id());
336 builder.addWithdrawOperation(intent4.id()); 328 builder.addWithdrawOperation(intent4.id());
337 - intentService.execute(eqExceptId(builder.build())); 329 + intentService.execute(TestIntentServiceHelper.eqExceptId(
330 + builder.build()));
338 331
339 builder = IntentOperations.builder(); 332 builder = IntentOperations.builder();
340 builder.addSubmitOperation(intent3); 333 builder.addSubmitOperation(intent3);
341 builder.addSubmitOperation(intent4Update); 334 builder.addSubmitOperation(intent4Update);
342 builder.addSubmitOperation(intent6); 335 builder.addSubmitOperation(intent6);
343 builder.addSubmitOperation(intent7); 336 builder.addSubmitOperation(intent7);
344 - intentService.execute(eqExceptId(builder.build())); 337 + intentService.execute(TestIntentServiceHelper.eqExceptId(
338 + builder.build()));
345 replay(intentService); 339 replay(intentService);
346 340
347 // Start the test 341 // Start the test
...@@ -427,129 +421,4 @@ public class IntentSyncTest { ...@@ -427,129 +421,4 @@ public class IntentSyncTest {
427 "ingressPoints", intent.ingressPoints()); 421 "ingressPoints", intent.ingressPoints());
428 return intentNew; 422 return intentNew;
429 } 423 }
430 -
431 - /*
432 - * EasyMock matcher that matches {@link IntenOperations} but
433 - * ignores the {@link IntentId} when matching.
434 - * <p/>
435 - * The normal intent equals method tests that the intent IDs are equal,
436 - * however in these tests we can't know what the intent IDs will be in
437 - * advance, so we can't set up expected intents with the correct IDs. Thus,
438 - * the solution is to use an EasyMock matcher that verifies that all the
439 - * value properties of the provided intent match the expected values, but
440 - * ignores the intent ID when testing equality.
441 - */
442 - private static final class IdAgnosticIntentOperationsMatcher implements
443 - IArgumentMatcher {
444 -
445 - private final IntentOperations intentOperations;
446 - private String providedString;
447 -
448 - /**
449 - * Constructor taking the expected intent operations to match against.
450 - *
451 - * @param intentOperations the expected intent operations
452 - */
453 - public IdAgnosticIntentOperationsMatcher(
454 - IntentOperations intentOperations) {
455 - this.intentOperations = intentOperations;
456 - }
457 -
458 - @Override
459 - public void appendTo(StringBuffer strBuffer) {
460 - strBuffer.append("IntentOperationsMatcher unable to match: "
461 - + providedString);
462 - }
463 -
464 - @Override
465 - public boolean matches(Object object) {
466 - if (!(object instanceof IntentOperations)) {
467 - return false;
468 - }
469 -
470 - IntentOperations providedIntentOperations =
471 - (IntentOperations) object;
472 - providedString = providedIntentOperations.toString();
473 -
474 - List<IntentKey> thisSubmitIntents = new LinkedList<>();
475 - List<IntentId> thisWithdrawIntentIds = new LinkedList<>();
476 - List<IntentKey> thisReplaceIntents = new LinkedList<>();
477 - List<IntentKey> thisUpdateIntents = new LinkedList<>();
478 - List<IntentKey> providedSubmitIntents = new LinkedList<>();
479 - List<IntentId> providedWithdrawIntentIds = new LinkedList<>();
480 - List<IntentKey> providedReplaceIntents = new LinkedList<>();
481 - List<IntentKey> providedUpdateIntents = new LinkedList<>();
482 -
483 - extractIntents(intentOperations, thisSubmitIntents,
484 - thisWithdrawIntentIds, thisReplaceIntents,
485 - thisUpdateIntents);
486 - extractIntents(providedIntentOperations, providedSubmitIntents,
487 - providedWithdrawIntentIds, providedReplaceIntents,
488 - providedUpdateIntents);
489 -
490 - return CollectionUtils.isEqualCollection(thisSubmitIntents,
491 - providedSubmitIntents) &&
492 - CollectionUtils.isEqualCollection(thisWithdrawIntentIds,
493 - providedWithdrawIntentIds) &&
494 - CollectionUtils.isEqualCollection(thisUpdateIntents,
495 - providedUpdateIntents) &&
496 - CollectionUtils.isEqualCollection(thisReplaceIntents,
497 - providedReplaceIntents);
498 - }
499 -
500 - /**
501 - * Extracts the intents per operation type. Each intent is encapsulated
502 - * in IntentKey so it can be compared by excluding the Intent ID.
503 - *
504 - * @param intentOperations the container with the intent operations
505 - * to extract the intents from
506 - * @param submitIntents the SUBMIT intents
507 - * @param withdrawIntentIds the WITHDRAW intents IDs
508 - * @param replaceIntents the REPLACE intents
509 - * @param updateIntents the UPDATE intens
510 - */
511 - private void extractIntents(IntentOperations intentOperations,
512 - List<IntentKey> submitIntents,
513 - List<IntentId> withdrawIntentIds,
514 - List<IntentKey> replaceIntents,
515 - List<IntentKey> updateIntents) {
516 - for (IntentOperation oper : intentOperations.operations()) {
517 - IntentId intentId;
518 - IntentKey intentKey;
519 - switch (oper.type()) {
520 - case SUBMIT:
521 - intentKey = new IntentKey(oper.intent());
522 - submitIntents.add(intentKey);
523 - break;
524 - case WITHDRAW:
525 - intentId = oper.intentId();
526 - withdrawIntentIds.add(intentId);
527 - break;
528 - case REPLACE:
529 - intentKey = new IntentKey(oper.intent());
530 - replaceIntents.add(intentKey);
531 - break;
532 - case UPDATE:
533 - intentKey = new IntentKey(oper.intent());
534 - updateIntents.add(intentKey);
535 - break;
536 - default:
537 - break;
538 - }
539 - }
540 - }
541 - }
542 -
543 - /**
544 - * Matcher method to set an expected intent to match against (ignoring the
545 - * the intent ID).
546 - *
547 - * @param intent the expected intent
548 - * @return something of type IntentOperations
549 - */
550 - private static IntentOperations eqExceptId(
551 - IntentOperations intentOperations) {
552 - reportMatcher(new IdAgnosticIntentOperationsMatcher(intentOperations));
553 - return intentOperations;
554 - }
555 } 424 }
......
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
16 package org.onlab.onos.sdnip; 16 package org.onlab.onos.sdnip;
17 17
18 import com.google.common.collect.Sets; 18 import com.google.common.collect.Sets;
19 -import org.easymock.IArgumentMatcher;
20 import org.junit.Before; 19 import org.junit.Before;
21 import org.junit.Ignore; 20 import org.junit.Ignore;
22 import org.junit.Test; 21 import org.junit.Test;
...@@ -31,6 +30,8 @@ import org.onlab.onos.net.flow.DefaultTrafficTreatment; ...@@ -31,6 +30,8 @@ import org.onlab.onos.net.flow.DefaultTrafficTreatment;
31 import org.onlab.onos.net.flow.TrafficSelector; 30 import org.onlab.onos.net.flow.TrafficSelector;
32 import org.onlab.onos.net.flow.TrafficTreatment; 31 import org.onlab.onos.net.flow.TrafficTreatment;
33 import org.onlab.onos.net.host.InterfaceIpAddress; 32 import org.onlab.onos.net.host.InterfaceIpAddress;
33 +import org.onlab.onos.net.intent.Intent;
34 +import org.onlab.onos.net.intent.IntentOperations;
34 import org.onlab.onos.net.intent.IntentService; 35 import org.onlab.onos.net.intent.IntentService;
35 import org.onlab.onos.net.intent.PointToPointIntent; 36 import org.onlab.onos.net.intent.PointToPointIntent;
36 import org.onlab.onos.sdnip.bgp.BgpConstants; 37 import org.onlab.onos.sdnip.bgp.BgpConstants;
...@@ -550,69 +551,6 @@ public class PeerConnectivityManagerTest { ...@@ -550,69 +551,6 @@ public class PeerConnectivityManagerTest {
550 configInfoService, interfaceService); 551 configInfoService, interfaceService);
551 } 552 }
552 553
553 - /*
554 - * EasyMock matcher that matches {@link PointToPointIntent}s but
555 - * ignores the {@link IntentId} when matching.
556 - * <p/>
557 - * The normal intent equals method tests that the intent IDs are equal,
558 - * however in these tests we can't know what the intent IDs will be in
559 - * advance, so we can't set up expected intents with the correct IDs. Thus,
560 - * the solution is to use an EasyMock matcher that verifies that all the
561 - * value properties of the provided intent match the expected values, but
562 - * ignores the intent ID when testing equality.
563 - */
564 - private static final class IdAgnosticPointToPointIntentMatcher implements
565 - IArgumentMatcher {
566 -
567 - private final PointToPointIntent intent;
568 - private String providedIntentString;
569 -
570 - /**
571 - * Constructor taking the expected intent to match against.
572 - *
573 - * @param intent the expected intent
574 - */
575 - public IdAgnosticPointToPointIntentMatcher(PointToPointIntent intent) {
576 - this.intent = intent;
577 - }
578 -
579 - @Override
580 - public void appendTo(StringBuffer strBuffer) {
581 - strBuffer.append("PointToPointIntentMatcher unable to match: "
582 - + providedIntentString);
583 - }
584 -
585 - @Override
586 - public boolean matches(Object object) {
587 - if (!(object instanceof PointToPointIntent)) {
588 - return false;
589 - }
590 -
591 - PointToPointIntent providedIntent = (PointToPointIntent) object;
592 - providedIntentString = providedIntent.toString();
593 -
594 - PointToPointIntent matchIntent =
595 - new PointToPointIntent(providedIntent.appId(),
596 - intent.selector(), intent.treatment(),
597 - intent.ingressPoint(), intent.egressPoint());
598 -
599 - return matchIntent.equals(providedIntent);
600 - }
601 - }
602 -
603 - /**
604 - * Matcher method to set an expected intent to match against (ignoring the
605 - * the intent ID).
606 - *
607 - * @param intent the expected intent
608 - * @return something of type PointToPointIntent
609 - */
610 - private static PointToPointIntent eqExceptId(
611 - PointToPointIntent intent) {
612 - reportMatcher(new IdAgnosticPointToPointIntentMatcher(intent));
613 - return null;
614 - }
615 -
616 /** 554 /**
617 * Tests whether peer connectivity manager can set up correct BGP and 555 * Tests whether peer connectivity manager can set up correct BGP and
618 * ICMP intents according to specific configuration. 556 * ICMP intents according to specific configuration.
...@@ -625,11 +563,13 @@ public class PeerConnectivityManagerTest { ...@@ -625,11 +563,13 @@ public class PeerConnectivityManagerTest {
625 563
626 reset(intentService); 564 reset(intentService);
627 565
628 - // Sets up the expected PointToPoint intents. 566 + // Setup the expected intents
629 - for (int i = 0; i < intentList.size(); i++) { 567 + IntentOperations.Builder builder = IntentOperations.builder();
630 - intentService.submit(eqExceptId(intentList.get(i))); 568 + for (Intent intent : intentList) {
569 + builder.addSubmitOperation(intent);
631 } 570 }
632 - 571 + intentService.execute(TestIntentServiceHelper.eqExceptId(
572 + builder.build()));
633 replay(intentService); 573 replay(intentService);
634 574
635 // Running the interface to be tested. 575 // Running the interface to be tested.
...@@ -659,6 +599,9 @@ public class PeerConnectivityManagerTest { ...@@ -659,6 +599,9 @@ public class PeerConnectivityManagerTest {
659 replay(configInfoService); 599 replay(configInfoService);
660 600
661 reset(intentService); 601 reset(intentService);
602 + IntentOperations.Builder builder = IntentOperations.builder();
603 + intentService.execute(TestIntentServiceHelper.eqExceptId(
604 + builder.build()));
662 replay(intentService); 605 replay(intentService);
663 peerConnectivityManager.start(); 606 peerConnectivityManager.start();
664 verify(intentService); 607 verify(intentService);
...@@ -682,6 +625,9 @@ public class PeerConnectivityManagerTest { ...@@ -682,6 +625,9 @@ public class PeerConnectivityManagerTest {
682 replay(configInfoService); 625 replay(configInfoService);
683 626
684 reset(intentService); 627 reset(intentService);
628 + IntentOperations.Builder builder = IntentOperations.builder();
629 + intentService.execute(TestIntentServiceHelper.eqExceptId(
630 + builder.build()));
685 replay(intentService); 631 replay(intentService);
686 peerConnectivityManager.start(); 632 peerConnectivityManager.start();
687 verify(intentService); 633 verify(intentService);
......
1 +package org.onlab.onos.sdnip;
2 +
3 +import java.util.LinkedList;
4 +import java.util.List;
5 +
6 +import org.apache.commons.collections4.CollectionUtils;
7 +import org.easymock.IArgumentMatcher;
8 +import org.onlab.onos.net.intent.IntentId;
9 +import org.onlab.onos.net.intent.IntentOperation;
10 +import org.onlab.onos.net.intent.IntentOperations;
11 +import org.onlab.onos.net.intent.PointToPointIntent;
12 +import org.onlab.onos.sdnip.IntentSynchronizer.IntentKey;
13 +
14 +import static org.easymock.EasyMock.reportMatcher;
15 +
16 +/**
17 + * Helper class for testing operations submitted to the IntentService.
18 + */
19 +public final class TestIntentServiceHelper {
20 + /**
21 + * Default constructor to prevent instantiation.
22 + */
23 + private TestIntentServiceHelper() {
24 + }
25 +
26 + /**
27 + * Matcher method to set the expected intent operations to match against
28 + * (ignoring the intent ID for each intent).
29 + *
30 + * @param intentOperations the expected Intent Operations
31 + * @return the submitted Intent Operations
32 + */
33 + static IntentOperations eqExceptId(IntentOperations intentOperations) {
34 + reportMatcher(new IdAgnosticIntentOperationsMatcher(intentOperations));
35 + return intentOperations;
36 + }
37 +
38 +
39 + /**
40 + * Matcher method to set an expected point-to-point intent to match
41 + * against (ignoring the intent ID).
42 + *
43 + * @param intent the expected point-to-point intent
44 + * @return the submitted point-to-point intent
45 + */
46 + private static PointToPointIntent eqExceptId(
47 + PointToPointIntent intent) {
48 + reportMatcher(new IdAgnosticPointToPointIntentMatcher(intent));
49 + return intent;
50 + }
51 +
52 + /*
53 + * EasyMock matcher that matches {@link IntenOperations} but
54 + * ignores the {@link IntentId} when matching.
55 + * <p/>
56 + * The normal intent equals method tests that the intent IDs are equal,
57 + * however in these tests we can't know what the intent IDs will be in
58 + * advance, so we can't set up expected intents with the correct IDs. Thus,
59 + * the solution is to use an EasyMock matcher that verifies that all the
60 + * value properties of the provided intent match the expected values, but
61 + * ignores the intent ID when testing equality.
62 + */
63 + private static final class IdAgnosticIntentOperationsMatcher implements
64 + IArgumentMatcher {
65 +
66 + private final IntentOperations intentOperations;
67 + private String providedString;
68 +
69 + /**
70 + * Constructor taking the expected intent operations to match against.
71 + *
72 + * @param intentOperations the expected intent operations
73 + */
74 + public IdAgnosticIntentOperationsMatcher(
75 + IntentOperations intentOperations) {
76 + this.intentOperations = intentOperations;
77 + }
78 +
79 + @Override
80 + public void appendTo(StringBuffer strBuffer) {
81 + strBuffer.append("IntentOperationsMatcher unable to match: "
82 + + providedString);
83 + }
84 +
85 + @Override
86 + public boolean matches(Object object) {
87 + if (!(object instanceof IntentOperations)) {
88 + return false;
89 + }
90 +
91 + IntentOperations providedIntentOperations =
92 + (IntentOperations) object;
93 + providedString = providedIntentOperations.toString();
94 +
95 + List<IntentKey> thisSubmitIntents = new LinkedList<>();
96 + List<IntentId> thisWithdrawIntentIds = new LinkedList<>();
97 + List<IntentKey> thisReplaceIntents = new LinkedList<>();
98 + List<IntentKey> thisUpdateIntents = new LinkedList<>();
99 + List<IntentKey> providedSubmitIntents = new LinkedList<>();
100 + List<IntentId> providedWithdrawIntentIds = new LinkedList<>();
101 + List<IntentKey> providedReplaceIntents = new LinkedList<>();
102 + List<IntentKey> providedUpdateIntents = new LinkedList<>();
103 +
104 + extractIntents(intentOperations, thisSubmitIntents,
105 + thisWithdrawIntentIds, thisReplaceIntents,
106 + thisUpdateIntents);
107 + extractIntents(providedIntentOperations, providedSubmitIntents,
108 + providedWithdrawIntentIds, providedReplaceIntents,
109 + providedUpdateIntents);
110 +
111 + return CollectionUtils.isEqualCollection(thisSubmitIntents,
112 + providedSubmitIntents) &&
113 + CollectionUtils.isEqualCollection(thisWithdrawIntentIds,
114 + providedWithdrawIntentIds) &&
115 + CollectionUtils.isEqualCollection(thisUpdateIntents,
116 + providedUpdateIntents) &&
117 + CollectionUtils.isEqualCollection(thisReplaceIntents,
118 + providedReplaceIntents);
119 + }
120 +
121 + /**
122 + * Extracts the intents per operation type. Each intent is encapsulated
123 + * in IntentKey so it can be compared by excluding the Intent ID.
124 + *
125 + * @param intentOperations the container with the intent operations
126 + * to extract the intents from
127 + * @param submitIntents the SUBMIT intents
128 + * @param withdrawIntentIds the WITHDRAW intents IDs
129 + * @param replaceIntents the REPLACE intents
130 + * @param updateIntents the UPDATE intens
131 + */
132 + private void extractIntents(IntentOperations intentOperations,
133 + List<IntentKey> submitIntents,
134 + List<IntentId> withdrawIntentIds,
135 + List<IntentKey> replaceIntents,
136 + List<IntentKey> updateIntents) {
137 + for (IntentOperation oper : intentOperations.operations()) {
138 + IntentId intentId;
139 + IntentKey intentKey;
140 + switch (oper.type()) {
141 + case SUBMIT:
142 + intentKey = new IntentKey(oper.intent());
143 + submitIntents.add(intentKey);
144 + break;
145 + case WITHDRAW:
146 + intentId = oper.intentId();
147 + withdrawIntentIds.add(intentId);
148 + break;
149 + case REPLACE:
150 + intentKey = new IntentKey(oper.intent());
151 + replaceIntents.add(intentKey);
152 + break;
153 + case UPDATE:
154 + intentKey = new IntentKey(oper.intent());
155 + updateIntents.add(intentKey);
156 + break;
157 + default:
158 + break;
159 + }
160 + }
161 + }
162 + }
163 +
164 + /*
165 + * EasyMock matcher that matches {@link PointToPointIntent}s but
166 + * ignores the {@link IntentId} when matching.
167 + * <p/>
168 + * The normal intent equals method tests that the intent IDs are equal,
169 + * however in these tests we can't know what the intent IDs will be in
170 + * advance, so we can't set up expected intents with the correct IDs. Thus,
171 + * the solution is to use an EasyMock matcher that verifies that all the
172 + * value properties of the provided intent match the expected values, but
173 + * ignores the intent ID when testing equality.
174 + */
175 + private static final class IdAgnosticPointToPointIntentMatcher implements
176 + IArgumentMatcher {
177 +
178 + private final PointToPointIntent intent;
179 + private String providedIntentString;
180 +
181 + /**
182 + * Constructor taking the expected intent to match against.
183 + *
184 + * @param intent the expected intent
185 + */
186 + public IdAgnosticPointToPointIntentMatcher(PointToPointIntent intent) {
187 + this.intent = intent;
188 + }
189 +
190 + @Override
191 + public void appendTo(StringBuffer strBuffer) {
192 + strBuffer.append("PointToPointIntentMatcher unable to match: "
193 + + providedIntentString);
194 + }
195 +
196 + @Override
197 + public boolean matches(Object object) {
198 + if (!(object instanceof PointToPointIntent)) {
199 + return false;
200 + }
201 +
202 + PointToPointIntent providedIntent = (PointToPointIntent) object;
203 + providedIntentString = providedIntent.toString();
204 +
205 + PointToPointIntent matchIntent =
206 + new PointToPointIntent(providedIntent.appId(),
207 + intent.selector(), intent.treatment(),
208 + intent.ingressPoint(), intent.egressPoint());
209 +
210 + return matchIntent.equals(providedIntent);
211 + }
212 + }
213 +}