/**
* Copyright (c) 2013 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.openflowplugin.openflow.md.util;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.when;
import com.google.common.base.Optional;
import com.google.common.util.concurrent.Futures;
import java.math.BigInteger;
import java.util.List;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;
import org.opendaylight.openflowplugin.openflow.md.core.session.OFSessionUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdatedBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeUpdatedBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValuesV10;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
/**
*
*/
@RunWith(MockitoJUnitRunner.class)
public class InventoryDataServiceUtilTest {
private static final long PORT_NO = PortNumberValuesV10.CONTROLLER.getIntValue();
private static final BigInteger PATH_ID = BigInteger.TEN;
@Mock
DataBroker dataBroker;
@Mock
ReadOnlyTransaction readOnlyTransaction;
@Mock
WriteTransaction writeTransaction;
@Mock
Nodes nodes;
@Mock
Node node;
@Before
public void setupEnvironment() {
when(dataBroker.newReadOnlyTransaction()).thenReturn(readOnlyTransaction);
when(readOnlyTransaction.read(Mockito.any(LogicalDatastoreType.class), Mockito.<InstanceIdentifier<Nodes>>any())).thenReturn(Futures.immediateCheckedFuture(Optional.of(nodes)));
OFSessionUtil.getSessionManager().setDataBroker(dataBroker);
}
@Test
/**
* Primitive test method for {@link InventoryDataServiceUtil#putNodeConnector(org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId, org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnector)} ()}.
*/
public void testPutNodeConnector(){
when(dataBroker.newWriteOnlyTransaction()).thenReturn(writeTransaction);
NodeId nodeId = new NodeId("1");
NodeConnectorBuilder nodeConnectorBuilder = new NodeConnectorBuilder();
NodeConnectorId nodeConnectorId = new NodeConnectorId("1");
nodeConnectorBuilder.setId(nodeConnectorId );
nodeConnectorBuilder.setKey(new NodeConnectorKey(nodeConnectorId ));
InventoryDataServiceUtil.putNodeConnector(nodeId, nodeConnectorBuilder.build());
}
/**
* Primitive test method for {@link InventoryDataServiceUtil#readNode(org.opendaylight.yangtools.yang.binding.InstanceIdentifier)} ()}.
*/
@Test
public void testReadNode(){
when(readOnlyTransaction.read(Mockito.any(LogicalDatastoreType.class), Mockito.<InstanceIdentifier<Node>>any())).thenReturn(Futures.immediateCheckedFuture(Optional.of(node)));
InstanceIdentifier<Node> instanceId = InstanceIdentifier.create(Node.class);
Node node = InventoryDataServiceUtil.readNode(instanceId);
assertNotNull(node);
}
/**
* Test method for {@link InventoryDataServiceUtil#checkForNodes()}.
*/
@Test
public void testCheckForNodes() {
Nodes nodes = InventoryDataServiceUtil.checkForNodes();
assertNotNull(nodes);
}
/**
* Test method for {@link InventoryDataServiceUtil#readAllNodes()}.
*/
@Test
public void testReadAllNodes() {
List<org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node> nodes = InventoryDataServiceUtil.readAllNodes();
assertNotNull(nodes);
}
/**
* Test method for {@link InventoryDataServiceUtil#nodeUpdatedBuilderFromDataPathId(BigInteger datapathId)}.
*/
@Test
public void testNodeUpdatedBuilderFromDataPathId() {
NodeUpdatedBuilder nodeUpdatedBuilder = InventoryDataServiceUtil.nodeUpdatedBuilderFromDataPathId(PATH_ID);
assertNotNull(nodeUpdatedBuilder);
}
/**
* Test method for {@link InventoryDataServiceUtil#nodeConnectorBuilderFromDatapathIdPortNo(BigInteger datapathId,
* Long portNo, org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion ofVersion)}.
*/
@Test
public void testNodeConnectorBuilderFromDatapathIdPortNo() {
NodeConnectorBuilder nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
PORT_NO, OpenflowVersion.OF10);
assertNotNull(nodeConnectorBuilder);
nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
PORT_NO, OpenflowVersion.OF13);
assertNotNull(nodeConnectorBuilder);
nodeConnectorBuilder = InventoryDataServiceUtil.nodeConnectorBuilderFromDatapathIdPortNo(PATH_ID,
PORT_NO, OpenflowVersion.UNSUPPORTED);
assertNotNull(nodeConnectorBuilder);
}
/**
* Test method for {@link InventoryDataServiceUtil#nodeConnectorUpdatedBuilderFromDatapathIdPortNo(BigInteger datapathId,
* Long portNo, OpenflowVersion ofVersion)}
*/
@Test
public void testNodeConnectorUpdatedBuilderFromDatapathIdPortNo() {
NodeConnectorUpdatedBuilder nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
PORT_NO, OpenflowVersion.OF10);
assertNotNull(nodeConnectorUpdatedBuilder);
nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
PORT_NO, OpenflowVersion.OF13);
assertNotNull(nodeConnectorUpdatedBuilder);
nodeConnectorUpdatedBuilder = InventoryDataServiceUtil.nodeConnectorUpdatedBuilderFromDatapathIdPortNo(PATH_ID,
PORT_NO, OpenflowVersion.UNSUPPORTED);
assertNotNull(nodeConnectorUpdatedBuilder);
}
/**
* Test method for {@link InventoryDataServiceUtil#nodeConnectorInstanceIdentifierFromDatapathIdPortno(BigInteger datapathId, Long portNo, OpenflowVersion ofVersion)}
*/
@Test
public void testNodeConnectorInstanceIdentifierFromDatapathIdPortno() {
InstanceIdentifier<NodeConnector> nodeConnectorInstanceIdentifier = InventoryDataServiceUtil.nodeConnectorInstanceIdentifierFromDatapathIdPortno(BigInteger.ONE,
PORT_NO, OpenflowVersion.OF10);
assertNotNull(nodeConnectorInstanceIdentifier);
}
/**
* Test method for {@link InventoryDataServiceUtil#nodeConnectorRefFromDatapathIdPortno(BigInteger datapathId, Long portNo, OpenflowVersion ofVersion)}
*/
@Test
public void testNodeConnectorRefFromDatapathIdPortno() {
NodeConnectorRef nodeConnectorRef = InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(PATH_ID,
PORT_NO,
OpenflowVersion.OF10);
assertNotNull(nodeConnectorRef);
nodeConnectorRef = InventoryDataServiceUtil.nodeConnectorRefFromDatapathIdPortno(PATH_ID,
PORT_NO,
OpenflowVersion.OF13);
assertNotNull(nodeConnectorRef);
}
/**
* Test method for {@link InventoryDataServiceUtil#dataPathIdFromNodeId(NodeId)}.
*/
@Test
public void testDataPathIdFromNodeId() {
String string = "openflow:";
NodeId[] nodeIds = new NodeId[]{
// 0x00000000 000004d2
new NodeId(string + "1234"),
// 0x8db2089e 01391a86
new NodeId(string + "10210232779920710278"),
// 0xffffffff ffffffff
new NodeId(string + "18446744073709551615"),
};
long[] expectedDPIDs = new long[]{
1234L,
-8236511293788841338L,
-1L
};
for (int i = 0; i < nodeIds.length; i++) {
BigInteger datapathId = InventoryDataServiceUtil.dataPathIdFromNodeId(nodeIds[i]);
Assert.assertEquals(expectedDPIDs[i], datapathId.longValue());
}
}
/**
* Test method for {@link InventoryDataServiceUtil#bigIntegerToPaddedHex(BigInteger)}.
*/
@Test
public void testLongToPaddedHex() {
BigInteger[] dpids = new BigInteger[]{
// 0x00000000 000004d2
new BigInteger("1234"),
// 0x8db2089e 01391a86
new BigInteger("10210232779920710278"),
// 0xffffffff ffffffff
new BigInteger("18446744073709551615"),
};
String[] expectedPaddedHexes = new String[]{
"00000000000004d2",
"8db2089e01391a86",
"ffffffffffffffff"
};
for (int i = 0; i < dpids.length; i++) {
String datapathIdHex = InventoryDataServiceUtil.bigIntegerToPaddedHex(dpids[i]);
Assert.assertEquals(expectedPaddedHexes[i], datapathIdHex);
}
}
/**
* Test method for {@link InventoryDataServiceUtil#portNoStringfromNodeConnectorID(String)}.
*/
@Test
public void testNodeConnectorIDToPortNoString() {
String[] nodeConnectorIDs = new String[]{
"openflow:2",
"openflow:2:3411",
"INPORT",
"openflow:628192264910264962"
};
String[] expectedPortNoStrings = new String[]{
"2",
"3411",
"INPORT",
"628192264910264962"
};
for (int i = 0; i < nodeConnectorIDs.length; i++) {
String portNoString = InventoryDataServiceUtil.portNoStringfromNodeConnectorID(nodeConnectorIDs[i]);
Assert.assertEquals(expectedPortNoStrings[i], portNoString);
}
}
}