HONEYCOMB-58 - Routing Api
[honeycomb.git] / v3po / v3po2vpp / src / test / java / io / fd / honeycomb / translate / v3po / vppclassifier / VppClassifierContextManagerImplTest.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.translate.v3po.vppclassifier;
18
19 import static io.fd.honeycomb.translate.v3po.vppclassifier.VppClassifierContextManagerImpl.VPP_CLASSIFIER_CONTEXT_IID;
20 import static org.junit.Assert.assertEquals;
21 import static org.junit.Assert.assertFalse;
22 import static org.mockito.Mockito.verify;
23 import static org.mockito.Mockito.when;
24 import static org.mockito.MockitoAnnotations.initMocks;
25
26 import com.google.common.base.Optional;
27 import io.fd.honeycomb.translate.MappingContext;
28 import java.util.Arrays;
29 import org.junit.Before;
30 import org.junit.Test;
31 import org.mockito.Mock;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev161214.VppNodeName;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.VppClassifierContext;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.VppClassifierContextBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.ClassifyTableContext;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.ClassifyTableContextBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.ClassifyTableContextKey;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.classify.table.context.NodeContext;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.classify.table.context.NodeContextBuilder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.vpp.classifier.rev160909.vpp.classifier.context.classify.table.context.NodeContextKey;
41 import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier;
42
43 public class VppClassifierContextManagerImplTest {
44
45     private static final int TABLE_ID_0 = 0;
46     private static final String TABLE_NAME_0 = "table0";
47     private static final KeyedInstanceIdentifier<ClassifyTableContext, ClassifyTableContextKey> TABLE_IID_0 =
48         VPP_CLASSIFIER_CONTEXT_IID.child(ClassifyTableContext.class, new ClassifyTableContextKey(TABLE_NAME_0));
49
50     private static final int TABLE_ID_1 = 1;
51     private static final String TABLE_NAME_1 = "table1";
52
53     private VppClassifierContextManagerImpl vppClassfierContext;
54
55     @Mock
56     private MappingContext ctx;
57
58     @Before
59     public void setUp() throws Exception {
60         initMocks(this);
61         vppClassfierContext = new VppClassifierContextManagerImpl("classify-table-");
62     }
63
64     @Test
65     public void testAddTable() throws Exception {
66         final String classfierNodeName = "node123";
67         vppClassfierContext.addTable(TABLE_ID_0, TABLE_NAME_0, new VppNodeName(classfierNodeName), ctx);
68         verify(ctx).put(TABLE_IID_0, table(TABLE_ID_0, TABLE_NAME_0, classfierNodeName));
69     }
70
71     @Test
72     public void testContainsTable() throws Exception {
73         when(ctx.read(TABLE_IID_0)).thenReturn(Optional.absent());
74         assertFalse(vppClassfierContext.containsTable(TABLE_NAME_0, ctx));
75     }
76
77     @Test
78     public void testGetTableIndex() throws Exception {
79         when(ctx.read(TABLE_IID_0)).thenReturn(Optional.of(table(TABLE_ID_0, TABLE_NAME_0)));
80         assertEquals(TABLE_ID_0, vppClassfierContext.getTableIndex(TABLE_NAME_0, ctx));
81     }
82
83     @Test
84     public void testGetTableName() throws Exception {
85         when(ctx.read(VPP_CLASSIFIER_CONTEXT_IID))
86             .thenReturn(Optional.of(context(table(TABLE_ID_0, TABLE_NAME_0), table(TABLE_ID_1, TABLE_NAME_1))));
87         assertEquals(TABLE_NAME_0, (vppClassfierContext.getTableName(TABLE_ID_0, ctx)));
88     }
89
90     @Test
91     public void testGetTableBaseNode() throws Exception {
92         final String classfierNodeName = "node123";
93         when(ctx.read(TABLE_IID_0)).thenReturn(Optional.of(table(TABLE_ID_0, TABLE_NAME_0, classfierNodeName)));
94         vppClassfierContext.getTableBaseNode(TABLE_NAME_0, ctx);
95         assertEquals(Optional.of(classfierNodeName), (vppClassfierContext.getTableBaseNode(TABLE_NAME_0, ctx)));
96     }
97
98     @Test
99     public void testRemoveTable() throws Exception {
100         vppClassfierContext.removeTable(TABLE_NAME_0, ctx);
101         verify(ctx).delete(TABLE_IID_0);
102     }
103
104     @Test
105     public void testAddNodeName() throws Exception {
106         final String nodeName = "node123";
107         final int nodeIndex = 1;
108
109         vppClassfierContext.addNodeName(TABLE_NAME_0, nodeIndex, nodeName, ctx);
110         verify(ctx).put(
111             TABLE_IID_0.child(NodeContext.class, new NodeContextKey(nodeName)),
112             node(nodeName, nodeIndex)
113         );
114     }
115
116     @Test
117     public void testGetNonExistingNodeName() throws Exception {
118         when(ctx.read(VPP_CLASSIFIER_CONTEXT_IID)).thenReturn(Optional.of(context(table(TABLE_ID_1, TABLE_NAME_1))));
119         assertFalse(vppClassfierContext.getNodeName(TABLE_ID_0, 123, ctx).isPresent());
120     }
121
122     @Test
123     public void testGetNodeNameMissingNodeCtx() throws Exception {
124         final ClassifyTableContext tableCtx = table(TABLE_ID_0, TABLE_NAME_0, "aa");
125         when(ctx.read(VPP_CLASSIFIER_CONTEXT_IID)).thenReturn(Optional.of(context(tableCtx)));
126         when(ctx.read(TABLE_IID_0)).thenReturn(Optional.of(tableCtx));
127         assertEquals(Optional.absent(), vppClassfierContext.getNodeName(TABLE_ID_0, 123, ctx));
128     }
129
130     @Test
131     public void testGetNodeName() throws Exception {
132         final ClassifyTableContext tableCtx = table(TABLE_ID_0, TABLE_NAME_0, "aa", node("node123", 123));
133         when(ctx.read(VPP_CLASSIFIER_CONTEXT_IID)).thenReturn(Optional.of(context(tableCtx)));
134         when(ctx.read(TABLE_IID_0)).thenReturn(Optional.of(tableCtx));
135         assertEquals(Optional.of("node123"), vppClassfierContext.getNodeName(TABLE_ID_0, 123, ctx));
136     }
137
138     private VppClassifierContext context(ClassifyTableContext... tables) {
139         VppClassifierContextBuilder context = new VppClassifierContextBuilder();
140         context.setClassifyTableContext(Arrays.asList(tables));
141         return context.build();
142     }
143
144     private static ClassifyTableContext table(final Integer id, final String name) {
145         return table(id, name, null);
146     }
147
148     private static ClassifyTableContext table(final Integer id, final String name, final String classfierNodeName,
149                                               final NodeContext... nodeContexts) {
150         final ClassifyTableContextBuilder builder =
151             new ClassifyTableContextBuilder().setIndex(id).setName(name).setClassifierNodeName(classfierNodeName);
152
153         if (nodeContexts.length > 0) {
154             builder.setNodeContext(Arrays.asList(nodeContexts));
155         }
156
157         return builder.build();
158     }
159
160     private NodeContext node(final String nodeName, final int nodeIndex) {
161         return new NodeContextBuilder().setName(nodeName).setIndex(nodeIndex).build();
162     }
163 }