Fix fileEncoding violations for checkstyle
[groupbasedpolicy.git] / renderers / vpp / src / test / java / org / opendaylight / groupbasedpolicy / renderer / vpp / commands / RoutingCommandTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems. 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
9 package org.opendaylight.groupbasedpolicy.renderer.vpp.commands;
10
11 import com.google.common.base.Optional;
12 import org.junit.Assert;
13 import org.junit.Before;
14 import org.junit.Test;
15 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
16 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
17 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
18 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
19 import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest;
20 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General;
21 import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory;
22 import org.opendaylight.groupbasedpolicy.util.DataStoreHelper;
23 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
24 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
25 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.StaticRoutes1;
26 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.StaticRoutes1Builder;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.Ipv4Builder;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.Route;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.RouteBuilder;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.route.VppIpv4RouteBuilder;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.ipv4.unicast.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol._static.routes.ipv4.route.next.hop.options.SimpleNextHopBuilder;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.Static;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.RoutingProtocol;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.RoutingProtocolBuilder;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.RoutingProtocolKey;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.routing.rev140524.routing.routing.instance.routing.protocols.routing.protocol.StaticRoutesBuilder;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev170917.RoutingProtocolVppAttr;
38 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev170917.RoutingProtocolVppAttrBuilder;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev170917.VniReference;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.vpp.routing.rev170917.routing.routing.instance.routing.protocols.routing.protocol.VppProtocolAttributesBuilder;
41
42 import java.util.Collections;
43 import java.util.List;
44 import java.util.concurrent.ExecutionException;
45
46 public class RoutingCommandTest extends VppRendererDataBrokerTest {
47
48     private final static String NEXT_HOP = "10.0.0.1";
49     private final static String OUT_INTERFACE = "GigabitEthernet0/a/0";
50     private final static String PREFIX = "10.0.0.0/24";
51     private final static String PREFIX_2 = "0.0.0.0/0";
52     private final static String ROUTER_PROTOCOL = "vpp-routing-protocol_0";
53     private final static String ROUTE1_DESCRIPTION = "route 1";
54     private final static String ROUTE2_DESCRIPTION = "route 2";
55     private final static VniReference VNI_REFERENCE = new VniReference(0L);
56     private final static Route
57         ROUTE_1 =
58         new RouteBuilder().setId(1L)
59             .setDescription(ROUTE1_DESCRIPTION)
60             .setDestinationPrefix(new Ipv4Prefix(PREFIX))
61             .setNextHopOptions(new SimpleNextHopBuilder().setNextHop(new Ipv4Address(NEXT_HOP))
62                 .setOutgoingInterface(OUT_INTERFACE)
63                 .build())
64             .setVppIpv4Route(new VppIpv4RouteBuilder().setClassifyTable("0").build())
65             .build();
66     private final static Route
67         ROUTE_2 =
68         new RouteBuilder().setId(2L)
69             .setDescription(ROUTE2_DESCRIPTION)
70             .setDestinationPrefix(new Ipv4Prefix(PREFIX_2))
71             .setNextHopOptions(new SimpleNextHopBuilder().setNextHop(new Ipv4Address(NEXT_HOP))
72                 .setOutgoingInterface(OUT_INTERFACE)
73                 .build())
74             .setVppIpv4Route(new VppIpv4RouteBuilder().setClassifyTable("0").build())
75             .build();
76     private final static List<Route> ROUTES = Collections.singletonList(ROUTE_1);
77     private final static List<Route> ROUTES2 = Collections.singletonList(ROUTE_2);
78
79     private final static RoutingProtocol ROUTING_PROTOCOL = new RoutingProtocolBuilder()
80         .setEnabled(true)
81         .setType(Static.class)
82         .setName(ROUTER_PROTOCOL)
83         .addAugmentation(RoutingProtocolVppAttr.class, new RoutingProtocolVppAttrBuilder().setVppProtocolAttributes(
84             new VppProtocolAttributesBuilder().setPrimaryVrf(VNI_REFERENCE).build()).build())
85         .setStaticRoutes(new StaticRoutesBuilder().addAugmentation(StaticRoutes1.class,
86             new StaticRoutes1Builder().setIpv4(new Ipv4Builder().setRoute(ROUTES).build()).build()).build())
87         .build();
88
89     private DataBroker dataBroker;
90
91     @Before
92     public void init() {
93         dataBroker = getDataBroker();
94     }
95
96     @Test
97     public void addRoutingCommandTest() throws ExecutionException, InterruptedException {
98         ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
99
100         RoutingCommand
101             routingCommand =
102             RoutingCommand.builder()
103                 .setOperation(General.Operations.PUT)
104                 .setRouterProtocol(ROUTER_PROTOCOL)
105                 .setRoutes(ROUTES)
106                 .setVrfId(VNI_REFERENCE.getValue())
107                 .build();
108
109         Assert.assertEquals(General.Operations.PUT, routingCommand.getOperation());
110         Assert.assertEquals(ROUTER_PROTOCOL, routingCommand.getRouterProtocol());
111         Assert.assertEquals(VNI_REFERENCE.getValue(), routingCommand.getVrfId());
112         Assert.assertEquals(ROUTES, routingCommand.getRoutes());
113
114         Optional<RoutingProtocol> routingProtocolOptional = executeCommand(rwTx, routingCommand);
115
116         Assert.assertTrue(routingProtocolOptional.isPresent());
117         Assert.assertEquals(ROUTING_PROTOCOL, routingProtocolOptional.get());
118     }
119
120     @Test
121     public void removeRoutingCommandTest() throws ExecutionException, InterruptedException {
122         Optional<RoutingProtocol> optional = writeBasicRoutingProtocol();
123         ReadWriteTransaction rwTx;
124
125         Assert.assertTrue(optional.isPresent());
126
127         rwTx = dataBroker.newReadWriteTransaction();
128         RoutingCommand routingCommand =
129             RoutingCommand.builder()
130                 .setOperation(General.Operations.DELETE)
131                 .setRouterProtocol(ROUTER_PROTOCOL)
132                 .setVrfId(VNI_REFERENCE.getValue())
133                 .build();
134         routingCommand.execute(rwTx);
135         rwTx.submit();
136
137         optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
138             VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(routingCommand.getRouterProtocol())),
139             dataBroker.newReadOnlyTransaction());
140
141         Assert.assertFalse(optional.isPresent());
142     }
143
144     @Test
145     public void mergeRoutingCommandTest() throws ExecutionException, InterruptedException {
146         Optional<RoutingProtocol> optional = writeBasicRoutingProtocol();
147         ReadWriteTransaction rwTx;
148
149         Assert.assertTrue(optional.isPresent());
150
151         rwTx = dataBroker.newReadWriteTransaction();
152
153         RoutingCommand
154             routingCommand =
155             RoutingCommand.builder()
156                 .setOperation(General.Operations.MERGE)
157                 .setRouterProtocol(ROUTER_PROTOCOL)
158                 .setRoutes(ROUTES2)
159                 .setVrfId(VNI_REFERENCE.getValue())
160                 .build();
161
162         routingCommand.execute(rwTx);
163         rwTx.submit();
164
165         optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
166             VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(routingCommand.getRouterProtocol())),
167             dataBroker.newReadOnlyTransaction());
168
169         Assert.assertTrue(optional.isPresent());
170         RoutingProtocol routingProtocol = optional.get();
171         StaticRoutes1 staticRoutes1 = routingProtocol.getStaticRoutes().getAugmentation(StaticRoutes1.class);
172         Assert.assertTrue(staticRoutes1.getIpv4().getRoute().contains(ROUTE_1));
173         Assert.assertTrue(staticRoutes1.getIpv4().getRoute().contains(ROUTE_2));
174     }
175
176     private Optional<RoutingProtocol> writeBasicRoutingProtocol() throws InterruptedException, ExecutionException {
177         ReadWriteTransaction rwTx = dataBroker.newReadWriteTransaction();
178         rwTx.put(LogicalDatastoreType.CONFIGURATION,
179             VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(ROUTER_PROTOCOL)), ROUTING_PROTOCOL, true);
180         rwTx.submit().get();
181
182         return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
183             VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(ROUTER_PROTOCOL)),
184             dataBroker.newReadOnlyTransaction());
185     }
186
187     private Optional<RoutingProtocol> executeCommand(ReadWriteTransaction rwTx, RoutingCommand routingCommand)
188         throws ExecutionException, InterruptedException {
189         routingCommand.execute(rwTx);
190
191         rwTx.submit().get();
192
193         ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
194
195         return DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION,
196             VppIidFactory.getRoutingInstanceIid(new RoutingProtocolKey(routingCommand.getRouterProtocol())), rTx);
197     }
198 }