// // Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. // package com.cloud.network.guru; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.net.URI; import java.net.URISyntaxException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.junit.Before; import org.junit.Test; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import com.cloud.agent.AgentManager; import com.cloud.agent.api.AssociateMacToNetworkAnswer; import com.cloud.agent.api.Command; import com.cloud.agent.api.CreateNetworkAnswer; import com.cloud.agent.api.DeleteNetworkAnswer; import com.cloud.agent.api.DisassociateMacFromNetworkAnswer; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.DataCenterVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.deploy.DeployDestination; import com.cloud.deploy.DeploymentPlan; import com.cloud.domain.Domain; import com.cloud.exception.InsufficientAddressCapacityException; import com.cloud.exception.InsufficientVirtualNetworkCapacityException; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.network.BrocadeVcsDeviceVO; import com.cloud.network.BrocadeVcsNetworkVlanMappingVO; import com.cloud.network.Network; import com.cloud.network.Network.GuestType; import com.cloud.network.Network.Service; import com.cloud.network.Network.State; import com.cloud.network.NetworkModel; import com.cloud.network.Networks.BroadcastDomainType; import com.cloud.network.Networks.TrafficType; import com.cloud.network.dao.BrocadeVcsDao; import com.cloud.network.dao.BrocadeVcsNetworkVlanMappingDao; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.PhysicalNetworkVO; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.dao.NetworkOfferingServiceMapDao; import com.cloud.user.Account; import com.cloud.vm.Nic.ReservationStrategy; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; import com.cloud.vm.VirtualMachineProfile; public class BrocadeVcsGuestNetworkGuruTest { private static final long NETWORK_ID = 42L; PhysicalNetworkDao physnetdao = mock(PhysicalNetworkDao.class); BrocadeVcsDao vcsdao = mock(BrocadeVcsDao.class); BrocadeVcsNetworkVlanMappingDao vcsmapdao = mock(BrocadeVcsNetworkVlanMappingDao.class); DataCenterDao dcdao = mock(DataCenterDao.class); NetworkOfferingServiceMapDao nosd = mock(NetworkOfferingServiceMapDao.class); AgentManager agentmgr = mock(AgentManager.class); NetworkOrchestrationService netmgr = mock(NetworkOrchestrationService.class); NetworkModel netmodel = mock(NetworkModel.class); HostDao hostdao = mock(HostDao.class); NetworkDao netdao = mock(NetworkDao.class); GuestNetworkGuru guestGuru = mock(GuestNetworkGuru.class); BrocadeVcsGuestNetworkGuru guru; @Before public void setUp() { guru = new BrocadeVcsGuestNetworkGuru(); ((GuestNetworkGuru)guru)._physicalNetworkDao = physnetdao; guru._brocadeVcsDao = vcsdao; guru._brocadeVcsNetworkVlanDao = vcsmapdao; guru._hostDao = hostdao; guru._ntwkOfferingSrvcDao = nosd; guru._dcDao = dcdao; guru._agentMgr = agentmgr; final DataCenterVO dc = mock(DataCenterVO.class); when(dc.getNetworkType()).thenReturn(NetworkType.Advanced); when(dc.getGuestNetworkCidr()).thenReturn("10.1.1.1/24"); when(dcdao.findById((Long)any())).thenReturn(dc); } @Test public void testCanHandle() { final NetworkOffering offering = mock(NetworkOffering.class); when(offering.getId()).thenReturn(NETWORK_ID); when(offering.getTrafficType()).thenReturn(TrafficType.Guest); when(offering.getGuestType()).thenReturn(GuestType.Isolated); final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VCS"})); when(physnet.getId()).thenReturn(NETWORK_ID); when(nosd.areServicesSupportedByNetworkOffering(NETWORK_ID, Service.Connectivity)).thenReturn(true); assertTrue(guru.canHandle(offering, NetworkType.Advanced, physnet) == true); // Not supported TrafficType != Guest when(offering.getTrafficType()).thenReturn(TrafficType.Management); assertFalse(guru.canHandle(offering, NetworkType.Advanced, physnet) == true); // Not supported: GuestType Shared when(offering.getTrafficType()).thenReturn(TrafficType.Guest); when(offering.getGuestType()).thenReturn(GuestType.Shared); assertFalse(guru.canHandle(offering, NetworkType.Advanced, physnet) == true); // Not supported: Basic networking when(offering.getGuestType()).thenReturn(GuestType.Isolated); assertFalse(guru.canHandle(offering, NetworkType.Basic, physnet) == true); // Not supported: IsolationMethod != VCS when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VLAN"})); assertFalse(guru.canHandle(offering, NetworkType.Advanced, physnet) == true); } @Test public void testDesign() { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); when(physnetdao.findById((Long)any())).thenReturn(physnet); when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VCS"})); when(physnet.getId()).thenReturn(NETWORK_ID); final NetworkOffering offering = mock(NetworkOffering.class); when(offering.getId()).thenReturn(NETWORK_ID); when(offering.getTrafficType()).thenReturn(TrafficType.Guest); when(offering.getGuestType()).thenReturn(GuestType.Isolated); when(nosd.areServicesSupportedByNetworkOffering(NETWORK_ID, Service.Connectivity)).thenReturn(true); final DeploymentPlan plan = mock(DeploymentPlan.class); final Network network = mock(Network.class); final Account account = mock(Account.class); final Network designednetwork = guru.design(offering, plan, network, account); assertTrue(designednetwork != null); assertTrue(designednetwork.getBroadcastDomainType() == BroadcastDomainType.Vcs); } @Test public void testDesignNoIsolationMethodVCS() { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); when(physnetdao.findById((Long)any())).thenReturn(physnet); when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VLAN"})); when(physnet.getId()).thenReturn(NETWORK_ID); final NetworkOffering offering = mock(NetworkOffering.class); when(offering.getId()).thenReturn(NETWORK_ID); when(offering.getTrafficType()).thenReturn(TrafficType.Guest); when(offering.getGuestType()).thenReturn(GuestType.Isolated); final DeploymentPlan plan = mock(DeploymentPlan.class); final Network network = mock(Network.class); final Account account = mock(Account.class); final Network designednetwork = guru.design(offering, plan, network, account); assertTrue(designednetwork == null); } @Test public void testDesignNoConnectivityInOffering() { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); when(physnetdao.findById((Long)any())).thenReturn(physnet); when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VCS"})); when(physnet.getId()).thenReturn(NETWORK_ID); final NetworkOffering offering = mock(NetworkOffering.class); when(offering.getId()).thenReturn(NETWORK_ID); when(offering.getTrafficType()).thenReturn(TrafficType.Guest); when(offering.getGuestType()).thenReturn(GuestType.Isolated); when(nosd.areServicesSupportedByNetworkOffering(NETWORK_ID, Service.Connectivity)).thenReturn(false); final DeploymentPlan plan = mock(DeploymentPlan.class); final Network network = mock(Network.class); final Account account = mock(Account.class); final Network designednetwork = guru.design(offering, plan, network, account); assertTrue(designednetwork == null); } @Test public void testImplement() throws InsufficientVirtualNetworkCapacityException, URISyntaxException { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); when(physnetdao.findById((Long)any())).thenReturn(physnet); when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VCS"})); when(physnet.getId()).thenReturn(NETWORK_ID); final NetworkOffering offering = mock(NetworkOffering.class); when(offering.getId()).thenReturn(NETWORK_ID); when(offering.getTrafficType()).thenReturn(TrafficType.Guest); when(offering.getGuestType()).thenReturn(GuestType.Isolated); when(nosd.areServicesSupportedByNetworkOffering(NETWORK_ID, Service.Connectivity)).thenReturn(true); mock(DeploymentPlan.class); final NetworkVO network = mock(NetworkVO.class); when(network.getName()).thenReturn("testnetwork"); when(network.getState()).thenReturn(State.Implementing); when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID); when(network.getBroadcastUri()).thenReturn(new URI("vlan://14")); final DeployDestination dest = mock(DeployDestination.class); final DataCenter dc = mock(DataCenter.class); when(dest.getDataCenter()).thenReturn(dc); final HostVO brocadeHost = mock(HostVO.class); when(hostdao.findById(anyLong())).thenReturn(brocadeHost); when(brocadeHost.getId()).thenReturn(NETWORK_ID); when(netmodel.findPhysicalNetworkId(anyLong(), (String)any(), (TrafficType)any())).thenReturn(NETWORK_ID); final BrocadeVcsDeviceVO brocadeDevice = mock(BrocadeVcsDeviceVO.class); when(brocadeDevice.getHostId()).thenReturn(NETWORK_ID); List<BrocadeVcsDeviceVO> devices = new ArrayList(); devices.add(brocadeDevice); when(vcsdao.listByPhysicalNetwork(anyLong())).thenReturn(devices); final Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); final Account acc = mock(Account.class); when(acc.getAccountName()).thenReturn("accountname"); final ReservationContext res = mock(ReservationContext.class); when(res.getDomain()).thenReturn(dom); when(res.getAccount()).thenReturn(acc); when(guestGuru.implement(network, offering, dest, res)).thenReturn(network); final CreateNetworkAnswer answer = mock(CreateNetworkAnswer.class); when(answer.getResult()).thenReturn(true); when(agentmgr.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); final Network implementednetwork = guru.implement(network, offering, dest, res); assertTrue(implementednetwork != null); verify(agentmgr, times(1)).easySend(eq(NETWORK_ID), (Command)any()); } @Test public void testImplementFail() throws InsufficientVirtualNetworkCapacityException, URISyntaxException { final PhysicalNetworkVO physnet = mock(PhysicalNetworkVO.class); when(physnetdao.findById((Long)any())).thenReturn(physnet); when(physnet.getIsolationMethods()).thenReturn(Arrays.asList(new String[] {"VCS"})); when(physnet.getId()).thenReturn(NETWORK_ID); final NetworkOffering offering = mock(NetworkOffering.class); when(offering.getId()).thenReturn(NETWORK_ID); when(offering.getTrafficType()).thenReturn(TrafficType.Guest); when(offering.getGuestType()).thenReturn(GuestType.Isolated); when(nosd.areServicesSupportedByNetworkOffering(NETWORK_ID, Service.Connectivity)).thenReturn(false); mock(DeploymentPlan.class); final NetworkVO network = mock(NetworkVO.class); when(network.getName()).thenReturn("testnetwork"); when(network.getState()).thenReturn(State.Implementing); when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID); when(network.getBroadcastUri()).thenReturn(new URI("vlan://14")); final DeployDestination dest = mock(DeployDestination.class); final DataCenter dc = mock(DataCenter.class); when(dest.getDataCenter()).thenReturn(dc); final HostVO brocadeHost = mock(HostVO.class); when(hostdao.findById(anyLong())).thenReturn(brocadeHost); when(brocadeHost.getId()).thenReturn(NETWORK_ID); when(netmodel.findPhysicalNetworkId(anyLong(), (String)any(), (TrafficType)any())).thenReturn(NETWORK_ID); final BrocadeVcsDeviceVO brocadeDevice = mock(BrocadeVcsDeviceVO.class); when(brocadeDevice.getHostId()).thenReturn(NETWORK_ID); final List<BrocadeVcsDeviceVO> devices = mock(List.class); when(devices.isEmpty()).thenReturn(true); when(vcsdao.listByPhysicalNetwork(anyLong())).thenReturn(devices); final Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); final Account acc = mock(Account.class); when(acc.getAccountName()).thenReturn("accountname"); final ReservationContext res = mock(ReservationContext.class); when(res.getDomain()).thenReturn(dom); when(res.getAccount()).thenReturn(acc); when(guestGuru.implement(network, offering, dest, res)).thenReturn(network); final CreateNetworkAnswer answer = mock(CreateNetworkAnswer.class); when(answer.getResult()).thenReturn(true); when(agentmgr.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); final Network implementednetwork = guru.implement(network, offering, dest, res); assertTrue(implementednetwork == null); verify(agentmgr, times(0)).easySend(eq(NETWORK_ID), (Command)any()); } @Test public void testReserve() throws InsufficientVirtualNetworkCapacityException, URISyntaxException, InsufficientAddressCapacityException { final NetworkVO network = mock(NetworkVO.class); when(network.getName()).thenReturn("testnetwork"); when(network.getState()).thenReturn(State.Implementing); when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID); when(network.getBroadcastUri()).thenReturn(new URI("vlan://14")); when(network.getDataCenterId()).thenReturn(NETWORK_ID); final NicProfile nic = mock(NicProfile.class); when(nic.getMacAddress()).thenReturn("macaddress"); when(nic.getReservationStrategy()).thenReturn(ReservationStrategy.Start); final VirtualMachineProfile vmProfile = mock(VirtualMachineProfile.class); final DeployDestination dest = mock(DeployDestination.class); final DataCenterVO dc = mock(DataCenterVO.class); when(dest.getDataCenter()).thenReturn(dc); when(dcdao.findById((long)anyInt())).thenReturn(dc); final HostVO brocadeHost = mock(HostVO.class); when(hostdao.findById(anyLong())).thenReturn(brocadeHost); when(brocadeHost.getId()).thenReturn(NETWORK_ID); when(netmodel.findPhysicalNetworkId(anyLong(), (String)any(), (TrafficType)any())).thenReturn(NETWORK_ID); final BrocadeVcsDeviceVO brocadeDevice = mock(BrocadeVcsDeviceVO.class); when(brocadeDevice.getHostId()).thenReturn(NETWORK_ID); List<BrocadeVcsDeviceVO> devices = new ArrayList(); devices.add(brocadeDevice); when(vcsdao.listByPhysicalNetwork(anyLong())).thenReturn(devices); final Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); final Account acc = mock(Account.class); when(acc.getAccountName()).thenReturn("accountname"); final ReservationContext res = mock(ReservationContext.class); when(res.getDomain()).thenReturn(dom); when(res.getAccount()).thenReturn(acc); final AssociateMacToNetworkAnswer answer = mock(AssociateMacToNetworkAnswer.class); when(answer.getResult()).thenReturn(true); when(agentmgr.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); guru.reserve(nic, network, vmProfile, dest, res); verify(agentmgr, times(1)).easySend(eq(NETWORK_ID), (Command)any()); } @Test public void testReserveFail() throws InsufficientVirtualNetworkCapacityException, URISyntaxException, InsufficientAddressCapacityException { final NetworkVO network = mock(NetworkVO.class); when(network.getName()).thenReturn("testnetwork"); when(network.getState()).thenReturn(State.Implementing); when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID); when(network.getBroadcastUri()).thenReturn(new URI("vlan://14")); when(network.getDataCenterId()).thenReturn(NETWORK_ID); final NicProfile nic = mock(NicProfile.class); when(nic.getMacAddress()).thenReturn("macaddress"); when(nic.getReservationStrategy()).thenReturn(ReservationStrategy.Start); final VirtualMachineProfile vmProfile = mock(VirtualMachineProfile.class); final DeployDestination dest = mock(DeployDestination.class); final DataCenterVO dc = mock(DataCenterVO.class); when(dest.getDataCenter()).thenReturn(dc); when(dcdao.findById((long)anyInt())).thenReturn(dc); final HostVO brocadeHost = mock(HostVO.class); when(hostdao.findById(anyLong())).thenReturn(brocadeHost); when(brocadeHost.getId()).thenReturn(NETWORK_ID); when(netmodel.findPhysicalNetworkId(anyLong(), (String)any(), (TrafficType)any())).thenReturn(NETWORK_ID); final BrocadeVcsDeviceVO brocadeDevice = mock(BrocadeVcsDeviceVO.class); when(brocadeDevice.getHostId()).thenReturn(NETWORK_ID); final List<BrocadeVcsDeviceVO> devices = mock(List.class); when(devices.isEmpty()).thenReturn(true); when(vcsdao.listByPhysicalNetwork(anyLong())).thenReturn(devices); final Domain dom = mock(Domain.class); when(dom.getName()).thenReturn("domain"); final Account acc = mock(Account.class); when(acc.getAccountName()).thenReturn("accountname"); final ReservationContext res = mock(ReservationContext.class); when(res.getDomain()).thenReturn(dom); when(res.getAccount()).thenReturn(acc); final AssociateMacToNetworkAnswer answer = mock(AssociateMacToNetworkAnswer.class); when(answer.getResult()).thenReturn(true); when(agentmgr.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); guru.reserve(nic, network, vmProfile, dest, res); verify(agentmgr, times(0)).easySend(eq(NETWORK_ID), (Command)any()); } @Test public void testDeallocate() { final NetworkVO network = mock(NetworkVO.class); when(network.getName()).thenReturn("testnetwork"); when(network.getState()).thenReturn(State.Implementing); when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID); when(network.getDataCenterId()).thenReturn(NETWORK_ID); final NicProfile nic = mock(NicProfile.class); when(nic.getMacAddress()).thenReturn("macaddress"); when(nic.getReservationStrategy()).thenReturn(ReservationStrategy.Start); final VirtualMachineProfile vmProfile = mock(VirtualMachineProfile.class); final HostVO brocadeHost = mock(HostVO.class); when(hostdao.findById(anyLong())).thenReturn(brocadeHost); when(brocadeHost.getId()).thenReturn(NETWORK_ID); when(netmodel.findPhysicalNetworkId(anyLong(), (String)any(), (TrafficType)any())).thenReturn(NETWORK_ID); final BrocadeVcsDeviceVO brocadeDevice = mock(BrocadeVcsDeviceVO.class); when(brocadeDevice.getHostId()).thenReturn(NETWORK_ID); final List<BrocadeVcsDeviceVO> devices = new ArrayList(); devices.add(brocadeDevice); when(vcsdao.listByPhysicalNetwork(anyLong())).thenReturn(devices); final DisassociateMacFromNetworkAnswer answer = mock(DisassociateMacFromNetworkAnswer.class); when(answer.getResult()).thenReturn(true); when(agentmgr.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); guru.deallocate(network, nic, vmProfile); verify(agentmgr, times(1)).easySend(eq(NETWORK_ID), (Command)any()); } @Test public void testDeallocateFail() { final NetworkVO network = mock(NetworkVO.class); when(network.getName()).thenReturn("testnetwork"); when(network.getState()).thenReturn(State.Implementing); when(network.getPhysicalNetworkId()).thenReturn(NETWORK_ID); when(network.getDataCenterId()).thenReturn(NETWORK_ID); final NicProfile nic = mock(NicProfile.class); when(nic.getMacAddress()).thenReturn("macaddress"); when(nic.getReservationStrategy()).thenReturn(ReservationStrategy.Start); final VirtualMachineProfile vmProfile = mock(VirtualMachineProfile.class); final HostVO brocadeHost = mock(HostVO.class); when(hostdao.findById(anyLong())).thenReturn(brocadeHost); when(brocadeHost.getId()).thenReturn(NETWORK_ID); when(netmodel.findPhysicalNetworkId(anyLong(), (String)any(), (TrafficType)any())).thenReturn(NETWORK_ID); final BrocadeVcsDeviceVO brocadeDevice = mock(BrocadeVcsDeviceVO.class); when(brocadeDevice.getHostId()).thenReturn(NETWORK_ID); final List<BrocadeVcsDeviceVO> devices = mock(List.class); when(devices.isEmpty()).thenReturn(true); when(vcsdao.listByPhysicalNetwork(anyLong())).thenReturn(devices); final DisassociateMacFromNetworkAnswer answer = mock(DisassociateMacFromNetworkAnswer.class); when(answer.getResult()).thenReturn(true); when(agentmgr.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); guru.deallocate(network, nic, vmProfile); verify(agentmgr, times(0)).easySend(eq(NETWORK_ID), (Command)any()); } @Test public void testTrash() { final NetworkVO network = mock(NetworkVO.class); when(network.getName()).thenReturn("testnetwork"); when(network.getState()).thenReturn(State.Implementing); when(network.getId()).thenReturn(NETWORK_ID); when(network.getDataCenterId()).thenReturn(NETWORK_ID); final NetworkOffering offering = mock(NetworkOffering.class); when(offering.getId()).thenReturn(NETWORK_ID); when(offering.getTrafficType()).thenReturn(TrafficType.Guest); when(offering.getGuestType()).thenReturn(GuestType.Isolated); final HostVO brocadeHost = mock(HostVO.class); when(hostdao.findById(anyLong())).thenReturn(brocadeHost); when(brocadeHost.getId()).thenReturn(NETWORK_ID); when(netmodel.findPhysicalNetworkId(anyLong(), (String)any(), (TrafficType)any())).thenReturn(NETWORK_ID); final BrocadeVcsNetworkVlanMappingVO mapping = mock(BrocadeVcsNetworkVlanMappingVO.class); when(mapping.getVlanId()).thenReturn(14); when(vcsmapdao.findByNetworkId(anyLong())).thenReturn(mapping); final BrocadeVcsDeviceVO brocadeDevice = mock(BrocadeVcsDeviceVO.class); when(brocadeDevice.getHostId()).thenReturn(NETWORK_ID); final List<BrocadeVcsDeviceVO> devices = new ArrayList(); devices.add(brocadeDevice); when(vcsdao.listByPhysicalNetwork(anyLong())).thenReturn(devices); final DeleteNetworkAnswer answer = mock(DeleteNetworkAnswer.class); when(answer.getResult()).thenReturn(true); when(agentmgr.easySend(eq(NETWORK_ID), (Command)any())).thenReturn(answer); when(vcsdao.remove((long)anyInt())).thenReturn(true); final boolean result = guru.trash(network, offering); assertTrue(result == true); verify(agentmgr, times(1)).easySend(eq(NETWORK_ID), (Command)any()); } @Test public void testTrashFail() { final NetworkVO network = mock(NetworkVO.class); when(network.getName()).thenReturn("testnetwork"); when(network.getState()).thenReturn(State.Implementing); when(network.getId()).thenReturn(NETWORK_ID); when(network.getDataCenterId()).thenReturn(NETWORK_ID); final NetworkOffering offering = mock(NetworkOffering.class); when(offering.getId()).thenReturn(NETWORK_ID); when(offering.getTrafficType()).thenReturn(TrafficType.Guest); when(offering.getGuestType()).thenReturn(GuestType.Isolated); final HostVO brocadeHost = mock(HostVO.class); when(hostdao.findById(anyLong())).thenReturn(brocadeHost); when(brocadeHost.getId()).thenReturn(NETWORK_ID); when(netmodel.findPhysicalNetworkId(anyLong(), (String)any(), (TrafficType)any())).thenReturn(NETWORK_ID); final BrocadeVcsNetworkVlanMappingVO mapping = mock(BrocadeVcsNetworkVlanMappingVO.class); when(mapping.getVlanId()).thenReturn(14); when(vcsmapdao.findByNetworkId(anyLong())).thenReturn(mapping); when(vcsmapdao.remove(anyLong())).thenReturn(true); final BrocadeVcsDeviceVO brocadeDevice = mock(BrocadeVcsDeviceVO.class); when(brocadeDevice.getHostId()).thenReturn(NETWORK_ID); final List<BrocadeVcsDeviceVO> devices = mock(List.class); when(devices.isEmpty()).thenReturn(true); when(vcsdao.listByPhysicalNetwork(anyLong())).thenReturn(devices); final boolean result = guru.trash(network, offering); assertTrue(result == false); verify(agentmgr, times(0)).easySend(eq(NETWORK_ID), (Command)any()); } }