Standalone yang library data writer
[netconf.git] / netconf / mdsal-netconf-yang-library / src / test / java / org / opendaylight / netconf / mdsal / yang / library / AbstractYangLibraryWriterTest.java
1 /*
2  * Copyright (c) 2021 PANTHEON.tech, s.r.o. 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.verifyNoInteractions;
16 import static org.opendaylight.mdsal.common.api.CommitInfo.emptyFluentFuture;
17
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.mockito.Mock;
21 import org.opendaylight.mdsal.binding.api.DataBroker;
22 import org.opendaylight.mdsal.binding.api.WriteTransaction;
23 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
24 import org.opendaylight.mdsal.dom.api.DOMSchemaService;
25 import org.opendaylight.yangtools.concepts.ListenerRegistration;
26 import org.opendaylight.yangtools.yang.binding.DataObject;
27 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
28 import org.opendaylight.yangtools.yang.model.api.EffectiveModelContextListener;
29 import org.opendaylight.yangtools.yang.test.util.YangParserTestUtils;
30
31 public abstract class AbstractYangLibraryWriterTest {
32     @Mock
33     private DOMSchemaService schemaService;
34     @Mock
35     private DataBroker dataBroker;
36     @Mock
37     private WriteTransaction writeTransaction;
38
39     YangLibraryWriter writer;
40
41     @Before
42     public void setUp() {
43         doReturn(writeTransaction).when(dataBroker).newWriteOnlyTransaction();
44         doNothing().when(writeTransaction).put(eq(LogicalDatastoreType.OPERATIONAL), any(), any());
45         doReturn(emptyFluentFuture()).when(writeTransaction).commit();
46         // FIXME: use a mock for this
47         doReturn(new ListenerRegistration<EffectiveModelContextListener>() {
48             @Override
49             public void close() {
50
51             }
52
53             @Override
54             public EffectiveModelContextListener getInstance() {
55                 return null;
56             }
57         }).when(schemaService).registerSchemaContextListener(any());
58         writer = new YangLibraryWriter(schemaService, dataBroker);
59     }
60
61     @Test
62     public void testNoUpdate() {
63         writer.onModelContextUpdated(YangParserTestUtils.parseYangResources(YangLibraryTest.class,
64             "/test-module.yang", "/test-submodule.yang"));
65         verifyNoInteractions(dataBroker);
66     }
67
68     final <T extends DataObject> void assertOperationalUpdate(final InstanceIdentifier<T> path, final T object) {
69         writer.onModelContextUpdated(YangParserTestUtils.parseYangResources(YangLibraryTest.class,
70             "/test-module.yang", "/test-submodule.yang", "/ietf-yang-library.yang"));
71         verify(writeTransaction).put(LogicalDatastoreType.OPERATIONAL, path, object);
72         verify(writeTransaction).commit();
73     }
74 }