97286e02791650b9092097bf7ca5d7c24b53fa5a
[bgpcep.git] / bgp / openconfig-rp-statement / src / test / java / org / opendaylight / protocol / bgp / openconfig / routing / policy / statement / ExportDefaultStatementTest.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.assertEquals;
11 import static org.mockito.Mockito.doReturn;
12 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.RouteAttributeContainer.routeAttributeContainerFalse;
13 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.ExportAttributeTestUtil.createClusterInput;
14 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.ExportAttributeTestUtil.createInputWithOriginator;
15 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.ExportAttributeTestUtil.createPathInput;
16 import static org.opendaylight.protocol.bgp.openconfig.routing.policy.statement.ExportAttributeTestUtil.createPathInputWithAs;
17
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.impl.PolicyRIBBaseParametersImpl;
23 import org.opendaylight.protocol.bgp.openconfig.routing.policy.spi.registry.RouteAttributeContainer;
24 import org.opendaylight.protocol.bgp.rib.spi.policy.BGPRouteEntryExportParameters;
25 import org.opendaylight.yang.gen.v1.http.openconfig.net.yang.routing.policy.rev151009.routing.policy.top.routing.policy.policy.definitions.policy.definition.statements.Statement;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.message.rev171207.path.attributes.Attributes;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.bgp.rib.rev171207.PeerRole;
28
29 public class ExportDefaultStatementTest extends AbstractStatementRegistryConsumerTest {
30     @Mock
31     private BGPRouteEntryExportParameters exportParameters;
32     private List<Statement> defaultExportStatements;
33     private PolicyRIBBaseParametersImpl baseAttributes;
34
35     @Before
36     @Override
37     public void setUp() throws Exception {
38         super.setUp();
39         this.defaultExportStatements = loadStatement("default-odl-export-policy");
40         this.baseAttributes = new PolicyRIBBaseParametersImpl(LOCAL_AS, IPV4, CLUSTER);
41     }
42
43     @Test
44     public void testToEbgp() {
45         final Statement statement = getStatementAndSetToRole("to-external", PeerRole.Ebgp);
46
47         final Attributes expectedOutput = createPathInputWithAs();
48         final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createPathInput(null));
49
50         assertApplyExportStatement(statement, PeerRole.Ebgp, attributeContainer, expectedOutput);
51         assertApplyExportStatement(statement, PeerRole.Ibgp, attributeContainer, expectedOutput);
52         assertApplyExportStatement(statement, PeerRole.Internal, attributeContainer, expectedOutput);
53         assertApplyExportStatement(statement, PeerRole.RrClient, attributeContainer, expectedOutput);
54     }
55
56     @Test
57     public void testFromInternalToInternal() {
58         final Statement statement = getStatementAndSetToRole("from-internal-to-internal", PeerRole.Ibgp);
59         final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
60         assertApplyExportStatement(statement, PeerRole.Ibgp, attributeContainer, null);
61     }
62
63     @Test
64     public void testFromExternalToInternal() {
65         final Statement statement = getStatementAndSetToRole("from-external-to-internal", PeerRole.Ibgp);
66         final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
67         assertApplyExportStatement(statement, PeerRole.Ebgp, attributeContainer, attributeContainer.getAttributes());
68     }
69
70     @Test
71     public void testFromOdlInternalToInternal() {
72         final Statement statement = getStatementAndSetToRole("from-odl-internal-to-internal-or-rr-client",
73                 PeerRole.Ibgp);
74         final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
75         assertApplyExportStatement(statement, PeerRole.Internal, attributeContainer, createClusterInput());
76     }
77
78     @Test
79     public void testFromRRclientToInternal() {
80         final Statement statement = getStatementAndSetToRole("from-rr-client-to-internal", PeerRole.Ibgp);
81         final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
82         assertApplyExportStatement(statement, PeerRole.RrClient, attributeContainer, createInputWithOriginator());
83     }
84
85     @Test
86     public void testOdlInternal() {
87         final Statement statement = getStatementAndSetToRole("to-odl-internal", PeerRole.Internal);
88         final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
89
90         assertApplyExportStatement(statement, PeerRole.Ebgp, attributeContainer, null);
91         assertApplyExportStatement(statement, PeerRole.Ibgp, attributeContainer, null);
92         assertApplyExportStatement(statement, PeerRole.Internal, attributeContainer, null);
93         assertApplyExportStatement(statement, PeerRole.RrClient, attributeContainer, null);
94     }
95
96     @Test
97     public void testFromExternalToRRClient() {
98         final Statement statement = getStatementAndSetToRole("from-external-to-route-reflector", PeerRole.RrClient);
99         final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
100         assertApplyExportStatement(statement, PeerRole.Ebgp, attributeContainer, attributeContainer.getAttributes());
101     }
102
103     @Test
104     public void testFromInternalOrRRClientToRRClient() {
105         final Statement statement = getStatementAndSetToRole("from-internal-or-rr-client-to-route-reflector",
106                 PeerRole.RrClient);
107         final Attributes expectedOutput = createInputWithOriginator();
108         final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
109
110         assertApplyExportStatement(statement, PeerRole.Ibgp, attributeContainer, expectedOutput);
111         assertApplyExportStatement(statement, PeerRole.RrClient, attributeContainer, expectedOutput);
112     }
113
114     @Test
115     public void testFromOdlInternalToRRClient() {
116         final Statement statement = getStatementAndSetToRole("from-odl-internal-to-internal-or-rr-client",
117                 PeerRole.RrClient);
118         final RouteAttributeContainer attributeContainer = routeAttributeContainerFalse(createClusterInput());
119         assertApplyExportStatement(statement, PeerRole.Internal, attributeContainer, createClusterInput());
120     }
121
122     private Statement getStatementAndSetToRole(final String statementName, final PeerRole toPeerRole) {
123         doReturn(toPeerRole).when(this.exportParameters).getToPeerRole();
124         return this.defaultExportStatements.stream()
125                 .filter(st -> st.getName().equals(statementName)).findFirst().get();
126     }
127
128     private void assertApplyExportStatement(
129             final Statement statement, final PeerRole fromPeerRole,
130             final RouteAttributeContainer attInput,
131             final Attributes attExpected) {
132         doReturn(fromPeerRole).when(this.exportParameters).getFromPeerRole();
133
134         RouteAttributeContainer result = this.statementRegistry.applyExportStatement(
135                 this.baseAttributes,
136                 this.exportParameters,
137                 attInput,
138                 statement);
139         assertEquals(attExpected, result.getAttributes());
140     }
141 }