e982bc4a232b4e6e4484bfb486a21a6bcc7ce966
[bgpcep.git] / bgp / openconfig-rp-statement / src / test / java / org / opendaylight / protocol / bgp / openconfig / routing / policy / statement / MatchCommunityTest.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.statement;
9
10 import static org.junit.Assert.assertNotNull;
11 import static org.junit.Assert.assertNull;
12 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.RouteAttributeContainer.routeAttributeContainerFalse;
13
14 import java.util.Arrays;
15 import java.util.Collections;
16 import java.util.List;
17 import org.junit.Before;
18 import org.junit.Test;
19 import org.mockito.Mock;
20 import org.opendaylight.protocol.bgp.openconfig.routing.policy.impl.PolicyRIBBaseParametersImpl;
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.rev180329.path.attributes.AttributesBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev180329.path.attributes.attributes.CommunitiesBuilder;
28 import org.opendaylight.yangtools.yang.common.Uint16;
29
30 public class MatchCommunityTest extends AbstractStatementRegistryConsumerTest {
31     @Mock
32     private BGPRouteEntryExportParameters exportParameters;
33     private List<Statement> basicStatements;
34     private PolicyRIBBaseParametersImpl baseAttributes;
35
36     @Before
37     @Override
38     public void setUp() throws Exception {
39         super.setUp();
40         this.basicStatements = loadStatement("community-statements-test");
41         this.baseAttributes = new PolicyRIBBaseParametersImpl(LOCAL_AS, IPV4, CLUSTER);
42     }
43
44     @Test
45     public void testComAny() {
46         Statement statement = this.basicStatements.stream()
47                 .filter(st -> st.getName().equals("community-any-test")).findFirst().get();
48         RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(
49                 new AttributesBuilder().build());
50         RouteAttributeContainer result = this.statementRegistry.applyExportStatement(
51                 this.baseAttributes,
52                 IPV4UNICAST.class,
53                 this.exportParameters,
54                 attributeContainer,
55                 statement);
56         assertNotNull(result.getAttributes());
57
58         attributeContainer = routeAttributeContainerFalse(new AttributesBuilder().setCommunities(
59                 Collections.singletonList(new CommunitiesBuilder()
60                         .setAsNumber(AsNumber.getDefaultInstance("65"))
61                         .setSemantics(Uint16.valueOf(10))
62                         .build())).build());
63
64         result = this.statementRegistry.applyExportStatement(
65                 this.baseAttributes,
66                 IPV4UNICAST.class,
67                 this.exportParameters,
68                 attributeContainer,
69                 statement);
70         assertNull(result.getAttributes());
71     }
72
73     @Test
74     public void testComInvert() {
75         Statement statement = this.basicStatements.stream()
76                 .filter(st -> st.getName().equals("community-invert-test")).findFirst().get();
77         RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(
78                 new AttributesBuilder().build());
79         RouteAttributeContainer result = this.statementRegistry.applyExportStatement(
80                 this.baseAttributes,
81                 IPV4UNICAST.class,
82                 this.exportParameters,
83                 attributeContainer,
84                 statement);
85         assertNull(result.getAttributes());
86
87         attributeContainer = routeAttributeContainerFalse(new AttributesBuilder().setCommunities(
88                 Collections.singletonList(new CommunitiesBuilder()
89                         .setAsNumber(AsNumber.getDefaultInstance("65"))
90                         .setSemantics(Uint16.valueOf(10))
91                         .build())).build());
92
93         result = this.statementRegistry.applyExportStatement(
94                 this.baseAttributes,
95                 IPV4UNICAST.class,
96                 this.exportParameters,
97                 attributeContainer,
98                 statement);
99         assertNotNull(result.getAttributes());
100     }
101
102     @Test
103     public void testComAll() {
104         Statement statement = this.basicStatements.stream()
105                 .filter(st -> st.getName().equals("community-all-test")).findFirst().get();
106         RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(
107                 new AttributesBuilder().build());
108         RouteAttributeContainer result = this.statementRegistry.applyExportStatement(
109                 this.baseAttributes,
110                 IPV4UNICAST.class,
111                 this.exportParameters,
112                 attributeContainer,
113                 statement);
114         assertNotNull(result.getAttributes());
115
116         attributeContainer = routeAttributeContainerFalse(new AttributesBuilder().setCommunities(Arrays.asList(
117                 new CommunitiesBuilder().setAsNumber(AsNumber.getDefaultInstance("65"))
118                         .setSemantics(Uint16.valueOf(10)).build(),
119                 new CommunitiesBuilder().setAsNumber(AsNumber.getDefaultInstance("66"))
120                         .setSemantics(Uint16.valueOf(11)).build())).build());
121
122         result = this.statementRegistry.applyExportStatement(
123                 this.baseAttributes,
124                 IPV4UNICAST.class,
125                 this.exportParameters,
126                 attributeContainer,
127                 statement);
128         assertNull(result.getAttributes());
129     }
130 }