Update MRI projects for Aluminium
[netconf.git] / netconf / mdsal-netconf-yang-library / src / test / java / org / opendaylight / netconf / mdsal / yang / library / SchemaServiceToMdsalWriterTest.java
1 /*
2  * Copyright (c) 2016 Cisco Systems, Inc. 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 package org.opendaylight.netconf.mdsal.yang.library;
9
10 import static org.mockito.ArgumentMatchers.any;
11 import static org.mockito.ArgumentMatchers.eq;
12 import static org.mockito.Mockito.doNothing;
13 import static org.mockito.Mockito.doReturn;
14 import static org.mockito.Mockito.verify;
15 import static org.mockito.Mockito.when;
16 import static org.opendaylight.mdsal.common.api.CommitInfo.emptyFluentFuture;
17
18 import com.google.common.collect.ImmutableMap;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.Mock;
22 import org.mockito.MockitoAnnotations;
23 import org.opendaylight.mdsal.binding.api.DataBroker;
24 import org.opendaylight.mdsal.binding.api.WriteTransaction;
25 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
26 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
27 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesState;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.ModulesStateBuilder;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.RevisionIdentifier;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.RevisionUtils;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.CommonLeafs.Revision;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.Module;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.ModuleBuilder;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.Submodule;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160621.module.list.module.SubmoduleBuilder;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.YangIdentifier;
38 import org.opendaylight.yangtools.concepts.ListenerRegistration;
39 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
40 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContext;
41 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
42 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
43
44 public class SchemaServiceToMdsalWriterTest {
45
46     private static final InstanceIdentifier<ModulesState> MODULES_STATE_INSTANCE_IDENTIFIER =
47             InstanceIdentifier.create(ModulesState.class);
48
49     @Mock
50     private DOMSchemaService schemaService;
51     @Mock
52     private DataBroker dataBroker;
53     @Mock
54     private WriteTransaction writeTransaction;
55
56     private SchemaServiceToMdsalWriter schemaServiceToMdsalWriter;
57
58     @Before
59     public void setUp() {
60         MockitoAnnotations.initMocks(this);
61
62         when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);
63         doNothing().when(writeTransaction).put(eq(LogicalDatastoreType.OPERATIONAL), any(), any());
64         doReturn(emptyFluentFuture()).when(writeTransaction).commit();
65         when(schemaService.registerSchemaContextListener(any())).thenReturn(
66                 new ListenerRegistration<EffectiveModelContextListener>() {
67                     @Override
68                     public void close() {
69
70                     }
71
72                     @Override
73                     public EffectiveModelContextListener getInstance() {
74                         return null;
75                     }
76                 });
77         schemaServiceToMdsalWriter = new SchemaServiceToMdsalWriter(schemaService, dataBroker);
78     }
79
80     @Test
81     public void testOnGlobalContextUpdated() throws Exception {
82         schemaServiceToMdsalWriter.start();
83
84         schemaServiceToMdsalWriter.onModelContextUpdated(getSchema());
85         verify(writeTransaction).put(eq(LogicalDatastoreType.OPERATIONAL),
86                 eq(MODULES_STATE_INSTANCE_IDENTIFIER), eq(createTestModuleState()));
87     }
88
89     private static EffectiveModelContext getSchema() {
90         return YangParserTestUtils.parseYangResources(SchemaServiceToMdsalWriterTest.class, "/test-module.yang",
91             "/test-submodule.yang");
92     }
93
94     private static ModulesState createTestModuleState() {
95         Submodule sub = new SubmoduleBuilder()
96                 .setName(new YangIdentifier("test-submodule"))
97                 .setRevision(RevisionUtils.emptyRevision())
98                 .build();
99
100         Module module = new ModuleBuilder().setName(new YangIdentifier("test-module"))
101                 .setNamespace(new Uri("test:namespace"))
102                 .setRevision(new Revision(new RevisionIdentifier("2013-07-22")))
103                 .setSubmodule(ImmutableMap.of(sub.key(), sub))
104                 .setConformanceType(Module.ConformanceType.Implement)
105                 .build();
106         return new ModulesStateBuilder()
107                 .setModuleSetId("0")
108                 .setModule(ImmutableMap.of(module.key(), module))
109                 .build();
110     }
111 }