2 * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
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
9 package org.opendaylight.netconf.mdsal.yang.library;
11 import static org.mockito.Matchers.any;
12 import static org.mockito.Matchers.eq;
13 import static org.mockito.Mockito.doNothing;
14 import static org.mockito.Mockito.verify;
15 import static org.mockito.Mockito.when;
17 import com.google.common.collect.Lists;
18 import com.google.common.util.concurrent.Futures;
19 import org.junit.Before;
20 import org.junit.Test;
21 import org.mockito.Mock;
22 import org.mockito.MockitoAnnotations;
23 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
24 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
25 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
26 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
27 import org.opendaylight.controller.sal.core.api.model.SchemaService;
28 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
29 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesState;
30 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.ModulesStateBuilder;
31 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.OptionalRevision;
32 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.Module;
33 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.ModuleBuilder;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.SubmodulesBuilder;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.submodules.Submodule;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.library.rev160409.module.list.module.submodules.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.SchemaContext;
41 import org.opendaylight.yangtools.yang.model.api.SchemaContextListener;
42 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
44 public class SchemaServiceToMdsalWriterTest {
46 private static final InstanceIdentifier<ModulesState> MODULES_STATE_INSTANCE_IDENTIFIER =
47 InstanceIdentifier.create(ModulesState.class);
50 private SchemaService schemaService;
52 private BindingAwareBroker.ProviderContext context;
54 private DataBroker dataBroker;
56 private WriteTransaction writeTransaction;
58 private SchemaServiceToMdsalWriter schemaServiceToMdsalWriter;
62 MockitoAnnotations.initMocks(this);
64 when(context.getSALService(DataBroker.class)).thenReturn(dataBroker);
65 when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);
66 doNothing().when(writeTransaction).put(eq(LogicalDatastoreType.OPERATIONAL), any(), any());
67 when(writeTransaction.submit()).thenReturn(Futures.immediateCheckedFuture(null));
68 when(schemaService.registerSchemaContextListener(any())).thenReturn(
69 new ListenerRegistration<SchemaContextListener>() {
76 public SchemaContextListener getInstance() {
80 schemaServiceToMdsalWriter = new SchemaServiceToMdsalWriter(schemaService, dataBroker);
84 public void testOnGlobalContextUpdated() throws Exception {
85 schemaServiceToMdsalWriter.start();
87 schemaServiceToMdsalWriter.onGlobalContextUpdated(getSchema());
88 verify(writeTransaction).put(eq(LogicalDatastoreType.OPERATIONAL),
89 eq(MODULES_STATE_INSTANCE_IDENTIFIER), eq(createTestModuleState()));
92 private static SchemaContext getSchema() {
93 return YangParserTestUtils.parseYangResources(SchemaServiceToMdsalWriterTest.class, "/test-module.yang",
94 "/test-submodule.yang");
97 private static ModulesState createTestModuleState() {
98 Submodule sub = new SubmoduleBuilder().setName(new YangIdentifier("test-submodule"))
101 Module module = new ModuleBuilder().setName(new YangIdentifier("test-module"))
102 .setNamespace(new Uri("test:namespace"))
103 .setRevision(new OptionalRevision("2013-07-22"))
104 .setSubmodules(new SubmodulesBuilder().setSubmodule(Lists.newArrayList(sub)).build())
105 .setConformanceType(Module.ConformanceType.Implement)
107 return new ModulesStateBuilder().setModuleSetId("0")
108 .setModule(Lists.newArrayList(module)).build();