e706c8a7d8b5a82be94d1a34c6545dbe7335a85b
[bgpcep.git] / bgp / openconfig-rp-spi / src / test / java / org / opendaylight / protocol / bgp / openconfig / routing / policy / spi / AsPathLengthTest.java
1 /*
2  * Copyright (c) 2018 AT&T Intellectual Property. All rights reserved.
3  *
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
7  */
8 package org.opendaylight.protocol.bgp.openconfig.routing.policy.spi;
9
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;
14
15 import java.util.Arrays;
16 import java.util.Collections;
17 import java.util.List;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.mockito.Mock;
21 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.RouteAttributeContainer;
22 import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryExportParameters;
23 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.bgp.types.rev151009.IPV4UNICAST;
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.message.rev200120.path.attributes.AttributesBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.AsPathBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev200120.path.attributes.attributes.as.path.SegmentsBuilder;
29
30 public class AsPathLengthTest extends AbstractStatementRegistryTest {
31     @Mock
32     private BGPRouteEntryExportParameters exportParameters;
33     private List<Statement> basicStatements;
34     @Mock
35     private RouteEntryBaseAttributes baseAttributes;
36
37     @Before
38     @Override
39     public void setUp() throws Exception {
40         super.setUp();
41         basicStatements = loadStatement("basic-statements-test");
42         doReturn(CLUSTER).when(baseAttributes).getClusterId();
43         doReturn(LOCAL_AS).when(baseAttributes).getLocalAs();
44         doReturn(IPV4).when(baseAttributes).getOriginatorId();
45     }
46
47     @Test
48     public void testASPathLengthEq() {
49         final AsPathBuilder asPath = new AsPathBuilder();
50         asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
51                 .setAsSequence(Arrays.asList(
52                         AsNumber.getDefaultInstance("1"),
53                         AsNumber.getDefaultInstance("2"),
54                         AsNumber.getDefaultInstance("3")))
55                 .build()));
56
57         Statement statement = basicStatements.stream()
58                 .filter(st -> st.getName().equals("as-path-eq-length-test")).findFirst().get();
59         RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(new AttributesBuilder()
60                 .setAsPath(asPath.build())
61                 .build());
62
63         RouteAttributeContainer result = statementRegistry.applyExportStatement(
64                 baseAttributes,
65                 IPV4UNICAST.VALUE,
66                 exportParameters,
67                 attributeContainer,
68                 statement);
69         assertNotNull(result.getAttributes());
70
71         asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
72                 .setAsSequence(Arrays.asList(
73                         AsNumber.getDefaultInstance("1"),
74                         AsNumber.getDefaultInstance("3")))
75                 .build()));
76
77         attributeContainer = routeAttributeContainerFalse(new AttributesBuilder().setAsPath(asPath.build()).build());
78         result = statementRegistry.applyExportStatement(
79                 baseAttributes,
80                 IPV4UNICAST.VALUE,
81                 exportParameters,
82                 attributeContainer,
83                 statement);
84         assertNull(result.getAttributes());
85     }
86
87     @Test
88     public void testASPathLengthGe() {
89         final AsPathBuilder asPath = new AsPathBuilder();
90         asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
91                 .setAsSequence(Arrays.asList(
92                         AsNumber.getDefaultInstance("1"),
93                         AsNumber.getDefaultInstance("2"),
94                         AsNumber.getDefaultInstance("3")))
95                 .build()));
96
97         Statement statement = basicStatements.stream()
98                 .filter(st -> st.getName().equals("as-path-ge-length-test")).findFirst().get();
99         RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(new AttributesBuilder()
100                 .setAsPath(asPath.build())
101                 .build());
102
103         RouteAttributeContainer result = statementRegistry.applyExportStatement(
104                 baseAttributes,
105                 IPV4UNICAST.VALUE,
106                 exportParameters,
107                 attributeContainer,
108                 statement);
109         assertNull(result.getAttributes());
110
111         asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
112                 .setAsSequence(Collections.singletonList(
113                         AsNumber.getDefaultInstance("3")))
114                 .build()));
115
116         attributeContainer = routeAttributeContainerFalse(new AttributesBuilder().setAsPath(asPath.build()).build());
117         result = statementRegistry.applyExportStatement(
118                 baseAttributes,
119                 IPV4UNICAST.VALUE,
120                 exportParameters,
121                 attributeContainer,
122                 statement);
123         assertNotNull(result.getAttributes());
124     }
125
126     @Test
127     public void testASPathLengthLe() {
128         final AsPathBuilder asPath = new AsPathBuilder();
129         asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
130                 .setAsSequence(Arrays.asList(
131                         AsNumber.getDefaultInstance("1"),
132                         AsNumber.getDefaultInstance("2"),
133                         AsNumber.getDefaultInstance("3")))
134                 .build()));
135
136         Statement statement = basicStatements.stream()
137                 .filter(st -> st.getName().equals("as-path-le-length-test")).findFirst().get();
138         RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(new AttributesBuilder()
139                 .setAsPath(asPath.build())
140                 .build());
141
142         RouteAttributeContainer result = statementRegistry.applyExportStatement(
143                 baseAttributes,
144                 IPV4UNICAST.VALUE,
145                 exportParameters,
146                 attributeContainer,
147                 statement);
148         assertNotNull(result.getAttributes());
149
150         asPath.setSegments(Collections.singletonList(new SegmentsBuilder()
151                 .setAsSequence(Collections.singletonList(AsNumber.getDefaultInstance("3"))).build()));
152
153         attributeContainer = routeAttributeContainerFalse(new AttributesBuilder().setAsPath(asPath.build()).build());
154         result = statementRegistry.applyExportStatement(
155                 baseAttributes,
156                 IPV4UNICAST.VALUE,
157                 exportParameters,
158                 attributeContainer,
159                 statement);
160         assertNull(result.getAttributes());
161     }
162 }