Merge "Unit test for ovsdb.southbound.ovsdb.transact"
[ovsdb.git] / southbound / southbound-impl / src / test / java / org / opendaylight / ovsdb / southbound / InstanceIdentifierCodecTest.java
1 /*
2  * Copyright (c) 2015 Inocybe Technologies 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.ovsdb.southbound;
10
11 import static org.junit.Assert.assertEquals;
12 import static org.mockito.Matchers.any;
13 import static org.mockito.Matchers.anyString;
14 import static org.mockito.Mockito.mock;
15 import static org.mockito.Mockito.verify;
16 import static org.mockito.Mockito.when;
17
18 import java.net.URI;
19 import java.net.URISyntaxException;
20 import java.util.Date;
21
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.junit.runner.RunWith;
25 import org.mockito.Mock;
26 import org.mockito.Mockito;
27 import org.mockito.invocation.InvocationOnMock;
28 import org.mockito.stubbing.Answer;
29 import org.opendaylight.controller.sal.core.api.model.SchemaService;
30 import org.opendaylight.yangtools.binding.data.codec.api.BindingNormalizedNodeSerializer;
31 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
32 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
33 import org.opendaylight.yangtools.yang.data.util.AbstractModuleStringInstanceIdentifierCodec;
34 import org.opendaylight.yangtools.yang.data.util.DataSchemaContextTree;
35 import org.opendaylight.yangtools.yang.model.api.Module;
36 import org.opendaylight.yangtools.yang.model.api.SchemaContext;
37 import org.powermock.api.mockito.PowerMockito;
38 import org.powermock.api.support.membermodification.MemberModifier;
39 import org.powermock.core.classloader.annotations.PrepareForTest;
40 import org.powermock.modules.junit4.PowerMockRunner;
41
42 @PrepareForTest({AbstractModuleStringInstanceIdentifierCodec.class, DataSchemaContextTree.class})
43 @RunWith(PowerMockRunner.class)
44
45 public class InstanceIdentifierCodecTest {
46
47     private InstanceIdentifierCodec instanceIdentifierCodec;
48     @Mock private DataSchemaContextTree dataSchemaContextTree;
49     @Mock private SchemaContext context;
50     @Mock private BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer;
51     @Mock private SchemaService schemaService;
52
53     @Before
54     public void setUp() throws IllegalArgumentException, IllegalAccessException {
55         instanceIdentifierCodec = mock(InstanceIdentifierCodec.class, Mockito.CALLS_REAL_METHODS);
56         MemberModifier.field(InstanceIdentifierCodec.class, "dataSchemaContextTree").set(instanceIdentifierCodec, dataSchemaContextTree);
57         MemberModifier.field(InstanceIdentifierCodec.class, "context").set(instanceIdentifierCodec, context);
58         MemberModifier.field(InstanceIdentifierCodec.class, "bindingNormalizedNodeSerializer").set(instanceIdentifierCodec, bindingNormalizedNodeSerializer);
59
60     }
61     @Test
62     public void testInstanceIdentifierCodec() throws Exception {
63         InstanceIdentifierCodec codec = new InstanceIdentifierCodec(schemaService, bindingNormalizedNodeSerializer);
64         verify(schemaService).registerSchemaContextListener(codec);
65     }
66
67     @Test
68     public void testGetDataContextTree() {
69         assertEquals("Error, did not return correct DataSchemaContextTree object", dataSchemaContextTree, instanceIdentifierCodec.getDataContextTree());
70     }
71
72     @Test
73     public void testModuleForPrefix() {
74         Module module = mock(Module.class);
75         when(context.findModuleByName(anyString(),any(Date.class))).thenReturn(module);
76         assertEquals("Error, did not return correct Module object", module, instanceIdentifierCodec.moduleForPrefix(""));
77     }
78
79     @Test
80     public void testPrefixForNamespace() throws URISyntaxException {
81         Module module = mock(Module.class);
82         URI namespace = new URI("");
83         when(context.findModuleByNamespaceAndRevision(any(URI.class), any(Date.class))).thenReturn(null).thenReturn(module);
84         when(module.getName()).thenReturn("");
85         assertEquals("Error, null should have been returned", null, instanceIdentifierCodec.prefixForNamespace(namespace));
86         assertEquals("Error, did not return the correct module name", anyString(), instanceIdentifierCodec.prefixForNamespace(namespace));
87     }
88
89     @Test
90     public void testOnGlobalContextUpdated() {
91         PowerMockito.mockStatic(DataSchemaContextTree.class);
92         when(DataSchemaContextTree.from(any(SchemaContext.class))).thenReturn(dataSchemaContextTree);
93         instanceIdentifierCodec.onGlobalContextUpdated(context);
94         verify(instanceIdentifierCodec).onGlobalContextUpdated(context);
95     }
96
97     @Test
98     public void testSerialize() {
99         InstanceIdentifier<?> iid = mock(InstanceIdentifier.class);
100         YangInstanceIdentifier yIid = mock(YangInstanceIdentifier.class);
101         when(bindingNormalizedNodeSerializer.toYangInstanceIdentifier(iid)).thenReturn(yIid);
102
103         when((PowerMockito.mock(AbstractModuleStringInstanceIdentifierCodec.class)).serialize(yIid)).thenReturn("Serialized IID");
104         assertEquals("Error, did not return correct string", anyString(), instanceIdentifierCodec.serialize(iid));
105     }
106
107     @Test
108     public void testBindingDeserializer() throws Exception {
109         YangInstanceIdentifier yIid = mock(YangInstanceIdentifier.class);
110         when((PowerMockito.mock(AbstractModuleStringInstanceIdentifierCodec.class)).deserialize(anyString())).thenReturn(yIid);
111
112         mock(InstanceIdentifier.class);
113         when(bindingNormalizedNodeSerializer.fromYangInstanceIdentifier(yIid)).thenAnswer(new Answer<InstanceIdentifier<?>>() {
114             public InstanceIdentifier<?> answer(InvocationOnMock invocation) throws Throwable {
115                 return (InstanceIdentifier<?>) invocation.getArguments() [0];
116             }
117         });
118
119         assertEquals("Error, did not return correct InstanceIdentifier<?> object", any(InstanceIdentifier.class), instanceIdentifierCodec.bindingDeserializer(""));
120     }
121 }