HONEYCOMB-58 - Routing Api
[honeycomb.git] / ioam / impl / src / test / java / io / fd / honeycomb / vppioam / impl / config / IoamTraceWriterCustomizerTest.java
1 /*
2  * Copyright (c) 2016 Cisco and/or its affiliates.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at:
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package io.fd.honeycomb.vppioam.impl.config;
18
19 import static org.junit.Assert.assertTrue;
20 import static org.junit.Assert.fail;
21 import static org.mockito.Matchers.any;
22 import static org.mockito.Mockito.doReturn;
23 import static org.mockito.Mockito.times;
24 import static org.mockito.Mockito.verify;
25 import static org.mockito.Mockito.when;
26
27 import io.fd.honeycomb.translate.vpp.util.NamingContext;
28 import io.fd.honeycomb.translate.write.WriteFailedException;
29 import io.fd.honeycomb.vpp.test.write.WriterCustomizerTest;
30 import org.junit.Test;
31 import org.mockito.Mock;
32 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
33
34 import io.fd.vpp.jvpp.ioamtrace.dto.TraceProfileAdd;
35 import io.fd.vpp.jvpp.ioamtrace.dto.TraceProfileAddReply;
36 import io.fd.vpp.jvpp.ioamtrace.dto.TraceProfileDel;
37 import io.fd.vpp.jvpp.ioamtrace.dto.TraceProfileDelReply;
38 import io.fd.vpp.jvpp.ioamtrace.future.FutureJVppIoamtrace;
39 import io.fd.vpp.jvpp.VppBaseCallException;
40 import io.fd.vpp.jvpp.VppCallbackException;
41
42 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.ioam.sb.trace.rev160512.IoamTraceConfig;
43 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.ioam.sb.trace.rev160512.ioam.trace.config.TraceConfig;
44 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.ioam.sb.trace.rev160512.ioam.trace.config.TraceConfig.TraceTsp;
45 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.ioam.sb.trace.rev160512.ioam.trace.config.TraceConfigBuilder;
46 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.ioam.sb.trace.rev160512.ioam.trace.config.TraceConfig.TraceOp;
47 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.ioam.sb.trace.rev160512.ioam.trace.config.trace.config.NodeInterfaces;
48 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.ioam.sb.trace.rev160512.ioam.trace.config.TraceConfigKey;
49 import org.opendaylight.yang.gen.v1.urn.cisco.params.xml.ns.yang.ioam.sb.trace.rev160512.ioam.trace.config.trace.config.NodeInterfaces;
50
51
52 public class IoamTraceWriterCustomizerTest extends WriterCustomizerTest {
53
54     private static final String TRACE_NAME = "trace_test";
55
56     @Mock
57     protected FutureJVppIoamtrace jvppIoam;
58
59     private IoamTraceWriterCustomizer customizer;
60
61     @Override
62     public void setUp() throws Exception {
63         customizer = new IoamTraceWriterCustomizer(jvppIoam);
64     }
65
66     private static TraceConfig generateTraceConfig(final String name) {
67         final TraceConfigBuilder builder = new TraceConfigBuilder();
68         builder.setTraceConfigName(name);
69         builder.setKey(new TraceConfigKey(name));
70         builder.setAclName(name);
71         builder.setTraceType(new Short("31"));
72         builder.setTraceNumElt(new Short("4"));
73         builder.setTraceTsp(TraceTsp.Milliseconds);
74         builder.setTraceOp(TraceOp.Add);
75         builder.setTraceAppData(new Long("123"));
76         builder.setNodeId(new Long("1"));
77
78         return builder.build();
79     }
80
81     private static InstanceIdentifier<TraceConfig> getTraceConfigId(final String name) {
82         return InstanceIdentifier.create(IoamTraceConfig.class)
83                 .child(TraceConfig.class, new TraceConfigKey(name));
84     }
85
86     private void whenTraceAddThenSuccess() {
87         final TraceProfileAddReply reply = new TraceProfileAddReply();
88         reply.context = 1;
89         doReturn(future(reply)).when(jvppIoam).traceProfileAdd(any(TraceProfileAdd.class));
90     }
91
92     private void whenTraceAddThenFailure() {
93         doReturn(failedFuture()).when(jvppIoam).traceProfileAdd(any(TraceProfileAdd.class));
94     }
95
96     private void whenTraceDelThenSuccess() {
97         final TraceProfileDelReply reply = new TraceProfileDelReply();
98         reply.context = 1;
99         doReturn(future(reply)).when(jvppIoam).traceProfileDel(any(TraceProfileDel.class));
100     }
101
102     private void whenTraceDelThenFailure() {
103         doReturn(failedFuture()).when(jvppIoam).traceProfileDel(any(TraceProfileDel.class));
104     }
105
106     private static TraceProfileAdd generateTraceProfileAdd() {
107         final TraceProfileAdd request = new TraceProfileAdd();
108         request.traceType = 0x1f;
109         request.numElts = 4;
110         request.nodeId = 1;
111         request.traceTsp = 1;
112         request.appData = 123;
113
114         return request;
115     }
116
117     private static TraceProfileDel generateTraceProfileDel() {
118         final TraceProfileDel request = new TraceProfileDel();
119
120         return request;
121     }
122
123     @Test
124     public void testCreate() throws Exception {
125         final TraceConfig traceConfig = generateTraceConfig(TRACE_NAME);
126         final InstanceIdentifier<TraceConfig> id = getTraceConfigId(TRACE_NAME);
127
128         whenTraceAddThenSuccess();
129
130         customizer.writeCurrentAttributes(id, traceConfig, writeContext);
131
132         verify(jvppIoam).traceProfileAdd(generateTraceProfileAdd());
133     }
134
135     @Test
136     public void testCreateFailed() throws Exception {
137         final TraceConfig traceConfig = generateTraceConfig(TRACE_NAME);
138         final InstanceIdentifier<TraceConfig> id = getTraceConfigId(TRACE_NAME);
139
140         whenTraceAddThenFailure();
141
142         try {
143             customizer.writeCurrentAttributes(id, traceConfig, writeContext);
144         } catch (WriteFailedException e) {
145             //assertTrue(e.getCause() instanceof VppBaseCallException);
146             verify(jvppIoam).traceProfileAdd(generateTraceProfileAdd());
147
148             return;
149         }
150         fail("WriteFailedException.CreateFailedException was expected");
151     }
152
153     @Test
154     public void testDelete() throws Exception {
155
156         final TraceConfig traceConfig = generateTraceConfig(TRACE_NAME);
157         final InstanceIdentifier<TraceConfig> id = getTraceConfigId(TRACE_NAME);
158
159         whenTraceDelThenSuccess();
160
161         customizer.deleteCurrentAttributes(id, traceConfig, writeContext);
162
163         verify(jvppIoam).traceProfileDel(generateTraceProfileDel());
164     }
165
166     @Test
167     public void testDeleteFailed() throws Exception {
168
169         final TraceConfig traceConfig = generateTraceConfig(TRACE_NAME);
170         final InstanceIdentifier<TraceConfig> id = getTraceConfigId(TRACE_NAME);
171
172         whenTraceDelThenFailure();
173
174         try {
175             customizer.deleteCurrentAttributes(id, traceConfig, writeContext);
176         } catch (WriteFailedException e) {
177             //assertTrue(e.getCause() instanceof VppBaseCallException);
178             verify(jvppIoam).traceProfileDel(generateTraceProfileDel());
179
180             return;
181         }
182         fail("WriteFailedException.DeleteFailedException was expected");
183
184         customizer.deleteCurrentAttributes(id, traceConfig, writeContext);
185     }
186 }