+ @Test
+ public void testBestPathSelectionOptions() {
+ this.selector.processPath(this.ROUTER_ID2, createStateFromPrefMedOriginASPath());
+ BestPath processedPath = this.selector.result();
+ assertEquals(1, processedPath.getState().getOrigin().getIntValue());
+
+ addIgpOrigin(); // prefer the path with the lowest origin type
+ this.selector.processPath(this.ROUTER_ID2, this.dataContBuilder.build());
+ processedPath = this.selector.result();
+ assertEquals(0, processedPath.getState().getOrigin().getIntValue());
+
+ addEgpOrigin();
+ this.selector.processPath(this.ROUTER_ID2, this.dataContBuilder.build());
+ processedPath = this.selector.result();
+ assertEquals(0, processedPath.getState().getOrigin().getIntValue());
+
+ // prefer the path with the lowest multi-exit discriminator (MED)
+ assertEquals(4321L, (long) processedPath.getState().getMultiExitDisc());
+ addIgpOrigin();
+ addLowerMultiExitDisc();
+ this.selector.processPath(this.ROUTER_ID2, this.dataContBuilder.build());
+ processedPath = this.selector.result();
+ assertEquals(1234L, (long) processedPath.getState().getMultiExitDisc());
+
+ addHigherMultiExitDisc();
+ this.selector.processPath(this.ROUTER_ID2, this.dataContBuilder.build());
+ processedPath = this.selector.result();
+ assertEquals(1234L, (long) processedPath.getState().getMultiExitDisc());
+
+ addLowerMultiExitDisc();
+ addAsPath(SEQ_SEGMENT2);
+ assertEquals(1L, (long) processedPath.getState().getPeerAs());
+ assertEquals(3, processedPath.getState().getAsPathLength());
+ this.selector.processPath(this.ROUTER_ID2, this.dataContBuilder.build());
+ processedPath = this.selector.result();
+ assertEquals(1L, (long) processedPath.getState().getPeerAs());
+ assertEquals(3, processedPath.getState().getAsPathLength());
+ }
+