2 * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.bgp.openconfig.routing.policy.spi;
10 import static org.junit.Assert.assertNotNull;
11 import static org.junit.Assert.assertNull;
12 import static org.mockito.Mockito.doReturn;
13 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.RouteAttributeContainer.routeAttributeContainerFalse;
15 import com.google.common.collect.ImmutableMap;
16 import java.util.Arrays;
17 import java.util.Collections;
18 import java.util.List;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.Mock;
22 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.RouteAttributeContainer;
23 import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryExportParameters;
24 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.routing.policy.top.routing.policy.policy.definitions.policy.definition.statements.Statement;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.inet.rev171207.ipv4.routes.ipv4.routes.Ipv4Route;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.AttributesBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.attributes.AsPathBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.attributes.as.path.SegmentsBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev171207.PeerRole;
31 import org.opendaylight.yangtools.yang.common.QName;
32 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
34 public class AsPathLength extends AbstractStatementRegistryTest {
36 private BGPRouteEntryExportParameters exportParameters;
37 private List<Statement> basicStatements;
39 private RouteEntryBaseAttributes baseAttributes;
43 public void setUp() throws Exception {
45 this.basicStatements = loadStatement("basic-statements-test");
46 doReturn(CLUSTER).when(this.baseAttributes).getClusterId();
47 doReturn(LOCAL_AS).when(this.baseAttributes).getLocalAs();
48 doReturn(IPV4).when(this.baseAttributes).getOriginatorId();
52 public void testASPathLengthEq() {
53 doReturn(new YangInstanceIdentifier.NodeIdentifierWithPredicates(Ipv4Route.QNAME,
54 ImmutableMap.of(QName.create(Ipv4Route.QNAME, "prefix").intern(), "10.3.191.0/22")))
55 .when(this.exportParameters).getRouteId();
56 doReturn(PeerRole.Ibgp).when(this.exportParameters).getFromPeerRole();
58 final AsPathBuilder asPath = new AsPathBuilder();
59 asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
60 .setAsSequence(Arrays.asList(
61 AsNumber.getDefaultInstance("1"),
62 AsNumber.getDefaultInstance("2"),
63 AsNumber.getDefaultInstance("3")))
66 Statement statement = this.basicStatements.stream()
67 .filter(st -> st.getName().equals("as-path-eq-length-test")).findFirst().get();
68 RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(new AttributesBuilder()
69 .setAsPath(asPath.build())
72 RouteAttributeContainer result = this.statementRegistry.applyExportStatement(
74 this.exportParameters,
77 assertNotNull(result.getAttributes());
79 asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
80 .setAsSequence(Arrays.asList(
81 AsNumber.getDefaultInstance("1"),
82 AsNumber.getDefaultInstance("3")))
85 attributeContainer = routeAttributeContainerFalse(new AttributesBuilder().setAsPath(asPath.build()).build());
86 result = this.statementRegistry.applyExportStatement(
88 this.exportParameters,
91 assertNull(result.getAttributes());
95 public void testASPathLengthGe() {
96 doReturn(new YangInstanceIdentifier.NodeIdentifierWithPredicates(Ipv4Route.QNAME,
97 ImmutableMap.of(QName.create(Ipv4Route.QNAME, "prefix").intern(), "10.3.191.0/22")))
98 .when(this.exportParameters).getRouteId();
99 doReturn(PeerRole.Ibgp).when(this.exportParameters).getFromPeerRole();
101 final AsPathBuilder asPath = new AsPathBuilder();
102 asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
103 .setAsSequence(Arrays.asList(
104 AsNumber.getDefaultInstance("1"),
105 AsNumber.getDefaultInstance("2"),
106 AsNumber.getDefaultInstance("3")))
109 Statement statement = this.basicStatements.stream()
110 .filter(st -> st.getName().equals("as-path-ge-length-test")).findFirst().get();
111 RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(new AttributesBuilder()
112 .setAsPath(asPath.build())
115 RouteAttributeContainer result = this.statementRegistry.applyExportStatement(
117 this.exportParameters,
120 assertNull(result.getAttributes());
122 asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
123 .setAsSequence(Arrays.asList(
124 AsNumber.getDefaultInstance("3")))
127 attributeContainer = routeAttributeContainerFalse(new AttributesBuilder().setAsPath(asPath.build()).build());
128 result = this.statementRegistry.applyExportStatement(
130 this.exportParameters,
133 assertNotNull(result.getAttributes());
137 public void testASPathLengthLe() {
138 doReturn(new YangInstanceIdentifier.NodeIdentifierWithPredicates(Ipv4Route.QNAME,
139 ImmutableMap.of(QName.create(Ipv4Route.QNAME, "prefix").intern(), "10.3.191.0/22")))
140 .when(this.exportParameters).getRouteId();
141 doReturn(PeerRole.Ibgp).when(this.exportParameters).getFromPeerRole();
143 final AsPathBuilder asPath = new AsPathBuilder();
144 asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
145 .setAsSequence(Arrays.asList(
146 AsNumber.getDefaultInstance("1"),
147 AsNumber.getDefaultInstance("2"),
148 AsNumber.getDefaultInstance("3")))
151 Statement statement = this.basicStatements.stream()
152 .filter(st -> st.getName().equals("as-path-le-length-test")).findFirst().get();
153 RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(new AttributesBuilder()
154 .setAsPath(asPath.build())
157 RouteAttributeContainer result = this.statementRegistry.applyExportStatement(
159 this.exportParameters,
162 assertNotNull(result.getAttributes());
164 asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
165 .setAsSequence(Arrays.asList(
166 AsNumber.getDefaultInstance("3")))
169 attributeContainer = routeAttributeContainerFalse(new AttributesBuilder().setAsPath(asPath.build()).build());
170 result = this.statementRegistry.applyExportStatement(
172 this.exportParameters,
175 assertNull(result.getAttributes());