3cf081ede49d09f5c7406dfaefe46e93b048f0bb
[transportpce.git] / renderer / src / test / java / org / opendaylight / transportpce / renderer / provisiondevice / DeviceRendererServiceImplRollbackTest.java
1 /*
2  * Copyright © 2018 Orange Systems, Inc. and others.  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.transportpce.renderer.provisiondevice;
10
11 import java.util.ArrayList;
12 import java.util.List;
13 import org.junit.Assert;
14 import org.junit.Test;
15 import org.mockito.Mockito;
16 import org.opendaylight.controller.md.sal.binding.api.MountPoint;
17 import org.opendaylight.controller.md.sal.binding.api.MountPointService;
18 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
19 import org.opendaylight.transportpce.common.crossconnect.CrossConnectImpl;
20 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
21 import org.opendaylight.transportpce.common.device.DeviceTransactionManagerImpl;
22 import org.opendaylight.transportpce.common.mapping.PortMapping;
23 import org.opendaylight.transportpce.common.mapping.PortMappingImpl;
24 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
25 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
26 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfacesImpl;
27 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaceFactory;
28 import org.opendaylight.transportpce.renderer.stub.MountPointServiceStub;
29 import org.opendaylight.transportpce.renderer.stub.MountPointStub;
30 import org.opendaylight.transportpce.renderer.utils.ServiceImplementationDataUtils;
31 import org.opendaylight.transportpce.test.AbstractTest;
32 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.RendererRollbackInput;
33 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.RendererRollbackInputBuilder;
34 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.device.rev170228.RendererRollbackOutput;
35 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterface;
36 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterfaceBuilder;
37 import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev170907.node.interfaces.NodeInterfaceKey;
38
39 public class DeviceRendererServiceImplRollbackTest extends AbstractTest {
40
41     private DeviceRendererService deviceRendererService;
42     private CrossConnect crossConnect;
43     private OpenRoadmInterfaces openRoadmInterfaces;
44
45     private void setMountPoint(MountPoint mountPoint) {
46         MountPointService mountPointService = new MountPointServiceStub(mountPoint);
47         DeviceTransactionManager deviceTransactionManager = new DeviceTransactionManagerImpl(mountPointService, 3000);
48         this.openRoadmInterfaces = new OpenRoadmInterfacesImpl(deviceTransactionManager);
49         this.openRoadmInterfaces = Mockito.spy(this.openRoadmInterfaces);
50         PortMapping portMapping = new PortMappingImpl(this.getDataBroker(), deviceTransactionManager,
51                 this.openRoadmInterfaces);
52         OpenRoadmInterfaceFactory openRoadmInterfaceFactory = new OpenRoadmInterfaceFactory(portMapping,
53                 this.openRoadmInterfaces);
54         this.crossConnect = new CrossConnectImpl(deviceTransactionManager);
55         this.crossConnect = Mockito.spy(this.crossConnect);
56         this.deviceRendererService = new DeviceRendererServiceImpl(this.getDataBroker(),
57                 deviceTransactionManager, openRoadmInterfaceFactory, this.openRoadmInterfaces, this.crossConnect,
58             portMapping);
59     }
60
61
62
63     @Test
64     public void testRollbackEmptyInterface() {
65         setMountPoint(new MountPointStub(getDataBroker()));
66         RendererRollbackInput rendererRollbackInput = ServiceImplementationDataUtils.buildRendererRollbackInput();
67         RendererRollbackOutput rendererRollbackOutput =
68                 this.deviceRendererService.rendererRollback(rendererRollbackInput);
69         Assert.assertTrue(rendererRollbackOutput.isSuccess());
70         Assert.assertTrue(rendererRollbackOutput.getFailedToRollback().isEmpty());
71     }
72
73     @Test
74     public void testRollbackConnectionIdNotExist() {
75         setMountPoint(new MountPointStub(getDataBroker()));
76
77         NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder();
78         nodeInterfaceBuilder.setNodeId("node1");
79         nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1"));
80         List<String> connectionID = new ArrayList<>();
81         connectionID.add("node1-PP");
82         nodeInterfaceBuilder.setConnectionId(connectionID);
83         List<NodeInterface> nodeInterfaces = new ArrayList<>();
84         nodeInterfaces.add(nodeInterfaceBuilder.build());
85         RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder();
86         rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces);
87
88         RendererRollbackOutput rendererRollbackOutput =
89                 this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build());
90         Assert.assertFalse(rendererRollbackOutput.isSuccess());
91         Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().size());
92         Assert.assertEquals("node1", rendererRollbackOutput.getFailedToRollback().get(0).getNodeId());
93     }
94
95     @Test
96     public void testRollbackConnectionId() {
97         setMountPoint(new MountPointStub(getDataBroker()));
98
99         NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder();
100         nodeInterfaceBuilder.setNodeId("node1");
101         nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1"));
102         List<String> connectionID = new ArrayList<>();
103         connectionID.add("src-PP-dest-PP-20");
104         nodeInterfaceBuilder.setConnectionId(connectionID);
105         List<NodeInterface> nodeInterfaces = new ArrayList<>();
106         nodeInterfaces.add(nodeInterfaceBuilder.build());
107         RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder();
108         rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces);
109
110         Mockito.doReturn(true).when(this.crossConnect).deleteCrossConnect("node1", connectionID.get(0));
111         RendererRollbackOutput rendererRollbackOutput =
112                 this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build());
113         Assert.assertTrue("Rollback must success when cross connect returns true", rendererRollbackOutput.isSuccess());
114         Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().size());
115         Assert.assertTrue("There must not be any failed interfaces when cross connect returns true",
116             rendererRollbackOutput.getFailedToRollback().get(0).getInterface().isEmpty());
117
118         Mockito.doReturn(false).when(this.crossConnect).deleteCrossConnect("node1", connectionID.get(0));
119         rendererRollbackOutput =
120                 this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build());
121         Assert.assertFalse("Rollback must fail when cross connect returns false",rendererRollbackOutput.isSuccess());
122         Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().size());
123         Assert.assertFalse(rendererRollbackOutput.getFailedToRollback().get(0).getInterface().isEmpty());
124         Assert.assertEquals("node1", rendererRollbackOutput.getFailedToRollback().get(0).getNodeId());
125
126         Mockito.verify(this.crossConnect, Mockito.times(2)).deleteCrossConnect("node1", connectionID.get(0));
127     }
128
129     @Test
130     public void testRollbackInterfaces() throws OpenRoadmInterfaceException {
131         setMountPoint(new MountPointStub(getDataBroker()));
132
133         NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder();
134         nodeInterfaceBuilder.setNodeId("node1");
135         nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1"));
136         nodeInterfaceBuilder.setConnectionId(new ArrayList<>());
137         List<String> oduInterfacesId = new ArrayList<>();
138         oduInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-ODU");
139         nodeInterfaceBuilder.setOduInterfaceId(oduInterfacesId);
140         List<String> otuInterfacesId = new ArrayList<>();
141         otuInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-OTU");
142         nodeInterfaceBuilder.setOtuInterfaceId(otuInterfacesId);
143         List<String> ochInterfacesId = new ArrayList<>();
144         ochInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.NETWORK_TOKEN + "-20");
145         nodeInterfaceBuilder.setOchInterfaceId(ochInterfacesId);
146         List<NodeInterface> nodeInterfaces = new ArrayList<>();
147         nodeInterfaces.add(nodeInterfaceBuilder.build());
148         RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder();
149         rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces);
150
151         Mockito.doNothing().when(this.openRoadmInterfaces).deleteInterface(Mockito.eq("node1"), Mockito.anyString());
152         RendererRollbackOutput rendererRollbackOutput =
153                 this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build());
154         Assert.assertTrue(rendererRollbackOutput.isSuccess());
155         Assert.assertFalse(rendererRollbackOutput.getFailedToRollback().isEmpty());
156         Assert.assertTrue(rendererRollbackOutput.getFailedToRollback().get(0).getInterface().isEmpty());
157         Mockito.verify(this.crossConnect, Mockito.times(0)).deleteCrossConnect(Mockito.anyString(),
158             Mockito.anyString());
159         Mockito.verify(this.openRoadmInterfaces, Mockito.times(3)).deleteInterface(Mockito.eq("node1"),
160             Mockito.anyString());
161     }
162
163     @Test
164     public void testRollbackInterfacesException() throws OpenRoadmInterfaceException {
165         setMountPoint(new MountPointStub(getDataBroker()));
166
167         NodeInterfaceBuilder nodeInterfaceBuilder = new NodeInterfaceBuilder();
168         nodeInterfaceBuilder.setNodeId("node1");
169         nodeInterfaceBuilder.withKey(new NodeInterfaceKey("node1"));
170         nodeInterfaceBuilder.setConnectionId(new ArrayList<>());
171         List<String> ethInterfacesId = new ArrayList<>();
172         ethInterfacesId.add("node1-" + OpenRoadmInterfacesImpl.CLIENT_TOKEN + "-ETHERNET");
173         nodeInterfaceBuilder.setEthInterfaceId(ethInterfacesId);
174         List<NodeInterface> nodeInterfaces = new ArrayList<>();
175         nodeInterfaces.add(nodeInterfaceBuilder.build());
176         RendererRollbackInputBuilder rendererRollbackInputBuilder = new RendererRollbackInputBuilder();
177         rendererRollbackInputBuilder.setNodeInterface(nodeInterfaces);
178
179         Mockito.doThrow(OpenRoadmInterfaceException.class).when(this.openRoadmInterfaces)
180             .deleteInterface(Mockito.eq("node1"), Mockito.anyString());
181         RendererRollbackOutput rendererRollbackOutput =
182                 this.deviceRendererService.rendererRollback(rendererRollbackInputBuilder.build());
183         Assert.assertFalse(rendererRollbackOutput.isSuccess());
184         Assert.assertEquals(1,rendererRollbackOutput.getFailedToRollback().size());
185         Assert.assertEquals(1, rendererRollbackOutput.getFailedToRollback().get(0).getInterface().size());
186         Assert.assertEquals(ethInterfacesId.get(0), rendererRollbackOutput.getFailedToRollback().get(0)
187             .getInterface().get(0));
188         Mockito.verify(this.crossConnect, Mockito.times(0))
189             .deleteCrossConnect(Mockito.anyString(), Mockito.anyString());
190         Mockito.verify(this.openRoadmInterfaces, Mockito.times(1))
191             .deleteInterface("node1",ethInterfacesId.get(0));
192     }
193 }