2 * Copyright (c) 2014 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.controller.sal.dom.broker;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.fail;
13 import static org.mockito.Matchers.any;
14 import static org.mockito.Mockito.doNothing;
15 import static org.mockito.Mockito.doReturn;
16 import static org.mockito.Mockito.mock;
17 import static org.mockito.Mockito.times;
18 import static org.mockito.Mockito.verify;
19 import com.google.common.base.Optional;
20 import com.google.common.util.concurrent.ListenableFuture;
21 import java.util.AbstractMap;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.mockito.Mock;
25 import org.mockito.MockitoAnnotations;
26 import org.opendaylight.controller.md.sal.common.api.TransactionStatus;
27 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
28 import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizationException;
29 import org.opendaylight.controller.md.sal.common.impl.util.compat.DataNormalizer;
30 import org.opendaylight.controller.sal.core.api.data.DataModificationTransaction;
31 import org.opendaylight.controller.sal.core.api.data.DataProviderService;
32 import org.opendaylight.controller.sal.dom.broker.impl.SchemaContextProvider;
33 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
34 import org.opendaylight.yangtools.yang.data.api.CompositeNode;
35 import org.opendaylight.yangtools.yang.data.api.YangInstanceIdentifier;
36 import org.opendaylight.yangtools.yang.data.api.schema.NormalizedNode;
37 import org.slf4j.Logger;
38 import org.slf4j.LoggerFactory;
41 public class BackwardsCompatibleMountPointTest {
42 private static final Logger log = LoggerFactory.getLogger(BackwardsCompatibleMountPointManagerTest.class);
44 private static final YangInstanceIdentifier id = BackwardsCompatibleMountPointManagerTest.id;
45 private final NormalizedNode<?, ?> normalizedNode = mockNormalizedNode();
46 private final CompositeNode compositeNode = mockCompositeNode();
49 private DataProviderService oldBroker;
51 private SchemaContextProvider schemaContextProvider;
53 private DataModificationTransaction mockTx;
55 private BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore backwardsCompatibleDomStore;
58 public void setUp() throws Exception {
59 MockitoAnnotations.initMocks(this);
62 backwardsCompatibleDomStore = new BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore(oldBroker, schemaContextProvider);
65 private void stubOldBroker() {
66 doReturn(compositeNode).when(oldBroker).readConfigurationData(id);
67 doReturn(compositeNode).when(oldBroker).readOperationalData(id);
68 doReturn(mockTx).when(oldBroker).beginTransaction();
69 doNothing().when(mockTx).putConfigurationData(id, compositeNode);
70 doNothing().when(mockTx).putOperationalData(id, compositeNode);
71 doReturn(com.google.common.util.concurrent.Futures.immediateFuture(RpcResultBuilder.success(TransactionStatus.COMMITED))).when(mockTx).commit();
74 private CompositeNode mockCompositeNode() {
75 final CompositeNode mock = mock(CompositeNode.class);
76 doReturn("node").when(mock).toString();
80 private void stubSchemaProvider() {
81 doReturn(BackwardsCompatibleMountPointManagerTest.mockSchemaContext()).when(schemaContextProvider).getSchemaContext();
85 public void testBackwardsCompatibleBroker() throws Exception {
86 backwardsCompatibleDomStore.newReadOnlyTransaction();
87 backwardsCompatibleDomStore.newWriteOnlyTransaction();
88 backwardsCompatibleDomStore.newReadWriteTransaction();
92 public void testReadTransaction() throws Exception {
93 final BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleReadTransaction tx =
94 new BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleReadTransaction(oldBroker, mockNormalizer());
96 ListenableFuture<Optional<NormalizedNode<?, ?>>> read = tx.read(LogicalDatastoreType.CONFIGURATION, id);
97 assertEquals(normalizedNode, read.get().get());
98 verify(oldBroker).readConfigurationData(id);
100 read = tx.read(LogicalDatastoreType.OPERATIONAL, id);
101 assertEquals(normalizedNode, read.get().get());
103 verify(oldBroker).readOperationalData(id);
107 public void testReadWriteTransactionOperational() throws Exception {
108 final BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleWriteTransaction tx =
109 new BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleWriteTransaction(oldBroker, mockNormalizer());
111 verify(oldBroker).beginTransaction();
113 tx.put(LogicalDatastoreType.CONFIGURATION, id, normalizedNode);
114 verify(mockTx).putConfigurationData(id, compositeNode);
116 tx.put(LogicalDatastoreType.CONFIGURATION, id, normalizedNode);
117 verify(mockTx, times(2)).putConfigurationData(id, compositeNode);
120 verify(mockTx).commit();
125 public void testCannotPutOperational() throws Exception {
126 final BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleWriteTransaction tx =
127 new BackwardsCompatibleMountPoint.BackwardsCompatibleDomStore.BackwardsCompatibleWriteTransaction(oldBroker, mockNormalizer());
130 tx.put(LogicalDatastoreType.OPERATIONAL, id, normalizedNode);
131 } catch (IllegalArgumentException e) {
132 // Cannot put operational data
137 fail("Should fail when putting operational data");
140 private DataNormalizer mockNormalizer() throws DataNormalizationException {
141 final DataNormalizer mock = mock(DataNormalizer.class);
142 doReturn(new AbstractMap.SimpleEntry<YangInstanceIdentifier, NormalizedNode<?, ?>>(id, normalizedNode))
143 .when(mock).toNormalized(any(YangInstanceIdentifier.class), any(CompositeNode.class));
144 doReturn(compositeNode).when(mock).toLegacy(any(YangInstanceIdentifier.class), any(NormalizedNode.class));
145 doReturn(id).when(mock).toLegacy(any(YangInstanceIdentifier.class));
149 private NormalizedNode<?, ?> mockNormalizedNode() {
150 final NormalizedNode<?, ?> mock = mock(NormalizedNode.class);
151 doReturn("mockNormalizedNode").when(mock).toString();