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