Merge "Fix potential future problems re. hidden fields"
[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 import static org.powermock.api.support.membermodification.MemberMatcher.field;
18
19 import java.net.URI;
20 import java.net.URISyntaxException;
21 import java.util.Date;
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.core.classloader.annotations.PrepareForTest;
39 import org.powermock.modules.junit4.PowerMockRunner;
40
41 @RunWith(PowerMockRunner.class)
42 @PrepareForTest({ AbstractModuleStringInstanceIdentifierCodec.class, DataSchemaContextTree.class })
43 public class InstanceIdentifierCodecTest {
44
45     private InstanceIdentifierCodec instanceIdCodec;
46     @Mock
47     private DataSchemaContextTree dataSchemaContextTree;
48     @Mock
49     private SchemaContext context;
50     @Mock
51     private BindingNormalizedNodeSerializer bindingNormalizedNodeSerializer;
52     @Mock
53     private SchemaService schemaService;
54
55     @Before
56     public void setUp() throws IllegalArgumentException, IllegalAccessException {
57         instanceIdCodec = mock(InstanceIdentifierCodec.class, Mockito.CALLS_REAL_METHODS);
58         field(InstanceIdentifierCodec.class, "dataSchemaContextTree").set(instanceIdCodec, dataSchemaContextTree);
59         field(InstanceIdentifierCodec.class, "context").set(instanceIdCodec, context);
60         field(InstanceIdentifierCodec.class, "bindingNormalizedNodeSerializer").set(instanceIdCodec,
61                 bindingNormalizedNodeSerializer);
62     }
63
64     @Test
65     public void testInstanceIdentifierCodec() throws Exception {
66         InstanceIdentifierCodec codec = new InstanceIdentifierCodec(schemaService, bindingNormalizedNodeSerializer);
67         verify(schemaService).registerSchemaContextListener(codec);
68     }
69
70     @Test
71     public void testGetDataContextTree() {
72         assertEquals("Error, did not return correct DataSchemaContextTree object", dataSchemaContextTree,
73                 instanceIdCodec.getDataContextTree());
74     }
75
76     @Test
77     public void testModuleForPrefix() {
78         Module module = mock(Module.class);
79         when(context.findModuleByName(anyString(), any(Date.class))).thenReturn(module);
80         assertEquals("Error, did not return correct Module object", module, instanceIdCodec.moduleForPrefix(""));
81     }
82
83     @Test
84     public void testPrefixForNamespace() throws URISyntaxException {
85         Module module = mock(Module.class);
86         URI namespace = new URI("");
87         when(context.findModuleByNamespaceAndRevision(any(URI.class), any(Date.class))).thenReturn(null)
88                 .thenReturn(module);
89         when(module.getName()).thenReturn("");
90         assertEquals("Error, null should have been returned", null, instanceIdCodec.prefixForNamespace(namespace));
91         assertEquals("Error, did not return the correct module name", anyString(),
92                 instanceIdCodec.prefixForNamespace(namespace));
93     }
94
95     @Test
96     public void testOnGlobalContextUpdated() {
97         PowerMockito.mockStatic(DataSchemaContextTree.class);
98         when(DataSchemaContextTree.from(any(SchemaContext.class))).thenReturn(dataSchemaContextTree);
99         instanceIdCodec.onGlobalContextUpdated(context);
100         verify(instanceIdCodec).onGlobalContextUpdated(context);
101     }
102
103     @Test
104     public void testSerialize() {
105         InstanceIdentifier<?> iid = mock(InstanceIdentifier.class);
106         YangInstanceIdentifier yiid = mock(YangInstanceIdentifier.class);
107         when(bindingNormalizedNodeSerializer.toYangInstanceIdentifier(iid)).thenReturn(yiid);
108
109         when((PowerMockito.mock(AbstractModuleStringInstanceIdentifierCodec.class)).serialize(yiid))
110                 .thenReturn("Serialized IID");
111         assertEquals("Error, did not return correct string", anyString(), instanceIdCodec.serialize(iid));
112     }
113
114     @Test
115     public void testBindingDeserializer() throws Exception {
116         YangInstanceIdentifier yiid = mock(YangInstanceIdentifier.class);
117         when((PowerMockito.mock(AbstractModuleStringInstanceIdentifierCodec.class)).deserialize(anyString()))
118                 .thenReturn(yiid);
119
120         mock(InstanceIdentifier.class);
121         when(bindingNormalizedNodeSerializer.fromYangInstanceIdentifier(yiid))
122                 .thenAnswer(new Answer<InstanceIdentifier<?>>() {
123                     public InstanceIdentifier<?> answer(InvocationOnMock invocation) throws Throwable {
124                         return (InstanceIdentifier<?>) invocation.getArguments()[0];
125                     }
126                 });
127
128         assertEquals("Error, did not return correct InstanceIdentifier<?> object", any(InstanceIdentifier.class),
129                 instanceIdCodec.bindingDeserializer(""));
130     }
131 }