/* * Copyright (c) 2016 Cisco Systems. 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.groupbasedpolicy.renderer.vpp.commands; import org.junit.Assert; import org.junit.Before; import org.junit.Test; 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.ReadWriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.groupbasedpolicy.renderer.vpp.VppRendererDataBrokerTest; import org.opendaylight.groupbasedpolicy.renderer.vpp.util.General; import org.opendaylight.groupbasedpolicy.renderer.vpp.util.VppIidFactory; import org.opendaylight.groupbasedpolicy.util.DataStoreHelper; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.Interface; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.interfaces.rev140508.interfaces.InterfaceKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.VhostUserRole; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.VppInterfaceAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.VppInterfaceAugmentationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.interfaces._interface.L2Builder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.interfaces._interface.VhostUser; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.interfaces._interface.VhostUserBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.l2.base.attributes.interconnection.BridgeBased; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.l2.base.attributes.interconnection.BridgeBasedBuilder; import com.google.common.base.Optional; public class VhostUserCommandTest extends VppRendererDataBrokerTest { private final static String BRIDGE_DOMAIN = "testBD"; private final static String DESCRIPTION = "used for testing"; private final static String INTERFACE_NAME = "testInterface"; private final static String SOCKET_NAME = "soc1"; private final static String UPD_BRIDGE_DOMAIN = "testBD2"; private final static String UPD_DESCRIPTION = "updated description"; private final static String UPD_SOCKET_NAME = "soc2"; private final static boolean IS_BRIDGED_DEFAULT = false; private static Interface BASIC_INTERFACE; private DataBroker dataBroker; @Before public void init() { dataBroker = getDataBroker(); VhostUser vhostUser = new VhostUserBuilder().setRole(VhostUserRole.Server).setSocket(SOCKET_NAME).build(); VppInterfaceAugmentation vppAugmentation = new VppInterfaceAugmentationBuilder().setVhostUser(vhostUser) .setL2(new L2Builder().setInterconnection(new BridgeBasedBuilder().setBridgeDomain(BRIDGE_DOMAIN) .setBridgedVirtualInterface(IS_BRIDGED_DEFAULT).setSplitHorizonGroup((short)0) .build()).build()) .build(); BASIC_INTERFACE = new InterfaceBuilder().setDescription(DESCRIPTION) .setEnabled(true) .setKey(new InterfaceKey(INTERFACE_NAME)) .setName(INTERFACE_NAME) .setType( org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.v3po.rev170315.VhostUser.class) .setLinkUpDownTrapEnable(Interface.LinkUpDownTrapEnable.Enabled) .addAugmentation(VppInterfaceAugmentation.class, vppAugmentation) .build(); } @Test public void AddVhostTest() { ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); VhostUserCommand addCommand = VhostUserCommand.builder() .setOperation(General.Operations.PUT) .setName(INTERFACE_NAME) .setDescription(DESCRIPTION) .setRole(VhostUserRole.Server) .setSocket(SOCKET_NAME) .setBridgeDomain(BRIDGE_DOMAIN) .setEnabled(true) .build(); addCommand.execute(transaction); transaction.submit(); ReadOnlyTransaction readOnlyTransaction = dataBroker.newReadOnlyTransaction(); Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(new InterfaceKey(INTERFACE_NAME)), readOnlyTransaction); Assert.assertTrue("Interface was not written to DS", optional.isPresent()); Interface anInterface = optional.get(); Assert.assertEquals(BASIC_INTERFACE, anInterface); } @Test public void DeleteVhostTest() { ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); transaction.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), BASIC_INTERFACE, true); transaction.submit(); Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); Assert.assertTrue("Interface was not written to DS", optional.isPresent()); VhostUserCommand deleteCommand = VhostUserCommand.builder() .setOperation(General.Operations.DELETE) .setName(INTERFACE_NAME) .setSocket(SOCKET_NAME) .build(); ReadWriteTransaction deleteTransaction = dataBroker.newReadWriteTransaction(); deleteCommand.execute(deleteTransaction); deleteTransaction.submit(); Optional<Interface> optionalDeleted = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(new InterfaceKey(deleteCommand.getName())), dataBroker.newReadOnlyTransaction()); Assert.assertFalse("Interface was not deleted from DS", optionalDeleted.isPresent()); } @Test public void UpdateVhostTest() { ReadWriteTransaction transaction = dataBroker.newReadWriteTransaction(); transaction.put(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), BASIC_INTERFACE, true); transaction.submit(); Optional<Interface> optional = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(BASIC_INTERFACE.getKey()), dataBroker.newReadOnlyTransaction()); Assert.assertTrue("Interface was not written to DS", optional.isPresent()); VhostUserCommand updateCommand = VhostUserCommand.builder() .setOperation(General.Operations.MERGE) .setName(INTERFACE_NAME) .setDescription(UPD_DESCRIPTION) .setEnabled(false) .setRole(VhostUserRole.Client) .setSocket(UPD_SOCKET_NAME) .setBridgeDomain(UPD_BRIDGE_DOMAIN) .build(); ReadWriteTransaction deleteTransaction = dataBroker.newReadWriteTransaction(); updateCommand.execute(deleteTransaction); deleteTransaction.submit(); Optional<Interface> optionalUpdated = DataStoreHelper.readFromDs(LogicalDatastoreType.CONFIGURATION, VppIidFactory.getInterfaceIID(new InterfaceKey(updateCommand.getName())), dataBroker.newReadOnlyTransaction()); Assert.assertTrue("Interface was not found in DS", optionalUpdated.isPresent()); Interface updatedInterface = optionalUpdated.get(); Assert.assertEquals(UPD_DESCRIPTION, updatedInterface.getDescription()); Assert.assertFalse(updatedInterface.isEnabled()); VppInterfaceAugmentation vppInterfaceAugmentation = updatedInterface.getAugmentation(VppInterfaceAugmentation.class); Assert.assertEquals(VhostUserRole.Client, vppInterfaceAugmentation.getVhostUser().getRole()); Assert.assertEquals(UPD_SOCKET_NAME, vppInterfaceAugmentation.getVhostUser().getSocket()); Assert.assertTrue(vppInterfaceAugmentation.getL2().getInterconnection() instanceof BridgeBased); Assert.assertEquals(UPD_BRIDGE_DOMAIN, ((BridgeBased) vppInterfaceAugmentation.getL2().getInterconnection()).getBridgeDomain()); } }