2 * Copyright (c) 2016 Cisco and/or its affiliates.
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:
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package io.fd.honeycomb.translate.v3po.vppclassifier;
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;
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;
43 public class VppClassifierContextManagerImplTest {
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));
50 private static final int TABLE_ID_1 = 1;
51 private static final String TABLE_NAME_1 = "table1";
53 private VppClassifierContextManagerImpl vppClassfierContext;
56 private MappingContext ctx;
59 public void setUp() throws Exception {
61 vppClassfierContext = new VppClassifierContextManagerImpl("classify-table-");
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));
72 public void testContainsTable() throws Exception {
73 when(ctx.read(TABLE_IID_0)).thenReturn(Optional.absent());
74 assertFalse(vppClassfierContext.containsTable(TABLE_NAME_0, ctx));
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));
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)));
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)));
99 public void testRemoveTable() throws Exception {
100 vppClassfierContext.removeTable(TABLE_NAME_0, ctx);
101 verify(ctx).delete(TABLE_IID_0);
105 public void testAddNodeName() throws Exception {
106 final String nodeName = "node123";
107 final int nodeIndex = 1;
109 vppClassfierContext.addNodeName(TABLE_NAME_0, nodeIndex, nodeName, ctx);
111 TABLE_IID_0.child(NodeContext.class, new NodeContextKey(nodeName)),
112 node(nodeName, nodeIndex)
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());
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));
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));
138 private VppClassifierContext context(ClassifyTableContext... tables) {
139 VppClassifierContextBuilder context = new VppClassifierContextBuilder();
140 context.setClassifyTableContext(Arrays.asList(tables));
141 return context.build();
144 private static ClassifyTableContext table(final Integer id, final String name) {
145 return table(id, name, null);
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);
153 if (nodeContexts.length > 0) {
154 builder.setNodeContext(Arrays.asList(nodeContexts));
157 return builder.build();
160 private NodeContext node(final String nodeName, final int nodeIndex) {
161 return new NodeContextBuilder().setName(nodeName).setIndex(nodeIndex).build();