1 package io.fd.honeycomb.v3po.translate.util.write.registry;
3 import static org.hamcrest.CoreMatchers.anyOf;
4 import static org.hamcrest.CoreMatchers.equalTo;
5 import static org.hamcrest.CoreMatchers.hasItems;
6 import static org.hamcrest.CoreMatchers.instanceOf;
7 import static org.hamcrest.CoreMatchers.is;
8 import static org.junit.Assert.assertEquals;
9 import static org.junit.Assert.assertThat;
10 import static org.mockito.Mockito.mock;
11 import static org.mockito.Mockito.when;
13 import com.google.common.collect.ImmutableMap;
14 import com.google.common.collect.Lists;
15 import com.google.common.collect.Sets;
16 import io.fd.honeycomb.v3po.translate.write.Writer;
17 import java.util.ArrayList;
18 import java.util.List;
19 import org.junit.Test;
20 import org.opendaylight.yangtools.yang.binding.ChildOf;
21 import org.opendaylight.yangtools.yang.binding.DataObject;
22 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
24 public class FlatWriterRegistryBuilderTest {
28 public void testRelationsBefore() throws Exception {
29 final FlatWriterRegistryBuilder flatWriterRegistryBuilder = new FlatWriterRegistryBuilder();
34 flatWriterRegistryBuilder.add(mockWriter(DataObject3.class));
35 flatWriterRegistryBuilder.add(mockWriter(DataObject4.class));
36 flatWriterRegistryBuilder.addBefore(mockWriter(DataObject2.class),
37 Lists.newArrayList(DataObject3.IID, DataObject4.IID));
38 flatWriterRegistryBuilder.addBefore(mockWriter(DataObject1.class), DataObject2.IID);
39 final ImmutableMap<InstanceIdentifier<?>, Writer<?>> mappedWriters =
40 flatWriterRegistryBuilder.getMappedHandlers();
42 final ArrayList<InstanceIdentifier<?>> typesInList = Lists.newArrayList(mappedWriters.keySet());
43 assertEquals(DataObject1.IID, typesInList.get(0));
44 assertEquals(DataObject2.IID, typesInList.get(1));
45 assertThat(typesInList.get(2), anyOf(equalTo(DataObject3.IID), equalTo(DataObject4.IID)));
46 assertThat(typesInList.get(3), anyOf(equalTo(DataObject3.IID), equalTo(DataObject4.IID)));
50 public void testRelationsAfter() throws Exception {
51 final FlatWriterRegistryBuilder flatWriterRegistryBuilder = new FlatWriterRegistryBuilder();
56 flatWriterRegistryBuilder.add(mockWriter(DataObject1.class));
57 flatWriterRegistryBuilder.addAfter(mockWriter(DataObject2.class), DataObject1.IID);
58 flatWriterRegistryBuilder.addAfter(mockWriter(DataObject3.class), DataObject2.IID);
59 flatWriterRegistryBuilder.addAfter(mockWriter(DataObject4.class), DataObject2.IID);
60 final ImmutableMap<InstanceIdentifier<?>, Writer<?>> mappedWriters =
61 flatWriterRegistryBuilder.getMappedHandlers();
63 final List<InstanceIdentifier<?>> typesInList = Lists.newArrayList(mappedWriters.keySet());
64 assertEquals(DataObject1.IID, typesInList.get(0));
65 assertEquals(DataObject2.IID, typesInList.get(1));
66 assertThat(typesInList.get(2), anyOf(equalTo(DataObject3.IID), equalTo(DataObject4.IID)));
67 assertThat(typesInList.get(3), anyOf(equalTo(DataObject3.IID), equalTo(DataObject4.IID)));
70 @Test(expected = IllegalArgumentException.class)
71 public void testRelationsLoop() throws Exception {
72 final FlatWriterRegistryBuilder flatWriterRegistryBuilder = new FlatWriterRegistryBuilder();
76 flatWriterRegistryBuilder.add(mockWriter(DataObject1.class));
77 flatWriterRegistryBuilder.addAfter(mockWriter(DataObject2.class), DataObject1.IID);
78 flatWriterRegistryBuilder.addAfter(mockWriter(DataObject1.class), DataObject2.IID);
81 @Test(expected = IllegalArgumentException.class)
82 public void testAddWriterTwice() throws Exception {
83 final FlatWriterRegistryBuilder flatWriterRegistryBuilder = new FlatWriterRegistryBuilder();
84 flatWriterRegistryBuilder.add(mockWriter(DataObject1.class));
85 flatWriterRegistryBuilder.add(mockWriter(DataObject1.class));
89 public void testAddSubtreeWriter() throws Exception {
90 final FlatWriterRegistryBuilder flatWriterRegistryBuilder = new FlatWriterRegistryBuilder();
91 flatWriterRegistryBuilder.subtreeAdd(
92 Sets.newHashSet(DataObject4.DataObject5.IID,
93 DataObject4.DataObject5.IID),
94 mockWriter(DataObject4.class));
95 final ImmutableMap<InstanceIdentifier<?>, Writer<?>> mappedWriters =
96 flatWriterRegistryBuilder.getMappedHandlers();
97 final ArrayList<InstanceIdentifier<?>> typesInList = Lists.newArrayList(mappedWriters.keySet());
99 assertEquals(DataObject4.IID, typesInList.get(0));
100 assertEquals(1, typesInList.size());
104 public void testCreateSubtreeWriter() throws Exception {
105 final Writer<?> forWriter = SubtreeWriter.createForWriter(Sets.newHashSet(
106 DataObject4.DataObject5.IID,
107 DataObject4.DataObject5.DataObject51.IID,
108 DataObject4.DataObject6.IID),
109 mockWriter(DataObject4.class));
110 assertThat(forWriter, instanceOf(SubtreeWriter.class));
111 assertThat(((SubtreeWriter<?>) forWriter).getHandledChildTypes().size(), is(3));
112 assertThat(((SubtreeWriter<?>) forWriter).getHandledChildTypes(), hasItems(DataObject4.DataObject5.IID,
113 DataObject4.DataObject6.IID, DataObject4.DataObject5.DataObject51.IID));
116 @Test(expected = IllegalArgumentException.class)
117 public void testCreateInvalidSubtreeWriter() throws Exception {
118 SubtreeWriter.createForWriter(Sets.newHashSet(
119 InstanceIdentifier.create(DataObject3.class).child(DataObject3.DataObject31.class)),
120 mockWriter(DataObject4.class));
123 @SuppressWarnings("unchecked")
124 private Writer<? extends DataObject> mockWriter(final Class<? extends DataObject> doClass)
125 throws NoSuchFieldException, IllegalAccessException {
126 final Writer mock = mock(Writer.class);
127 when(mock.getManagedDataObjectType()).thenReturn((InstanceIdentifier<?>) doClass.getDeclaredField("IID").get(null));
131 private abstract static class DataObject1 implements DataObject {
132 static InstanceIdentifier<DataObject1> IID = InstanceIdentifier.create(DataObject1.class);
134 private abstract static class DataObject2 implements DataObject {
135 static InstanceIdentifier<DataObject2> IID = InstanceIdentifier.create(DataObject2.class);
137 private abstract static class DataObject3 implements DataObject {
138 static InstanceIdentifier<DataObject3> IID = InstanceIdentifier.create(DataObject3.class);
139 private abstract static class DataObject31 implements DataObject, ChildOf<DataObject3> {
140 static InstanceIdentifier<DataObject31> IID = DataObject3.IID.child(DataObject31.class);
143 private abstract static class DataObject4 implements DataObject {
144 static InstanceIdentifier<DataObject4> IID = InstanceIdentifier.create(DataObject4.class);
145 private abstract static class DataObject5 implements DataObject, ChildOf<DataObject4> {
146 static InstanceIdentifier<DataObject5> IID = DataObject4.IID.child(DataObject5.class);
147 private abstract static class DataObject51 implements DataObject, ChildOf<DataObject5> {
148 static InstanceIdentifier<DataObject51> IID = DataObject5.IID.child(DataObject51.class);
151 private abstract static class DataObject6 implements DataObject, ChildOf<DataObject4> {
152 static InstanceIdentifier<DataObject6> IID = DataObject4.IID.child(DataObject6.class);