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