2 * Copyright (c) 2016 Cisco and/or its affiliates.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at:
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package io.fd.honeycomb.v3po.translate.util.read.registry;
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertFalse;
21 import static org.mockito.Mockito.atLeastOnce;
22 import static org.mockito.Mockito.doReturn;
23 import static org.mockito.Mockito.mock;
24 import static org.mockito.Mockito.verify;
26 import com.google.common.base.Optional;
27 import com.google.common.collect.Sets;
28 import io.fd.honeycomb.v3po.translate.read.ReadContext;
29 import io.fd.honeycomb.v3po.translate.read.Reader;
30 import io.fd.honeycomb.v3po.translate.util.DataObjects;
31 import org.junit.Before;
32 import org.junit.Test;
33 import org.mockito.Mock;
34 import org.mockito.MockitoAnnotations;
35 import org.opendaylight.yangtools.concepts.Builder;
36 import org.opendaylight.yangtools.yang.binding.ChildOf;
37 import org.opendaylight.yangtools.yang.binding.DataObject;
38 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
40 public class SubtreeReaderTest {
43 private Reader<DataObjects.DataObject4, Builder<DataObjects.DataObject4>> delegate;
45 private Reader<DataObject1, Builder<DataObject1>> delegateLocal;
47 private ReadContext ctx;
50 public void setUp() throws Exception {
51 MockitoAnnotations.initMocks(this);
52 doReturn(DataObjects.DataObject4.IID).when(delegate).getManagedDataObjectType();
53 doReturn(DataObject1.IID).when(delegateLocal).getManagedDataObjectType();
57 public void testCreate() throws Exception {
58 final Reader<DataObjects.DataObject4, Builder<DataObjects.DataObject4>> subtreeR =
59 SubtreeReader.createForReader(Sets.newHashSet(DataObjects.DataObject4.DataObject41.IID), delegate);
61 subtreeR.getBuilder(DataObjects.DataObject4.IID);
62 verify(delegate).getBuilder(DataObjects.DataObject4.IID);
64 subtreeR.getManagedDataObjectType();
65 verify(delegate, atLeastOnce()).getManagedDataObjectType();
68 @Test(expected = IllegalArgumentException.class)
69 public void testCreateInvalid() throws Exception {
70 SubtreeReader.createForReader(Sets.newHashSet(DataObjects.DataObject1.IID), delegate);
73 @Test(expected = IllegalStateException.class)
74 public void testReadOnlySubtreeCannotFilter() throws Exception {
75 final Reader<DataObjects.DataObject4, Builder<DataObjects.DataObject4>> subtreeR =
76 SubtreeReader.createForReader(Sets.newHashSet(DataObjects.DataObject4.DataObject41.IID), delegate);
78 doReturn(Optional.fromNullable(mock(DataObjects.DataObject4.class))).when(delegate).read(DataObjects.DataObject4.IID, ctx);
79 subtreeR.read(DataObjects.DataObject4.DataObject41.IID, ctx);
83 public void testReadOnlySubtreeNotPresent() throws Exception {
84 final Reader<DataObjects.DataObject4, Builder<DataObjects.DataObject4>> subtreeR =
85 SubtreeReader.createForReader(Sets.newHashSet(DataObjects.DataObject4.DataObject41.IID), delegate);
87 doReturn(Optional.absent()).when(delegate).read(DataObjects.DataObject4.IID, ctx);
88 assertFalse(subtreeR.read(DataObjects.DataObject4.DataObject41.IID, ctx).isPresent());
92 public void testReadOnlySubtreeChild() throws Exception {
93 final Reader<DataObject1, Builder<DataObject1>> subtreeR =
94 SubtreeReader.createForReader(Sets.newHashSet(DataObject1.DataObject11.IID), delegateLocal);
96 final DataObject1 mock = mock(DataObject1.class);
97 final DataObject1.DataObject11 mock11 = mock(DataObject1.DataObject11.class);
98 doReturn(mock11).when(mock).getDataObject11();
99 doReturn(Optional.fromNullable(mock)).when(delegateLocal).read(DataObject1.IID, ctx);
100 assertEquals(mock11, subtreeR.read(DataObject1.DataObject11.IID, ctx).get());
104 public void testReadEntireSubtree() throws Exception {
105 final Reader<DataObject1, Builder<DataObject1>> subtreeR =
106 SubtreeReader.createForReader(Sets.newHashSet(DataObject1.DataObject11.IID), delegateLocal);
108 final DataObject1 mock = mock(DataObject1.class);
109 final DataObject1.DataObject11 mock11 = mock(DataObject1.DataObject11.class);
110 doReturn(mock11).when(mock).getDataObject11();
111 doReturn(Optional.fromNullable(mock)).when(delegateLocal).read(DataObject1.IID, ctx);
112 assertEquals(mock, subtreeR.read(DataObject1.IID, ctx).get());
115 public abstract static class DataObject1 implements DataObject {
116 public static InstanceIdentifier<DataObject1> IID = InstanceIdentifier.create(DataObject1.class);
118 public abstract DataObject11 getDataObject11();
120 public abstract static class DataObject11 implements DataObject, ChildOf<DataObject1> {
121 public static InstanceIdentifier<DataObject11> IID = DataObject1.IID.child(DataObject11.class);