/* * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html */ package org.opendaylight.yangtools.yang.binding; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.mock; import com.google.common.collect.ImmutableList; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Field; import org.junit.Test; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; import org.opendaylight.yangtools.yang.binding.test.mock.FooChild; import org.opendaylight.yangtools.yang.binding.test.mock.InstantiatedFoo; import org.opendaylight.yangtools.yang.binding.test.mock.Node; import org.opendaylight.yangtools.yang.binding.test.mock.NodeChild; import org.opendaylight.yangtools.yang.binding.test.mock.NodeChildKey; import org.opendaylight.yangtools.yang.binding.test.mock.NodeKey; import org.opendaylight.yangtools.yang.binding.test.mock.Nodes; public class InstanceIdentifierTest { @Test public void constructWithPredicates() { final InstanceIdentifier nodes = InstanceIdentifier.builder(Nodes.class).build(); assertNotNull(nodes); assertEquals(Nodes.class, nodes.getTargetType()); final InstanceIdentifier node = nodes.builder().child(Node.class).build(); assertNotNull(node); assertEquals(Node.class, node.getTargetType()); assertTrue(nodes.contains(node)); } @Test public void fluentConstruction() { final InstanceIdentifier nodes = InstanceIdentifier.builder(Nodes.class).build(); final InstanceIdentifier node = InstanceIdentifier.builder(Nodes.class).child(Node.class,new NodeKey(10)).build(); assertNotNull(node); assertEquals(Node.class, node.getTargetType()); assertTrue(nodes.contains(node)); } @Test public void negativeContains() { final InstanceIdentifier fooChild = InstanceIdentifier.builder(Nodes.class).child(InstantiatedFoo.class).child(FooChild.class).build(); final InstanceIdentifier nodeTen = InstanceIdentifier.builder(Nodes.class) // .child(Node.class,new NodeKey(10)).build(); final InstanceIdentifier nodeOne = InstanceIdentifier.builder(Nodes.class) // .child(Node.class,new NodeKey(1)).build(); final InstanceIdentifier nodes = InstanceIdentifier.builder(Nodes.class).build(); assertFalse(fooChild.contains(nodeTen)); assertFalse(nodeTen.contains(nodes)); assertFalse(nodeOne.contains(nodes)); assertTrue(nodes.contains(nodeOne)); assertTrue(nodes.containsWildcarded(nodeOne)); assertFalse(nodeOne.containsWildcarded(nodes)); } @Test public void containsWildcarded() { final InstanceIdentifier nodes = InstanceIdentifier.builder(Nodes.class).build(); final InstanceIdentifier wildcarded = InstanceIdentifier.builder(Nodes.class).child(Node.class).build(); final InstanceIdentifier wildcardedChildren = InstanceIdentifier.builder(Nodes.class) // .child(Node.class) // .child(NodeChild.class).build(); assertTrue(wildcarded.isWildcarded()); assertTrue(wildcardedChildren.isWildcarded()); final InstanceIdentifier nodeTen = InstanceIdentifier.builder(Nodes.class) // .child(Node.class,new NodeKey(10)).build(); final InstanceIdentifier nodeOne = InstanceIdentifier.builder(Nodes.class) // .child(Node.class,new NodeKey(1)).build(); assertFalse(nodeTen.isWildcarded()); assertFalse(nodeOne.isWildcarded()); assertTrue(nodes.containsWildcarded(nodeOne)); assertTrue(wildcarded.containsWildcarded(nodeOne)); assertTrue(wildcarded.containsWildcarded(nodeTen)); assertFalse(InstanceIdentifier.builder(Nodes.class) .child(InstantiatedFoo.class).build().containsWildcarded(wildcarded)); final InstanceIdentifier nodeTenChildWildcarded = InstanceIdentifier.builder(Nodes.class) // .child(Node.class,new NodeKey(10)).child(NodeChild.class).build(); assertTrue(nodeTenChildWildcarded.isWildcarded()); final InstanceIdentifier nodeTenChild = InstanceIdentifier.builder(Nodes.class) // .child(Node.class,new NodeKey(10)).child(NodeChild.class, new NodeChildKey(10)).build(); final InstanceIdentifier nodeOneChild = InstanceIdentifier.builder(Nodes.class) // .child(Node.class,new NodeKey(1)).child(NodeChild.class, new NodeChildKey(1)).build(); assertFalse(nodeTenChildWildcarded.containsWildcarded(nodeOneChild)); assertTrue(nodeTenChildWildcarded.containsWildcarded(nodeTenChild)); } @Test public void basicTests() throws Exception { final InstanceIdentifier instanceIdentifier1 = InstanceIdentifier.create(DataObject.class); final InstanceIdentifier instanceIdentifier2 = InstanceIdentifier.create(DataObject.class); final InstanceIdentifier instanceIdentifier4 = InstanceIdentifier.create(DataObject.class); final InstanceIdentifier instanceIdentifier3 = InstanceIdentifier.builder(Nodes.class) .child(Node.class, new NodeKey(10)).child(NodeChild.class).build(); final Object object = new Object(); assertTrue(instanceIdentifier1.equals(instanceIdentifier1)); assertFalse(instanceIdentifier1.equals(null)); assertFalse(instanceIdentifier1.equals(object)); assertTrue(instanceIdentifier1.equals(instanceIdentifier2)); final Field pathArgumentsField = InstanceIdentifier.class.getDeclaredField("pathArguments"); final Field wildCardField = InstanceIdentifier.class.getDeclaredField("wildcarded"); pathArgumentsField.setAccessible(true); wildCardField.setAccessible(true); pathArgumentsField.set(instanceIdentifier2, instanceIdentifier1.pathArguments); wildCardField.set(instanceIdentifier4, true); assertTrue(instanceIdentifier1.equals(instanceIdentifier2)); assertFalse(instanceIdentifier1.equals(instanceIdentifier3)); assertFalse(instanceIdentifier1.equals(instanceIdentifier4)); final InstanceIdentifier instanceIdentifier5 = InstanceIdentifier.create(Node.class); final Field hashField = InstanceIdentifier.class.getDeclaredField("hash"); hashField.setAccessible(true); hashField.set(instanceIdentifier5, instanceIdentifier1.hashCode()); wildCardField.set(instanceIdentifier5, false); assertFalse(instanceIdentifier1.equals(instanceIdentifier5)); assertNotNull(InstanceIdentifier.create(ImmutableList.copyOf(instanceIdentifier1.getPathArguments()))); assertNotNull(InstanceIdentifier.create(Nodes.class).child(Node.class)); assertNotNull(InstanceIdentifier.create(Nodes.class).child(Node.class, new NodeKey(5))); assertNotNull(instanceIdentifier5.augmentation(DataObject.class)); assertNotNull(instanceIdentifier1.hashCode()); assertNotNull(instanceIdentifier1.toString()); final InstanceIdentifierBuilder instanceIdentifierBuilder = instanceIdentifier1.builder(); assertEquals(instanceIdentifier1.hashCode(), instanceIdentifierBuilder.hashCode()); assertNotNull(instanceIdentifierBuilder.augmentation(InstantiatedFoo.class)); assertNotNull(instanceIdentifierBuilder.toInstance()); } @Test public void firstIdentifierOfTest() { final InstanceIdentifier instanceIdentifier = InstanceIdentifier.builder(Nodes.class).child(Node.class,new NodeKey(10)).build(); final InstanceIdentifier nodesIdentifier = instanceIdentifier.firstIdentifierOf(Nodes.class); assertNotNull(nodesIdentifier); final InstanceIdentifier dataObjectIdentifier = instanceIdentifier.firstIdentifierOf(DataObject.class); assertNull(dataObjectIdentifier); } @Test public void firstKeyOfTest() { final InstanceIdentifier instanceIdentifier = InstanceIdentifier.builder(Nodes.class).child(Node.class,new NodeKey(10)).build(); final InstanceIdentifier instanceIdentifier1 = InstanceIdentifier.create(DataObject.class); assertNotNull(instanceIdentifier.firstKeyOf(Node.class, null)); assertNull(instanceIdentifier1.firstKeyOf(Node.class)); } @Test public void keyOfTest() throws Exception { final Identifier identifier = mock(Identifier.class); assertEquals(identifier, InstanceIdentifier.keyOf( new KeyedInstanceIdentifier(Identifiable.class, ImmutableList.of(), false, 0, identifier))); } @Test public void serializationTest() throws Exception { final ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); final ObjectOutputStream outputStream = new ObjectOutputStream(byteArrayOutputStream); final InstanceIdentifier instanceIdentifier = InstanceIdentifier.create(DataObject.class); outputStream.writeObject(instanceIdentifier); outputStream.flush(); outputStream.close(); final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray()); final ObjectInputStream inputStream = new ObjectInputStream(byteArrayInputStream); final InstanceIdentifier deserialized = (InstanceIdentifier) inputStream.readObject(); assertEquals(instanceIdentifier, deserialized); } }