From 853a49cace972dc636bbbf578680a7fb6a9ec50e Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Wed, 11 Oct 2023 17:41:49 -0400 Subject: [PATCH 01/12] Refactoring reduces mock cloning of TungstenAnswer --- .../service/CreateMockTungstenAnswer.java | 36 + .../tungsten/service/TungstenElementTest.java | 2071 ++++++----- .../service/TungstenFabricUtilsTest.java | 198 +- .../service/TungstenServiceImplTest.java | 3242 ++++++++--------- 4 files changed, 2631 insertions(+), 2916 deletions(-) create mode 100644 plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/CreateMockTungstenAnswer.java diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/CreateMockTungstenAnswer.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/CreateMockTungstenAnswer.java new file mode 100644 index 000000000000..c41eed1396da --- /dev/null +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/CreateMockTungstenAnswer.java @@ -0,0 +1,36 @@ +// 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 org.apache.cloudstack.network.tungsten.service; + +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.mockito.Mock; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class CreateMockTungstenAnswer { + + TungstenAnswer tungstenAnswer; + CreateMockTungstenAnswer(boolean Result){ + tungstenAnswer=mock(TungstenAnswer.class); + when(tungstenAnswer.getResult()).thenReturn(Result); + } + CreateMockTungstenAnswer(){ + when(tungstenAnswer.getResult()).thenReturn(true); + } + TungstenAnswer get(){return tungstenAnswer;} +} diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java index 18f295473bec..cfcc65e45c76 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java @@ -1,1042 +1,1029 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.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 com.cloud.agent.AgentManager; -import com.cloud.api.ApiDBUtils; -import com.cloud.configuration.Config; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.dc.VlanVO; -import com.cloud.dc.dao.DataCenterDao; -import com.cloud.dc.dao.HostPodDao; -import com.cloud.dc.dao.VlanDao; -import com.cloud.deploy.DeployDestination; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.hypervisor.Hypervisor; -import com.cloud.network.IpAddressManager; -import com.cloud.network.Network; -import com.cloud.network.NetworkModel; -import com.cloud.network.Networks; -import com.cloud.network.PhysicalNetworkServiceProvider; -import com.cloud.network.TungstenGuestNetworkIpAddressVO; -import com.cloud.network.dao.IPAddressDao; -import com.cloud.network.dao.IPAddressVO; -import com.cloud.network.dao.LoadBalancerCertMapDao; -import com.cloud.network.dao.LoadBalancerDao; -import com.cloud.network.dao.LoadBalancerVMMapDao; -import com.cloud.network.dao.LoadBalancerVMMapVO; -import com.cloud.network.dao.LoadBalancerVO; -import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.NetworkDetailsDao; -import com.cloud.network.dao.NetworkServiceMapDao; -import com.cloud.network.dao.NetworkVO; -import com.cloud.network.dao.PhysicalNetworkDao; -import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; -import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; -import com.cloud.network.dao.PhysicalNetworkVO; -import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.rules.FirewallRule; -import com.cloud.network.rules.FirewallRuleVO; -import com.cloud.network.rules.PortForwardingRule; -import com.cloud.network.rules.StaticNatImpl; -import com.cloud.user.AccountManager; -import com.cloud.user.User; -import com.cloud.uservm.UserVm; -import com.cloud.utils.EncryptionUtil; -import com.cloud.utils.Pair; -import com.cloud.utils.TungstenUtils; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.fsm.StateMachine2; -import com.cloud.utils.net.Ip; -import com.cloud.utils.net.NetUtils; -import com.cloud.vm.Nic; -import com.cloud.vm.NicProfile; -import com.cloud.vm.ReservationContext; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachineProfile; -import com.cloud.vm.dao.VMInstanceDao; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; -import org.apache.cloudstack.framework.messagebus.MessageBus; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenPortForwardingCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AssignTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkLoadbalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenVirtualMachineCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerListenerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVRouterPortCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmInterfaceCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ReleaseTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerHealthMonitorCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerMemberCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerPoolCommand; -import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorDao; -import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorVO; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; - -import java.util.Arrays; -import java.util.List; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenElementTest { - @Mock - TungstenFabricUtils tungstenFabricUtils; - @Mock - NetworkModel networkModel; - @Mock - IPAddressDao ipAddressDao; - @Mock - VMInstanceDao vmInstanceDao; - @Mock - LoadBalancerVMMapDao lbVmMapDao; - @Mock - TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; - @Mock - IpAddressManager ipAddressMgr; - @Mock - ConfigurationDao configDao; - @Mock - LoadBalancerDao lbDao; - @Mock - AccountManager accountMgr; - @Mock - HostDao hostDao; - @Mock - MessageBus messageBus; - @Mock - PhysicalNetworkTrafficTypeDao physicalNetworkTrafficTypeDao; - @Mock - PhysicalNetworkDao physicalNetworkDao; - @Mock - TungstenProviderDao tungstenProviderDao; - @Mock - DataCenterDao dataCenterDao; - @Mock - VlanDao vlanDao; - @Mock - NetworkServiceMapDao networkServiceMapDao; - @Mock - HostPodDao hostPodDao; - @Mock - NetworkDetailsDao networkDetailsDao; - @Mock - AgentManager agentManager; - @Mock - NetworkDao networkDao; - @Mock - TungstenService tungstenService; - @Mock - TungstenFabricLBHealthMonitorDao tungstenFabricLBHealthMonitorDao; - @Mock - LoadBalancerCertMapDao loadBalancerCertMapDao; - - TungstenElement tungstenElement; - - MockedStatic apiDBUtilsMocked; - - MockedStatic encryptionUtilMocked; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenElement = new TungstenElement(); - tungstenElement.tungstenFabricUtils = tungstenFabricUtils; - tungstenElement.networkModel = networkModel; - tungstenElement.ipAddressDao = ipAddressDao; - tungstenElement.vmInstanceDao = vmInstanceDao; - tungstenElement.lbVmMapDao = lbVmMapDao; - tungstenElement.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; - tungstenElement.ipAddressMgr = ipAddressMgr; - tungstenElement.configDao = configDao; - tungstenElement.lbDao = lbDao; - tungstenElement.accountMgr = accountMgr; - tungstenElement.hostDao = hostDao; - tungstenElement.messageBus = messageBus; - tungstenElement.physicalNetworkDao = physicalNetworkDao; - tungstenElement.tungstenService = tungstenService; - tungstenElement.tungstenProviderDao = tungstenProviderDao; - tungstenElement.dataCenterDao = dataCenterDao; - tungstenElement.vlanDao = vlanDao; - tungstenElement.networkServiceMapDao = networkServiceMapDao; - tungstenElement.podDao = hostPodDao; - tungstenElement.agentMgr = agentManager; - tungstenElement.networkDetailsDao = networkDetailsDao; - tungstenElement.networkDao = networkDao; - tungstenElement.physicalNetworkTrafficTypeDao = physicalNetworkTrafficTypeDao; - tungstenElement.tungstenFabricLBHealthMonitorDao = tungstenFabricLBHealthMonitorDao; - tungstenElement.loadBalancerCertMapDao = loadBalancerCertMapDao; - - apiDBUtilsMocked = Mockito.mockStatic(ApiDBUtils.class); - encryptionUtilMocked = Mockito.mockStatic(EncryptionUtil.class); - - when(tungstenService.getTungstenProjectFqn(any())).thenReturn("default-domain:default-project"); - } - - @After - public void tearDown() throws Exception { - apiDBUtilsMocked.close(); - encryptionUtilMocked.close(); - closeable.close(); - } - - @Test - public void canHandleSuccessTest() { - Network network = mock(Network.class); - Network.Service service = mock(Network.Service.class); - - when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(true); - - assertTrue(tungstenElement.canHandle(network, service)); - } - - @Test - public void canHandleFailTest() { - Network network = mock(Network.class); - Network.Service service = mock(Network.Service.class); - - when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(false); - - assertFalse(tungstenElement.canHandle(network, service)); - } - - @Test - public void applyStaticNatsAddRuleSuccessTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = mock(TungstenAnswer.class); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(false); - when(assignFloatingIpAnswer.getResult()).thenReturn(true); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); - - assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsAddRuleFailTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = mock(TungstenAnswer.class); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(false); - when(assignFloatingIpAnswer.getResult()).thenReturn(false); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); - - assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsRevokeRuleSuccessTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = mock(TungstenAnswer.class); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(true); - when(releaseFloatingIpAnswer.getResult()).thenReturn(true); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); - - assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsRevokeRuleFailTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = mock(TungstenAnswer.class); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(true); - when(releaseFloatingIpAnswer.getResult()).thenReturn(false); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); - - assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyLBRulesAddRuleSuccessTest() { - User caller = mock(User.class); - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); - LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); - LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); - List lbStickinessPolicyList = List.of(lbStickinessPolicy); - List loadBalancerVOList = List.of(loadBalancerVO); - TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = mock(TungstenAnswer.class); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = mock(TungstenAnswer.class); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer = mock(TungstenAnswer.class); - TungstenAnswer updateTungstenLoadBalancerListenerAnswer = mock(TungstenAnswer.class); - TungstenAnswer updateTungstenHealthMonitorAnswer = mock(TungstenAnswer.class); - LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); - when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); - List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); - - when(lbStickinessPolicy.getParams()).thenReturn(pairList); - when(loadBalancingRule1.getId()).thenReturn(1L); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); - when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); - when(loadBalancingRule1.getSourcePortStart()).thenReturn(443); - when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); - when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); - when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); - when(ip.addr()).thenReturn("10.10.10.10"); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); - when(createTungstenNetworkLoadbalancerAnswer.getResult()).thenReturn(true); - when(updateTungstenLoadBalancerPoolAnswer.getResult()).thenReturn(true); - when(updateTungstenLoadBalancerMemberAnswer.getResult()).thenReturn(true); - when(updateTungstenHealthMonitorAnswer.getResult()).thenReturn(true); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); - when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); - when(EncryptionUtil.generateSignature(anyString(), anyString())).thenReturn("generatedString"); - when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); - - assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesAddRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); - LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); - LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); - List lbStickinessPolicyList = List.of(lbStickinessPolicy); - List loadBalancerVOList = List.of(loadBalancerVO); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = mock(TungstenAnswer.class); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = mock(TungstenAnswer.class); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer = mock(TungstenAnswer.class); - TungstenAnswer updateTungstenHealthMonitorAnswer = mock(TungstenAnswer.class); - List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); - TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); - - when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); - when(lbStickinessPolicy.getParams()).thenReturn(pairList); - when(loadBalancingRule1.getId()).thenReturn(1L); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); - when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); - when(loadBalancingRule1.getSourcePortStart()).thenReturn(80); - when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); - when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); - when(ip.addr()).thenReturn("10.10.10.10"); - when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); - when(createTungstenNetworkLoadbalancerAnswer.getResult()).thenReturn(true); - when(updateTungstenLoadBalancerPoolAnswer.getResult()).thenReturn(true); - when(updateTungstenLoadBalancerMemberAnswer.getResult()).thenReturn(true); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("disabled"); - when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); - when(updateTungstenHealthMonitorAnswer.getResult()).thenReturn(true); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); - - assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesRevokeRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip1 = mock(Ip.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVOList1 = List.of(loadBalancerVO1); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteTungstenLoadBalancerCommand = mock(TungstenAnswer.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Revoke); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip1); - when(ip1.addr()).thenReturn("10.10.10.10"); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); - when(deleteTungstenLoadBalancerCommand.getResult()).thenReturn(true); - when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList1); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenGuestNetworkIpAddressDao.remove(anyLong())).thenReturn(false); - - assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesRevokeRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); - LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); - LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteTungstenLoadBalancerCommand = mock(TungstenAnswer.class); - List loadBalancingRuleList = List.of(loadBalancingRule); - List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(loadBalancingRule.getSourceIp()).thenReturn(ip); - when(loadBalancingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ip.addr()).thenReturn("10.10.10.10"); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); - when(deleteTungstenLoadBalancerListenerAnswer.getResult()).thenReturn(true); - when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); - when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); - - assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList)); - } - - @Test - public void applyPFRulesAddRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = mock(TungstenAnswer.class); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - when(applyTungstenPortForwardingAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesAddRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = mock(TungstenAnswer.class); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - when(applyTungstenPortForwardingAnswer.getResult()).thenReturn(false); - - assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesRevokeRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = mock(TungstenAnswer.class); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - when(applyTungstenPortForwardingAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesRevokeRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = mock(TungstenAnswer.class); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - when(applyTungstenPortForwardingAnswer.getResult()).thenReturn(false); - - assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void preparePublicNetworkTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer createTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenNetworkPolicyAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(createTungstenVMAnswer.getResult()).thenReturn(true); - when(createTungstenNetworkPolicyAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); - assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); - assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); - } - - @Test - public void prepareManagementNetworkTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(createTungstenVMAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); - assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); - assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); - } - - @Test(expected = CloudRuntimeException.class) - public void prepareWithExceptionTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - - tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext); - } - - @Test - public void releasePublicNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); - - when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - - assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); - } - - @Test - public void releaseManagementNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); - - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); - - assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); - } - - @Test(expected = CloudRuntimeException.class) - public void releaseWithExceptionTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenThrow(IllegalArgumentException.class); - - tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext); - } - - @Test - public void destroyTest() throws ConcurrentOperationException, ResourceUnavailableException { - IPAddressVO ipAddressVO1 = mock(IPAddressVO.class); - IPAddressVO ipAddressVO2 = mock(IPAddressVO.class); - Network network = mock(Network.class); - ReservationContext reservationContext = mock(ReservationContext.class); - List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); - TungstenAnswer tungstenDeleteFIPAnswer = mock(TungstenAnswer.class); - TungstenAnswer tungstenDeleteNPAnswer = mock(TungstenAnswer.class); - - when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(tungstenDeleteNPAnswer); - when(tungstenDeleteFIPAnswer.getResult()).thenReturn(true); - when(tungstenDeleteNPAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenElement.destroy(network, reservationContext)); - } - - @Test - public void isReadyTest() { - PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); - PhysicalNetworkTrafficTypeVO physicalNetworkTrafficTypeVO = mock(PhysicalNetworkTrafficTypeVO.class); - - when(physicalNetworkTrafficTypeDao.findBy(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(physicalNetworkTrafficTypeVO); - - assertTrue(tungstenElement.isReady(physicalNetworkServiceProvider)); - } - - @Test - public void shutdownProviderInstancesTest() throws ConcurrentOperationException { - PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); - ReservationContext reservationContext = mock(ReservationContext.class); - PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - Network publicNetwork = mock(Network.class); - VlanVO vlanVO1 = mock(VlanVO.class); - VlanVO vlanVO2 = mock(VlanVO.class); - List vlanVOList = Arrays.asList(vlanVO1, vlanVO2); - HostPodVO hostPodVO1 = mock(HostPodVO.class); - HostPodVO hostPodVO2 = mock(HostPodVO.class); - List hostPodVOList = Arrays.asList(hostPodVO1, hostPodVO2); - - when(physicalNetworkDao.findById(anyLong())).thenReturn(physicalNetworkVO); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(vlanDao.listVlansByNetworkIdIncludingRemoved(anyLong())).thenReturn(vlanVOList); - when(hostPodDao.listByDataCenterId(anyLong())).thenReturn(hostPodVOList); - - assertTrue(tungstenElement.shutdownProviderInstances(physicalNetworkServiceProvider, reservationContext)); - verify(networkServiceMapDao, times(1)).deleteByNetworkId(anyLong()); - verify(tungstenService, times(2)).removePublicNetworkSubnet(any(VlanVO.class)); - verify(tungstenService, times(1)).deletePublicNetwork(anyLong()); - verify(tungstenService, times(2)).removeManagementNetworkSubnet(any(HostPodVO.class)); - verify(tungstenService, times(1)).deleteManagementNetwork(anyLong()); - } - - //@Test - //public void processConnectWithoutSecurityGroupTest() throws ConnectionException { - // Host host = mock(Host.class); - // StartupCommand startupCommand = mock(StartupCommand.class); - // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - // DataCenterVO dataCenterVO = mock(DataCenterVO.class); - // VlanVO vlanVO1 = mock(VlanVO.class); - // VlanVO vlanVO2 = mock(VlanVO.class); - // List vlanList = Arrays.asList(vlanVO1, vlanVO2); - // Network publicNetwork = mock(Network.class); - // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); -// - // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); - // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - // when(vlanDao.listByZone(anyLong())).thenReturn(vlanList); - // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); - // when(vlanVO1.getVlanGateway()).thenReturn("192.168.100.1"); - // when(vlanVO1.getVlanNetmask()).thenReturn("255.255.255.0"); - // when(vlanVO2.getVlanGateway()).thenReturn("192.168.101.1"); - // when(vlanVO2.getVlanNetmask()).thenReturn("255.255.255.0"); - // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); -// - // tungstenElement.processConnect(host, startupCommand, true); - // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - //} - - //@Test - //public void processConnectWithSecurityGroupTest() throws ConnectionException { - // Host host = mock(Host.class); - // StartupCommand startupCommand = mock(StartupCommand.class); - // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - // DataCenterVO dataCenterVO = mock(DataCenterVO.class); - // NetworkVO network = mock(NetworkVO.class); - // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); - // Network publicNetwork = mock(Network.class); -// - // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); - // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - // when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(Arrays.asList(network)); - // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); - // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); -// - // tungstenElement.processConnect(host, startupCommand, true); - // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - //} - - @Test - public void processHostAboutToBeRemovedWithSecurityGroupTest() { - HostVO hostVO = mock(HostVO.class); - TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - NetworkVO network = mock(NetworkVO.class); - - when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); - when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(List.of(network)); - - tungstenElement.processHostAboutToBeRemoved(1L); - verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - } - - @Test - public void processHostAboutToBeRemovedWithoutSecurityGroupTest() { - HostVO hostVO = mock(HostVO.class); - TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); - when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); - - tungstenElement.processHostAboutToBeRemoved(1L); - verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - } - - @Test - public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = mock(TungstenAnswer.class); - TungstenAnswer applyNetworkPolicyAnswer = mock(TungstenAnswer.class); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); - when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); - when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Egress); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); - when(createNetworkPolicyAnswer.getResult()).thenReturn(true); - when(applyNetworkPolicyAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = mock(TungstenAnswer.class); - TungstenAnswer applyNetworkPolicyAnswer = mock(TungstenAnswer.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - Ip ip = mock(Ip.class); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); - when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); - when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(ipAddressDao.findById(anyLong())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); - when(createNetworkPolicyAnswer.getResult()).thenReturn(true); - when(applyNetworkPolicyAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteNetworkPolicyAnswer = mock(TungstenAnswer.class); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteNetworkPolicyAnswer); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void postStateTransitionEventWithVmStartedTest() { - StateMachine2.Transition transition = mock(StateMachine2.Transition.class); - VMInstanceVO vo = mock(VMInstanceVO.class); - Object opaque = mock(Object.class); - - when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Starting); - when(transition.getToState()).thenReturn(VirtualMachine.State.Running); - when(tungstenService.addTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); - - assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); - } - - @Test - public void postStateTransitionEventWithVmStopedTest() { - StateMachine2.Transition transition = mock(StateMachine2.Transition.class); - VMInstanceVO vo = mock(VMInstanceVO.class); - Object opaque = mock(Object.class); - - when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Stopping); - when(transition.getToState()).thenReturn(VirtualMachine.State.Stopped); - when(tungstenService.removeTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); - - assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); - } - - @Test - public void prepareMigrationTest() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - DeployDestination dest = mock(DeployDestination.class); - ReservationContext context = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO hostVO = mock(HostVO.class); - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenElement.prepareMigration(nic, network, vm, dest, context)); - } - - @Test - public void rollbackMigration() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - ReservationContext src = mock(ReservationContext.class); - ReservationContext dest = mock(ReservationContext.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - HostVO hostVO = mock(HostVO.class); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(vm.getVirtualMachine()).thenReturn(virtualMachine); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - - tungstenElement.rollbackMigration(nic, network, vm, src, dest); - verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); - } - - @Test - public void commitMigration() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - ReservationContext src = mock(ReservationContext.class); - ReservationContext dest = mock(ReservationContext.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - HostVO hostVO = mock(HostVO.class); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(vm.getVirtualMachine()).thenReturn(virtualMachine); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - - tungstenElement.commitMigration(nic, network, vm, src, dest); - verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); - } -} +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.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 static org.powermock.api.mockito.PowerMockito.mockStatic; + +import com.cloud.agent.AgentManager; +import com.cloud.api.ApiDBUtils; +import com.cloud.configuration.Config; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.HostPodVO; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.HostPodDao; +import com.cloud.dc.dao.VlanDao; +import com.cloud.deploy.DeployDestination; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.hypervisor.Hypervisor; +import com.cloud.network.IpAddressManager; +import com.cloud.network.Network; +import com.cloud.network.NetworkModel; +import com.cloud.network.Networks; +import com.cloud.network.PhysicalNetworkServiceProvider; +import com.cloud.network.TungstenGuestNetworkIpAddressVO; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.LoadBalancerCertMapDao; +import com.cloud.network.dao.LoadBalancerDao; +import com.cloud.network.dao.LoadBalancerVMMapDao; +import com.cloud.network.dao.LoadBalancerVMMapVO; +import com.cloud.network.dao.LoadBalancerVO; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDetailsDao; +import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.dao.NetworkVO; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; +import com.cloud.network.dao.PhysicalNetworkVO; +import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.PortForwardingRule; +import com.cloud.network.rules.StaticNatImpl; +import com.cloud.user.AccountManager; +import com.cloud.user.User; +import com.cloud.uservm.UserVm; +import com.cloud.utils.EncryptionUtil; +import com.cloud.utils.Pair; +import com.cloud.utils.TungstenUtils; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.fsm.StateMachine2; +import com.cloud.utils.net.Ip; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.dao.VMInstanceDao; +import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.messagebus.MessageBus; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenPortForwardingCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AssignTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkLoadbalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenVirtualMachineCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerListenerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVRouterPortCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmInterfaceCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ReleaseTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerHealthMonitorCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerListenerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerMemberCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerPoolCommand; +import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorDao; +import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorVO; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; + +import java.util.Arrays; +import java.util.List; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({ApiDBUtils.class, EncryptionUtil.class}) +public class TungstenElementTest { + @Mock + TungstenFabricUtils tungstenFabricUtils; + @Mock + NetworkModel networkModel; + @Mock + IPAddressDao ipAddressDao; + @Mock + VMInstanceDao vmInstanceDao; + @Mock + LoadBalancerVMMapDao lbVmMapDao; + @Mock + TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; + @Mock + IpAddressManager ipAddressMgr; + @Mock + ConfigurationDao configDao; + @Mock + LoadBalancerDao lbDao; + @Mock + AccountManager accountMgr; + @Mock + HostDao hostDao; + @Mock + MessageBus messageBus; + @Mock + PhysicalNetworkTrafficTypeDao physicalNetworkTrafficTypeDao; + @Mock + PhysicalNetworkDao physicalNetworkDao; + @Mock + TungstenProviderDao tungstenProviderDao; + @Mock + DataCenterDao dataCenterDao; + @Mock + VlanDao vlanDao; + @Mock + NetworkServiceMapDao networkServiceMapDao; + @Mock + HostPodDao hostPodDao; + @Mock + NetworkDetailsDao networkDetailsDao; + @Mock + AgentManager agentManager; + @Mock + NetworkDao networkDao; + @Mock + TungstenService tungstenService; + @Mock + TungstenFabricLBHealthMonitorDao tungstenFabricLBHealthMonitorDao; + @Mock + LoadBalancerCertMapDao loadBalancerCertMapDao; + + TungstenElement tungstenElement; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + tungstenElement = new TungstenElement(); + tungstenElement.tungstenFabricUtils = tungstenFabricUtils; + tungstenElement.networkModel = networkModel; + tungstenElement.ipAddressDao = ipAddressDao; + tungstenElement.vmInstanceDao = vmInstanceDao; + tungstenElement.lbVmMapDao = lbVmMapDao; + tungstenElement.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; + tungstenElement.ipAddressMgr = ipAddressMgr; + tungstenElement.configDao = configDao; + tungstenElement.lbDao = lbDao; + tungstenElement.accountMgr = accountMgr; + tungstenElement.hostDao = hostDao; + tungstenElement.messageBus = messageBus; + tungstenElement.physicalNetworkDao = physicalNetworkDao; + tungstenElement.tungstenService = tungstenService; + tungstenElement.tungstenProviderDao = tungstenProviderDao; + tungstenElement.dataCenterDao = dataCenterDao; + tungstenElement.vlanDao = vlanDao; + tungstenElement.networkServiceMapDao = networkServiceMapDao; + tungstenElement.podDao = hostPodDao; + tungstenElement.agentMgr = agentManager; + tungstenElement.networkDetailsDao = networkDetailsDao; + tungstenElement.networkDao = networkDao; + tungstenElement.physicalNetworkTrafficTypeDao = physicalNetworkTrafficTypeDao; + tungstenElement.tungstenFabricLBHealthMonitorDao = tungstenFabricLBHealthMonitorDao; + tungstenElement.loadBalancerCertMapDao = loadBalancerCertMapDao; + + mockStatic(ApiDBUtils.class); + mockStatic(EncryptionUtil.class); + + when(tungstenService.getTungstenProjectFqn(any())).thenReturn("default-domain:default-project"); + } + + @Test + public void canHandleSuccessTest() { + Network network = mock(Network.class); + Network.Service service = mock(Network.Service.class); + + when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(true); + + assertTrue(tungstenElement.canHandle(network, service)); + } + + @Test + public void canHandleFailTest() { + Network network = mock(Network.class); + Network.Service service = mock(Network.Service.class); + + when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(false); + + assertFalse(tungstenElement.canHandle(network, service)); + } + + @Test + public void applyStaticNatsAddRuleSuccessTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer assignFloatingIpAnswer = new CreateMockTungstenAnswer(true).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(false); + + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); + + assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsAddRuleFailTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer assignFloatingIpAnswer = new CreateMockTungstenAnswer(false).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(false); + + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); + + assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsRevokeRuleSuccessTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer releaseFloatingIpAnswer = new CreateMockTungstenAnswer(true).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(true); + + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); + + assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsRevokeRuleFailTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer releaseFloatingIpAnswer = new CreateMockTungstenAnswer(false).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(true); + + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); + + assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyLBRulesAddRuleSuccessTest() { + User caller = mock(User.class); + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); + LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); + LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); + List lbStickinessPolicyList = List.of(lbStickinessPolicy); + List loadBalancerVOList = List.of(loadBalancerVO); + TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer updateTungstenHealthMonitorAnswer = new CreateMockTungstenAnswer(true).get(); + LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); + when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); + List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); + + when(accountMgr.getActiveUser(anyLong())).thenReturn(caller); + when(caller.getApiKey()).thenReturn("apikey"); + when(caller.getSecretKey()).thenReturn("secreatekey"); + when(lbStickinessPolicy.getParams()).thenReturn(pairList); + when(loadBalancingRule1.getId()).thenReturn(1L); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); + when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); + when(loadBalancingRule1.getSourcePortStart()).thenReturn(443); + when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); + when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip); + when(loadBalancingRule1.getLbSslCert()).thenReturn(lbSslCert); + when(loadBalancingRule1.getUuid()).thenReturn("loadbalancingruleuuid"); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); + when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); + when(ip.addr()).thenReturn("10.10.10.10"); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerListenerAnswer); + + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); + when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); + when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); + when(EncryptionUtil.generateSignature(anyString(), anyString())).thenReturn("generatedString"); + when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); + + assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesAddRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); + LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); + LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); + List lbStickinessPolicyList = List.of(lbStickinessPolicy); + List loadBalancerVOList = List.of(loadBalancerVO); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer =new CreateMockTungstenAnswer(true).get(); + TungstenAnswer updateTungstenHealthMonitorAnswer = new CreateMockTungstenAnswer(true).get(); + List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); + TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); + + when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); + when(lbStickinessPolicy.getParams()).thenReturn(pairList); + when(loadBalancingRule1.getId()).thenReturn(1L); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); + when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); + when(loadBalancingRule1.getSourcePortStart()).thenReturn(80); + when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); + when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); + when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); + when(ip.addr()).thenReturn("10.10.10.10"); + when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); + + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("disabled"); + when(tungstenService.updateLoadBalancerSsl(any(), any())).thenReturn(false); + when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); + when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); + + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); + + assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesRevokeRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip1 = mock(Ip.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVOList1 = List.of(loadBalancerVO1); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenLoadBalancerCommand = new CreateMockTungstenAnswer(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Revoke); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip1); + when(ip1.addr()).thenReturn("10.10.10.10"); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); + + when(tungstenService.updateLoadBalancerSsl(any(), any())).thenReturn(false); + when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList1); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(tungstenGuestNetworkIpAddressDao.remove(anyLong())).thenReturn(false); + + assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesRevokeRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); + LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); + LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenLoadBalancerCommand = new CreateMockTungstenAnswer(true).get(); + List loadBalancingRuleList = List.of(loadBalancingRule); + List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(loadBalancingRule.getSourceIp()).thenReturn(ip); + when(loadBalancingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(ip.addr()).thenReturn("10.10.10.10"); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); + + when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); + when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + + assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList)); + } + + @Test + public void applyPFRulesAddRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new CreateMockTungstenAnswer(true).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesAddRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new CreateMockTungstenAnswer(false).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesRevokeRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new CreateMockTungstenAnswer(true).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesRevokeRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new CreateMockTungstenAnswer(false).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void preparePublicNetworkTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = new CreateMockTungstenAnswer(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenAnswer createTungstenNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenNetworkPolicyAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + + assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); + assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); + assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); + } + + @Test + public void prepareManagementNetworkTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = new CreateMockTungstenAnswer(true).get(); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + + assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); + assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); + assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); + } + + @Test(expected = CloudRuntimeException.class) + public void prepareWithExceptionTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + + tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext); + } + + @Test + public void releasePublicNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteVmiAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteVmAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + + when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + + assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); + } + + @Test + public void releaseManagementNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteVmiAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteVmAnswer = new CreateMockTungstenAnswer(true).get(); + + when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); + + assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); + } + + @Test(expected = CloudRuntimeException.class) + public void releaseWithExceptionTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteVmiAnswer = new CreateMockTungstenAnswer(true).get(); + + when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenThrow(IllegalArgumentException.class); + + tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext); + } + + @Test + public void destroyTest() throws ConcurrentOperationException, ResourceUnavailableException { + IPAddressVO ipAddressVO1 = mock(IPAddressVO.class); + IPAddressVO ipAddressVO2 = mock(IPAddressVO.class); + Network network = mock(Network.class); + ReservationContext reservationContext = mock(ReservationContext.class); + List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); + TungstenAnswer tungstenDeleteFIPAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenDeleteNPAnswer = new CreateMockTungstenAnswer(true).get(); + + when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(tungstenDeleteNPAnswer); + + assertTrue(tungstenElement.destroy(network, reservationContext)); + } + + @Test + public void isReadyTest() { + PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); + PhysicalNetworkTrafficTypeVO physicalNetworkTrafficTypeVO = mock(PhysicalNetworkTrafficTypeVO.class); + + when(physicalNetworkTrafficTypeDao.findBy(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(physicalNetworkTrafficTypeVO); + + assertTrue(tungstenElement.isReady(physicalNetworkServiceProvider)); + } + + @Test + public void shutdownProviderInstancesTest() throws ConcurrentOperationException { + PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); + ReservationContext reservationContext = mock(ReservationContext.class); + PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + Network publicNetwork = mock(Network.class); + VlanVO vlanVO1 = mock(VlanVO.class); + VlanVO vlanVO2 = mock(VlanVO.class); + List vlanVOList = Arrays.asList(vlanVO1, vlanVO2); + HostPodVO hostPodVO1 = mock(HostPodVO.class); + HostPodVO hostPodVO2 = mock(HostPodVO.class); + List hostPodVOList = Arrays.asList(hostPodVO1, hostPodVO2); + + when(physicalNetworkDao.findById(anyLong())).thenReturn(physicalNetworkVO); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(vlanDao.listVlansByNetworkIdIncludingRemoved(anyLong())).thenReturn(vlanVOList); + when(hostPodDao.listByDataCenterId(anyLong())).thenReturn(hostPodVOList); + + assertTrue(tungstenElement.shutdownProviderInstances(physicalNetworkServiceProvider, reservationContext)); + verify(networkServiceMapDao, times(1)).deleteByNetworkId(anyLong()); + verify(tungstenService, times(2)).removePublicNetworkSubnet(any(VlanVO.class)); + verify(tungstenService, times(1)).deletePublicNetwork(anyLong()); + verify(tungstenService, times(2)).removeManagementNetworkSubnet(any(HostPodVO.class)); + verify(tungstenService, times(1)).deleteManagementNetwork(anyLong()); + } + + //@Test + //public void processConnectWithoutSecurityGroupTest() throws ConnectionException { + // Host host = mock(Host.class); + // StartupCommand startupCommand = mock(StartupCommand.class); + // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + // DataCenterVO dataCenterVO = mock(DataCenterVO.class); + // VlanVO vlanVO1 = mock(VlanVO.class); + // VlanVO vlanVO2 = mock(VlanVO.class); + // List vlanList = Arrays.asList(vlanVO1, vlanVO2); + // Network publicNetwork = mock(Network.class); + // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); +// + // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); + // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + // when(vlanDao.listByZone(anyLong())).thenReturn(vlanList); + // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); + // when(vlanVO1.getVlanGateway()).thenReturn("192.168.100.1"); + // when(vlanVO1.getVlanNetmask()).thenReturn("255.255.255.0"); + // when(vlanVO2.getVlanGateway()).thenReturn("192.168.101.1"); + // when(vlanVO2.getVlanNetmask()).thenReturn("255.255.255.0"); + // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); +// + // tungstenElement.processConnect(host, startupCommand, true); + // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + //} + + //@Test + //public void processConnectWithSecurityGroupTest() throws ConnectionException { + // Host host = mock(Host.class); + // StartupCommand startupCommand = mock(StartupCommand.class); + // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + // DataCenterVO dataCenterVO = mock(DataCenterVO.class); + // NetworkVO network = mock(NetworkVO.class); + // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); + // Network publicNetwork = mock(Network.class); +// + // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); + // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + // when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(Arrays.asList(network)); + // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); + // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); +// + // tungstenElement.processConnect(host, startupCommand, true); + // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + //} + + @Test + public void processHostAboutToBeRemovedWithSecurityGroupTest() { + HostVO hostVO = mock(HostVO.class); + TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + NetworkVO network = mock(NetworkVO.class); + + when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); + when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(List.of(network)); + + tungstenElement.processHostAboutToBeRemoved(1L); + verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + } + + @Test + public void processHostAboutToBeRemovedWithoutSecurityGroupTest() { + HostVO hostVO = mock(HostVO.class); + TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); + when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); + + tungstenElement.processHostAboutToBeRemoved(1L); + verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + } + + @Test + public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer createNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer applyNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); + when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); + when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Egress); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer createNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer applyNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + Ip ip = mock(Ip.class); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); + when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); + when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(ipAddressDao.findById(anyLong())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void postStateTransitionEventWithVmStartedTest() { + StateMachine2.Transition transition = mock(StateMachine2.Transition.class); + VMInstanceVO vo = mock(VMInstanceVO.class); + Object opaque = mock(Object.class); + + when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Starting); + when(transition.getToState()).thenReturn(VirtualMachine.State.Running); + when(tungstenService.addTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); + + assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); + } + + @Test + public void postStateTransitionEventWithVmStopedTest() { + StateMachine2.Transition transition = mock(StateMachine2.Transition.class); + VMInstanceVO vo = mock(VMInstanceVO.class); + Object opaque = mock(Object.class); + + when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Stopping); + when(transition.getToState()).thenReturn(VirtualMachine.State.Stopped); + when(tungstenService.removeTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); + + assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); + } + + @Test + public void prepareMigrationTest() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + DeployDestination dest = mock(DeployDestination.class); + ReservationContext context = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO hostVO = mock(HostVO.class); + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenElement.prepareMigration(nic, network, vm, dest, context)); + } + + @Test + public void rollbackMigration() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + ReservationContext src = mock(ReservationContext.class); + ReservationContext dest = mock(ReservationContext.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + HostVO hostVO = mock(HostVO.class); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(vm.getVirtualMachine()).thenReturn(virtualMachine); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + + tungstenElement.rollbackMigration(nic, network, vm, src, dest); + verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); + } + + @Test + public void commitMigration() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + ReservationContext src = mock(ReservationContext.class); + ReservationContext dest = mock(ReservationContext.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + HostVO hostVO = mock(HostVO.class); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(vm.getVirtualMachine()).thenReturn(virtualMachine); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + + tungstenElement.commitMigration(nic, network, vm, src, dest); + verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); + } +} diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java index 7f2a57911b07..60e2bd1392ce 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java @@ -1,105 +1,93 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import com.cloud.agent.AgentManager; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenFabricUtilsTest { - @Mock - AgentManager agentMgr; - @Mock - TungstenProviderDao tungstenProviderDao; - - TungstenFabricUtils tungstenFabricUtils; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenFabricUtils = new TungstenFabricUtils(); - tungstenFabricUtils.agentMgr = agentMgr; - tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; - } - - @After - public void tearDown() throws Exception { - closeable.close(); - } - - @Test - public void sendTungstenCommandSuccessTest() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - - assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithNullTungstenProvider() { - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithNullAnswer() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithFalseAnswer() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(false); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } -} +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.cloud.agent.AgentManager; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; + +public class TungstenFabricUtilsTest { + @Mock + AgentManager agentMgr; + @Mock + TungstenProviderDao tungstenProviderDao; + + TungstenFabricUtils tungstenFabricUtils; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + tungstenFabricUtils = new TungstenFabricUtils(); + tungstenFabricUtils.agentMgr = agentMgr; + tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; + } + + @Test + public void sendTungstenCommandSuccessTest() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); + + assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithNullTungstenProvider() { + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithNullAnswer() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithFalseAnswer() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(false).get(); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); + when(tungstenAnswer.getDetails()).thenReturn(""); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } +} diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java index 736d03268ae0..b43ed8992e50 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java @@ -1,1769 +1,1473 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -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 com.cloud.agent.AgentManager; -import com.cloud.agent.api.Answer; -import com.cloud.configuration.Config; -import com.cloud.configuration.ConfigurationManager; -import com.cloud.dc.DataCenter; -import com.cloud.dc.DataCenterIpAddressVO; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.dc.Vlan; -import com.cloud.dc.VlanVO; -import com.cloud.dc.dao.DataCenterDao; -import com.cloud.dc.dao.DataCenterIpAddressDao; -import com.cloud.domain.DomainVO; -import com.cloud.domain.dao.DomainDao; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.hypervisor.Hypervisor; -import com.cloud.network.IpAddressManager; -import com.cloud.network.Network; -import com.cloud.network.NetworkModel; -import com.cloud.network.NetworkService; -import com.cloud.network.Networks; -import com.cloud.network.TungstenGuestNetworkIpAddressVO; -import com.cloud.network.dao.FirewallRulesDao; -import com.cloud.network.dao.IPAddressDao; -import com.cloud.network.dao.IPAddressVO; -import com.cloud.network.dao.LoadBalancerCertMapDao; -import com.cloud.network.dao.LoadBalancerCertMapVO; -import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.NetworkDetailVO; -import com.cloud.network.dao.NetworkDetailsDao; -import com.cloud.network.dao.NetworkVO; -import com.cloud.network.dao.SslCertVO; -import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.rules.FirewallRule; -import com.cloud.network.rules.FirewallRuleVO; -import com.cloud.network.security.SecurityGroup; -import com.cloud.network.security.SecurityGroupManager; -import com.cloud.network.security.SecurityGroupRuleVO; -import com.cloud.network.security.SecurityGroupService; -import com.cloud.network.security.SecurityGroupVO; -import com.cloud.network.security.SecurityRule; -import com.cloud.network.security.TungstenSecurityGroupRuleVO; -import com.cloud.network.security.dao.SecurityGroupDao; -import com.cloud.network.security.dao.SecurityGroupRuleDao; -import com.cloud.network.security.dao.SecurityGroupVMMapDao; -import com.cloud.network.security.dao.TungstenSecurityGroupRuleDao; -import com.cloud.projects.ProjectManager; -import com.cloud.projects.ProjectVO; -import com.cloud.projects.dao.ProjectDao; -import com.cloud.user.AccountVO; -import com.cloud.user.DomainManager; -import com.cloud.user.dao.AccountDao; -import com.cloud.utils.db.EntityManager; -import com.cloud.utils.db.Transaction; -import com.cloud.utils.db.TransactionCallback; -import com.cloud.utils.net.Ip; -import com.cloud.utils.net.NetUtils; -import com.cloud.vm.Nic; -import com.cloud.vm.NicSecondaryIp; -import com.cloud.vm.NicVO; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.dao.NicDao; -import com.cloud.vm.dao.NicSecondaryIpDao; -import com.cloud.vm.dao.NicSecondaryIpVO; -import net.juniper.tungsten.api.ApiObjectBase; -import net.juniper.tungsten.api.ApiPropertyBase; -import net.juniper.tungsten.api.ObjectReference; -import net.juniper.tungsten.api.types.ActionListType; -import net.juniper.tungsten.api.types.AddressGroup; -import net.juniper.tungsten.api.types.AddressType; -import net.juniper.tungsten.api.types.ApplicationPolicySet; -import net.juniper.tungsten.api.types.FirewallPolicy; -import net.juniper.tungsten.api.types.FirewallRuleEndpointType; -import net.juniper.tungsten.api.types.FirewallRuleMatchTagsType; -import net.juniper.tungsten.api.types.FirewallSequence; -import net.juniper.tungsten.api.types.FirewallServiceGroupType; -import net.juniper.tungsten.api.types.FirewallServiceType; -import net.juniper.tungsten.api.types.Loadbalancer; -import net.juniper.tungsten.api.types.LogicalRouter; -import net.juniper.tungsten.api.types.NetworkPolicy; -import net.juniper.tungsten.api.types.PolicyEntriesType; -import net.juniper.tungsten.api.types.PolicyRuleType; -import net.juniper.tungsten.api.types.PortType; -import net.juniper.tungsten.api.types.ServiceGroup; -import net.juniper.tungsten.api.types.SubnetListType; -import net.juniper.tungsten.api.types.SubnetType; -import net.juniper.tungsten.api.types.Tag; -import net.juniper.tungsten.api.types.TagType; -import net.juniper.tungsten.api.types.VirtualMachine; -import net.juniper.tungsten.api.types.VirtualMachineInterface; -import net.juniper.tungsten.api.types.VirtualNetwork; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; -import org.apache.cloudstack.framework.messagebus.MessageBus; -import org.apache.cloudstack.framework.messagebus.MessageSubscriber; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkGatewayToLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkSubnetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecondaryIpAddressCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecurityGroupRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenVmToSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDefaultProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDomainCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpPoolCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenDomainCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpPoolCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenFabricNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenLoadBalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenNetworkDnsCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNicCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenVmCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkGatewayFromLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkSubnetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecondaryIpAddressCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecurityGroupRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateLoadBalancerServiceInstanceCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenDefaultSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerSslCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerStatsCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenVrouterConfigCommand; -import org.apache.cloudstack.network.tungsten.model.TungstenLogicalRouter; -import org.apache.cloudstack.network.tungsten.model.TungstenNetworkPolicy; -import org.apache.cloudstack.network.tungsten.model.TungstenRule; -import org.apache.cloudstack.network.tungsten.model.TungstenTag; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockedConstruction; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.test.util.ReflectionTestUtils; - -import java.util.Arrays; -import java.util.List; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenServiceImplTest { - @Mock - MessageBus messageBus; - @Mock - ProjectDao projectDao; - @Mock - AccountDao accountDao; - @Mock - NetworkDao networkDao; - @Mock - ConfigurationDao configDao; - @Mock - IPAddressDao ipAddressDao; - @Mock - EntityManager entityMgr; - @Mock - NetworkModel networkModel; - @Mock - DomainDao domainDao; - @Mock - LoadBalancerCertMapDao lbCertMapDao; - @Mock - FirewallRulesDao fwRulesDao; - @Mock - TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; - @Mock - TungstenProviderDao tungstenProviderDao; - @Mock - TungstenFabricUtils tungstenFabricUtils; - @Mock - AgentManager agentMgr; - @Mock - HostDao hostDao; - @Mock - NetworkDetailsDao networkDetailsDao; - @Mock - SecurityGroupDao securityGroupDao; - @Mock - NicDao nicDao; - @Mock - TungstenSecurityGroupRuleDao tungstenSecurityGroupRuleDao; - @Mock - SecurityGroupVMMapDao securityGroupVMMapDao; - @Mock - SecurityGroupRuleDao securityGroupRuleDao; - @Mock - SecurityGroupManager securityGroupManager; - @Mock - NicSecondaryIpDao nicSecIpDao; - @Mock - DataCenterIpAddressDao dataCenterIpAddressDao; - @Mock - DataCenterDao dataCenterDao; - @Mock - IpAddressManager ipAddressManager; - - TungstenServiceImpl tungstenService; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenService = new TungstenServiceImpl(); - tungstenService.projectDao = projectDao; - tungstenService.tungstenProviderDao = tungstenProviderDao; - tungstenService.networkModel = networkModel; - tungstenService.ipAddressDao = ipAddressDao; - tungstenService.tungstenFabricUtils = tungstenFabricUtils; - tungstenService.domainDao = domainDao; - tungstenService.accountDao = accountDao; - tungstenService.dataCenterIpAddressDao = dataCenterIpAddressDao; - tungstenService.networkDetailsDao = networkDetailsDao; - tungstenService.agentMgr = agentMgr; - tungstenService.hostDao = hostDao; - tungstenService.configDao = configDao; - tungstenService.fwRulesDao = fwRulesDao; - tungstenService.lbCertMapDao = lbCertMapDao; - tungstenService.entityMgr = entityMgr; - tungstenService.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; - tungstenService.securityGroupDao = securityGroupDao; - tungstenService.tungstenSecurityGroupRuleDao = tungstenSecurityGroupRuleDao; - tungstenService.securityGroupVMMapDao = securityGroupVMMapDao; - tungstenService.nicDao = nicDao; - tungstenService.nicSecIpDao = nicSecIpDao; - tungstenService.securityGroupRuleDao = securityGroupRuleDao; - tungstenService.securityGroupManager = securityGroupManager; - tungstenService.networkDao = networkDao; - tungstenService.dataCenterDao = dataCenterDao; - tungstenService.ipAddressManager = ipAddressManager; - tungstenService.messageBus = messageBus; - } - - @After - public void tearDown() throws Exception { - closeable.close(); - } - - @Test - public void createTungstenFloatingIpTest() throws Exception { - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer createTungstenFloatingIpAnswer = mock(TungstenAnswer.class); - Ip ip = mock(Ip.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); - when(createTungstenFloatingIpAnswer.getResult()).thenReturn(true); - when(ipAddressVO.getAddress()).thenReturn(ip); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); - } - - @Test - public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer deleteTungstenFloatingIpAnswer = mock(TungstenAnswer.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); - when(deleteTungstenFloatingIpAnswer.getResult()).thenReturn(true); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); - } - - @Test - public void deleteTungstenDomainTest() throws Exception { - DomainVO domainVO = mock(DomainVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenDomainAnswer = mock(TungstenAnswer.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); - when(deleteTungstenDomainAnswer.getResult()).thenReturn(true); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); - } - - @Test - public void deleteTungstenProjectTest() throws Exception { - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenProjectAnswer = mock(TungstenAnswer.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); - when(deleteTungstenProjectAnswer.getResult()).thenReturn(true); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); - } - - @Test - public void addTungstenDefaultNetworkPolicyTest() { - TungstenRule tungstenRule = mock(TungstenRule.class); - TungstenAnswer createTungstenPolicyAnswer = mock(TungstenAnswer.class); - TungstenAnswer applyTungstenPolicyAnswer = mock(TungstenAnswer.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(createTungstenPolicyAnswer.getResult()).thenReturn(true); - when(applyTungstenPolicyAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.addTungstenDefaultNetworkPolicy(1L, "default-domain:default-project", "policyName", "7279ed91-314e-45be-81b4-b10395fd2ae3" - , List.of(tungstenRule), 1, 1)); - } - - @Test - public void createManagementNetworkTest() { - Network managementNetwork = mock(Network.class); - VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); - VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createTungstenNetworkAnswer = mock(TungstenAnswer.class); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = mock(TungstenAnswer.class); - TungstenAnswer getTungstenFabricNetworkAnswer = mock(TungstenAnswer.class); - TungstenAnswer createTungstenPolicyAnswer = mock(TungstenAnswer.class); - TungstenAnswer applyTungstenPolicyAnswer = mock(TungstenAnswer.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenVrouterConfigCommand.class), anyLong())).thenReturn(updateTungstenGlobalVrouterConfigAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(createTungstenNetworkAnswer.getResult()).thenReturn(true); - when(createTungstenNetworkAnswer.getApiObjectBase()).thenReturn(managementVirtualNetwork); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); - when(updateTungstenDefaultSecurityGroupAnswer.getResult()).thenReturn(true); - when(updateTungstenGlobalVrouterConfigAnswer.getResult()).thenReturn(true); - when(getTungstenFabricNetworkAnswer.getResult()).thenReturn(true); - when(createTungstenPolicyAnswer.getResult()).thenReturn(true); - when(applyTungstenPolicyAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.createManagementNetwork(1L)); - } - - @Test - public void addManagementNetworkSubnetTest() { - HostPodVO hostPodVO = mock(HostPodVO.class); - Network managementNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = mock(TungstenAnswer.class); - TungstenAnswer getTungstenNetworkDnsAnswer = mock(TungstenAnswer.class); - DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); - - when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(addTungstenNetworkSubnetAnswer.getResult()).thenReturn(true); - when(getTungstenNetworkDnsAnswer.getResult()).thenReturn(true); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(managementNetwork.getCidr()).thenReturn("192.168.100.0/24"); - when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); - when(dataCenterIpAddressDao.mark(anyLong(), anyLong(), anyString())).thenReturn(true); - - assertTrue(tungstenService.addManagementNetworkSubnet(hostPodVO)); - } - - @Test - public void deleteManagementNetworkTest() { - Network managementNetwork = mock(Network.class); - TungstenAnswer deleteTungstenManagementPolicyAnswer = mock(TungstenAnswer.class); - TungstenAnswer getTungstenFabricNetworkAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteTungstenFabricPolicyAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteTungstenNetworkAnswer = mock(TungstenAnswer.class); - VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenFabricPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); - when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); - when(getTungstenFabricNetworkAnswer.getResult()).thenReturn(true); - when(deleteTungstenFabricPolicyAnswer.getResult()).thenReturn(true); - when(deleteTungstenNetworkAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deleteManagementNetwork(1L)); - } - - @Test - public void removeManagementNetworkSubnetTest() { - HostPodVO hostPodVO = mock(HostPodVO.class); - Network managementNetwork = mock(Network.class); - TungstenAnswer removeTungstenNetworkSubnetAnswer = mock(TungstenAnswer.class); - TungstenAnswer getTungstenNetworkDnsAnswer = mock(TungstenAnswer.class); - DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(removeTungstenNetworkSubnetAnswer.getResult()).thenReturn(true); - when(getTungstenNetworkDnsAnswer.getResult()).thenReturn(true); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); - - assertTrue(tungstenService.removeManagementNetworkSubnet(hostPodVO)); - verify(dataCenterIpAddressDao, times(1)).releasePodIpAddress(anyLong()); - } - - @Test - public void createPublicNetworkTest() { - Network publicNetwork = mock(Network.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createPublicNetworkAnswer = mock(TungstenAnswer.class); - TungstenAnswer createFloatingIpPoolAnswer = mock(TungstenAnswer.class); - TungstenAnswer createTungstenPolicyAnswer = mock(TungstenAnswer.class); - TungstenAnswer applyTungstenPolicyAnswer = mock(TungstenAnswer.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(createPublicNetworkAnswer.getResult()).thenReturn(true); - when(createFloatingIpPoolAnswer.getResult()).thenReturn(true); - when(createTungstenPolicyAnswer.getResult()).thenReturn(true); - when(applyTungstenPolicyAnswer.getResult()).thenReturn(true); - when(createPublicNetworkAnswer.getApiObjectBase()).thenReturn(virtualNetwork); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); - when(virtualNetwork.getQualifiedName()).thenReturn(Arrays.asList("default-domain", "default-project", "publicNetwork")); - - assertTrue(tungstenService.createPublicNetwork(1L)); - } - - @Test - public void addPublicNetworkSubnetTest() { - VlanVO vlanVO = mock(VlanVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = mock(TungstenAnswer.class); - TungstenAnswer createTungstenPolicyAnswer = mock(TungstenAnswer.class); - TungstenAnswer applyTungstenPolicyAnswer = mock(TungstenAnswer.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer getTungstenNetworkDnsAnswer = mock(TungstenAnswer.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(vlanVO.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); - when(vlanVO.getVlanGateway()).thenReturn("192.168.100.1"); - when(vlanVO.getVlanNetmask()).thenReturn("255.255.255.0"); - when(publicNetwork.getCidr()).thenReturn("192.168.100.0/24"); - when(addTungstenNetworkSubnetAnswer.getResult()).thenReturn(true); - when(getTungstenNetworkDnsAnswer.getResult()).thenReturn(true); - when(addTungstenNetworkSubnetAnswer.getResult()).thenReturn(true); - when(createTungstenPolicyAnswer.getResult()).thenReturn(true); - when(applyTungstenPolicyAnswer.getResult()).thenReturn(true); - when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); - - assertTrue(tungstenService.addPublicNetworkSubnet(vlanVO)); - } - - @Test - public void deletePublicNetworkTest() { - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteTungstenFloatingIpPoolAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteTungstenNetworkAnswer = mock(TungstenAnswer.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); - when(deleteTungstenNetworkPolicyAnswer.getResult()).thenReturn(true); - when(deleteTungstenFloatingIpPoolAnswer.getResult()).thenReturn(true); - when(deleteTungstenNetworkAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deletePublicNetwork(1L)); - } - - @Test - public void removePublicNetworkSubnetTest() { - VlanVO vlanVO = mock(VlanVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); - TungstenAnswer removeTungstenNetworkSubnetAnswer = mock(TungstenAnswer.class); - TungstenAnswer getTungstenNetworkDnsAnswer = mock(TungstenAnswer.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(deleteTungstenNetworkPolicyAnswer.getResult()).thenReturn(true); - when(removeTungstenNetworkSubnetAnswer.getResult()).thenReturn(true); - when(getTungstenNetworkDnsAnswer.getResult()).thenReturn(true); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - - assertTrue(tungstenService.removePublicNetworkSubnet(vlanVO)); - verify(ipAddressDao, times(1)).unassignIpAddress(anyLong()); - } - - @Test - public void allocateDnsIpAddressTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = mock(TungstenAnswer.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getResult()).thenReturn(true); - when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); - when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); - when(tungstenGuestNetworkIpAddressDao.persist(any(TungstenGuestNetworkIpAddressVO.class))).thenReturn(tungstenGuestNetworkIpAddressVO); - when(networkVO.getCidr()).thenReturn("192.168.100.0/24"); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); - - assertTrue(tungstenService.allocateDnsIpAddress(networkVO, null, "test")); - } - - @Test - public void deallocateDnsIpAddressTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = mock(TungstenAnswer.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getResult()).thenReturn(true); - when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); - when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); - when(tungstenGuestNetworkIpAddressDao.findByNetworkAndGuestIpAddress(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); - - tungstenService.deallocateDnsIpAddress(networkVO, null, "test"); - verify(tungstenGuestNetworkIpAddressDao, times(1)).expunge(anyLong()); - } - - @Test - public void subscribeTungstenEventTest() { - tungstenService.subscribeTungstenEvent(); - - verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_ASSIGN_IPADDR_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_RELEASE_IPADDR_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_APPLY_NETWORK_POLICY_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_CREATE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_DELETE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_DELETE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_SYNC_TUNGSTEN_DB_WITH_DOMAINS_AND_PROJECTS_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_CREATE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_DELETE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_ADD_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_REMOVE_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_ASSIGN_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_RELEASE_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); - } - - @Test - public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { - DomainVO domainVO = mock(DomainVO.class); - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer createTungstenDomainAnswer = mock(TungstenAnswer.class); - TungstenAnswer createTungstenProjectAnswer = mock(TungstenAnswer.class); - TungstenAnswer createTungstenDefaultProjectAnswer = mock(TungstenAnswer.class); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = mock(TungstenAnswer.class); - - when(domainDao.listAll()).thenReturn(List.of(domainVO)); - when(projectDao.listAll()).thenReturn(List.of(projectVO)); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDomainCommand.class), anyLong())).thenReturn(createTungstenDomainAnswer); - when(createTungstenDomainAnswer.getResult()).thenReturn(true); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenProjectCommand.class), anyLong())).thenReturn(createTungstenProjectAnswer); - when(createTungstenProjectAnswer.getResult()).thenReturn(true); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); - when(updateTungstenDefaultSecurityGroupAnswer.getResult()).thenReturn(true); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDefaultProjectCommand.class), anyLong())).thenReturn(createTungstenDefaultProjectAnswer); - when(createTungstenDefaultProjectAnswer.getResult()).thenReturn(true); - when(domainDao.findById(anyLong())).thenReturn(domainVO); - - assertTrue(tungstenService.syncTungstenDbWithCloudstackProjectsAndDomains()); - } - - @Test - public void updateLoadBalancerTest() { - Network network = mock(Network.class); - LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); - Network publicNetwork = mock(Network.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - HostVO hostVO = mock(HostVO.class); - TungstenAnswer getTungstenLoadBalancerAnswer = mock(TungstenAnswer.class); - TungstenAnswer updateLoadBalancerServiceInstanceAnswer = mock(TungstenAnswer.class); - Answer updateTungstenLoadbalancerStatsAnswer = mock(Answer.class); - Answer updateTungstenLoadbalancerSslAnswer = mock(Answer.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); - SslCertVO sslCertVO = mock(SslCertVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - Ip ip = mock(Ip.class); - AccountVO accountVO = mock(AccountVO.class); - Loadbalancer loadbalancer = mock(Loadbalancer.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(hostDao.listAllHostsByZoneAndHypervisorType(anyLong(), eq(Hypervisor.HypervisorType.KVM))).thenReturn(List.of(hostVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenLoadBalancerCommand.class), anyLong())).thenReturn(getTungstenLoadBalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateLoadBalancerServiceInstanceCommand.class), anyLong())).thenReturn(updateLoadBalancerServiceInstanceAnswer); - when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerStatsCommand.class))).thenReturn(updateTungstenLoadbalancerStatsAnswer); - when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerSslCommand.class))).thenReturn(updateTungstenLoadbalancerSslAnswer); - when(getTungstenLoadBalancerAnswer.getResult()).thenReturn(true); - when(updateLoadBalancerServiceInstanceAnswer.getResult()).thenReturn(true); - when(updateTungstenLoadbalancerStatsAnswer.getResult()).thenReturn(true); - when(updateTungstenLoadbalancerSslAnswer.getResult()).thenReturn(true); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); - when(fwRulesDao.listByIpAndPurposeAndNotRevoked(anyLong(), eq(FirewallRule.Purpose.LoadBalancing))).thenReturn(List.of(firewallRuleVO)); - when(lbCertMapDao.findByLbRuleId(anyLong())).thenReturn(loadBalancerCertMapVO); - when(entityMgr.findById(eq(SslCertVO.class), anyLong())).thenReturn(sslCertVO); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(loadBalancingRule.getSourceIp()).thenReturn(ip); - when(accountDao.findById(anyLong())).thenReturn(accountVO); - when(ip.addr()).thenReturn("192.168.100.100"); - when(getTungstenLoadBalancerAnswer.getApiObjectBase()).thenReturn(loadbalancer); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); - - assertTrue(tungstenService.updateLoadBalancer(network, loadBalancingRule)); - } - - @Test - public void createTungstenSecurityGroupTest() { - SecurityGroup securityGroup = mock(SecurityGroup.class); - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - DomainVO domainVO = mock(DomainVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer createTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = mock(TungstenAnswer.class); - - when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(domainDao.findById(anyLong())).thenReturn(domainVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenSecurityGroupCommand.class), anyLong())).thenReturn(createTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(createTungstenSecurityGroupAnswer.getResult()).thenReturn(true); - when(addTungstenSecurityGroupRuleAnswer.getResult()).thenReturn(true); - - try (MockedStatic transactionMocked = Mockito.mockStatic(Transaction.class)) { - transactionMocked.when(() -> Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); - assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); - } - } - - @Test - public void deleteTungstenSecurityGroupTest() { - SecurityGroup securityGroup = mock(SecurityGroup.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); - when(deleteTungstenSecurityGroupAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); - } - - @Test - public void addTungstenSecurityGroupEgressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = mock(TungstenAnswer.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - NicVO nicVO = mock(NicVO.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(removeTungstenSecurityGroupRuleAnswer.getResult()).thenReturn(true); - when(addTungstenSecurityGroupRuleAnswer.getResult()).thenReturn(true); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); - when(tungstenSecurityGroupRuleDao.findDefaultSecurityRule(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); - when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); - when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(securityRule.getAllowedNetworkId()).thenReturn(1L); - - assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); - } - - @Test - public void addTungstenSecurityGroupIngressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = mock(TungstenAnswer.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(addTungstenSecurityGroupRuleAnswer.getResult()).thenReturn(true); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); - when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); - when(securityRule.getAllowedNetworkId()).thenReturn(null); - - assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); - } - - @Test - public void removeTungstenSecurityGroupEgressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = mock(TungstenAnswer.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = mock(TungstenAnswer.class); - NicVO nicVO = mock(NicVO.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); - when(securityRule.getType()).thenReturn("egress"); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(addTungstenSecurityGroupRuleAnswer.getResult()).thenReturn(true); - when(removeTungstenSecurityGroupRuleAnswer.getResult()).thenReturn(true); - when(securityRule.getAllowedNetworkId()).thenReturn(1L); - when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(tungstenSecurityGroupRuleDao.findBySecurityGroupAndRuleTypeAndRuleTarget(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); - - assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); - } - - @Test - public void removeTungstenSecurityGroupIngressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = mock(TungstenAnswer.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(removeTungstenSecurityGroupRuleAnswer.getResult()).thenReturn(true); - when(securityRule.getAllowedNetworkId()).thenReturn(null); - - assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); - } - - @Test - public void addTungstenNicSecondaryIpAddressTest() { - NicSecondaryIp nicSecondaryIp = mock(NicSecondaryIp.class); - Network network = mock(Network.class); - DataCenter dataCenter = mock(DataCenter.class); - Nic nic = mock(Nic.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer addTungstenSecondaryIpAddressAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = mock(TungstenAnswer.class); - - when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); - when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); - when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); - when(entityMgr.findById(eq(Nic.class), anyLong())).thenReturn(nic); - when(nicSecondaryIp.getIp4Address()).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(addTungstenSecondaryIpAddressAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(addTungstenSecondaryIpAddressAnswer.getResult()).thenReturn(true); - when(addTungstenSecurityGroupRuleAnswer.getResult()).thenReturn(true); - when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); - when(network.getGuestType()).thenReturn(Network.GuestType.Shared); - when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); - when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - - assertTrue(tungstenService.addTungstenNicSecondaryIpAddress(1L)); - } - - @Test - public void removeTungstenNicSecondaryIpAddressTest() { - NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); - Network network = mock(Network.class); - DataCenter dataCenter = mock(DataCenter.class); - TungstenAnswer removeTungstenSecondaryIpAddressAnswer = mock(TungstenAnswer.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = mock(TungstenAnswer.class); - - when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); - when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(removeTungstenSecondaryIpAddressAnswer.getResult()).thenReturn(true); - when(removeTungstenSecurityGroupRuleAnswer.getResult()).thenReturn(true); - when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); - when(network.getGuestType()).thenReturn(Network.GuestType.Shared); - when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); - when(nicSecondaryIpVO.getIp4Address()).thenReturn("192.168.100.100"); - - assertTrue(tungstenService.removeTungstenNicSecondaryIpAddress(nicSecondaryIpVO)); - } - - @Test - public void createTungstenPolicyTest() { - TungstenAnswer createTungstenPolicyAnswer = mock(TungstenAnswer.class); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(createTungstenPolicyAnswer.getResult()).thenReturn(true); - when(createTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - - assertNotNull(tungstenService.createTungstenPolicy(1L, "test")); - } - - @Test - public void addTungstenPolicyRuleTest() throws Exception { - TungstenAnswer addTungstenPolicyRuleAnswer = mock(TungstenAnswer.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenPolicyRuleCommand.class), anyLong())).thenReturn(addTungstenPolicyRuleAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(addTungstenPolicyRuleAnswer.getResult()).thenReturn(true); - when(addTungstenPolicyRuleAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - try (MockedConstruction ignored = - Mockito.mockConstruction(AddTungstenPolicyRuleCommand.class, (mock, context) -> { - when(mock.getUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - })) { - - assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", - "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, - "network2", "192.168.200.200", 32, 80, 80)); - } - } - - @Test - public void listTungstenPolicyTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer listTungstenPolicyAnswer = mock(TungstenAnswer.class); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findById(anyLong())).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyCommand.class), anyLong())).thenReturn(listTungstenPolicyAnswer); - when(listTungstenPolicyAnswer.getResult()).thenReturn(true); - when(listTungstenPolicyAnswer.getTungstenModelList()).thenReturn(List.of(tungstenNetworkPolicy)); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn( - List.of(virtualNetwork)); - - assertNotNull(tungstenService.listTungstenPolicy(1L, 2L, 3L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenNetworkTest() { - TungstenAnswer listTungstenNetworkAnswer = mock(TungstenAnswer.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNetworkCommand.class), anyLong())).thenReturn(listTungstenNetworkAnswer); - when(listTungstenNetworkAnswer.getResult()).thenReturn(true); - doReturn(List.of(virtualNetwork)).when(listTungstenNetworkAnswer).getApiObjectBaseList(); - when((virtualNetwork.getName())).thenReturn("guestNetwork1"); - - assertNotNull(tungstenService.listTungstenNetwork(1L, "948f421c-edde-4518-a391-09299cc25dc2", false)); - } - - @Test - public void listTungstenNicTest() { - TungstenAnswer listTungstenNicAnswer = mock(TungstenAnswer.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNicCommand.class), anyLong())).thenReturn(listTungstenNicAnswer); - when(listTungstenNicAnswer.getResult()).thenReturn(true); - doReturn(List.of(virtualMachineInterface)).when(listTungstenNicAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenNic(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenVmTest() { - TungstenAnswer listTungstenVmAnswer = mock(TungstenAnswer.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenVmCommand.class), anyLong())).thenReturn(listTungstenVmAnswer); - when(listTungstenVmAnswer.getResult()).thenReturn(true); - doReturn(List.of(virtualMachine)).when(listTungstenVmAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenVm(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenPolicyTest() { - TungstenAnswer deleteTungstenPolicyAnswer = mock(TungstenAnswer.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); - when(deleteTungstenPolicyAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenPolicyRuleWithRuleUuidTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = mock(TungstenAnswer.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); - when(listTungstenPolicyRuleAnswer.getResult()).thenReturn(true); - doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenPolicyRuleWithAllRuleTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = mock(TungstenAnswer.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); - when(listTungstenPolicyRuleAnswer.getResult()).thenReturn(true); - doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", null)); - } - - @Test - public void removeTungstenPolicyRuleTest() { - TungstenAnswer removeTungstenPolicyRuleAnswer = mock(TungstenAnswer.class); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyRuleCommand.class), anyLong())).thenReturn(removeTungstenPolicyRuleAnswer); - when(removeTungstenPolicyRuleAnswer.getResult()).thenReturn(true); - when(removeTungstenPolicyRuleAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void createTungstenTagTest() { - TungstenAnswer createTungstenTagAnswer = mock(TungstenAnswer.class); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagCommand.class), anyLong())).thenReturn(createTungstenTagAnswer); - when(createTungstenTagAnswer.getResult()).thenReturn(true); - when(createTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); - doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); - doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); - doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); - - assertNotNull(tungstenService.createTungstenTag(1L, "testTag", "testTagType")); - } - - @Test - public void createTungstenTagTypeTest() { - TungstenAnswer createTungstenTagTypeAnswer = mock(TungstenAnswer.class); - TagType tagtype = mock(TagType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(createTungstenTagTypeAnswer.getResult()).thenReturn(true); - when(createTungstenTagTypeAnswer.getApiObjectBase()).thenReturn(tagtype); - - assertNotNull(tungstenService.createTungstenTagType(1L, "testTagType")); - } - - @Test - public void listTungstenTagsTest() { - TungstenAnswer listTungstenTagAnswer = mock(TungstenAnswer.class); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagCommand.class), anyLong())).thenReturn(listTungstenTagAnswer); - when(listTungstenTagAnswer.getResult()).thenReturn(true); - when(listTungstenTagAnswer.getTungstenModelList()).thenReturn(List.of(tungstenTag)); - when(tungstenTag.getTag()).thenReturn(tag); - doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); - doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); - doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); - doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); - - assertNotNull(tungstenService.listTungstenTags(1L, "948f421c-edde-4518-a391-09299cc25dc2" - , "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", "a329662e-1805-4a89-9b05-2b818ea35978", - "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); - } - - @Test - public void listTungstenTagTypesTest() { - TungstenAnswer listTungstenTagTypeAnswer = mock(TungstenAnswer.class); - TagType tagtype = mock(TagType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagTypeCommand.class), anyLong())).thenReturn(listTungstenTagTypeAnswer); - when(listTungstenTagTypeAnswer.getResult()).thenReturn(true); - doReturn(List.of(tagtype)).when(listTungstenTagTypeAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenTagTypes(1L, "testTagType")); - } - - @Test - public void deleteTungstenTagTest() { - TungstenAnswer deleteTungstenTagAnswer = mock(TungstenAnswer.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); - when(deleteTungstenTagAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenTagTypeTest() { - TungstenAnswer deleteTungstenTagTypeAnswer = mock(TungstenAnswer.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); - when(deleteTungstenTagTypeAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void applyTungstenPolicyTest() { - TungstenAnswer applyTungstenPolicyAnswer = mock(TungstenAnswer.class); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(applyTungstenPolicyAnswer.getResult()).thenReturn(true); - when(applyTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.applyTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", 1, 1)); - } - - @Test - public void applyTungstenTagTest() { - TungstenAnswer applyTungstenTagAnswer = mock(TungstenAnswer.class); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenTagCommand.class), anyLong())).thenReturn(applyTungstenTagAnswer); - when(applyTungstenTagAnswer.getResult()).thenReturn(true); - when(applyTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); - when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); - when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); - - assertNotNull(tungstenService.applyTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85") - , List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb" - , "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); - } - - @Test - public void removeTungstenPolicyTest() { - TungstenAnswer removeTungstenPolicyAnswer = mock(TungstenAnswer.class); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyCommand.class), anyLong())).thenReturn(removeTungstenPolicyAnswer); - when(removeTungstenPolicyAnswer.getResult()).thenReturn(true); - when(removeTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void removeTungstenTagTest() { - TungstenAnswer removeTungstenTagAnswer = mock(TungstenAnswer.class); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenTagCommand.class), anyLong())).thenReturn(removeTungstenTagAnswer); - when(removeTungstenTagAnswer.getResult()).thenReturn(true); - when(removeTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); - when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); - when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); - - assertNotNull(tungstenService.removeTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), - List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85"), - List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", null, - "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb")); - } - - @Test - public void createTungstenAddressGroupTest() { - TungstenAnswer createTungstenAddressGroupAnswer = mock(TungstenAnswer.class); - AddressGroup addressGroup = mock(AddressGroup.class); - SubnetListType subnetListType = mock(SubnetListType.class); - SubnetType subnetType = mock(SubnetType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenAddressGroupCommand.class), anyLong())).thenReturn(createTungstenAddressGroupAnswer); - when(createTungstenAddressGroupAnswer.getResult()).thenReturn(true); - when(createTungstenAddressGroupAnswer.getApiObjectBase()).thenReturn(addressGroup); - when(addressGroup.getPrefix()).thenReturn(subnetListType); - when(subnetListType.getSubnet()).thenReturn(List.of(subnetType)); - - assertNotNull(tungstenService.createTungstenAddressGroup(1L, "test", "192.168.100.0", 24)); - } - - @Test - public void createTungstenServiceGroupTest() { - TungstenAnswer createTungstenServiceGroupAnswer = mock(TungstenAnswer.class); - ServiceGroup serviceGroup = mock(ServiceGroup.class); - FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); - FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenServiceGroupCommand.class), anyLong())).thenReturn(createTungstenServiceGroupAnswer); - when(createTungstenServiceGroupAnswer.getResult()).thenReturn(true); - when(createTungstenServiceGroupAnswer.getApiObjectBase()).thenReturn(serviceGroup); - when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); - when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); - when(firewallServiceType.getDstPorts()).thenReturn(portType); - - assertNotNull(tungstenService.createTungstenServiceGroup(1L, "test", "tcp", 80, 80)); - } - - @Test - public void createTungstenFirewallRuleTest() { - TungstenAnswer createTungstenFirewallRuleAnswer = mock(TungstenAnswer.class); - net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); - ActionListType actionListType = mock(ActionListType.class); - ObjectReference serviceGroup = mock(ObjectReference.class); - FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); - FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); - FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallRuleCommand.class), anyLong())).thenReturn(createTungstenFirewallRuleAnswer); - when(createTungstenFirewallRuleAnswer.getResult()).thenReturn(true); - when(createTungstenFirewallRuleAnswer.getApiObjectBase()).thenReturn(firewallRule); - when(firewallRule.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); - when(serviceGroup.getReferredName()).thenReturn(List.of("service")); - when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); - when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); - when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); - when(firewallRuleEndpointType2.getTags()).thenReturn(null); - when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); - when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); - - assertNotNull(tungstenService.createTungstenFirewallRule(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "test", "pass", "948f421c-edde-4518-a391-09299cc25dc2", - "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", null, "<>", "a329662e-1805-4a89-9b05-2b818ea35978" - , "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", null, "df8e4490-2a40-4d63-a6f3-1f829ffe4fc6", 1)); - } - - @Test - public void createTungstenFirewallPolicyTest() { - TungstenAnswer createTungstenFirewallPolicyAnswer = mock(TungstenAnswer.class); - FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(createTungstenFirewallPolicyAnswer); - when(createTungstenFirewallPolicyAnswer.getResult()).thenReturn(true); - when(createTungstenFirewallPolicyAnswer.getApiObjectBase()).thenReturn(firewallPolicy); - when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.createTungstenFirewallPolicy(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652","test", 1)); - } - - @Test - public void createTungstenApplicationPolicySetTest() { - TungstenAnswer createTungstenApplicationPolicySetAnswer = mock(TungstenAnswer.class); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - ObjectReference objectReference = mock(ObjectReference.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(createTungstenApplicationPolicySetAnswer); - when(createTungstenApplicationPolicySetAnswer.getResult()).thenReturn(true); - when(createTungstenApplicationPolicySetAnswer.getApiObjectBase()).thenReturn(applicationPolicySet); - when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); - when(objectReference.getReferredName()).thenReturn(List.of("tag")); - when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.createTungstenApplicationPolicySet(1L, "test")); - } - - @Test - public void listTungstenApplicationPolicySetTest() { - TungstenAnswer listTungstenApplicationPolicySetAnswer = mock(TungstenAnswer.class); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - ObjectReference objectReference = mock(ObjectReference.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(listTungstenApplicationPolicySetAnswer); - when(listTungstenApplicationPolicySetAnswer.getResult()).thenReturn(true); - doReturn(List.of(applicationPolicySet)).when(listTungstenApplicationPolicySetAnswer).getApiObjectBaseList(); - when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); - when(objectReference.getReferredName()).thenReturn(List.of("tag")); - when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.listTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenFirewallPolicyTest() { - TungstenAnswer listTungstenFirewallPolicyAnswer = mock(TungstenAnswer.class); - FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(listTungstenFirewallPolicyAnswer); - when(listTungstenFirewallPolicyAnswer.getResult()).thenReturn(true); - doReturn(List.of(firewallPolicy)).when(listTungstenFirewallPolicyAnswer).getApiObjectBaseList(); - when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.listTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenFirewallRuleTest() { - TungstenAnswer listTungstenFirewallRuleAnswer = mock(TungstenAnswer.class); - net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); - ActionListType actionListType = mock(ActionListType.class); - ObjectReference serviceGroup = mock(ObjectReference.class); - FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); - FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); - FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallRuleCommand.class), anyLong())).thenReturn(listTungstenFirewallRuleAnswer); - when(listTungstenFirewallRuleAnswer.getResult()).thenReturn(true); - doReturn(List.of(firewallRule)).when(listTungstenFirewallRuleAnswer).getApiObjectBaseList(); - when(firewallRule.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); - when(serviceGroup.getReferredName()).thenReturn(List.of("service")); - when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); - when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); - when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); - when(firewallRuleEndpointType2.getTags()).thenReturn(null); - when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); - when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); - - assertNotNull(tungstenService.listTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", - "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenAddressGroupTest() { - TungstenAnswer listTungstenAddressGroupAnswer = mock(TungstenAnswer.class); - AddressGroup addressGroup = mock(AddressGroup.class); - SubnetListType subnetListType = mock(SubnetListType.class); - SubnetType subnetType = mock(SubnetType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenAddressGroupCommand.class), anyLong())).thenReturn(listTungstenAddressGroupAnswer); - when(listTungstenAddressGroupAnswer.getResult()).thenReturn(true); - doReturn(List.of(addressGroup)).when(listTungstenAddressGroupAnswer).getApiObjectBaseList(); - when(addressGroup.getPrefix()).thenReturn(subnetListType); - when(subnetListType.getSubnet()).thenReturn( - List.of(subnetType)); - - assertNotNull(tungstenService.listTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenServiceGroupTest() { - TungstenAnswer listTungstenServiceGroupAnswer = mock(TungstenAnswer.class); - ServiceGroup serviceGroup = mock(ServiceGroup.class); - FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); - FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenServiceGroupCommand.class), anyLong())).thenReturn(listTungstenServiceGroupAnswer); - when(listTungstenServiceGroupAnswer.getResult()).thenReturn(true); - doReturn(List.of(serviceGroup)).when(listTungstenServiceGroupAnswer).getApiObjectBaseList(); - when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); - when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); - when(firewallServiceType.getDstPorts()).thenReturn(portType); - - assertNotNull(tungstenService.listTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenApplicationPolicySetTest() { - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenFirewallPolicyTest() { - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenFirewallRuleTest() { - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenServiceGroupTest() { - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenAddressGroupTest() { - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void createSharedNetworkTest() { - Network network = mock(Network.class); - Vlan vlan = mock(Vlan.class); - AccountVO accountVO = mock(AccountVO.class); - TungstenAnswer createTungstenSharedNetworkAnswer = mock(TungstenAnswer.class); - TungstenAnswer addNetworkSubnetAnswer = mock(TungstenAnswer.class); - TungstenAnswer getTungstenNetworkDnsAnswer = mock(TungstenAnswer.class); - NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - HostVO hostVO = mock(HostVO.class); - Answer answer = mock(Answer.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); - - when(accountDao.findById(anyLong())).thenReturn(accountVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenSharedNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(createTungstenSharedNetworkAnswer.getResult()).thenReturn(true); - when(addNetworkSubnetAnswer.getResult()).thenReturn(true); - when(getTungstenNetworkDnsAnswer.getResult()).thenReturn(true); - when(network.getMode()).thenReturn(Networks.Mode.Dhcp); - when(network.getCidr()).thenReturn("192.168.100.0/24"); - when(vlan.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); - when(vlan.getVlanGateway()).thenReturn("192.168.100.1"); - when(vlan.getIp6Gateway()).thenReturn("fd00::1"); - when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(hostDao.findByPublicIp(anyString())).thenReturn(hostVO); - when(agentMgr.easySend(anyLong(), any(SetupTungstenVRouterCommand.class))).thenReturn(answer); - when(answer.getResult()).thenReturn(true); - when(vlan.getIp6Cidr()).thenReturn("fd00::1/64"); - when(vlan.getIp6Range()).thenReturn("fd00::100-fd00::200"); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.1.150"); - when(createTungstenSharedNetworkAnswer.getApiObjectBase()).thenReturn(apiObjectBase); - when(apiObjectBase.getQualifiedName()).thenReturn(List.of("network")); - when(tungstenProviderVO.getGateway()).thenReturn("192.168.100.1"); - - assertTrue(tungstenService.createSharedNetwork(network, vlan)); - } - - @Test - public void addTungstenVmSecurityGroupTest() { - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenVmToSecurityGroupAnswer = mock(TungstenAnswer.class); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - NicVO nicVO = mock(NicVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = mock(TungstenAnswer.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenVmToSecurityGroupCommand.class), anyLong())).thenReturn(addTungstenVmToSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(addTungstenVmToSecurityGroupAnswer.getResult()).thenReturn(true); - when(addTungstenSecurityGroupRuleAnswer.getResult()).thenReturn(true); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); - when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - - assertTrue(tungstenService.addTungstenVmSecurityGroup(vmInstanceVO)); - } - - @Test - public void removeTungstenVmSecurityGroupTest() { - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = mock(TungstenAnswer.class); - NicVO nicVO = mock(NicVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = mock(TungstenAnswer.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - - assertTrue(tungstenService.removeTungstenVmSecurityGroup(vmInstanceVO)); - } - - @Test - public void createRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.createRoutingLogicalRouter(1L, "default-domain:default-project", "testLR")); - } - - @Test - public void addNetworkGatewayToLogicalRouterTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findByUuid(anyString())).thenReturn(networkVO); - when(ipAddressManager.acquireLastGuestIpAddress(any(Network.class))).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkGatewayToLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.addNetworkGatewayToLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - when(tungstenAnswer.getTungstenModelList()).thenReturn(List.of(tungstenLogicalRouter)); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.listRoutingLogicalRouter(1L, null, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void removeNetworkGatewayFromLogicalRouterTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findByUuid(anyString())).thenReturn(networkVO); - when(tungstenGuestNetworkIpAddressDao.findByNetworkAndLogicalRouter(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkGatewayFromLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeNetworkGatewayFromLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void deleteLogicalRouterTest() { - TungstenAnswer tungstenAnswer = mock(TungstenAnswer.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getResult()).thenReturn(true); - - assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } -} +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +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 static org.powermock.api.mockito.PowerMockito.mockStatic; +import static org.powermock.api.mockito.PowerMockito.whenNew; + +import com.cloud.agent.AgentManager; +import com.cloud.agent.api.Answer; +import com.cloud.configuration.Config; +import com.cloud.configuration.ConfigurationManager; +import com.cloud.dc.DataCenter; +import com.cloud.dc.DataCenterIpAddressVO; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.HostPodVO; +import com.cloud.dc.Vlan; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.DataCenterIpAddressDao; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.hypervisor.Hypervisor; +import com.cloud.network.IpAddressManager; +import com.cloud.network.Network; +import com.cloud.network.NetworkModel; +import com.cloud.network.NetworkService; +import com.cloud.network.Networks; +import com.cloud.network.TungstenGuestNetworkIpAddressVO; +import com.cloud.network.dao.FirewallRulesDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.LoadBalancerCertMapDao; +import com.cloud.network.dao.LoadBalancerCertMapVO; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDetailVO; +import com.cloud.network.dao.NetworkDetailsDao; +import com.cloud.network.dao.NetworkVO; +import com.cloud.network.dao.SslCertVO; +import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.security.SecurityGroup; +import com.cloud.network.security.SecurityGroupManager; +import com.cloud.network.security.SecurityGroupRuleVO; +import com.cloud.network.security.SecurityGroupService; +import com.cloud.network.security.SecurityGroupVO; +import com.cloud.network.security.SecurityRule; +import com.cloud.network.security.TungstenSecurityGroupRuleVO; +import com.cloud.network.security.dao.SecurityGroupDao; +import com.cloud.network.security.dao.SecurityGroupRuleDao; +import com.cloud.network.security.dao.SecurityGroupVMMapDao; +import com.cloud.network.security.dao.TungstenSecurityGroupRuleDao; +import com.cloud.projects.ProjectManager; +import com.cloud.projects.ProjectVO; +import com.cloud.projects.dao.ProjectDao; +import com.cloud.user.AccountVO; +import com.cloud.user.DomainManager; +import com.cloud.user.dao.AccountDao; +import com.cloud.utils.db.EntityManager; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.db.TransactionCallback; +import com.cloud.utils.net.Ip; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.Nic; +import com.cloud.vm.NicSecondaryIp; +import com.cloud.vm.NicVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.dao.NicDao; +import com.cloud.vm.dao.NicSecondaryIpDao; +import com.cloud.vm.dao.NicSecondaryIpVO; +import net.juniper.tungsten.api.ApiObjectBase; +import net.juniper.tungsten.api.ApiPropertyBase; +import net.juniper.tungsten.api.ObjectReference; +import net.juniper.tungsten.api.types.ActionListType; +import net.juniper.tungsten.api.types.AddressGroup; +import net.juniper.tungsten.api.types.AddressType; +import net.juniper.tungsten.api.types.ApplicationPolicySet; +import net.juniper.tungsten.api.types.FirewallPolicy; +import net.juniper.tungsten.api.types.FirewallRuleEndpointType; +import net.juniper.tungsten.api.types.FirewallRuleMatchTagsType; +import net.juniper.tungsten.api.types.FirewallSequence; +import net.juniper.tungsten.api.types.FirewallServiceGroupType; +import net.juniper.tungsten.api.types.FirewallServiceType; +import net.juniper.tungsten.api.types.Loadbalancer; +import net.juniper.tungsten.api.types.LogicalRouter; +import net.juniper.tungsten.api.types.NetworkPolicy; +import net.juniper.tungsten.api.types.PolicyEntriesType; +import net.juniper.tungsten.api.types.PolicyRuleType; +import net.juniper.tungsten.api.types.PortType; +import net.juniper.tungsten.api.types.ServiceGroup; +import net.juniper.tungsten.api.types.SubnetListType; +import net.juniper.tungsten.api.types.SubnetType; +import net.juniper.tungsten.api.types.Tag; +import net.juniper.tungsten.api.types.TagType; +import net.juniper.tungsten.api.types.VirtualMachine; +import net.juniper.tungsten.api.types.VirtualMachineInterface; +import net.juniper.tungsten.api.types.VirtualNetwork; +import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.messagebus.MessageBus; +import org.apache.cloudstack.framework.messagebus.MessageSubscriber; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkGatewayToLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkSubnetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecondaryIpAddressCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecurityGroupRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenVmToSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDefaultProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDomainCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpPoolCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenDomainCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpPoolCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenFabricNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenLoadBalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenNetworkDnsCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNicCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenVmCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkGatewayFromLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkSubnetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecondaryIpAddressCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecurityGroupRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenVmFromSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateLoadBalancerServiceInstanceCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenDefaultSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerSslCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerStatsCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenVrouterConfigCommand; +import org.apache.cloudstack.network.tungsten.model.TungstenLogicalRouter; +import org.apache.cloudstack.network.tungsten.model.TungstenNetworkPolicy; +import org.apache.cloudstack.network.tungsten.model.TungstenRule; +import org.apache.cloudstack.network.tungsten.model.TungstenTag; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.powermock.api.mockito.PowerMockito; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.reflect.Whitebox; + +import java.util.Arrays; +import java.util.List; + +@RunWith(PowerMockRunner.class) +@PrepareForTest({Transaction.class, TungstenServiceImpl.class}) +public class TungstenServiceImplTest { + @Mock + MessageBus messageBus; + @Mock + ProjectDao projectDao; + @Mock + AccountDao accountDao; + @Mock + NetworkDao networkDao; + @Mock + ConfigurationDao configDao; + @Mock + IPAddressDao ipAddressDao; + @Mock + EntityManager entityMgr; + @Mock + NetworkModel networkModel; + @Mock + DomainDao domainDao; + @Mock + LoadBalancerCertMapDao lbCertMapDao; + @Mock + FirewallRulesDao fwRulesDao; + @Mock + TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; + @Mock + TungstenProviderDao tungstenProviderDao; + @Mock + TungstenFabricUtils tungstenFabricUtils; + @Mock + AgentManager agentMgr; + @Mock + HostDao hostDao; + @Mock + NetworkDetailsDao networkDetailsDao; + @Mock + SecurityGroupDao securityGroupDao; + @Mock + NicDao nicDao; + @Mock + TungstenSecurityGroupRuleDao tungstenSecurityGroupRuleDao; + @Mock + SecurityGroupVMMapDao securityGroupVMMapDao; + @Mock + SecurityGroupRuleDao securityGroupRuleDao; + @Mock + SecurityGroupManager securityGroupManager; + @Mock + NicSecondaryIpDao nicSecIpDao; + @Mock + DataCenterIpAddressDao dataCenterIpAddressDao; + @Mock + DataCenterDao dataCenterDao; + @Mock + IpAddressManager ipAddressManager; + TungstenServiceImpl tungstenService; + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + tungstenService = new TungstenServiceImpl(); + tungstenService.projectDao = projectDao; + tungstenService.tungstenProviderDao = tungstenProviderDao; + tungstenService.networkModel = networkModel; + tungstenService.ipAddressDao = ipAddressDao; + tungstenService.tungstenFabricUtils = tungstenFabricUtils; + tungstenService.domainDao = domainDao; + tungstenService.accountDao = accountDao; + tungstenService.dataCenterIpAddressDao = dataCenterIpAddressDao; + tungstenService.networkDetailsDao = networkDetailsDao; + tungstenService.agentMgr = agentMgr; + tungstenService.hostDao = hostDao; + tungstenService.configDao = configDao; + tungstenService.fwRulesDao = fwRulesDao; + tungstenService.lbCertMapDao = lbCertMapDao; + tungstenService.entityMgr = entityMgr; + tungstenService.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; + tungstenService.securityGroupDao = securityGroupDao; + tungstenService.tungstenSecurityGroupRuleDao = tungstenSecurityGroupRuleDao; + tungstenService.securityGroupVMMapDao = securityGroupVMMapDao; + tungstenService.nicDao = nicDao; + tungstenService.nicSecIpDao = nicSecIpDao; + tungstenService.securityGroupRuleDao = securityGroupRuleDao; + tungstenService.securityGroupManager = securityGroupManager; + tungstenService.networkDao = networkDao; + tungstenService.dataCenterDao = dataCenterDao; + tungstenService.ipAddressManager = ipAddressManager; + tungstenService.messageBus = messageBus; + } + @Test + public void createTungstenFloatingIpTest() throws Exception { + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer createTungstenFloatingIpAnswer = new CreateMockTungstenAnswer(true).get(); + Ip ip = mock(Ip.class); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); + when(ipAddressVO.getAddress()).thenReturn(ip); + assertTrue(Whitebox.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); + } + @Test + public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer deleteTungstenFloatingIpAnswer = new CreateMockTungstenAnswer(true).get(); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); + assertTrue(Whitebox.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); + } + @Test + public void deleteTungstenDomainTest() throws Exception { + DomainVO domainVO = mock(DomainVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenDomainAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); + assertTrue(Whitebox.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); + } + @Test + public void deleteTungstenProjectTest() throws Exception { + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenProjectAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); + assertTrue(Whitebox.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); + } + @Test + public void addTungstenDefaultNetworkPolicyTest() { + TungstenRule tungstenRule = mock(TungstenRule.class); + TungstenAnswer createTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + assertTrue(tungstenService.addTungstenDefaultNetworkPolicy(1L, "default-domain:default-project", "policyName", "7279ed91-314e-45be-81b4-b10395fd2ae3" + , List.of(tungstenRule), 1, 1)); + } + @Test + public void createManagementNetworkTest() { + Network managementNetwork = mock(Network.class); + VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); + VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer createTungstenNetworkAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenFabricNetworkAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenVrouterConfigCommand.class), anyLong())).thenReturn(updateTungstenGlobalVrouterConfigAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(createTungstenNetworkAnswer.getApiObjectBase()).thenReturn(managementVirtualNetwork); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); + assertTrue(tungstenService.createManagementNetwork(1L)); + } + @Test + public void addManagementNetworkSubnetTest() { + HostPodVO hostPodVO = mock(HostPodVO.class); + Network managementNetwork = mock(Network.class); + TungstenAnswer addTungstenNetworkSubnetAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); + when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(managementNetwork.getCidr()).thenReturn("192.168.100.0/24"); + when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); + when(dataCenterIpAddressDao.mark(anyLong(), anyLong(), anyString())).thenReturn(true); + assertTrue(tungstenService.addManagementNetworkSubnet(hostPodVO)); + } + @Test + public void deleteManagementNetworkTest() { + Network managementNetwork = mock(Network.class); + TungstenAnswer deleteTungstenManagementPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenFabricNetworkAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenFabricPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenNetworkAnswer = new CreateMockTungstenAnswer(true).get(); + VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenManagementPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenFabricPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); + when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); + assertTrue(tungstenService.deleteManagementNetwork(1L)); + } + @Test + public void removeManagementNetworkSubnetTest() { + HostPodVO hostPodVO = mock(HostPodVO.class); + Network managementNetwork = mock(Network.class); + TungstenAnswer removeTungstenNetworkSubnetAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); + when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); + assertTrue(tungstenService.removeManagementNetworkSubnet(hostPodVO)); + verify(dataCenterIpAddressDao, times(1)).releasePodIpAddress(anyLong()); + } + @Test + public void createPublicNetworkTest() { + Network publicNetwork = mock(Network.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer createPublicNetworkAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createFloatingIpPoolAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(createPublicNetworkAnswer.getApiObjectBase()).thenReturn(virtualNetwork); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); + when(virtualNetwork.getQualifiedName()).thenReturn(Arrays.asList("default-domain", "default-project", "publicNetwork")); + assertTrue(tungstenService.createPublicNetwork(1L)); + } + @Test + public void addPublicNetworkSubnetTest() { + VlanVO vlanVO = mock(VlanVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer addTungstenNetworkSubnetAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(vlanVO.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); + when(vlanVO.getVlanGateway()).thenReturn("192.168.100.1"); + when(vlanVO.getVlanNetmask()).thenReturn("255.255.255.0"); + when(publicNetwork.getCidr()).thenReturn("192.168.100.0/24"); + when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); + assertTrue(tungstenService.addPublicNetworkSubnet(vlanVO)); + } + @Test + public void deletePublicNetworkTest() { + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenNetworkAnswer = new CreateMockTungstenAnswer(true).get(); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); + assertTrue(tungstenService.deletePublicNetwork(1L)); + } + @Test + public void removePublicNetworkSubnetTest() { + VlanVO vlanVO = mock(VlanVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenNetworkSubnetAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + assertTrue(tungstenService.removePublicNetworkSubnet(vlanVO)); + verify(ipAddressDao, times(1)).unassignIpAddress(anyLong()); + } + @Test + public void allocateDnsIpAddressTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); + when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); + when(tungstenGuestNetworkIpAddressDao.persist(any(TungstenGuestNetworkIpAddressVO.class))).thenReturn(tungstenGuestNetworkIpAddressVO); + when(networkVO.getCidr()).thenReturn("192.168.100.0/24"); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); + assertTrue(tungstenService.allocateDnsIpAddress(networkVO, null, "test")); + } + @Test + public void deallocateDnsIpAddressTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); + when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); + when(tungstenGuestNetworkIpAddressDao.findByNetworkAndGuestIpAddress(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); + tungstenService.deallocateDnsIpAddress(networkVO, null, "test"); + verify(tungstenGuestNetworkIpAddressDao, times(1)).expunge(anyLong()); + } + @Test + public void subscribeTungstenEventTest() { + tungstenService.subscribeTungstenEvent(); + verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_ASSIGN_IPADDR_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_RELEASE_IPADDR_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_APPLY_NETWORK_POLICY_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_CREATE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_DELETE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_DELETE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_SYNC_TUNGSTEN_DB_WITH_DOMAINS_AND_PROJECTS_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_CREATE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_DELETE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_ADD_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_REMOVE_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_ASSIGN_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_RELEASE_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); + } + @Test + public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { + DomainVO domainVO = mock(DomainVO.class); + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer createTungstenDomainAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenProjectAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenDefaultProjectAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + when(domainDao.listAll()).thenReturn(List.of(domainVO)); + when(projectDao.listAll()).thenReturn(List.of(projectVO)); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDomainCommand.class), anyLong())).thenReturn(createTungstenDomainAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenProjectCommand.class), anyLong())).thenReturn(createTungstenProjectAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDefaultProjectCommand.class), anyLong())).thenReturn(createTungstenDefaultProjectAnswer); + when(domainDao.findById(anyLong())).thenReturn(domainVO); + assertTrue(tungstenService.syncTungstenDbWithCloudstackProjectsAndDomains()); + } + @Test + public void updateLoadBalancerTest() { + Network network = mock(Network.class); + LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); + Network publicNetwork = mock(Network.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + HostVO hostVO = mock(HostVO.class); + TungstenAnswer getTungstenLoadBalancerAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new CreateMockTungstenAnswer(true).get(); + Answer updateTungstenLoadbalancerStatsAnswer = new CreateMockTungstenAnswer(true).get(); + Answer updateTungstenLoadbalancerSslAnswer = new CreateMockTungstenAnswer(true).get(); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); + SslCertVO sslCertVO = mock(SslCertVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + Ip ip = mock(Ip.class); + AccountVO accountVO = mock(AccountVO.class); + Loadbalancer loadbalancer = mock(Loadbalancer.class); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(hostDao.listAllHostsByZoneAndHypervisorType(anyLong(), eq(Hypervisor.HypervisorType.KVM))).thenReturn(List.of(hostVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenLoadBalancerCommand.class), anyLong())).thenReturn(getTungstenLoadBalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateLoadBalancerServiceInstanceCommand.class), anyLong())).thenReturn(updateLoadBalancerServiceInstanceAnswer); + when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerStatsCommand.class))).thenReturn(updateTungstenLoadbalancerStatsAnswer); + when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerSslCommand.class))).thenReturn(updateTungstenLoadbalancerSslAnswer); + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); + when(fwRulesDao.listByIpAndPurposeAndNotRevoked(anyLong(), eq(FirewallRule.Purpose.LoadBalancing))).thenReturn(List.of(firewallRuleVO)); + when(lbCertMapDao.findByLbRuleId(anyLong())).thenReturn(loadBalancerCertMapVO); + when(entityMgr.findById(eq(SslCertVO.class), anyLong())).thenReturn(sslCertVO); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(loadBalancingRule.getSourceIp()).thenReturn(ip); + when(accountDao.findById(anyLong())).thenReturn(accountVO); + when(ip.addr()).thenReturn("192.168.100.100"); + when(getTungstenLoadBalancerAnswer.getApiObjectBase()).thenReturn(loadbalancer); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); + assertTrue(tungstenService.updateLoadBalancer(network, loadBalancingRule)); + } + @Test + public void createTungstenSecurityGroupTest() { + SecurityGroup securityGroup = mock(SecurityGroup.class); + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + DomainVO domainVO = mock(DomainVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer createTungstenSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + mockStatic(Transaction.class); + when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(domainDao.findById(anyLong())).thenReturn(domainVO); + when(projectDao.findByUuid(anyString())).thenReturn(projectVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenSecurityGroupCommand.class), anyLong())).thenReturn(createTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + PowerMockito.when(Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); + assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); + } + @Test + public void deleteTungstenSecurityGroupTest() { + SecurityGroup securityGroup = mock(SecurityGroup.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); + assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); + } + @Test + public void addTungstenSecurityGroupEgressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + NicVO nicVO = mock(NicVO.class); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); + when(tungstenSecurityGroupRuleDao.findDefaultSecurityRule(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); + when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); + when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(securityRule.getAllowedNetworkId()).thenReturn(1L); + assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); + } + @Test + public void addTungstenSecurityGroupIngressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); + when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); + when(securityRule.getAllowedNetworkId()).thenReturn(null); + assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); + } + @Test + public void removeTungstenSecurityGroupEgressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + NicVO nicVO = mock(NicVO.class); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); + when(securityRule.getType()).thenReturn("egress"); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(securityRule.getAllowedNetworkId()).thenReturn(1L); + when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(tungstenSecurityGroupRuleDao.findBySecurityGroupAndRuleTypeAndRuleTarget(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); + assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); + } + @Test + public void removeTungstenSecurityGroupIngressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); + when(securityRule.getType()).thenReturn("ingress"); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(securityRule.getAllowedNetworkId()).thenReturn(null); + assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); + } + @Test + public void addTungstenNicSecondaryIpAddressTest() { + NicSecondaryIp nicSecondaryIp = mock(NicSecondaryIp.class); + Network network = mock(Network.class); + DataCenter dataCenter = mock(DataCenter.class); + Nic nic = mock(Nic.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer addTungstenSecondaryIpAddressAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); + when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); + when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); + when(entityMgr.findById(eq(Nic.class), anyLong())).thenReturn(nic); + when(nicSecondaryIp.getIp4Address()).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(addTungstenSecondaryIpAddressAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); + when(network.getGuestType()).thenReturn(Network.GuestType.Shared); + when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); + when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + assertTrue(tungstenService.addTungstenNicSecondaryIpAddress(1L)); + } + @Test + public void removeTungstenNicSecondaryIpAddressTest() { + NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); + Network network = mock(Network.class); + DataCenter dataCenter = mock(DataCenter.class); + TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); + when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); + when(network.getGuestType()).thenReturn(Network.GuestType.Shared); + when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); + when(nicSecondaryIpVO.getIp4Address()).thenReturn("192.168.100.100"); + assertTrue(tungstenService.removeTungstenNicSecondaryIpAddress(nicSecondaryIpVO)); + } + @Test + public void createTungstenPolicyTest() { + TungstenAnswer createTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(createTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + assertNotNull(tungstenService.createTungstenPolicy(1L, "test")); + } + @Test + public void addTungstenPolicyRuleTest() throws Exception { + AddTungstenPolicyRuleCommand addTungstenPolicyRuleCommand = mock(AddTungstenPolicyRuleCommand.class); + TungstenAnswer addTungstenPolicyRuleAnswer = new CreateMockTungstenAnswer(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenPolicyRuleCommand.class), anyLong())).thenReturn(addTungstenPolicyRuleAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(addTungstenPolicyRuleAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + whenNew(AddTungstenPolicyRuleCommand.class).withAnyArguments().thenReturn(addTungstenPolicyRuleCommand); + PowerMockito.when(addTungstenPolicyRuleCommand, "getUuid").thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", + "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, + "network2", "192.168.200.200", 32, 80, 80)); + } + @Test + public void listTungstenPolicyTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer listTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findById(anyLong())).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyCommand.class), anyLong())).thenReturn(listTungstenPolicyAnswer); + when(listTungstenPolicyAnswer.getTungstenModelList()).thenReturn(List.of(tungstenNetworkPolicy)); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn( + List.of(virtualNetwork)); + assertNotNull(tungstenService.listTungstenPolicy(1L, 2L, 3L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void listTungstenNetworkTest() { + TungstenAnswer listTungstenNetworkAnswer = new CreateMockTungstenAnswer(true).get(); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNetworkCommand.class), anyLong())).thenReturn(listTungstenNetworkAnswer); + doReturn(List.of(virtualNetwork)).when(listTungstenNetworkAnswer).getApiObjectBaseList(); + when((virtualNetwork.getName())).thenReturn("guestNetwork1"); + assertNotNull(tungstenService.listTungstenNetwork(1L, "948f421c-edde-4518-a391-09299cc25dc2", false)); + } + @Test + public void listTungstenNicTest() { + TungstenAnswer listTungstenNicAnswer = new CreateMockTungstenAnswer(true).get(); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNicCommand.class), anyLong())).thenReturn(listTungstenNicAnswer); + doReturn(List.of(virtualMachineInterface)).when(listTungstenNicAnswer).getApiObjectBaseList(); + assertNotNull(tungstenService.listTungstenNic(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void listTungstenVmTest() { + TungstenAnswer listTungstenVmAnswer = new CreateMockTungstenAnswer(true).get(); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenVmCommand.class), anyLong())).thenReturn(listTungstenVmAnswer); + doReturn(List.of(virtualMachine)).when(listTungstenVmAnswer).getApiObjectBaseList(); + assertNotNull(tungstenService.listTungstenVm(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void deleteTungstenPolicyTest() { + TungstenAnswer deleteTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); + assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void listTungstenPolicyRuleWithRuleUuidTest() { + TungstenAnswer listTungstenPolicyRuleAnswer = new CreateMockTungstenAnswer(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); + doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + @Test + public void listTungstenPolicyRuleWithAllRuleTest() { + TungstenAnswer listTungstenPolicyRuleAnswer = new CreateMockTungstenAnswer(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); + doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", null)); + } + @Test + public void removeTungstenPolicyRuleTest() { + TungstenAnswer removeTungstenPolicyRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyRuleCommand.class), anyLong())).thenReturn(removeTungstenPolicyRuleAnswer); + when(removeTungstenPolicyRuleAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.removeTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + @Test + public void createTungstenTagTest() { + TungstenAnswer createTungstenTagAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagCommand.class), anyLong())).thenReturn(createTungstenTagAnswer); + when(createTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); + doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); + doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); + doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); + assertNotNull(tungstenService.createTungstenTag(1L, "testTag", "testTagType")); + } + @Test + public void createTungstenTagTypeTest() { + TungstenAnswer createTungstenTagTypeAnswer = new CreateMockTungstenAnswer(true).get(); + TagType tagtype = mock(TagType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(createTungstenTagTypeAnswer.getApiObjectBase()).thenReturn(tagtype); + assertNotNull(tungstenService.createTungstenTagType(1L, "testTagType")); + } + @Test + public void listTungstenTagsTest() { + TungstenAnswer listTungstenTagAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagCommand.class), anyLong())).thenReturn(listTungstenTagAnswer); + when(listTungstenTagAnswer.getTungstenModelList()).thenReturn(List.of(tungstenTag)); + when(tungstenTag.getTag()).thenReturn(tag); + doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); + doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); + doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); + doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); + doReturn(List.of(applicationPolicySet)).when(tungstenTag).getApplicationPolicySetList(); + assertNotNull(tungstenService.listTungstenTags(1L, "948f421c-edde-4518-a391-09299cc25dc2" + , "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", "a329662e-1805-4a89-9b05-2b818ea35978", + "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); + } + @Test + public void listTungstenTagTypesTest() { + TungstenAnswer listTungstenTagTypeAnswer = new CreateMockTungstenAnswer(true).get(); + TagType tagtype = mock(TagType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagTypeCommand.class), anyLong())).thenReturn(listTungstenTagTypeAnswer); + doReturn(List.of(tagtype)).when(listTungstenTagTypeAnswer).getApiObjectBaseList(); + assertNotNull(tungstenService.listTungstenTagTypes(1L, "testTagType")); + } + @Test + public void deleteTungstenTagTest() { + TungstenAnswer deleteTungstenTagAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); + assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void deleteTungstenTagTypeTest() { + TungstenAnswer deleteTungstenTagTypeAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); + assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void applyTungstenPolicyTest() { + TungstenAnswer applyTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(applyTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.applyTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", 1, 1)); + } + @Test + public void applyTungstenTagTest() { + TungstenAnswer applyTungstenTagAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenTagCommand.class), anyLong())).thenReturn(applyTungstenTagAnswer); + when(applyTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); + when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); + when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); + assertNotNull(tungstenService.applyTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85") + , List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb" + , "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); + } + @Test + public void removeTungstenPolicyTest() { + TungstenAnswer removeTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyCommand.class), anyLong())).thenReturn(removeTungstenPolicyAnswer); + when(removeTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.removeTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + @Test + public void removeTungstenTagTest() { + TungstenAnswer removeTungstenTagAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenTagCommand.class), anyLong())).thenReturn(removeTungstenTagAnswer); + when(removeTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); + when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); + when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); + assertNotNull(tungstenService.removeTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), + List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85"), + List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", null, + "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb")); + } + @Test + public void createTungstenAddressGroupTest() { + TungstenAnswer createTungstenAddressGroupAnswer = new CreateMockTungstenAnswer(true).get(); + AddressGroup addressGroup = mock(AddressGroup.class); + SubnetListType subnetListType = mock(SubnetListType.class); + SubnetType subnetType = mock(SubnetType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenAddressGroupCommand.class), anyLong())).thenReturn(createTungstenAddressGroupAnswer); + when(createTungstenAddressGroupAnswer.getApiObjectBase()).thenReturn(addressGroup); + when(addressGroup.getPrefix()).thenReturn(subnetListType); + when(subnetListType.getSubnet()).thenReturn(List.of(subnetType)); + assertNotNull(tungstenService.createTungstenAddressGroup(1L, "test", "192.168.100.0", 24)); + } + @Test + public void createTungstenServiceGroupTest() { + TungstenAnswer createTungstenServiceGroupAnswer = new CreateMockTungstenAnswer(true).get(); + ServiceGroup serviceGroup = mock(ServiceGroup.class); + FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); + FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenServiceGroupCommand.class), anyLong())).thenReturn(createTungstenServiceGroupAnswer); + when(createTungstenServiceGroupAnswer.getApiObjectBase()).thenReturn(serviceGroup); + when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); + when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); + when(firewallServiceType.getDstPorts()).thenReturn(portType); + assertNotNull(tungstenService.createTungstenServiceGroup(1L, "test", "tcp", 80, 80)); + } + @Test + public void createTungstenFirewallRuleTest() { + TungstenAnswer createTungstenFirewallRuleAnswer = new CreateMockTungstenAnswer(true).get(); + net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); + ActionListType actionListType = mock(ActionListType.class); + ObjectReference serviceGroup = mock(ObjectReference.class); + FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); + FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); + FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallRuleCommand.class), anyLong())).thenReturn(createTungstenFirewallRuleAnswer); + when(createTungstenFirewallRuleAnswer.getApiObjectBase()).thenReturn(firewallRule); + when(firewallRule.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); + when(serviceGroup.getReferredName()).thenReturn(List.of("service")); + when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); + when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); + when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); + when(firewallRuleEndpointType2.getTags()).thenReturn(null); + when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); + when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); + assertNotNull(tungstenService.createTungstenFirewallRule(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "test", "pass", "948f421c-edde-4518-a391-09299cc25dc2", + "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", null, "<>", "a329662e-1805-4a89-9b05-2b818ea35978" + , "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", null, "df8e4490-2a40-4d63-a6f3-1f829ffe4fc6", 1)); + } + @Test + public void createTungstenFirewallPolicyTest() { + TungstenAnswer createTungstenFirewallPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(createTungstenFirewallPolicyAnswer); + when(createTungstenFirewallPolicyAnswer.getApiObjectBase()).thenReturn(firewallPolicy); + when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + assertNotNull(tungstenService.createTungstenFirewallPolicy(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652","test", 1)); + } + @Test + public void createTungstenApplicationPolicySetTest() { + TungstenAnswer createTungstenApplicationPolicySetAnswer = new CreateMockTungstenAnswer(true).get(); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + ObjectReference objectReference = mock(ObjectReference.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(createTungstenApplicationPolicySetAnswer); + when(createTungstenApplicationPolicySetAnswer.getApiObjectBase()).thenReturn(applicationPolicySet); + when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); + when(objectReference.getReferredName()).thenReturn(List.of("tag")); + when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + assertNotNull(tungstenService.createTungstenApplicationPolicySet(1L, "test")); + } + @Test + public void listTungstenApplicationPolicySetTest() { + TungstenAnswer listTungstenApplicationPolicySetAnswer = new CreateMockTungstenAnswer(true).get(); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + ObjectReference objectReference = mock(ObjectReference.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(listTungstenApplicationPolicySetAnswer); + doReturn(List.of(applicationPolicySet)).when(listTungstenApplicationPolicySetAnswer).getApiObjectBaseList(); + when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); + when(objectReference.getReferredName()).thenReturn(List.of("tag")); + when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + assertNotNull(tungstenService.listTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void listTungstenFirewallPolicyTest() { + TungstenAnswer listTungstenFirewallPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(listTungstenFirewallPolicyAnswer); + doReturn(List.of(firewallPolicy)).when(listTungstenFirewallPolicyAnswer).getApiObjectBaseList(); + when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + assertNotNull(tungstenService.listTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + @Test + public void listTungstenFirewallRuleTest() { + TungstenAnswer listTungstenFirewallRuleAnswer = new CreateMockTungstenAnswer(true).get(); + net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); + ActionListType actionListType = mock(ActionListType.class); + ObjectReference serviceGroup = mock(ObjectReference.class); + FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); + FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); + FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallRuleCommand.class), anyLong())).thenReturn(listTungstenFirewallRuleAnswer); + doReturn(List.of(firewallRule)).when(listTungstenFirewallRuleAnswer).getApiObjectBaseList(); + when(firewallRule.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); + when(serviceGroup.getReferredName()).thenReturn(List.of("service")); + when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); + when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); + when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); + when(firewallRuleEndpointType2.getTags()).thenReturn(null); + when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); + when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); + assertNotNull(tungstenService.listTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", + "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + @Test + public void listTungstenAddressGroupTest() { + TungstenAnswer listTungstenAddressGroupAnswer = new CreateMockTungstenAnswer(true).get(); + AddressGroup addressGroup = mock(AddressGroup.class); + SubnetListType subnetListType = mock(SubnetListType.class); + SubnetType subnetType = mock(SubnetType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenAddressGroupCommand.class), anyLong())).thenReturn(listTungstenAddressGroupAnswer); + doReturn(List.of(addressGroup)).when(listTungstenAddressGroupAnswer).getApiObjectBaseList(); + when(addressGroup.getPrefix()).thenReturn(subnetListType); + when(subnetListType.getSubnet()).thenReturn( + List.of(subnetType)); + assertNotNull(tungstenService.listTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void listTungstenServiceGroupTest() { + TungstenAnswer listTungstenServiceGroupAnswer = new CreateMockTungstenAnswer(true).get(); + ServiceGroup serviceGroup = mock(ServiceGroup.class); + FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); + FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenServiceGroupCommand.class), anyLong())).thenReturn(listTungstenServiceGroupAnswer); + doReturn(List.of(serviceGroup)).when(listTungstenServiceGroupAnswer).getApiObjectBaseList(); + when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); + when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); + when(firewallServiceType.getDstPorts()).thenReturn(portType); + assertNotNull(tungstenService.listTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void deleteTungstenApplicationPolicySetTest() { + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); + assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void deleteTungstenFirewallPolicyTest() { + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); + assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void deleteTungstenFirewallRuleTest() { + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); + assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void deleteTungstenServiceGroupTest() { + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); + assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void deleteTungstenAddressGroupTest() { + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); + assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void createSharedNetworkTest() { + Network network = mock(Network.class); + Vlan vlan = mock(Vlan.class); + AccountVO accountVO = mock(AccountVO.class); + TungstenAnswer createTungstenSharedNetworkAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addNetworkSubnetAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + HostVO hostVO = mock(HostVO.class); + Answer answer = new CreateMockTungstenAnswer(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); + when(accountDao.findById(anyLong())).thenReturn(accountVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenSharedNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(network.getMode()).thenReturn(Networks.Mode.Dhcp); + when(network.getCidr()).thenReturn("192.168.100.0/24"); + when(vlan.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); + when(vlan.getVlanGateway()).thenReturn("192.168.100.1"); + when(vlan.getIp6Gateway()).thenReturn("fd00::1"); + when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(hostDao.findByPublicIp(anyString())).thenReturn(hostVO); + when(agentMgr.easySend(anyLong(), any(SetupTungstenVRouterCommand.class))).thenReturn(answer); + when(vlan.getIp6Cidr()).thenReturn("fd00::1/64"); + when(vlan.getIp6Range()).thenReturn("fd00::100-fd00::200"); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.1.150"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Guest); + when(network.getGuestType()).thenReturn(Network.GuestType.Shared); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); + when(createTungstenSharedNetworkAnswer.getApiObjectBase()).thenReturn(apiObjectBase); + when(apiObjectBase.getQualifiedName()).thenReturn(List.of("network")); + when(tungstenProviderVO.getGateway()).thenReturn("192.168.100.1"); + assertTrue(tungstenService.createSharedNetwork(network, vlan)); + } + @Test + public void addTungstenVmSecurityGroupTest() { + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addTungstenVmToSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + NicVO nicVO = mock(NicVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenVmToSecurityGroupCommand.class), anyLong())).thenReturn(addTungstenVmToSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); + when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + assertTrue(tungstenService.addTungstenVmSecurityGroup(vmInstanceVO)); + } + @Test + public void removeTungstenVmSecurityGroupTest() { + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + NicVO nicVO = mock(NicVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenVmFromSecurityGroupCommand.class), anyLong())).thenReturn(removeTungstenVmFromSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); + when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); + when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + assertTrue(tungstenService.removeTungstenVmSecurityGroup(vmInstanceVO)); + } + @Test + public void createRoutingLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.createRoutingLogicalRouter(1L, "default-domain:default-project", "testLR")); + } + @Test + public void addNetworkGatewayToLogicalRouterTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findByUuid(anyString())).thenReturn(networkVO); + when(ipAddressManager.acquireLastGuestIpAddress(any(Network.class))).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkGatewayToLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.addNetworkGatewayToLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + @Test + public void listRoutingLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModelList()).thenReturn(List.of(tungstenLogicalRouter)); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.listRoutingLogicalRouter(1L, null, "948f421c-edde-4518-a391-09299cc25dc2")); + } + @Test + public void removeNetworkGatewayFromLogicalRouterTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findByUuid(anyString())).thenReturn(networkVO); + when(tungstenGuestNetworkIpAddressDao.findByNetworkAndLogicalRouter(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkGatewayFromLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.removeNetworkGatewayFromLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + @Test + public void deleteLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } +} From 38cfd97c3d1aa61598d0af9d3dfac964a9ddae68 Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Mon, 16 Oct 2023 12:31:17 -0400 Subject: [PATCH 02/12] Apply suggestions from code review Great suggestions, thanks a lot! Co-authored-by: dahn --- .../network/tungsten/service/CreateMockTungstenAnswer.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/CreateMockTungstenAnswer.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/CreateMockTungstenAnswer.java index c41eed1396da..476177b7c200 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/CreateMockTungstenAnswer.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/CreateMockTungstenAnswer.java @@ -30,7 +30,10 @@ public class CreateMockTungstenAnswer { when(tungstenAnswer.getResult()).thenReturn(Result); } CreateMockTungstenAnswer(){ - when(tungstenAnswer.getResult()).thenReturn(true); + this(true); } - TungstenAnswer get(){return tungstenAnswer;} + TungstenAnswer get() { + return tungstenAnswer; + } + } From dc27321cc91bc47e3725c90dfb222635bca0de03 Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Mon, 16 Oct 2023 12:51:48 -0400 Subject: [PATCH 03/12] Rename CreateMockTungstenAnswer to MockTungstenAnswerFactory --- ...er.java => MockTungstenAnswerFactory.java} | 77 +++---- .../tungsten/service/TungstenElementTest.java | 82 +++---- .../service/TungstenFabricUtilsTest.java | 4 +- .../service/TungstenServiceImplTest.java | 216 +++++++++--------- 4 files changed, 189 insertions(+), 190 deletions(-) rename plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/{CreateMockTungstenAnswer.java => MockTungstenAnswerFactory.java} (87%) diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/CreateMockTungstenAnswer.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java similarity index 87% rename from plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/CreateMockTungstenAnswer.java rename to plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java index 476177b7c200..37a309796344 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/CreateMockTungstenAnswer.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java @@ -1,39 +1,38 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.mockito.Mock; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class CreateMockTungstenAnswer { - - TungstenAnswer tungstenAnswer; - CreateMockTungstenAnswer(boolean Result){ - tungstenAnswer=mock(TungstenAnswer.class); - when(tungstenAnswer.getResult()).thenReturn(Result); - } - CreateMockTungstenAnswer(){ - this(true); - } - TungstenAnswer get() { - return tungstenAnswer; - } - -} +// 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 org.apache.cloudstack.network.tungsten.service; + +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class MockTungstenAnswerFactory { + + TungstenAnswer tungstenAnswer; + MockTungstenAnswerFactory(boolean Result){ + tungstenAnswer=mock(TungstenAnswer.class); + when(tungstenAnswer.getResult()).thenReturn(Result); + } + MockTungstenAnswerFactory(){ + this(true); + } + TungstenAnswer get() { + return tungstenAnswer; + } + +} diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java index cfcc65e45c76..6d45a5685d87 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java @@ -244,7 +244,7 @@ public void applyStaticNatsAddRuleSuccessTest() { StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); @@ -266,7 +266,7 @@ public void applyStaticNatsAddRuleFailTest() { StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = new CreateMockTungstenAnswer(false).get(); + TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); @@ -288,7 +288,7 @@ public void applyStaticNatsRevokeRuleSuccessTest() { StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); @@ -310,7 +310,7 @@ public void applyStaticNatsRevokeRuleFailTest() { StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = new CreateMockTungstenAnswer(false).get(); + TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); @@ -343,11 +343,11 @@ public void applyLBRulesAddRuleSuccessTest() { TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer updateTungstenHealthMonitorAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); @@ -403,10 +403,10 @@ public void applyLBRulesAddRuleFailTest() { List loadBalancerVOList = List.of(loadBalancerVO); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer =new CreateMockTungstenAnswer(true).get(); - TungstenAnswer updateTungstenHealthMonitorAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer =new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); @@ -451,8 +451,8 @@ public void applyLBRulesRevokeRuleFailTest() { List loadBalancingRuleList1 = List.of(loadBalancingRule1); List loadBalancerVOList1 = List.of(loadBalancerVO1); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteTungstenLoadBalancerCommand = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); @@ -481,8 +481,8 @@ public void applyLBRulesRevokeRuleSuccessTest() { LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteTungstenLoadBalancerCommand = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); List loadBalancingRuleList = List.of(loadBalancingRule); List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); @@ -510,7 +510,7 @@ public void applyPFRulesAddRuleSuccessTest() { IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); @@ -531,7 +531,7 @@ public void applyPFRulesAddRuleFailTest() { IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new CreateMockTungstenAnswer(false).get(); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); @@ -552,7 +552,7 @@ public void applyPFRulesRevokeRuleSuccessTest() { IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); @@ -573,7 +573,7 @@ public void applyPFRulesRevokeRuleFailTest() { IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new CreateMockTungstenAnswer(false).get(); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); @@ -595,9 +595,9 @@ public void preparePublicNetworkTest() throws ConcurrentOperationException { ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer createTungstenNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); nicProfile.setIPv4Address("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); @@ -624,7 +624,7 @@ public void prepareManagementNetworkTest() throws ConcurrentOperationException { ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); nicProfile.setIPv4Address("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); @@ -670,10 +670,10 @@ public void releasePublicNetworkTest() throws ConcurrentOperationException, Reso VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteVmiAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteVmAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenVRouterPortAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteVmiAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteVmAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); @@ -697,9 +697,9 @@ public void releaseManagementNetworkTest() throws ConcurrentOperationException, ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteVmiAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteVmAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenVRouterPortAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteVmiAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteVmAnswer = new MockTungstenAnswerFactory(true).get(); when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); @@ -721,8 +721,8 @@ public void releaseWithExceptionTest() throws ConcurrentOperationException, Reso ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteVmiAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenVRouterPortAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteVmiAnswer = new MockTungstenAnswerFactory(true).get(); when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); @@ -743,8 +743,8 @@ public void destroyTest() throws ConcurrentOperationException, ResourceUnavailab Network network = mock(Network.class); ReservationContext reservationContext = mock(ReservationContext.class); List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); - TungstenAnswer tungstenDeleteFIPAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer tungstenDeleteNPAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenDeleteFIPAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenDeleteNPAnswer = new MockTungstenAnswerFactory(true).get(); when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); @@ -890,8 +890,8 @@ public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableExcept Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer applyNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); @@ -910,8 +910,8 @@ public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableExcep Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer applyNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); Ip ip = mock(Ip.class); @@ -934,7 +934,7 @@ public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); - TungstenAnswer deleteNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); @@ -980,7 +980,7 @@ public void prepareMigrationTest() { ReservationContext context = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO hostVO = mock(HostVO.class); - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java index 60e2bd1392ce..cef0bbf519dd 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java @@ -52,7 +52,7 @@ public void setup() { @Test public void sendTungstenCommandSuccessTest() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); @@ -81,7 +81,7 @@ public void sendTungstenCommandWithNullAnswer() { @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithFalseAnswer() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(false).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java index b43ed8992e50..417c0f7a2f81 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java @@ -312,7 +312,7 @@ public void setup() { public void createTungstenFloatingIpTest() throws Exception { IPAddressVO ipAddressVO = mock(IPAddressVO.class); NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer createTungstenFloatingIpAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); Ip ip = mock(Ip.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); @@ -323,7 +323,7 @@ public void createTungstenFloatingIpTest() throws Exception { public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { IPAddressVO ipAddressVO = mock(IPAddressVO.class); NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer deleteTungstenFloatingIpAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); assertTrue(Whitebox.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); @@ -332,7 +332,7 @@ public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { public void deleteTungstenDomainTest() throws Exception { DomainVO domainVO = mock(DomainVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenDomainAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); assertTrue(Whitebox.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); @@ -341,7 +341,7 @@ public void deleteTungstenDomainTest() throws Exception { public void deleteTungstenProjectTest() throws Exception { ProjectVO projectVO = mock(ProjectVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenProjectAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); assertTrue(Whitebox.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); @@ -349,8 +349,8 @@ public void deleteTungstenProjectTest() throws Exception { @Test public void addTungstenDefaultNetworkPolicyTest() { TungstenRule tungstenRule = mock(TungstenRule.class); - TungstenAnswer createTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); @@ -364,12 +364,12 @@ public void createManagementNetworkTest() { VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createTungstenNetworkAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer getTungstenFabricNetworkAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); @@ -387,8 +387,8 @@ public void createManagementNetworkTest() { public void addManagementNetworkSubnetTest() { HostPodVO hostPodVO = mock(HostPodVO.class); Network managementNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), @@ -405,10 +405,10 @@ public void addManagementNetworkSubnetTest() { @Test public void deleteManagementNetworkTest() { Network managementNetwork = mock(Network.class); - TungstenAnswer deleteTungstenManagementPolicyAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer getTungstenFabricNetworkAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteTungstenFabricPolicyAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteTungstenNetworkAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenManagementPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenFabricPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); @@ -423,8 +423,8 @@ public void deleteManagementNetworkTest() { public void removeManagementNetworkSubnetTest() { HostPodVO hostPodVO = mock(HostPodVO.class); Network managementNetwork = mock(Network.class); - TungstenAnswer removeTungstenNetworkSubnetAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), @@ -443,10 +443,10 @@ public void createPublicNetworkTest() { VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createPublicNetworkAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer createFloatingIpPoolAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createPublicNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); @@ -462,11 +462,11 @@ public void createPublicNetworkTest() { public void addPublicNetworkSubnetTest() { VlanVO vlanVO = mock(VlanVO.class); Network publicNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); @@ -487,9 +487,9 @@ public void addPublicNetworkSubnetTest() { @Test public void deletePublicNetworkTest() { Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer deleteTungstenNetworkAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); @@ -500,9 +500,9 @@ public void deletePublicNetworkTest() { public void removePublicNetworkSubnetTest() { VlanVO vlanVO = mock(VlanVO.class); Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer removeTungstenNetworkSubnetAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); @@ -517,7 +517,7 @@ public void removePublicNetworkSubnetTest() { @Test public void allocateDnsIpAddressTest() { NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); @@ -530,7 +530,7 @@ public void allocateDnsIpAddressTest() { @Test public void deallocateDnsIpAddressTest() { NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); @@ -567,10 +567,10 @@ public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { DomainVO domainVO = mock(DomainVO.class); ProjectVO projectVO = mock(ProjectVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer createTungstenDomainAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer createTungstenProjectAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer createTungstenDefaultProjectAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenDefaultProjectAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); when(domainDao.listAll()).thenReturn(List.of(domainVO)); when(projectDao.listAll()).thenReturn(List.of(projectVO)); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); @@ -588,10 +588,10 @@ public void updateLoadBalancerTest() { Network publicNetwork = mock(Network.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); HostVO hostVO = mock(HostVO.class); - TungstenAnswer getTungstenLoadBalancerAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new CreateMockTungstenAnswer(true).get(); - Answer updateTungstenLoadbalancerStatsAnswer = new CreateMockTungstenAnswer(true).get(); - Answer updateTungstenLoadbalancerSslAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenLoadBalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new MockTungstenAnswerFactory(true).get(); + Answer updateTungstenLoadbalancerStatsAnswer = new MockTungstenAnswerFactory(true).get(); + Answer updateTungstenLoadbalancerSslAnswer = new MockTungstenAnswerFactory(true).get(); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); SslCertVO sslCertVO = mock(SslCertVO.class); @@ -626,8 +626,8 @@ public void createTungstenSecurityGroupTest() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); DomainVO domainVO = mock(DomainVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer createTungstenSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); mockStatic(Transaction.class); when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); @@ -642,7 +642,7 @@ public void createTungstenSecurityGroupTest() { public void deleteTungstenSecurityGroupTest() { SecurityGroup securityGroup = mock(SecurityGroup.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); @@ -651,9 +651,9 @@ public void deleteTungstenSecurityGroupTest() { public void addTungstenSecurityGroupEgressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); @@ -682,8 +682,8 @@ public void addTungstenSecurityGroupEgressRuleTest() { public void addTungstenSecurityGroupIngressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); @@ -703,8 +703,8 @@ public void removeTungstenSecurityGroupEgressRuleTest() { SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); NicVO nicVO = mock(NicVO.class); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); @@ -729,7 +729,7 @@ public void removeTungstenSecurityGroupIngressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); @@ -748,8 +748,8 @@ public void addTungstenNicSecondaryIpAddressTest() { SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer addTungstenSecondaryIpAddressAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); @@ -771,10 +771,10 @@ public void removeTungstenNicSecondaryIpAddressTest() { NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); Network network = mock(Network.class); DataCenter dataCenter = mock(DataCenter.class); - TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); @@ -789,7 +789,7 @@ public void removeTungstenNicSecondaryIpAddressTest() { } @Test public void createTungstenPolicyTest() { - TungstenAnswer createTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); @@ -802,7 +802,7 @@ public void createTungstenPolicyTest() { @Test public void addTungstenPolicyRuleTest() throws Exception { AddTungstenPolicyRuleCommand addTungstenPolicyRuleCommand = mock(AddTungstenPolicyRuleCommand.class); - TungstenAnswer addTungstenPolicyRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); @@ -833,7 +833,7 @@ public void addTungstenPolicyRuleTest() throws Exception { @Test public void listTungstenPolicyTest() { NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer listTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -849,7 +849,7 @@ public void listTungstenPolicyTest() { } @Test public void listTungstenNetworkTest() { - TungstenAnswer listTungstenNetworkAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); @@ -860,7 +860,7 @@ public void listTungstenNetworkTest() { } @Test public void listTungstenNicTest() { - TungstenAnswer listTungstenNicAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenNicAnswer = new MockTungstenAnswerFactory(true).get(); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); @@ -870,7 +870,7 @@ public void listTungstenNicTest() { } @Test public void listTungstenVmTest() { - TungstenAnswer listTungstenVmAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenVmAnswer = new MockTungstenAnswerFactory(true).get(); VirtualMachine virtualMachine = mock(VirtualMachine.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); @@ -880,13 +880,13 @@ public void listTungstenVmTest() { } @Test public void deleteTungstenPolicyTest() { - TungstenAnswer deleteTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void listTungstenPolicyRuleWithRuleUuidTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); @@ -912,7 +912,7 @@ public void listTungstenPolicyRuleWithRuleUuidTest() { } @Test public void listTungstenPolicyRuleWithAllRuleTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); @@ -938,7 +938,7 @@ public void listTungstenPolicyRuleWithAllRuleTest() { } @Test public void removeTungstenPolicyRuleTest() { - TungstenAnswer removeTungstenPolicyRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -952,7 +952,7 @@ public void removeTungstenPolicyRuleTest() { } @Test public void createTungstenTagTest() { - TungstenAnswer createTungstenTagAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -972,7 +972,7 @@ public void createTungstenTagTest() { } @Test public void createTungstenTagTypeTest() { - TungstenAnswer createTungstenTagTypeAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); TagType tagtype = mock(TagType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); @@ -982,7 +982,7 @@ public void createTungstenTagTypeTest() { } @Test public void listTungstenTagsTest() { - TungstenAnswer listTungstenTagAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1006,7 +1006,7 @@ public void listTungstenTagsTest() { } @Test public void listTungstenTagTypesTest() { - TungstenAnswer listTungstenTagTypeAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); TagType tagtype = mock(TagType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); @@ -1016,19 +1016,19 @@ public void listTungstenTagTypesTest() { } @Test public void deleteTungstenTagTest() { - TungstenAnswer deleteTungstenTagAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenTagTypeTest() { - TungstenAnswer deleteTungstenTagTypeAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer deleteTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void applyTungstenPolicyTest() { - TungstenAnswer applyTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1042,7 +1042,7 @@ public void applyTungstenPolicyTest() { } @Test public void applyTungstenTagTest() { - TungstenAnswer applyTungstenTagAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer applyTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); @@ -1064,7 +1064,7 @@ public void applyTungstenTagTest() { } @Test public void removeTungstenPolicyTest() { - TungstenAnswer removeTungstenPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1078,7 +1078,7 @@ public void removeTungstenPolicyTest() { } @Test public void removeTungstenTagTest() { - TungstenAnswer removeTungstenTagAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); @@ -1101,7 +1101,7 @@ public void removeTungstenTagTest() { } @Test public void createTungstenAddressGroupTest() { - TungstenAnswer createTungstenAddressGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); AddressGroup addressGroup = mock(AddressGroup.class); SubnetListType subnetListType = mock(SubnetListType.class); SubnetType subnetType = mock(SubnetType.class); @@ -1115,7 +1115,7 @@ public void createTungstenAddressGroupTest() { } @Test public void createTungstenServiceGroupTest() { - TungstenAnswer createTungstenServiceGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); ServiceGroup serviceGroup = mock(ServiceGroup.class); FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); @@ -1131,7 +1131,7 @@ public void createTungstenServiceGroupTest() { } @Test public void createTungstenFirewallRuleTest() { - TungstenAnswer createTungstenFirewallRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); ActionListType actionListType = mock(ActionListType.class); ObjectReference serviceGroup = mock(ObjectReference.class); @@ -1158,7 +1158,7 @@ public void createTungstenFirewallRuleTest() { } @Test public void createTungstenFirewallPolicyTest() { - TungstenAnswer createTungstenFirewallPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); @@ -1171,7 +1171,7 @@ public void createTungstenFirewallPolicyTest() { } @Test public void createTungstenApplicationPolicySetTest() { - TungstenAnswer createTungstenApplicationPolicySetAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); ObjectReference objectReference = mock(ObjectReference.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); @@ -1187,7 +1187,7 @@ public void createTungstenApplicationPolicySetTest() { } @Test public void listTungstenApplicationPolicySetTest() { - TungstenAnswer listTungstenApplicationPolicySetAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); ObjectReference objectReference = mock(ObjectReference.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); @@ -1203,7 +1203,7 @@ public void listTungstenApplicationPolicySetTest() { } @Test public void listTungstenFirewallPolicyTest() { - TungstenAnswer listTungstenFirewallPolicyAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); @@ -1216,7 +1216,7 @@ public void listTungstenFirewallPolicyTest() { } @Test public void listTungstenFirewallRuleTest() { - TungstenAnswer listTungstenFirewallRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); ActionListType actionListType = mock(ActionListType.class); ObjectReference serviceGroup = mock(ObjectReference.class); @@ -1242,7 +1242,7 @@ public void listTungstenFirewallRuleTest() { } @Test public void listTungstenAddressGroupTest() { - TungstenAnswer listTungstenAddressGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); AddressGroup addressGroup = mock(AddressGroup.class); SubnetListType subnetListType = mock(SubnetListType.class); SubnetType subnetType = mock(SubnetType.class); @@ -1257,7 +1257,7 @@ public void listTungstenAddressGroupTest() { } @Test public void listTungstenServiceGroupTest() { - TungstenAnswer listTungstenServiceGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer listTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); ServiceGroup serviceGroup = mock(ServiceGroup.class); FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); @@ -1273,31 +1273,31 @@ public void listTungstenServiceGroupTest() { } @Test public void deleteTungstenApplicationPolicySetTest() { - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenFirewallPolicyTest() { - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenFirewallRuleTest() { - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenServiceGroupTest() { - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenAddressGroupTest() { - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @@ -1306,13 +1306,13 @@ public void createSharedNetworkTest() { Network network = mock(Network.class); Vlan vlan = mock(Vlan.class); AccountVO accountVO = mock(AccountVO.class); - TungstenAnswer createTungstenSharedNetworkAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer addNetworkSubnetAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer createTungstenSharedNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); HostVO hostVO = mock(HostVO.class); - Answer answer = new CreateMockTungstenAnswer(true).get(); + Answer answer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); when(accountDao.findById(anyLong())).thenReturn(accountVO); @@ -1346,13 +1346,13 @@ public void addTungstenVmSecurityGroupTest() { DataCenterVO dataCenterVO = mock(DataCenterVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); - TungstenAnswer addTungstenVmToSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer getTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenVmToSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); NicVO nicVO = mock(NicVO.class); SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); @@ -1377,10 +1377,10 @@ public void removeTungstenVmSecurityGroupTest() { VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); NicVO nicVO = mock(NicVO.class); SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); @@ -1402,7 +1402,7 @@ public void removeTungstenVmSecurityGroupTest() { } @Test public void createRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1417,7 +1417,7 @@ public void createRoutingLogicalRouterTest() { @Test public void addNetworkGatewayToLogicalRouterTest() { NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1433,7 +1433,7 @@ public void addNetworkGatewayToLogicalRouterTest() { } @Test public void listRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1448,7 +1448,7 @@ public void listRoutingLogicalRouterTest() { @Test public void removeNetworkGatewayFromLogicalRouterTest() { NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); @@ -1465,7 +1465,7 @@ public void removeNetworkGatewayFromLogicalRouterTest() { } @Test public void deleteLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new CreateMockTungstenAnswer(true).get(); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); From 2c8b1accc0e7d2b3a5c4c2d1b60b58846cf837e2 Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Tue, 17 Oct 2023 00:29:44 -0400 Subject: [PATCH 04/12] Updated parameter to camel case. --- .../network/tungsten/service/MockTungstenAnswerFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java index 37a309796344..5fd70168171b 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java @@ -24,9 +24,9 @@ public class MockTungstenAnswerFactory { TungstenAnswer tungstenAnswer; - MockTungstenAnswerFactory(boolean Result){ + MockTungstenAnswerFactory(boolean returnResult){ tungstenAnswer=mock(TungstenAnswer.class); - when(tungstenAnswer.getResult()).thenReturn(Result); + when(tungstenAnswer.getResult()).thenReturn(returnResult); } MockTungstenAnswerFactory(){ this(true); From f525d60d4995e1c57a95fa39c9fea770d2694174 Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Wed, 18 Oct 2023 08:26:18 -0400 Subject: [PATCH 05/12] Revised in accordance with the latest update --- .../service/MockTungstenAnswerFactory.java | 3 - .../tungsten/service/TungstenElementTest.java | 81 ++--- .../service/TungstenFabricUtilsTest.java | 16 +- .../service/TungstenServiceImplTest.java | 312 ++++++++++++++---- 4 files changed, 301 insertions(+), 111 deletions(-) diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java index 5fd70168171b..0eeaae26e8cd 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java @@ -28,9 +28,6 @@ public class MockTungstenAnswerFactory { tungstenAnswer=mock(TungstenAnswer.class); when(tungstenAnswer.getResult()).thenReturn(returnResult); } - MockTungstenAnswerFactory(){ - this(true); - } TungstenAnswer get() { return tungstenAnswer; } diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java index 6d45a5685d87..8c1510145562 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java @@ -28,7 +28,6 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.powermock.api.mockito.PowerMockito.mockStatic; import com.cloud.agent.AgentManager; import com.cloud.api.ApiDBUtils; @@ -110,24 +109,24 @@ import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerHealthMonitorCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerListenerCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerMemberCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerPoolCommand; import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorDao; import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorVO; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; +import org.mockito.junit.MockitoJUnitRunner; import java.util.Arrays; import java.util.List; -@RunWith(PowerMockRunner.class) -@PrepareForTest({ApiDBUtils.class, EncryptionUtil.class}) +@RunWith(MockitoJUnitRunner.class) public class TungstenElementTest { @Mock TungstenFabricUtils tungstenFabricUtils; @@ -182,9 +181,15 @@ public class TungstenElementTest { TungstenElement tungstenElement; + MockedStatic apiDBUtilsMocked; + + MockedStatic encryptionUtilMocked; + + AutoCloseable closeable; + @Before public void setup() { - MockitoAnnotations.initMocks(this); + closeable = MockitoAnnotations.openMocks(this); tungstenElement = new TungstenElement(); tungstenElement.tungstenFabricUtils = tungstenFabricUtils; tungstenElement.networkModel = networkModel; @@ -212,12 +217,19 @@ public void setup() { tungstenElement.tungstenFabricLBHealthMonitorDao = tungstenFabricLBHealthMonitorDao; tungstenElement.loadBalancerCertMapDao = loadBalancerCertMapDao; - mockStatic(ApiDBUtils.class); - mockStatic(EncryptionUtil.class); + apiDBUtilsMocked = Mockito.mockStatic(ApiDBUtils.class); + encryptionUtilMocked = Mockito.mockStatic(EncryptionUtil.class); when(tungstenService.getTungstenProjectFqn(any())).thenReturn("default-domain:default-project"); } + @After + public void tearDown() throws Exception { + apiDBUtilsMocked.close(); + encryptionUtilMocked.close(); + closeable.close(); + } + @Test public void canHandleSuccessTest() { Network network = mock(Network.class); @@ -250,7 +262,6 @@ public void applyStaticNatsAddRuleSuccessTest() { List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(false); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); @@ -272,7 +283,6 @@ public void applyStaticNatsAddRuleFailTest() { List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(false); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); @@ -294,7 +304,6 @@ public void applyStaticNatsRevokeRuleSuccessTest() { List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(true); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); @@ -316,7 +325,6 @@ public void applyStaticNatsRevokeRuleFailTest() { List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(true); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); @@ -352,9 +360,6 @@ public void applyLBRulesAddRuleSuccessTest() { when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); - when(accountMgr.getActiveUser(anyLong())).thenReturn(caller); - when(caller.getApiKey()).thenReturn("apikey"); - when(caller.getSecretKey()).thenReturn("secreatekey"); when(lbStickinessPolicy.getParams()).thenReturn(pairList); when(loadBalancingRule1.getId()).thenReturn(1L); when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); @@ -363,8 +368,6 @@ public void applyLBRulesAddRuleSuccessTest() { when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); when(loadBalancingRule1.getSourceIp()).thenReturn(ip); - when(loadBalancingRule1.getLbSslCert()).thenReturn(lbSslCert); - when(loadBalancingRule1.getUuid()).thenReturn("loadbalancingruleuuid"); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ipAddressVO.getAddress()).thenReturn(ip); @@ -372,15 +375,11 @@ public void applyLBRulesAddRuleSuccessTest() { when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); when(ip.addr()).thenReturn("10.10.10.10"); when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerListenerAnswer); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); - when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); when(EncryptionUtil.generateSignature(anyString(), anyString())).thenReturn("generatedString"); when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); @@ -405,7 +404,7 @@ public void applyLBRulesAddRuleFailTest() { TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer =new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); @@ -423,18 +422,13 @@ public void applyLBRulesAddRuleFailTest() { when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ipAddressVO.getAddress()).thenReturn(ip); when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); - when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); when(ip.addr()).thenReturn("10.10.10.10"); when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("disabled"); - when(tungstenService.updateLoadBalancerSsl(any(), any())).thenReturn(false); - when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); @@ -460,10 +454,7 @@ public void applyLBRulesRevokeRuleFailTest() { when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ipAddressVO.getAddress()).thenReturn(ip1); when(ip1.addr()).thenReturn("10.10.10.10"); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); - - when(tungstenService.updateLoadBalancerSsl(any(), any())).thenReturn(false); when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList1); when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(tungstenGuestNetworkIpAddressDao.remove(anyLong())).thenReturn(false); @@ -490,14 +481,10 @@ public void applyLBRulesRevokeRuleSuccessTest() { when(loadBalancingRule.getSourceIp()).thenReturn(ip); when(loadBalancingRule.getState()).thenReturn(FirewallRule.State.Revoke); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); when(ip.addr()).thenReturn("10.10.10.10"); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); - when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList)); } @@ -670,10 +657,10 @@ public void releasePublicNetworkTest() throws ConcurrentOperationException, Reso VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteVmiAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteVmAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); @@ -697,11 +684,10 @@ public void releaseManagementNetworkTest() throws ConcurrentOperationException, ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteVmiAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteVmAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); - when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); @@ -721,10 +707,9 @@ public void releaseWithExceptionTest() throws ConcurrentOperationException, Reso ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteVmiAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); @@ -934,7 +919,7 @@ public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); - TungstenAnswer deleteNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteNetworkPolicyAnswer = mock(TungstenAnswer.class); when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); @@ -1026,4 +1011,4 @@ public void commitMigration() { tungstenElement.commitMigration(nic, network, vm, src, dest); verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); } -} +} \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java index cef0bbf519dd..45a6190f138c 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java @@ -28,11 +28,15 @@ import com.cloud.network.element.TungstenProviderVO; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; +import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; +@RunWith(MockitoJUnitRunner.class) public class TungstenFabricUtilsTest { @Mock AgentManager agentMgr; @@ -41,14 +45,21 @@ public class TungstenFabricUtilsTest { TungstenFabricUtils tungstenFabricUtils; + AutoCloseable closeable; + @Before public void setup() { - MockitoAnnotations.initMocks(this); + closeable = MockitoAnnotations.openMocks(this); tungstenFabricUtils = new TungstenFabricUtils(); tungstenFabricUtils.agentMgr = agentMgr; tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; } + @After + public void tearDown() throws Exception { + closeable.close(); + } + @Test public void sendTungstenCommandSuccessTest() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); @@ -86,8 +97,7 @@ public void sendTungstenCommandWithFalseAnswer() { when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); - when(tungstenAnswer.getDetails()).thenReturn(""); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } -} +} \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java index 417c0f7a2f81..6fa1beabb573 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java @@ -27,8 +27,6 @@ import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; -import static org.powermock.api.mockito.PowerMockito.mockStatic; -import static org.powermock.api.mockito.PowerMockito.whenNew; import com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; @@ -193,7 +191,6 @@ import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecondaryIpAddressCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecurityGroupRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenVmFromSecurityGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import org.apache.cloudstack.network.tungsten.agent.api.UpdateLoadBalancerServiceInstanceCommand; @@ -205,21 +202,22 @@ import org.apache.cloudstack.network.tungsten.model.TungstenNetworkPolicy; import org.apache.cloudstack.network.tungsten.model.TungstenRule; import org.apache.cloudstack.network.tungsten.model.TungstenTag; +import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; +import org.mockito.MockedConstruction; +import org.mockito.MockedStatic; +import org.mockito.Mockito; import org.mockito.MockitoAnnotations; -import org.powermock.api.mockito.PowerMockito; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.junit4.PowerMockRunner; -import org.powermock.reflect.Whitebox; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; import java.util.Arrays; import java.util.List; -@RunWith(PowerMockRunner.class) -@PrepareForTest({Transaction.class, TungstenServiceImpl.class}) +@RunWith(MockitoJUnitRunner.class) public class TungstenServiceImplTest { @Mock MessageBus messageBus; @@ -275,10 +273,14 @@ public class TungstenServiceImplTest { DataCenterDao dataCenterDao; @Mock IpAddressManager ipAddressManager; + TungstenServiceImpl tungstenService; + + AutoCloseable closeable; + @Before public void setup() { - MockitoAnnotations.initMocks(this); + closeable = MockitoAnnotations.openMocks(this); tungstenService = new TungstenServiceImpl(); tungstenService.projectDao = projectDao; tungstenService.tungstenProviderDao = tungstenProviderDao; @@ -308,56 +310,77 @@ public void setup() { tungstenService.ipAddressManager = ipAddressManager; tungstenService.messageBus = messageBus; } + + @After + public void tearDown() throws Exception { + closeable.close(); + } + @Test public void createTungstenFloatingIpTest() throws Exception { IPAddressVO ipAddressVO = mock(IPAddressVO.class); NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer createTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); Ip ip = mock(Ip.class); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); when(ipAddressVO.getAddress()).thenReturn(ip); - assertTrue(Whitebox.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); } + @Test public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { IPAddressVO ipAddressVO = mock(IPAddressVO.class); NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer deleteTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); - assertTrue(Whitebox.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); } + @Test public void deleteTungstenDomainTest() throws Exception { DomainVO domainVO = mock(DomainVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); - assertTrue(Whitebox.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); } + @Test public void deleteTungstenProjectTest() throws Exception { ProjectVO projectVO = mock(ProjectVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); - assertTrue(Whitebox.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); } + @Test public void addTungstenDefaultNetworkPolicyTest() { TungstenRule tungstenRule = mock(TungstenRule.class); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + assertTrue(tungstenService.addTungstenDefaultNetworkPolicy(1L, "default-domain:default-project", "policyName", "7279ed91-314e-45be-81b4-b10395fd2ae3" , List.of(tungstenRule), 1, 1)); } + @Test public void createManagementNetworkTest() { Network managementNetwork = mock(Network.class); @@ -370,6 +393,7 @@ public void createManagementNetworkTest() { TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); @@ -378,11 +402,14 @@ public void createManagementNetworkTest() { when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(createTungstenNetworkAnswer.getApiObjectBase()).thenReturn(managementVirtualNetwork); when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); + assertTrue(tungstenService.createManagementNetwork(1L)); } + @Test public void addManagementNetworkSubnetTest() { HostPodVO hostPodVO = mock(HostPodVO.class); @@ -390,6 +417,7 @@ public void addManagementNetworkSubnetTest() { TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); + when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); @@ -400,8 +428,10 @@ public void addManagementNetworkSubnetTest() { when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); when(dataCenterIpAddressDao.mark(anyLong(), anyLong(), anyString())).thenReturn(true); + assertTrue(tungstenService.addManagementNetworkSubnet(hostPodVO)); } + @Test public void deleteManagementNetworkTest() { Network managementNetwork = mock(Network.class); @@ -410,15 +440,17 @@ public void deleteManagementNetworkTest() { TungstenAnswer deleteTungstenFabricPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenManagementPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenFabricPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); + assertTrue(tungstenService.deleteManagementNetwork(1L)); } + @Test public void removeManagementNetworkSubnetTest() { HostPodVO hostPodVO = mock(HostPodVO.class); @@ -426,7 +458,7 @@ public void removeManagementNetworkSubnetTest() { TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); - when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); @@ -434,9 +466,11 @@ public void removeManagementNetworkSubnetTest() { when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); + assertTrue(tungstenService.removeManagementNetworkSubnet(hostPodVO)); verify(dataCenterIpAddressDao, times(1)).releasePodIpAddress(anyLong()); } + @Test public void createPublicNetworkTest() { Network publicNetwork = mock(Network.class); @@ -447,6 +481,7 @@ public void createPublicNetworkTest() { TungstenAnswer createFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); @@ -456,8 +491,10 @@ public void createPublicNetworkTest() { when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); when(virtualNetwork.getQualifiedName()).thenReturn(Arrays.asList("default-domain", "default-project", "publicNetwork")); + assertTrue(tungstenService.createPublicNetwork(1L)); } + @Test public void addPublicNetworkSubnetTest() { VlanVO vlanVO = mock(VlanVO.class); @@ -468,6 +505,7 @@ public void addPublicNetworkSubnetTest() { NetworkPolicy networkPolicy = mock(NetworkPolicy.class); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); @@ -480,22 +518,26 @@ public void addPublicNetworkSubnetTest() { when(publicNetwork.getCidr()).thenReturn("192.168.100.0/24"); when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); + assertTrue(tungstenService.addPublicNetworkSubnet(vlanVO)); } + @Test public void deletePublicNetworkTest() { Network publicNetwork = mock(Network.class); TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); + assertTrue(tungstenService.deletePublicNetwork(1L)); } + @Test public void removePublicNetworkSubnetTest() { VlanVO vlanVO = mock(VlanVO.class); @@ -504,6 +546,7 @@ public void removePublicNetworkSubnetTest() { TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); @@ -511,38 +554,47 @@ public void removePublicNetworkSubnetTest() { when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + assertTrue(tungstenService.removePublicNetworkSubnet(vlanVO)); verify(ipAddressDao, times(1)).unassignIpAddress(anyLong()); } + @Test public void allocateDnsIpAddressTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); when(tungstenGuestNetworkIpAddressDao.persist(any(TungstenGuestNetworkIpAddressVO.class))).thenReturn(tungstenGuestNetworkIpAddressVO); when(networkVO.getCidr()).thenReturn("192.168.100.0/24"); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); + assertTrue(tungstenService.allocateDnsIpAddress(networkVO, null, "test")); } + @Test public void deallocateDnsIpAddressTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); when(tungstenGuestNetworkIpAddressDao.findByNetworkAndGuestIpAddress(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); + tungstenService.deallocateDnsIpAddress(networkVO, null, "test"); verify(tungstenGuestNetworkIpAddressDao, times(1)).expunge(anyLong()); } + @Test public void subscribeTungstenEventTest() { tungstenService.subscribeTungstenEvent(); + verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_ASSIGN_IPADDR_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_RELEASE_IPADDR_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_APPLY_NETWORK_POLICY_EVENT), any(MessageSubscriber.class)); @@ -562,6 +614,7 @@ public void subscribeTungstenEventTest() { verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_ASSIGN_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_RELEASE_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); } + @Test public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { DomainVO domainVO = mock(DomainVO.class); @@ -571,6 +624,7 @@ public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { TungstenAnswer createTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenDefaultProjectAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + when(domainDao.listAll()).thenReturn(List.of(domainVO)); when(projectDao.listAll()).thenReturn(List.of(projectVO)); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); @@ -579,8 +633,10 @@ public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDefaultProjectCommand.class), anyLong())).thenReturn(createTungstenDefaultProjectAnswer); when(domainDao.findById(anyLong())).thenReturn(domainVO); + assertTrue(tungstenService.syncTungstenDbWithCloudstackProjectsAndDomains()); } + @Test public void updateLoadBalancerTest() { Network network = mock(Network.class); @@ -590,8 +646,8 @@ public void updateLoadBalancerTest() { HostVO hostVO = mock(HostVO.class); TungstenAnswer getTungstenLoadBalancerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new MockTungstenAnswerFactory(true).get(); - Answer updateTungstenLoadbalancerStatsAnswer = new MockTungstenAnswerFactory(true).get(); - Answer updateTungstenLoadbalancerSslAnswer = new MockTungstenAnswerFactory(true).get(); + Answer updateTungstenLoadbalancerStatsAnswer = mock(Answer.class); + Answer updateTungstenLoadbalancerSslAnswer = mock(Answer.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); SslCertVO sslCertVO = mock(SslCertVO.class); @@ -599,6 +655,7 @@ public void updateLoadBalancerTest() { Ip ip = mock(Ip.class); AccountVO accountVO = mock(AccountVO.class); Loadbalancer loadbalancer = mock(Loadbalancer.class); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(hostDao.listAllHostsByZoneAndHypervisorType(anyLong(), eq(Hypervisor.HypervisorType.KVM))).thenReturn(List.of(hostVO)); @@ -606,6 +663,8 @@ public void updateLoadBalancerTest() { when(tungstenFabricUtils.sendTungstenCommand(any(UpdateLoadBalancerServiceInstanceCommand.class), anyLong())).thenReturn(updateLoadBalancerServiceInstanceAnswer); when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerStatsCommand.class))).thenReturn(updateTungstenLoadbalancerStatsAnswer); when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerSslCommand.class))).thenReturn(updateTungstenLoadbalancerSslAnswer); + when(updateTungstenLoadbalancerStatsAnswer.getResult()).thenReturn(true); + when(updateTungstenLoadbalancerSslAnswer.getResult()).thenReturn(true); when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); when(fwRulesDao.listByIpAndPurposeAndNotRevoked(anyLong(), eq(FirewallRule.Purpose.LoadBalancing))).thenReturn(List.of(firewallRuleVO)); when(lbCertMapDao.findByLbRuleId(anyLong())).thenReturn(loadBalancerCertMapVO); @@ -617,8 +676,10 @@ public void updateLoadBalancerTest() { when(getTungstenLoadBalancerAnswer.getApiObjectBase()).thenReturn(loadbalancer); when(ipAddressVO.getAddress()).thenReturn(ip); when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); + assertTrue(tungstenService.updateLoadBalancer(network, loadBalancingRule)); } + @Test public void createTungstenSecurityGroupTest() { SecurityGroup securityGroup = mock(SecurityGroup.class); @@ -628,36 +689,43 @@ public void createTungstenSecurityGroupTest() { TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenAnswer createTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - mockStatic(Transaction.class); + when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(domainDao.findById(anyLong())).thenReturn(domainVO); - when(projectDao.findByUuid(anyString())).thenReturn(projectVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenSecurityGroupCommand.class), anyLong())).thenReturn(createTungstenSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - PowerMockito.when(Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); - assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); + + try (MockedStatic transactionMocked = Mockito.mockStatic(Transaction.class)) { + transactionMocked.when(() -> Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); + assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); + } } + @Test public void deleteTungstenSecurityGroupTest() { SecurityGroup securityGroup = mock(SecurityGroup.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer deleteTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); + assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); } + @Test public void addTungstenSecurityGroupEgressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); NicVO nicVO = mock(NicVO.class); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); @@ -676,16 +744,19 @@ public void addTungstenSecurityGroupEgressRuleTest() { when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); when(securityRule.getAllowedNetworkId()).thenReturn(1L); + assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); } + @Test public void addTungstenSecurityGroupIngressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); @@ -695,8 +766,10 @@ public void addTungstenSecurityGroupIngressRuleTest() { when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); when(securityRule.getAllowedNetworkId()).thenReturn(null); + assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); } + @Test public void removeTungstenSecurityGroupEgressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); @@ -706,6 +779,7 @@ public void removeTungstenSecurityGroupEgressRuleTest() { TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); NicVO nicVO = mock(NicVO.class); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); @@ -722,22 +796,26 @@ public void removeTungstenSecurityGroupEgressRuleTest() { when(nicVO.getSecondaryIp()).thenReturn(true); when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); when(tungstenSecurityGroupRuleDao.findBySecurityGroupAndRuleTypeAndRuleTarget(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); + assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); } + @Test public void removeTungstenSecurityGroupIngressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); - when(securityRule.getType()).thenReturn("ingress"); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); when(securityRule.getAllowedNetworkId()).thenReturn(null); + assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); } + @Test public void addTungstenNicSecondaryIpAddressTest() { NicSecondaryIp nicSecondaryIp = mock(NicSecondaryIp.class); @@ -750,6 +828,7 @@ public void addTungstenNicSecondaryIpAddressTest() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer addTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); @@ -764,8 +843,10 @@ public void addTungstenNicSecondaryIpAddressTest() { when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + assertTrue(tungstenService.addTungstenNicSecondaryIpAddress(1L)); } + @Test public void removeTungstenNicSecondaryIpAddressTest() { NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); @@ -775,33 +856,39 @@ public void removeTungstenNicSecondaryIpAddressTest() { TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); when(network.getGuestType()).thenReturn(Network.GuestType.Shared); when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); when(nicSecondaryIpVO.getIp4Address()).thenReturn("192.168.100.100"); + assertTrue(tungstenService.removeTungstenNicSecondaryIpAddress(nicSecondaryIpVO)); } + @Test public void createTungstenPolicyTest() { TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(createTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + assertNotNull(tungstenService.createTungstenPolicy(1L, "test")); } + @Test public void addTungstenPolicyRuleTest() throws Exception { - AddTungstenPolicyRuleCommand addTungstenPolicyRuleCommand = mock(AddTungstenPolicyRuleCommand.class); TungstenAnswer addTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); @@ -811,13 +898,13 @@ public void addTungstenPolicyRuleTest() throws Exception { SubnetType subnetType = mock(SubnetType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenPolicyRuleCommand.class), anyLong())).thenReturn(addTungstenPolicyRuleAnswer); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(addTungstenPolicyRuleAnswer.getApiObjectBase()).thenReturn(networkPolicy); when(networkPolicy.getEntries()).thenReturn(policyEntriesType); when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - whenNew(AddTungstenPolicyRuleCommand.class).withAnyArguments().thenReturn(addTungstenPolicyRuleCommand); - PowerMockito.when(addTungstenPolicyRuleCommand, "getUuid").thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); when(policyRuleType.getActionList()).thenReturn(actionListType); when(actionListType.getSimpleAction()).thenReturn("pass"); @@ -826,10 +913,18 @@ public void addTungstenPolicyRuleTest() throws Exception { when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", - "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, - "network2", "192.168.200.200", 32, 80, 80)); + + try (MockedConstruction ignored = + Mockito.mockConstruction(AddTungstenPolicyRuleCommand.class, (mock, context) -> { + when(mock.getUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + })) { + + assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", + "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, + "network2", "192.168.200.200", 32, 80, 80)); + } } + @Test public void listTungstenPolicyTest() { NetworkVO networkVO = mock(NetworkVO.class); @@ -838,6 +933,7 @@ public void listTungstenPolicyTest() { NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(networkDao.findById(anyLong())).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyCommand.class), anyLong())).thenReturn(listTungstenPolicyAnswer); @@ -845,45 +941,59 @@ public void listTungstenPolicyTest() { when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn( List.of(virtualNetwork)); + assertNotNull(tungstenService.listTungstenPolicy(1L, 2L, 3L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void listTungstenNetworkTest() { TungstenAnswer listTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNetworkCommand.class), anyLong())).thenReturn(listTungstenNetworkAnswer); doReturn(List.of(virtualNetwork)).when(listTungstenNetworkAnswer).getApiObjectBaseList(); when((virtualNetwork.getName())).thenReturn("guestNetwork1"); + assertNotNull(tungstenService.listTungstenNetwork(1L, "948f421c-edde-4518-a391-09299cc25dc2", false)); } + @Test public void listTungstenNicTest() { TungstenAnswer listTungstenNicAnswer = new MockTungstenAnswerFactory(true).get(); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNicCommand.class), anyLong())).thenReturn(listTungstenNicAnswer); doReturn(List.of(virtualMachineInterface)).when(listTungstenNicAnswer).getApiObjectBaseList(); + assertNotNull(tungstenService.listTungstenNic(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void listTungstenVmTest() { TungstenAnswer listTungstenVmAnswer = new MockTungstenAnswerFactory(true).get(); VirtualMachine virtualMachine = mock(VirtualMachine.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenVmCommand.class), anyLong())).thenReturn(listTungstenVmAnswer); doReturn(List.of(virtualMachine)).when(listTungstenVmAnswer).getApiObjectBaseList(); + assertNotNull(tungstenService.listTungstenVm(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void deleteTungstenPolicyTest() { TungstenAnswer deleteTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); + assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void listTungstenPolicyRuleWithRuleUuidTest() { TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); @@ -895,6 +1005,7 @@ public void listTungstenPolicyRuleWithRuleUuidTest() { SubnetType subnetType = mock(SubnetType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); @@ -908,8 +1019,10 @@ public void listTungstenPolicyRuleWithRuleUuidTest() { when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } + @Test public void listTungstenPolicyRuleWithAllRuleTest() { TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); @@ -921,6 +1034,7 @@ public void listTungstenPolicyRuleWithAllRuleTest() { SubnetType subnetType = mock(SubnetType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); @@ -934,8 +1048,10 @@ public void listTungstenPolicyRuleWithAllRuleTest() { when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", null)); } + @Test public void removeTungstenPolicyRuleTest() { TungstenAnswer removeTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); @@ -943,13 +1059,16 @@ public void removeTungstenPolicyRuleTest() { NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyRuleCommand.class), anyLong())).thenReturn(removeTungstenPolicyRuleAnswer); when(removeTungstenPolicyRuleAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.removeTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } + @Test public void createTungstenTagTest() { TungstenAnswer createTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); @@ -960,6 +1079,7 @@ public void createTungstenTagTest() { VirtualMachine virtualMachine = mock(VirtualMachine.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagCommand.class), anyLong())).thenReturn(createTungstenTagAnswer); when(createTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); @@ -968,18 +1088,23 @@ public void createTungstenTagTest() { doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); + assertNotNull(tungstenService.createTungstenTag(1L, "testTag", "testTagType")); } + @Test public void createTungstenTagTypeTest() { TungstenAnswer createTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); TagType tagtype = mock(TagType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(createTungstenTagTypeAnswer.getApiObjectBase()).thenReturn(tagtype); + assertNotNull(tungstenService.createTungstenTagType(1L, "testTagType")); } + @Test public void listTungstenTagsTest() { TungstenAnswer listTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); @@ -991,6 +1116,7 @@ public void listTungstenTagsTest() { NetworkPolicy networkPolicy = mock(NetworkPolicy.class); ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagCommand.class), anyLong())).thenReturn(listTungstenTagAnswer); when(listTungstenTagAnswer.getTungstenModelList()).thenReturn(List.of(tungstenTag)); @@ -999,33 +1125,43 @@ public void listTungstenTagsTest() { doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); - doReturn(List.of(applicationPolicySet)).when(tungstenTag).getApplicationPolicySetList(); + assertNotNull(tungstenService.listTungstenTags(1L, "948f421c-edde-4518-a391-09299cc25dc2" , "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); } + @Test public void listTungstenTagTypesTest() { TungstenAnswer listTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); TagType tagtype = mock(TagType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagTypeCommand.class), anyLong())).thenReturn(listTungstenTagTypeAnswer); doReturn(List.of(tagtype)).when(listTungstenTagTypeAnswer).getApiObjectBaseList(); + assertNotNull(tungstenService.listTungstenTagTypes(1L, "testTagType")); } + @Test public void deleteTungstenTagTest() { TungstenAnswer deleteTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); + assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void deleteTungstenTagTypeTest() { TungstenAnswer deleteTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); + assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void applyTungstenPolicyTest() { TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1033,13 +1169,16 @@ public void applyTungstenPolicyTest() { NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(applyTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.applyTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", 1, 1)); } + @Test public void applyTungstenTagTest() { TungstenAnswer applyTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1050,6 +1189,7 @@ public void applyTungstenTagTest() { VirtualMachine virtualMachine = mock(VirtualMachine.class); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenTagCommand.class), anyLong())).thenReturn(applyTungstenTagAnswer); when(applyTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); @@ -1058,10 +1198,12 @@ public void applyTungstenTagTest() { when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); + assertNotNull(tungstenService.applyTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85") , List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb" , "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); } + @Test public void removeTungstenPolicyTest() { TungstenAnswer removeTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1069,13 +1211,16 @@ public void removeTungstenPolicyTest() { NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyCommand.class), anyLong())).thenReturn(removeTungstenPolicyAnswer); when(removeTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.removeTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } + @Test public void removeTungstenTagTest() { TungstenAnswer removeTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1086,6 +1231,7 @@ public void removeTungstenTagTest() { VirtualMachine virtualMachine = mock(VirtualMachine.class); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenTagCommand.class), anyLong())).thenReturn(removeTungstenTagAnswer); when(removeTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); @@ -1094,11 +1240,13 @@ public void removeTungstenTagTest() { when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); + assertNotNull(tungstenService.removeTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85"), List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", null, "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb")); } + @Test public void createTungstenAddressGroupTest() { TungstenAnswer createTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1106,13 +1254,16 @@ public void createTungstenAddressGroupTest() { SubnetListType subnetListType = mock(SubnetListType.class); SubnetType subnetType = mock(SubnetType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenAddressGroupCommand.class), anyLong())).thenReturn(createTungstenAddressGroupAnswer); when(createTungstenAddressGroupAnswer.getApiObjectBase()).thenReturn(addressGroup); when(addressGroup.getPrefix()).thenReturn(subnetListType); when(subnetListType.getSubnet()).thenReturn(List.of(subnetType)); + assertNotNull(tungstenService.createTungstenAddressGroup(1L, "test", "192.168.100.0", 24)); } + @Test public void createTungstenServiceGroupTest() { TungstenAnswer createTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1121,14 +1272,17 @@ public void createTungstenServiceGroupTest() { FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenServiceGroupCommand.class), anyLong())).thenReturn(createTungstenServiceGroupAnswer); when(createTungstenServiceGroupAnswer.getApiObjectBase()).thenReturn(serviceGroup); when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); when(firewallServiceType.getDstPorts()).thenReturn(portType); + assertNotNull(tungstenService.createTungstenServiceGroup(1L, "test", "tcp", 80, 80)); } + @Test public void createTungstenFirewallRuleTest() { TungstenAnswer createTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1139,6 +1293,7 @@ public void createTungstenFirewallRuleTest() { FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallRuleCommand.class), anyLong())).thenReturn(createTungstenFirewallRuleAnswer); when(createTungstenFirewallRuleAnswer.getApiObjectBase()).thenReturn(firewallRule); @@ -1152,23 +1307,28 @@ public void createTungstenFirewallRuleTest() { when(firewallRuleEndpointType2.getTags()).thenReturn(null); when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); + assertNotNull(tungstenService.createTungstenFirewallRule(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "test", "pass", "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", null, "<>", "a329662e-1805-4a89-9b05-2b818ea35978" , "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", null, "df8e4490-2a40-4d63-a6f3-1f829ffe4fc6", 1)); } + @Test public void createTungstenFirewallPolicyTest() { TungstenAnswer createTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(createTungstenFirewallPolicyAnswer); when(createTungstenFirewallPolicyAnswer.getApiObjectBase()).thenReturn(firewallPolicy); when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + assertNotNull(tungstenService.createTungstenFirewallPolicy(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652","test", 1)); } + @Test public void createTungstenApplicationPolicySetTest() { TungstenAnswer createTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1176,6 +1336,7 @@ public void createTungstenApplicationPolicySetTest() { ObjectReference objectReference = mock(ObjectReference.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(createTungstenApplicationPolicySetAnswer); when(createTungstenApplicationPolicySetAnswer.getApiObjectBase()).thenReturn(applicationPolicySet); @@ -1183,8 +1344,10 @@ public void createTungstenApplicationPolicySetTest() { when(objectReference.getReferredName()).thenReturn(List.of("tag")); when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + assertNotNull(tungstenService.createTungstenApplicationPolicySet(1L, "test")); } + @Test public void listTungstenApplicationPolicySetTest() { TungstenAnswer listTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1192,6 +1355,7 @@ public void listTungstenApplicationPolicySetTest() { ObjectReference objectReference = mock(ObjectReference.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(listTungstenApplicationPolicySetAnswer); doReturn(List.of(applicationPolicySet)).when(listTungstenApplicationPolicySetAnswer).getApiObjectBaseList(); @@ -1199,21 +1363,26 @@ public void listTungstenApplicationPolicySetTest() { when(objectReference.getReferredName()).thenReturn(List.of("tag")); when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + assertNotNull(tungstenService.listTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void listTungstenFirewallPolicyTest() { TungstenAnswer listTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(listTungstenFirewallPolicyAnswer); doReturn(List.of(firewallPolicy)).when(listTungstenFirewallPolicyAnswer).getApiObjectBaseList(); when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + assertNotNull(tungstenService.listTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } + @Test public void listTungstenFirewallRuleTest() { TungstenAnswer listTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1224,6 +1393,7 @@ public void listTungstenFirewallRuleTest() { FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallRuleCommand.class), anyLong())).thenReturn(listTungstenFirewallRuleAnswer); doReturn(List.of(firewallRule)).when(listTungstenFirewallRuleAnswer).getApiObjectBaseList(); @@ -1237,9 +1407,11 @@ public void listTungstenFirewallRuleTest() { when(firewallRuleEndpointType2.getTags()).thenReturn(null); when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); + assertNotNull(tungstenService.listTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } + @Test public void listTungstenAddressGroupTest() { TungstenAnswer listTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1247,14 +1419,17 @@ public void listTungstenAddressGroupTest() { SubnetListType subnetListType = mock(SubnetListType.class); SubnetType subnetType = mock(SubnetType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenAddressGroupCommand.class), anyLong())).thenReturn(listTungstenAddressGroupAnswer); doReturn(List.of(addressGroup)).when(listTungstenAddressGroupAnswer).getApiObjectBaseList(); when(addressGroup.getPrefix()).thenReturn(subnetListType); when(subnetListType.getSubnet()).thenReturn( List.of(subnetType)); + assertNotNull(tungstenService.listTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void listTungstenServiceGroupTest() { TungstenAnswer listTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1263,44 +1438,62 @@ public void listTungstenServiceGroupTest() { FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenServiceGroupCommand.class), anyLong())).thenReturn(listTungstenServiceGroupAnswer); doReturn(List.of(serviceGroup)).when(listTungstenServiceGroupAnswer).getApiObjectBaseList(); when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); when(firewallServiceType.getDstPorts()).thenReturn(portType); + assertNotNull(tungstenService.listTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void deleteTungstenApplicationPolicySetTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); + assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void deleteTungstenFirewallPolicyTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); + assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void deleteTungstenFirewallRuleTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); + assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void deleteTungstenServiceGroupTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); + assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void deleteTungstenAddressGroupTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); + assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void createSharedNetworkTest() { Network network = mock(Network.class); @@ -1312,9 +1505,10 @@ public void createSharedNetworkTest() { NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); HostVO hostVO = mock(HostVO.class); - Answer answer = new MockTungstenAnswerFactory(true).get(); + Answer answer = mock(Answer.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); + when(accountDao.findById(anyLong())).thenReturn(accountVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenSharedNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addNetworkSubnetAnswer); @@ -1328,31 +1522,31 @@ public void createSharedNetworkTest() { when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(hostDao.findByPublicIp(anyString())).thenReturn(hostVO); when(agentMgr.easySend(anyLong(), any(SetupTungstenVRouterCommand.class))).thenReturn(answer); + when(answer.getResult()).thenReturn(true); when(vlan.getIp6Cidr()).thenReturn("fd00::1/64"); when(vlan.getIp6Range()).thenReturn("fd00::100-fd00::200"); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.1.150"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Guest); - when(network.getGuestType()).thenReturn(Network.GuestType.Shared); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); when(createTungstenSharedNetworkAnswer.getApiObjectBase()).thenReturn(apiObjectBase); when(apiObjectBase.getQualifiedName()).thenReturn(List.of("network")); when(tungstenProviderVO.getGateway()).thenReturn("192.168.100.1"); + assertTrue(tungstenService.createSharedNetwork(network, vlan)); } + @Test public void addTungstenVmSecurityGroupTest() { VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); TungstenAnswer addTungstenVmToSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); NicVO nicVO = mock(NicVO.class); SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); @@ -1370,8 +1564,10 @@ public void addTungstenVmSecurityGroupTest() { when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + assertTrue(tungstenService.addTungstenVmSecurityGroup(vmInstanceVO)); } + @Test public void removeTungstenVmSecurityGroupTest() { VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); @@ -1382,24 +1578,13 @@ public void removeTungstenVmSecurityGroupTest() { SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenVmFromSecurityGroupCommand.class), anyLong())).thenReturn(removeTungstenVmFromSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); - when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); - when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + assertTrue(tungstenService.removeTungstenVmSecurityGroup(vmInstanceVO)); } + @Test public void createRoutingLogicalRouterTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1407,13 +1592,16 @@ public void createRoutingLogicalRouterTest() { LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.createRoutingLogicalRouter(1L, "default-domain:default-project", "testLR")); } + @Test public void addNetworkGatewayToLogicalRouterTest() { NetworkVO networkVO = mock(NetworkVO.class); @@ -1422,6 +1610,7 @@ public void addNetworkGatewayToLogicalRouterTest() { LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(networkDao.findByUuid(anyString())).thenReturn(networkVO); when(ipAddressManager.acquireLastGuestIpAddress(any(Network.class))).thenReturn("192.168.100.100"); @@ -1429,8 +1618,10 @@ public void addNetworkGatewayToLogicalRouterTest() { when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.addNetworkGatewayToLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } + @Test public void listRoutingLogicalRouterTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); @@ -1438,13 +1629,16 @@ public void listRoutingLogicalRouterTest() { LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); when(tungstenAnswer.getTungstenModelList()).thenReturn(List.of(tungstenLogicalRouter)); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.listRoutingLogicalRouter(1L, null, "948f421c-edde-4518-a391-09299cc25dc2")); } + @Test public void removeNetworkGatewayFromLogicalRouterTest() { NetworkVO networkVO = mock(NetworkVO.class); @@ -1454,6 +1648,7 @@ public void removeNetworkGatewayFromLogicalRouterTest() { LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(networkDao.findByUuid(anyString())).thenReturn(networkVO); when(tungstenGuestNetworkIpAddressDao.findByNetworkAndLogicalRouter(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); @@ -1461,13 +1656,16 @@ public void removeNetworkGatewayFromLogicalRouterTest() { when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + assertNotNull(tungstenService.removeNetworkGatewayFromLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } + @Test public void deleteLogicalRouterTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } -} +} \ No newline at end of file From 526d38cc5a5ba56e07180b3768df8bf83b2bc301 Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Wed, 18 Oct 2023 13:10:24 -0400 Subject: [PATCH 06/12] Replace all `\r` with `\n`. --- .../tungsten/service/TungstenElementTest.java | 2026 +++++----- .../service/TungstenFabricUtilsTest.java | 104 +- .../service/TungstenServiceImplTest.java | 3340 ++++++++--------- 3 files changed, 2684 insertions(+), 2786 deletions(-) diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java index 8c1510145562..a9603ac1d3f3 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java @@ -1,1014 +1,1014 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.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 com.cloud.agent.AgentManager; -import com.cloud.api.ApiDBUtils; -import com.cloud.configuration.Config; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.dc.VlanVO; -import com.cloud.dc.dao.DataCenterDao; -import com.cloud.dc.dao.HostPodDao; -import com.cloud.dc.dao.VlanDao; -import com.cloud.deploy.DeployDestination; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.hypervisor.Hypervisor; -import com.cloud.network.IpAddressManager; -import com.cloud.network.Network; -import com.cloud.network.NetworkModel; -import com.cloud.network.Networks; -import com.cloud.network.PhysicalNetworkServiceProvider; -import com.cloud.network.TungstenGuestNetworkIpAddressVO; -import com.cloud.network.dao.IPAddressDao; -import com.cloud.network.dao.IPAddressVO; -import com.cloud.network.dao.LoadBalancerCertMapDao; -import com.cloud.network.dao.LoadBalancerDao; -import com.cloud.network.dao.LoadBalancerVMMapDao; -import com.cloud.network.dao.LoadBalancerVMMapVO; -import com.cloud.network.dao.LoadBalancerVO; -import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.NetworkDetailsDao; -import com.cloud.network.dao.NetworkServiceMapDao; -import com.cloud.network.dao.NetworkVO; -import com.cloud.network.dao.PhysicalNetworkDao; -import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; -import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; -import com.cloud.network.dao.PhysicalNetworkVO; -import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.rules.FirewallRule; -import com.cloud.network.rules.FirewallRuleVO; -import com.cloud.network.rules.PortForwardingRule; -import com.cloud.network.rules.StaticNatImpl; -import com.cloud.user.AccountManager; -import com.cloud.user.User; -import com.cloud.uservm.UserVm; -import com.cloud.utils.EncryptionUtil; -import com.cloud.utils.Pair; -import com.cloud.utils.TungstenUtils; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.fsm.StateMachine2; -import com.cloud.utils.net.Ip; -import com.cloud.utils.net.NetUtils; -import com.cloud.vm.Nic; -import com.cloud.vm.NicProfile; -import com.cloud.vm.ReservationContext; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachineProfile; -import com.cloud.vm.dao.VMInstanceDao; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; -import org.apache.cloudstack.framework.messagebus.MessageBus; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenPortForwardingCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AssignTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkLoadbalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenVirtualMachineCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerListenerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVRouterPortCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmInterfaceCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ReleaseTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerHealthMonitorCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerMemberCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerPoolCommand; -import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorDao; -import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorVO; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; - -import java.util.Arrays; -import java.util.List; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenElementTest { - @Mock - TungstenFabricUtils tungstenFabricUtils; - @Mock - NetworkModel networkModel; - @Mock - IPAddressDao ipAddressDao; - @Mock - VMInstanceDao vmInstanceDao; - @Mock - LoadBalancerVMMapDao lbVmMapDao; - @Mock - TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; - @Mock - IpAddressManager ipAddressMgr; - @Mock - ConfigurationDao configDao; - @Mock - LoadBalancerDao lbDao; - @Mock - AccountManager accountMgr; - @Mock - HostDao hostDao; - @Mock - MessageBus messageBus; - @Mock - PhysicalNetworkTrafficTypeDao physicalNetworkTrafficTypeDao; - @Mock - PhysicalNetworkDao physicalNetworkDao; - @Mock - TungstenProviderDao tungstenProviderDao; - @Mock - DataCenterDao dataCenterDao; - @Mock - VlanDao vlanDao; - @Mock - NetworkServiceMapDao networkServiceMapDao; - @Mock - HostPodDao hostPodDao; - @Mock - NetworkDetailsDao networkDetailsDao; - @Mock - AgentManager agentManager; - @Mock - NetworkDao networkDao; - @Mock - TungstenService tungstenService; - @Mock - TungstenFabricLBHealthMonitorDao tungstenFabricLBHealthMonitorDao; - @Mock - LoadBalancerCertMapDao loadBalancerCertMapDao; - - TungstenElement tungstenElement; - - MockedStatic apiDBUtilsMocked; - - MockedStatic encryptionUtilMocked; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenElement = new TungstenElement(); - tungstenElement.tungstenFabricUtils = tungstenFabricUtils; - tungstenElement.networkModel = networkModel; - tungstenElement.ipAddressDao = ipAddressDao; - tungstenElement.vmInstanceDao = vmInstanceDao; - tungstenElement.lbVmMapDao = lbVmMapDao; - tungstenElement.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; - tungstenElement.ipAddressMgr = ipAddressMgr; - tungstenElement.configDao = configDao; - tungstenElement.lbDao = lbDao; - tungstenElement.accountMgr = accountMgr; - tungstenElement.hostDao = hostDao; - tungstenElement.messageBus = messageBus; - tungstenElement.physicalNetworkDao = physicalNetworkDao; - tungstenElement.tungstenService = tungstenService; - tungstenElement.tungstenProviderDao = tungstenProviderDao; - tungstenElement.dataCenterDao = dataCenterDao; - tungstenElement.vlanDao = vlanDao; - tungstenElement.networkServiceMapDao = networkServiceMapDao; - tungstenElement.podDao = hostPodDao; - tungstenElement.agentMgr = agentManager; - tungstenElement.networkDetailsDao = networkDetailsDao; - tungstenElement.networkDao = networkDao; - tungstenElement.physicalNetworkTrafficTypeDao = physicalNetworkTrafficTypeDao; - tungstenElement.tungstenFabricLBHealthMonitorDao = tungstenFabricLBHealthMonitorDao; - tungstenElement.loadBalancerCertMapDao = loadBalancerCertMapDao; - - apiDBUtilsMocked = Mockito.mockStatic(ApiDBUtils.class); - encryptionUtilMocked = Mockito.mockStatic(EncryptionUtil.class); - - when(tungstenService.getTungstenProjectFqn(any())).thenReturn("default-domain:default-project"); - } - - @After - public void tearDown() throws Exception { - apiDBUtilsMocked.close(); - encryptionUtilMocked.close(); - closeable.close(); - } - - @Test - public void canHandleSuccessTest() { - Network network = mock(Network.class); - Network.Service service = mock(Network.Service.class); - - when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(true); - - assertTrue(tungstenElement.canHandle(network, service)); - } - - @Test - public void canHandleFailTest() { - Network network = mock(Network.class); - Network.Service service = mock(Network.Service.class); - - when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(false); - - assertFalse(tungstenElement.canHandle(network, service)); - } - - @Test - public void applyStaticNatsAddRuleSuccessTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(false); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); - - assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsAddRuleFailTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(false); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); - - assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsRevokeRuleSuccessTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(true); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); - - assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsRevokeRuleFailTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(true); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); - - assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyLBRulesAddRuleSuccessTest() { - User caller = mock(User.class); - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); - LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); - LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); - List lbStickinessPolicyList = List.of(lbStickinessPolicy); - List loadBalancerVOList = List.of(loadBalancerVO); - TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); - LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); - when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); - List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); - - when(lbStickinessPolicy.getParams()).thenReturn(pairList); - when(loadBalancingRule1.getId()).thenReturn(1L); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); - when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); - when(loadBalancingRule1.getSourcePortStart()).thenReturn(443); - when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); - when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); - when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); - when(ip.addr()).thenReturn("10.10.10.10"); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); - when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); - when(EncryptionUtil.generateSignature(anyString(), anyString())).thenReturn("generatedString"); - when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); - - assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesAddRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); - LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); - LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); - List lbStickinessPolicyList = List.of(lbStickinessPolicy); - List loadBalancerVOList = List.of(loadBalancerVO); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); - List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); - TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); - - when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); - when(lbStickinessPolicy.getParams()).thenReturn(pairList); - when(loadBalancingRule1.getId()).thenReturn(1L); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); - when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); - when(loadBalancingRule1.getSourcePortStart()).thenReturn(80); - when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); - when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); - when(ip.addr()).thenReturn("10.10.10.10"); - when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("disabled"); - when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); - - assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesRevokeRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip1 = mock(Ip.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVOList1 = List.of(loadBalancerVO1); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Revoke); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip1); - when(ip1.addr()).thenReturn("10.10.10.10"); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); - when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList1); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenGuestNetworkIpAddressDao.remove(anyLong())).thenReturn(false); - - assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesRevokeRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); - LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); - LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); - List loadBalancingRuleList = List.of(loadBalancingRule); - List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(loadBalancingRule.getSourceIp()).thenReturn(ip); - when(loadBalancingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ip.addr()).thenReturn("10.10.10.10"); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); - when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); - when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); - - assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList)); - } - - @Test - public void applyPFRulesAddRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesAddRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesRevokeRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesRevokeRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void preparePublicNetworkTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer createTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenNetworkPolicyAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - - assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); - assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); - assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); - } - - @Test - public void prepareManagementNetworkTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - - assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); - assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); - assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); - } - - @Test(expected = CloudRuntimeException.class) - public void prepareWithExceptionTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - - tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext); - } - - @Test - public void releasePublicNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); - - when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - - assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); - } - - @Test - public void releaseManagementNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); - - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); - - assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); - } - - @Test(expected = CloudRuntimeException.class) - public void releaseWithExceptionTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenThrow(IllegalArgumentException.class); - - tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext); - } - - @Test - public void destroyTest() throws ConcurrentOperationException, ResourceUnavailableException { - IPAddressVO ipAddressVO1 = mock(IPAddressVO.class); - IPAddressVO ipAddressVO2 = mock(IPAddressVO.class); - Network network = mock(Network.class); - ReservationContext reservationContext = mock(ReservationContext.class); - List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); - TungstenAnswer tungstenDeleteFIPAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer tungstenDeleteNPAnswer = new MockTungstenAnswerFactory(true).get(); - - when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(tungstenDeleteNPAnswer); - - assertTrue(tungstenElement.destroy(network, reservationContext)); - } - - @Test - public void isReadyTest() { - PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); - PhysicalNetworkTrafficTypeVO physicalNetworkTrafficTypeVO = mock(PhysicalNetworkTrafficTypeVO.class); - - when(physicalNetworkTrafficTypeDao.findBy(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(physicalNetworkTrafficTypeVO); - - assertTrue(tungstenElement.isReady(physicalNetworkServiceProvider)); - } - - @Test - public void shutdownProviderInstancesTest() throws ConcurrentOperationException { - PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); - ReservationContext reservationContext = mock(ReservationContext.class); - PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - Network publicNetwork = mock(Network.class); - VlanVO vlanVO1 = mock(VlanVO.class); - VlanVO vlanVO2 = mock(VlanVO.class); - List vlanVOList = Arrays.asList(vlanVO1, vlanVO2); - HostPodVO hostPodVO1 = mock(HostPodVO.class); - HostPodVO hostPodVO2 = mock(HostPodVO.class); - List hostPodVOList = Arrays.asList(hostPodVO1, hostPodVO2); - - when(physicalNetworkDao.findById(anyLong())).thenReturn(physicalNetworkVO); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(vlanDao.listVlansByNetworkIdIncludingRemoved(anyLong())).thenReturn(vlanVOList); - when(hostPodDao.listByDataCenterId(anyLong())).thenReturn(hostPodVOList); - - assertTrue(tungstenElement.shutdownProviderInstances(physicalNetworkServiceProvider, reservationContext)); - verify(networkServiceMapDao, times(1)).deleteByNetworkId(anyLong()); - verify(tungstenService, times(2)).removePublicNetworkSubnet(any(VlanVO.class)); - verify(tungstenService, times(1)).deletePublicNetwork(anyLong()); - verify(tungstenService, times(2)).removeManagementNetworkSubnet(any(HostPodVO.class)); - verify(tungstenService, times(1)).deleteManagementNetwork(anyLong()); - } - - //@Test - //public void processConnectWithoutSecurityGroupTest() throws ConnectionException { - // Host host = mock(Host.class); - // StartupCommand startupCommand = mock(StartupCommand.class); - // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - // DataCenterVO dataCenterVO = mock(DataCenterVO.class); - // VlanVO vlanVO1 = mock(VlanVO.class); - // VlanVO vlanVO2 = mock(VlanVO.class); - // List vlanList = Arrays.asList(vlanVO1, vlanVO2); - // Network publicNetwork = mock(Network.class); - // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); -// - // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); - // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - // when(vlanDao.listByZone(anyLong())).thenReturn(vlanList); - // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); - // when(vlanVO1.getVlanGateway()).thenReturn("192.168.100.1"); - // when(vlanVO1.getVlanNetmask()).thenReturn("255.255.255.0"); - // when(vlanVO2.getVlanGateway()).thenReturn("192.168.101.1"); - // when(vlanVO2.getVlanNetmask()).thenReturn("255.255.255.0"); - // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); -// - // tungstenElement.processConnect(host, startupCommand, true); - // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - //} - - //@Test - //public void processConnectWithSecurityGroupTest() throws ConnectionException { - // Host host = mock(Host.class); - // StartupCommand startupCommand = mock(StartupCommand.class); - // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - // DataCenterVO dataCenterVO = mock(DataCenterVO.class); - // NetworkVO network = mock(NetworkVO.class); - // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); - // Network publicNetwork = mock(Network.class); -// - // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); - // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - // when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(Arrays.asList(network)); - // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); - // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); -// - // tungstenElement.processConnect(host, startupCommand, true); - // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - //} - - @Test - public void processHostAboutToBeRemovedWithSecurityGroupTest() { - HostVO hostVO = mock(HostVO.class); - TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - NetworkVO network = mock(NetworkVO.class); - - when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); - when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(List.of(network)); - - tungstenElement.processHostAboutToBeRemoved(1L); - verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - } - - @Test - public void processHostAboutToBeRemovedWithoutSecurityGroupTest() { - HostVO hostVO = mock(HostVO.class); - TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); - when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); - - tungstenElement.processHostAboutToBeRemoved(1L); - verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - } - - @Test - public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); - when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); - when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Egress); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - Ip ip = mock(Ip.class); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); - when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); - when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(ipAddressDao.findById(anyLong())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteNetworkPolicyAnswer = mock(TungstenAnswer.class); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteNetworkPolicyAnswer); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void postStateTransitionEventWithVmStartedTest() { - StateMachine2.Transition transition = mock(StateMachine2.Transition.class); - VMInstanceVO vo = mock(VMInstanceVO.class); - Object opaque = mock(Object.class); - - when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Starting); - when(transition.getToState()).thenReturn(VirtualMachine.State.Running); - when(tungstenService.addTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); - - assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); - } - - @Test - public void postStateTransitionEventWithVmStopedTest() { - StateMachine2.Transition transition = mock(StateMachine2.Transition.class); - VMInstanceVO vo = mock(VMInstanceVO.class); - Object opaque = mock(Object.class); - - when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Stopping); - when(transition.getToState()).thenReturn(VirtualMachine.State.Stopped); - when(tungstenService.removeTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); - - assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); - } - - @Test - public void prepareMigrationTest() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - DeployDestination dest = mock(DeployDestination.class); - ReservationContext context = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO hostVO = mock(HostVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenElement.prepareMigration(nic, network, vm, dest, context)); - } - - @Test - public void rollbackMigration() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - ReservationContext src = mock(ReservationContext.class); - ReservationContext dest = mock(ReservationContext.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - HostVO hostVO = mock(HostVO.class); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(vm.getVirtualMachine()).thenReturn(virtualMachine); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - - tungstenElement.rollbackMigration(nic, network, vm, src, dest); - verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); - } - - @Test - public void commitMigration() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - ReservationContext src = mock(ReservationContext.class); - ReservationContext dest = mock(ReservationContext.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - HostVO hostVO = mock(HostVO.class); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(vm.getVirtualMachine()).thenReturn(virtualMachine); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - - tungstenElement.commitMigration(nic, network, vm, src, dest); - verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); - } +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.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 com.cloud.agent.AgentManager; +import com.cloud.api.ApiDBUtils; +import com.cloud.configuration.Config; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.HostPodVO; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.HostPodDao; +import com.cloud.dc.dao.VlanDao; +import com.cloud.deploy.DeployDestination; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.hypervisor.Hypervisor; +import com.cloud.network.IpAddressManager; +import com.cloud.network.Network; +import com.cloud.network.NetworkModel; +import com.cloud.network.Networks; +import com.cloud.network.PhysicalNetworkServiceProvider; +import com.cloud.network.TungstenGuestNetworkIpAddressVO; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.LoadBalancerCertMapDao; +import com.cloud.network.dao.LoadBalancerDao; +import com.cloud.network.dao.LoadBalancerVMMapDao; +import com.cloud.network.dao.LoadBalancerVMMapVO; +import com.cloud.network.dao.LoadBalancerVO; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDetailsDao; +import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.dao.NetworkVO; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; +import com.cloud.network.dao.PhysicalNetworkVO; +import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.PortForwardingRule; +import com.cloud.network.rules.StaticNatImpl; +import com.cloud.user.AccountManager; +import com.cloud.user.User; +import com.cloud.uservm.UserVm; +import com.cloud.utils.EncryptionUtil; +import com.cloud.utils.Pair; +import com.cloud.utils.TungstenUtils; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.fsm.StateMachine2; +import com.cloud.utils.net.Ip; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.dao.VMInstanceDao; +import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.messagebus.MessageBus; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenPortForwardingCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AssignTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkLoadbalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenVirtualMachineCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerListenerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVRouterPortCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmInterfaceCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ReleaseTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerHealthMonitorCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerMemberCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerPoolCommand; +import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorDao; +import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorVO; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.Arrays; +import java.util.List; + +@RunWith(MockitoJUnitRunner.class) +public class TungstenElementTest { + @Mock + TungstenFabricUtils tungstenFabricUtils; + @Mock + NetworkModel networkModel; + @Mock + IPAddressDao ipAddressDao; + @Mock + VMInstanceDao vmInstanceDao; + @Mock + LoadBalancerVMMapDao lbVmMapDao; + @Mock + TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; + @Mock + IpAddressManager ipAddressMgr; + @Mock + ConfigurationDao configDao; + @Mock + LoadBalancerDao lbDao; + @Mock + AccountManager accountMgr; + @Mock + HostDao hostDao; + @Mock + MessageBus messageBus; + @Mock + PhysicalNetworkTrafficTypeDao physicalNetworkTrafficTypeDao; + @Mock + PhysicalNetworkDao physicalNetworkDao; + @Mock + TungstenProviderDao tungstenProviderDao; + @Mock + DataCenterDao dataCenterDao; + @Mock + VlanDao vlanDao; + @Mock + NetworkServiceMapDao networkServiceMapDao; + @Mock + HostPodDao hostPodDao; + @Mock + NetworkDetailsDao networkDetailsDao; + @Mock + AgentManager agentManager; + @Mock + NetworkDao networkDao; + @Mock + TungstenService tungstenService; + @Mock + TungstenFabricLBHealthMonitorDao tungstenFabricLBHealthMonitorDao; + @Mock + LoadBalancerCertMapDao loadBalancerCertMapDao; + + TungstenElement tungstenElement; + + MockedStatic apiDBUtilsMocked; + + MockedStatic encryptionUtilMocked; + + AutoCloseable closeable; + + @Before + public void setup() { + closeable = MockitoAnnotations.openMocks(this); + tungstenElement = new TungstenElement(); + tungstenElement.tungstenFabricUtils = tungstenFabricUtils; + tungstenElement.networkModel = networkModel; + tungstenElement.ipAddressDao = ipAddressDao; + tungstenElement.vmInstanceDao = vmInstanceDao; + tungstenElement.lbVmMapDao = lbVmMapDao; + tungstenElement.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; + tungstenElement.ipAddressMgr = ipAddressMgr; + tungstenElement.configDao = configDao; + tungstenElement.lbDao = lbDao; + tungstenElement.accountMgr = accountMgr; + tungstenElement.hostDao = hostDao; + tungstenElement.messageBus = messageBus; + tungstenElement.physicalNetworkDao = physicalNetworkDao; + tungstenElement.tungstenService = tungstenService; + tungstenElement.tungstenProviderDao = tungstenProviderDao; + tungstenElement.dataCenterDao = dataCenterDao; + tungstenElement.vlanDao = vlanDao; + tungstenElement.networkServiceMapDao = networkServiceMapDao; + tungstenElement.podDao = hostPodDao; + tungstenElement.agentMgr = agentManager; + tungstenElement.networkDetailsDao = networkDetailsDao; + tungstenElement.networkDao = networkDao; + tungstenElement.physicalNetworkTrafficTypeDao = physicalNetworkTrafficTypeDao; + tungstenElement.tungstenFabricLBHealthMonitorDao = tungstenFabricLBHealthMonitorDao; + tungstenElement.loadBalancerCertMapDao = loadBalancerCertMapDao; + + apiDBUtilsMocked = Mockito.mockStatic(ApiDBUtils.class); + encryptionUtilMocked = Mockito.mockStatic(EncryptionUtil.class); + + when(tungstenService.getTungstenProjectFqn(any())).thenReturn("default-domain:default-project"); + } + + @After + public void tearDown() throws Exception { + apiDBUtilsMocked.close(); + encryptionUtilMocked.close(); + closeable.close(); + } + + @Test + public void canHandleSuccessTest() { + Network network = mock(Network.class); + Network.Service service = mock(Network.Service.class); + + when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(true); + + assertTrue(tungstenElement.canHandle(network, service)); + } + + @Test + public void canHandleFailTest() { + Network network = mock(Network.class); + Network.Service service = mock(Network.Service.class); + + when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(false); + + assertFalse(tungstenElement.canHandle(network, service)); + } + + @Test + public void applyStaticNatsAddRuleSuccessTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(false); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); + + assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsAddRuleFailTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(false); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); + + assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsRevokeRuleSuccessTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(true); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); + + assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsRevokeRuleFailTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(true); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); + + assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyLBRulesAddRuleSuccessTest() { + User caller = mock(User.class); + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); + LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); + LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); + List lbStickinessPolicyList = List.of(lbStickinessPolicy); + List loadBalancerVOList = List.of(loadBalancerVO); + TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); + LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); + when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); + List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); + + when(lbStickinessPolicy.getParams()).thenReturn(pairList); + when(loadBalancingRule1.getId()).thenReturn(1L); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); + when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); + when(loadBalancingRule1.getSourcePortStart()).thenReturn(443); + when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); + when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); + when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); + when(ip.addr()).thenReturn("10.10.10.10"); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); + when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); + when(EncryptionUtil.generateSignature(anyString(), anyString())).thenReturn("generatedString"); + when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); + + assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesAddRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); + LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); + LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); + List lbStickinessPolicyList = List.of(lbStickinessPolicy); + List loadBalancerVOList = List.of(loadBalancerVO); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); + List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); + TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); + + when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); + when(lbStickinessPolicy.getParams()).thenReturn(pairList); + when(loadBalancingRule1.getId()).thenReturn(1L); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); + when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); + when(loadBalancingRule1.getSourcePortStart()).thenReturn(80); + when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); + when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); + when(ip.addr()).thenReturn("10.10.10.10"); + when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("disabled"); + when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); + + assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesRevokeRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip1 = mock(Ip.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVOList1 = List.of(loadBalancerVO1); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Revoke); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip1); + when(ip1.addr()).thenReturn("10.10.10.10"); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); + when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList1); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(tungstenGuestNetworkIpAddressDao.remove(anyLong())).thenReturn(false); + + assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesRevokeRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); + LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); + LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); + List loadBalancingRuleList = List.of(loadBalancingRule); + List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(loadBalancingRule.getSourceIp()).thenReturn(ip); + when(loadBalancingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ip.addr()).thenReturn("10.10.10.10"); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); + when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); + when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); + + assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList)); + } + + @Test + public void applyPFRulesAddRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesAddRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesRevokeRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesRevokeRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void preparePublicNetworkTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenAnswer createTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenNetworkPolicyAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + + assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); + assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); + assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); + } + + @Test + public void prepareManagementNetworkTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + + assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); + assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); + assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); + } + + @Test(expected = CloudRuntimeException.class) + public void prepareWithExceptionTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + + tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext); + } + + @Test + public void releasePublicNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); + + when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + + assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); + } + + @Test + public void releaseManagementNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); + + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); + + assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); + } + + @Test(expected = CloudRuntimeException.class) + public void releaseWithExceptionTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); + + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenThrow(IllegalArgumentException.class); + + tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext); + } + + @Test + public void destroyTest() throws ConcurrentOperationException, ResourceUnavailableException { + IPAddressVO ipAddressVO1 = mock(IPAddressVO.class); + IPAddressVO ipAddressVO2 = mock(IPAddressVO.class); + Network network = mock(Network.class); + ReservationContext reservationContext = mock(ReservationContext.class); + List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); + TungstenAnswer tungstenDeleteFIPAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenDeleteNPAnswer = new MockTungstenAnswerFactory(true).get(); + + when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(tungstenDeleteNPAnswer); + + assertTrue(tungstenElement.destroy(network, reservationContext)); + } + + @Test + public void isReadyTest() { + PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); + PhysicalNetworkTrafficTypeVO physicalNetworkTrafficTypeVO = mock(PhysicalNetworkTrafficTypeVO.class); + + when(physicalNetworkTrafficTypeDao.findBy(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(physicalNetworkTrafficTypeVO); + + assertTrue(tungstenElement.isReady(physicalNetworkServiceProvider)); + } + + @Test + public void shutdownProviderInstancesTest() throws ConcurrentOperationException { + PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); + ReservationContext reservationContext = mock(ReservationContext.class); + PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + Network publicNetwork = mock(Network.class); + VlanVO vlanVO1 = mock(VlanVO.class); + VlanVO vlanVO2 = mock(VlanVO.class); + List vlanVOList = Arrays.asList(vlanVO1, vlanVO2); + HostPodVO hostPodVO1 = mock(HostPodVO.class); + HostPodVO hostPodVO2 = mock(HostPodVO.class); + List hostPodVOList = Arrays.asList(hostPodVO1, hostPodVO2); + + when(physicalNetworkDao.findById(anyLong())).thenReturn(physicalNetworkVO); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(vlanDao.listVlansByNetworkIdIncludingRemoved(anyLong())).thenReturn(vlanVOList); + when(hostPodDao.listByDataCenterId(anyLong())).thenReturn(hostPodVOList); + + assertTrue(tungstenElement.shutdownProviderInstances(physicalNetworkServiceProvider, reservationContext)); + verify(networkServiceMapDao, times(1)).deleteByNetworkId(anyLong()); + verify(tungstenService, times(2)).removePublicNetworkSubnet(any(VlanVO.class)); + verify(tungstenService, times(1)).deletePublicNetwork(anyLong()); + verify(tungstenService, times(2)).removeManagementNetworkSubnet(any(HostPodVO.class)); + verify(tungstenService, times(1)).deleteManagementNetwork(anyLong()); + } + + //@Test + //public void processConnectWithoutSecurityGroupTest() throws ConnectionException { + // Host host = mock(Host.class); + // StartupCommand startupCommand = mock(StartupCommand.class); + // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + // DataCenterVO dataCenterVO = mock(DataCenterVO.class); + // VlanVO vlanVO1 = mock(VlanVO.class); + // VlanVO vlanVO2 = mock(VlanVO.class); + // List vlanList = Arrays.asList(vlanVO1, vlanVO2); + // Network publicNetwork = mock(Network.class); + // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); +// + // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); + // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + // when(vlanDao.listByZone(anyLong())).thenReturn(vlanList); + // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); + // when(vlanVO1.getVlanGateway()).thenReturn("192.168.100.1"); + // when(vlanVO1.getVlanNetmask()).thenReturn("255.255.255.0"); + // when(vlanVO2.getVlanGateway()).thenReturn("192.168.101.1"); + // when(vlanVO2.getVlanNetmask()).thenReturn("255.255.255.0"); + // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); +// + // tungstenElement.processConnect(host, startupCommand, true); + // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + //} + + //@Test + //public void processConnectWithSecurityGroupTest() throws ConnectionException { + // Host host = mock(Host.class); + // StartupCommand startupCommand = mock(StartupCommand.class); + // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + // DataCenterVO dataCenterVO = mock(DataCenterVO.class); + // NetworkVO network = mock(NetworkVO.class); + // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); + // Network publicNetwork = mock(Network.class); +// + // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); + // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + // when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(Arrays.asList(network)); + // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); + // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); +// + // tungstenElement.processConnect(host, startupCommand, true); + // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + //} + + @Test + public void processHostAboutToBeRemovedWithSecurityGroupTest() { + HostVO hostVO = mock(HostVO.class); + TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + NetworkVO network = mock(NetworkVO.class); + + when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); + when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(List.of(network)); + + tungstenElement.processHostAboutToBeRemoved(1L); + verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + } + + @Test + public void processHostAboutToBeRemovedWithoutSecurityGroupTest() { + HostVO hostVO = mock(HostVO.class); + TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); + when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); + + tungstenElement.processHostAboutToBeRemoved(1L); + verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + } + + @Test + public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); + when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); + when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Egress); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + Ip ip = mock(Ip.class); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); + when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); + when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(ipAddressDao.findById(anyLong())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteNetworkPolicyAnswer = mock(TungstenAnswer.class); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void postStateTransitionEventWithVmStartedTest() { + StateMachine2.Transition transition = mock(StateMachine2.Transition.class); + VMInstanceVO vo = mock(VMInstanceVO.class); + Object opaque = mock(Object.class); + + when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Starting); + when(transition.getToState()).thenReturn(VirtualMachine.State.Running); + when(tungstenService.addTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); + + assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); + } + + @Test + public void postStateTransitionEventWithVmStopedTest() { + StateMachine2.Transition transition = mock(StateMachine2.Transition.class); + VMInstanceVO vo = mock(VMInstanceVO.class); + Object opaque = mock(Object.class); + + when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Stopping); + when(transition.getToState()).thenReturn(VirtualMachine.State.Stopped); + when(tungstenService.removeTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); + + assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); + } + + @Test + public void prepareMigrationTest() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + DeployDestination dest = mock(DeployDestination.class); + ReservationContext context = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO hostVO = mock(HostVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenElement.prepareMigration(nic, network, vm, dest, context)); + } + + @Test + public void rollbackMigration() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + ReservationContext src = mock(ReservationContext.class); + ReservationContext dest = mock(ReservationContext.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + HostVO hostVO = mock(HostVO.class); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(vm.getVirtualMachine()).thenReturn(virtualMachine); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + + tungstenElement.rollbackMigration(nic, network, vm, src, dest); + verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); + } + + @Test + public void commitMigration() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + ReservationContext src = mock(ReservationContext.class); + ReservationContext dest = mock(ReservationContext.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + HostVO hostVO = mock(HostVO.class); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(vm.getVirtualMachine()).thenReturn(virtualMachine); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + + tungstenElement.commitMigration(nic, network, vm, src, dest); + verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); + } } \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java index 45a6190f138c..908fcea37b4d 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java @@ -1,103 +1 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import com.cloud.agent.AgentManager; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenFabricUtilsTest { - @Mock - AgentManager agentMgr; - @Mock - TungstenProviderDao tungstenProviderDao; - - TungstenFabricUtils tungstenFabricUtils; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenFabricUtils = new TungstenFabricUtils(); - tungstenFabricUtils.agentMgr = agentMgr; - tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; - } - - @After - public void tearDown() throws Exception { - closeable.close(); - } - - @Test - public void sendTungstenCommandSuccessTest() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); - - assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithNullTungstenProvider() { - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithNullAnswer() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithFalseAnswer() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } -} \ No newline at end of file +// 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 org.apache.cloudstack.network.tungsten.service; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import com.cloud.agent.AgentManager; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.dao.TungstenProviderDao; import com.cloud.network.element.TungstenProviderVO; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class TungstenFabricUtilsTest { @Mock AgentManager agentMgr; @Mock TungstenProviderDao tungstenProviderDao; TungstenFabricUtils tungstenFabricUtils; AutoCloseable closeable; @Before public void setup() { closeable = MockitoAnnotations.openMocks(this); tungstenFabricUtils = new TungstenFabricUtils(); tungstenFabricUtils.agentMgr = agentMgr; tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; } @After public void tearDown() throws Exception { closeable.close(); } @Test public void sendTungstenCommandSuccessTest() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithNullTungstenProvider() { TungstenCommand tungstenCommand = mock(TungstenCommand.class); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithNullAnswer() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithFalseAnswer() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } } \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java index 6fa1beabb573..3eb61510b09f 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java @@ -1,1671 +1,1671 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -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 com.cloud.agent.AgentManager; -import com.cloud.agent.api.Answer; -import com.cloud.configuration.Config; -import com.cloud.configuration.ConfigurationManager; -import com.cloud.dc.DataCenter; -import com.cloud.dc.DataCenterIpAddressVO; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.dc.Vlan; -import com.cloud.dc.VlanVO; -import com.cloud.dc.dao.DataCenterDao; -import com.cloud.dc.dao.DataCenterIpAddressDao; -import com.cloud.domain.DomainVO; -import com.cloud.domain.dao.DomainDao; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.hypervisor.Hypervisor; -import com.cloud.network.IpAddressManager; -import com.cloud.network.Network; -import com.cloud.network.NetworkModel; -import com.cloud.network.NetworkService; -import com.cloud.network.Networks; -import com.cloud.network.TungstenGuestNetworkIpAddressVO; -import com.cloud.network.dao.FirewallRulesDao; -import com.cloud.network.dao.IPAddressDao; -import com.cloud.network.dao.IPAddressVO; -import com.cloud.network.dao.LoadBalancerCertMapDao; -import com.cloud.network.dao.LoadBalancerCertMapVO; -import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.NetworkDetailVO; -import com.cloud.network.dao.NetworkDetailsDao; -import com.cloud.network.dao.NetworkVO; -import com.cloud.network.dao.SslCertVO; -import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.rules.FirewallRule; -import com.cloud.network.rules.FirewallRuleVO; -import com.cloud.network.security.SecurityGroup; -import com.cloud.network.security.SecurityGroupManager; -import com.cloud.network.security.SecurityGroupRuleVO; -import com.cloud.network.security.SecurityGroupService; -import com.cloud.network.security.SecurityGroupVO; -import com.cloud.network.security.SecurityRule; -import com.cloud.network.security.TungstenSecurityGroupRuleVO; -import com.cloud.network.security.dao.SecurityGroupDao; -import com.cloud.network.security.dao.SecurityGroupRuleDao; -import com.cloud.network.security.dao.SecurityGroupVMMapDao; -import com.cloud.network.security.dao.TungstenSecurityGroupRuleDao; -import com.cloud.projects.ProjectManager; -import com.cloud.projects.ProjectVO; -import com.cloud.projects.dao.ProjectDao; -import com.cloud.user.AccountVO; -import com.cloud.user.DomainManager; -import com.cloud.user.dao.AccountDao; -import com.cloud.utils.db.EntityManager; -import com.cloud.utils.db.Transaction; -import com.cloud.utils.db.TransactionCallback; -import com.cloud.utils.net.Ip; -import com.cloud.utils.net.NetUtils; -import com.cloud.vm.Nic; -import com.cloud.vm.NicSecondaryIp; -import com.cloud.vm.NicVO; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.dao.NicDao; -import com.cloud.vm.dao.NicSecondaryIpDao; -import com.cloud.vm.dao.NicSecondaryIpVO; -import net.juniper.tungsten.api.ApiObjectBase; -import net.juniper.tungsten.api.ApiPropertyBase; -import net.juniper.tungsten.api.ObjectReference; -import net.juniper.tungsten.api.types.ActionListType; -import net.juniper.tungsten.api.types.AddressGroup; -import net.juniper.tungsten.api.types.AddressType; -import net.juniper.tungsten.api.types.ApplicationPolicySet; -import net.juniper.tungsten.api.types.FirewallPolicy; -import net.juniper.tungsten.api.types.FirewallRuleEndpointType; -import net.juniper.tungsten.api.types.FirewallRuleMatchTagsType; -import net.juniper.tungsten.api.types.FirewallSequence; -import net.juniper.tungsten.api.types.FirewallServiceGroupType; -import net.juniper.tungsten.api.types.FirewallServiceType; -import net.juniper.tungsten.api.types.Loadbalancer; -import net.juniper.tungsten.api.types.LogicalRouter; -import net.juniper.tungsten.api.types.NetworkPolicy; -import net.juniper.tungsten.api.types.PolicyEntriesType; -import net.juniper.tungsten.api.types.PolicyRuleType; -import net.juniper.tungsten.api.types.PortType; -import net.juniper.tungsten.api.types.ServiceGroup; -import net.juniper.tungsten.api.types.SubnetListType; -import net.juniper.tungsten.api.types.SubnetType; -import net.juniper.tungsten.api.types.Tag; -import net.juniper.tungsten.api.types.TagType; -import net.juniper.tungsten.api.types.VirtualMachine; -import net.juniper.tungsten.api.types.VirtualMachineInterface; -import net.juniper.tungsten.api.types.VirtualNetwork; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; -import org.apache.cloudstack.framework.messagebus.MessageBus; -import org.apache.cloudstack.framework.messagebus.MessageSubscriber; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkGatewayToLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkSubnetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecondaryIpAddressCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecurityGroupRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenVmToSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDefaultProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDomainCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpPoolCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenDomainCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpPoolCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenFabricNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenLoadBalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenNetworkDnsCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNicCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenVmCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkGatewayFromLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkSubnetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecondaryIpAddressCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecurityGroupRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateLoadBalancerServiceInstanceCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenDefaultSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerSslCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerStatsCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenVrouterConfigCommand; -import org.apache.cloudstack.network.tungsten.model.TungstenLogicalRouter; -import org.apache.cloudstack.network.tungsten.model.TungstenNetworkPolicy; -import org.apache.cloudstack.network.tungsten.model.TungstenRule; -import org.apache.cloudstack.network.tungsten.model.TungstenTag; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockedConstruction; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.test.util.ReflectionTestUtils; - -import java.util.Arrays; -import java.util.List; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenServiceImplTest { - @Mock - MessageBus messageBus; - @Mock - ProjectDao projectDao; - @Mock - AccountDao accountDao; - @Mock - NetworkDao networkDao; - @Mock - ConfigurationDao configDao; - @Mock - IPAddressDao ipAddressDao; - @Mock - EntityManager entityMgr; - @Mock - NetworkModel networkModel; - @Mock - DomainDao domainDao; - @Mock - LoadBalancerCertMapDao lbCertMapDao; - @Mock - FirewallRulesDao fwRulesDao; - @Mock - TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; - @Mock - TungstenProviderDao tungstenProviderDao; - @Mock - TungstenFabricUtils tungstenFabricUtils; - @Mock - AgentManager agentMgr; - @Mock - HostDao hostDao; - @Mock - NetworkDetailsDao networkDetailsDao; - @Mock - SecurityGroupDao securityGroupDao; - @Mock - NicDao nicDao; - @Mock - TungstenSecurityGroupRuleDao tungstenSecurityGroupRuleDao; - @Mock - SecurityGroupVMMapDao securityGroupVMMapDao; - @Mock - SecurityGroupRuleDao securityGroupRuleDao; - @Mock - SecurityGroupManager securityGroupManager; - @Mock - NicSecondaryIpDao nicSecIpDao; - @Mock - DataCenterIpAddressDao dataCenterIpAddressDao; - @Mock - DataCenterDao dataCenterDao; - @Mock - IpAddressManager ipAddressManager; - - TungstenServiceImpl tungstenService; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenService = new TungstenServiceImpl(); - tungstenService.projectDao = projectDao; - tungstenService.tungstenProviderDao = tungstenProviderDao; - tungstenService.networkModel = networkModel; - tungstenService.ipAddressDao = ipAddressDao; - tungstenService.tungstenFabricUtils = tungstenFabricUtils; - tungstenService.domainDao = domainDao; - tungstenService.accountDao = accountDao; - tungstenService.dataCenterIpAddressDao = dataCenterIpAddressDao; - tungstenService.networkDetailsDao = networkDetailsDao; - tungstenService.agentMgr = agentMgr; - tungstenService.hostDao = hostDao; - tungstenService.configDao = configDao; - tungstenService.fwRulesDao = fwRulesDao; - tungstenService.lbCertMapDao = lbCertMapDao; - tungstenService.entityMgr = entityMgr; - tungstenService.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; - tungstenService.securityGroupDao = securityGroupDao; - tungstenService.tungstenSecurityGroupRuleDao = tungstenSecurityGroupRuleDao; - tungstenService.securityGroupVMMapDao = securityGroupVMMapDao; - tungstenService.nicDao = nicDao; - tungstenService.nicSecIpDao = nicSecIpDao; - tungstenService.securityGroupRuleDao = securityGroupRuleDao; - tungstenService.securityGroupManager = securityGroupManager; - tungstenService.networkDao = networkDao; - tungstenService.dataCenterDao = dataCenterDao; - tungstenService.ipAddressManager = ipAddressManager; - tungstenService.messageBus = messageBus; - } - - @After - public void tearDown() throws Exception { - closeable.close(); - } - - @Test - public void createTungstenFloatingIpTest() throws Exception { - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer createTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - Ip ip = mock(Ip.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); - when(ipAddressVO.getAddress()).thenReturn(ip); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); - } - - @Test - public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer deleteTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); - } - - @Test - public void deleteTungstenDomainTest() throws Exception { - DomainVO domainVO = mock(DomainVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); - } - - @Test - public void deleteTungstenProjectTest() throws Exception { - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); - } - - @Test - public void addTungstenDefaultNetworkPolicyTest() { - TungstenRule tungstenRule = mock(TungstenRule.class); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - - assertTrue(tungstenService.addTungstenDefaultNetworkPolicy(1L, "default-domain:default-project", "policyName", "7279ed91-314e-45be-81b4-b10395fd2ae3" - , List.of(tungstenRule), 1, 1)); - } - - @Test - public void createManagementNetworkTest() { - Network managementNetwork = mock(Network.class); - VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); - VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenVrouterConfigCommand.class), anyLong())).thenReturn(updateTungstenGlobalVrouterConfigAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - - when(createTungstenNetworkAnswer.getApiObjectBase()).thenReturn(managementVirtualNetwork); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); - - assertTrue(tungstenService.createManagementNetwork(1L)); - } - - @Test - public void addManagementNetworkSubnetTest() { - HostPodVO hostPodVO = mock(HostPodVO.class); - Network managementNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); - - when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(managementNetwork.getCidr()).thenReturn("192.168.100.0/24"); - when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); - when(dataCenterIpAddressDao.mark(anyLong(), anyLong(), anyString())).thenReturn(true); - - assertTrue(tungstenService.addManagementNetworkSubnet(hostPodVO)); - } - - @Test - public void deleteManagementNetworkTest() { - Network managementNetwork = mock(Network.class); - TungstenAnswer deleteTungstenManagementPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenFabricPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenFabricPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); - when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); - - assertTrue(tungstenService.deleteManagementNetwork(1L)); - } - - @Test - public void removeManagementNetworkSubnetTest() { - HostPodVO hostPodVO = mock(HostPodVO.class); - Network managementNetwork = mock(Network.class); - TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); - - assertTrue(tungstenService.removeManagementNetworkSubnet(hostPodVO)); - verify(dataCenterIpAddressDao, times(1)).releasePodIpAddress(anyLong()); - } - - @Test - public void createPublicNetworkTest() { - Network publicNetwork = mock(Network.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createPublicNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(createPublicNetworkAnswer.getApiObjectBase()).thenReturn(virtualNetwork); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); - when(virtualNetwork.getQualifiedName()).thenReturn(Arrays.asList("default-domain", "default-project", "publicNetwork")); - - assertTrue(tungstenService.createPublicNetwork(1L)); - } - - @Test - public void addPublicNetworkSubnetTest() { - VlanVO vlanVO = mock(VlanVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(vlanVO.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); - when(vlanVO.getVlanGateway()).thenReturn("192.168.100.1"); - when(vlanVO.getVlanNetmask()).thenReturn("255.255.255.0"); - when(publicNetwork.getCidr()).thenReturn("192.168.100.0/24"); - when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); - - assertTrue(tungstenService.addPublicNetworkSubnet(vlanVO)); - } - - @Test - public void deletePublicNetworkTest() { - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); - - assertTrue(tungstenService.deletePublicNetwork(1L)); - } - - @Test - public void removePublicNetworkSubnetTest() { - VlanVO vlanVO = mock(VlanVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - - assertTrue(tungstenService.removePublicNetworkSubnet(vlanVO)); - verify(ipAddressDao, times(1)).unassignIpAddress(anyLong()); - } - - @Test - public void allocateDnsIpAddressTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); - when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); - when(tungstenGuestNetworkIpAddressDao.persist(any(TungstenGuestNetworkIpAddressVO.class))).thenReturn(tungstenGuestNetworkIpAddressVO); - when(networkVO.getCidr()).thenReturn("192.168.100.0/24"); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); - - assertTrue(tungstenService.allocateDnsIpAddress(networkVO, null, "test")); - } - - @Test - public void deallocateDnsIpAddressTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); - when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); - when(tungstenGuestNetworkIpAddressDao.findByNetworkAndGuestIpAddress(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); - - tungstenService.deallocateDnsIpAddress(networkVO, null, "test"); - verify(tungstenGuestNetworkIpAddressDao, times(1)).expunge(anyLong()); - } - - @Test - public void subscribeTungstenEventTest() { - tungstenService.subscribeTungstenEvent(); - - verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_ASSIGN_IPADDR_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_RELEASE_IPADDR_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_APPLY_NETWORK_POLICY_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_CREATE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_DELETE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_DELETE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_SYNC_TUNGSTEN_DB_WITH_DOMAINS_AND_PROJECTS_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_CREATE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_DELETE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_ADD_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_REMOVE_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_ASSIGN_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_RELEASE_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); - } - - @Test - public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { - DomainVO domainVO = mock(DomainVO.class); - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer createTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenDefaultProjectAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - - when(domainDao.listAll()).thenReturn(List.of(domainVO)); - when(projectDao.listAll()).thenReturn(List.of(projectVO)); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDomainCommand.class), anyLong())).thenReturn(createTungstenDomainAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenProjectCommand.class), anyLong())).thenReturn(createTungstenProjectAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDefaultProjectCommand.class), anyLong())).thenReturn(createTungstenDefaultProjectAnswer); - when(domainDao.findById(anyLong())).thenReturn(domainVO); - - assertTrue(tungstenService.syncTungstenDbWithCloudstackProjectsAndDomains()); - } - - @Test - public void updateLoadBalancerTest() { - Network network = mock(Network.class); - LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); - Network publicNetwork = mock(Network.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - HostVO hostVO = mock(HostVO.class); - TungstenAnswer getTungstenLoadBalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new MockTungstenAnswerFactory(true).get(); - Answer updateTungstenLoadbalancerStatsAnswer = mock(Answer.class); - Answer updateTungstenLoadbalancerSslAnswer = mock(Answer.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); - SslCertVO sslCertVO = mock(SslCertVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - Ip ip = mock(Ip.class); - AccountVO accountVO = mock(AccountVO.class); - Loadbalancer loadbalancer = mock(Loadbalancer.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(hostDao.listAllHostsByZoneAndHypervisorType(anyLong(), eq(Hypervisor.HypervisorType.KVM))).thenReturn(List.of(hostVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenLoadBalancerCommand.class), anyLong())).thenReturn(getTungstenLoadBalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateLoadBalancerServiceInstanceCommand.class), anyLong())).thenReturn(updateLoadBalancerServiceInstanceAnswer); - when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerStatsCommand.class))).thenReturn(updateTungstenLoadbalancerStatsAnswer); - when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerSslCommand.class))).thenReturn(updateTungstenLoadbalancerSslAnswer); - when(updateTungstenLoadbalancerStatsAnswer.getResult()).thenReturn(true); - when(updateTungstenLoadbalancerSslAnswer.getResult()).thenReturn(true); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); - when(fwRulesDao.listByIpAndPurposeAndNotRevoked(anyLong(), eq(FirewallRule.Purpose.LoadBalancing))).thenReturn(List.of(firewallRuleVO)); - when(lbCertMapDao.findByLbRuleId(anyLong())).thenReturn(loadBalancerCertMapVO); - when(entityMgr.findById(eq(SslCertVO.class), anyLong())).thenReturn(sslCertVO); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(loadBalancingRule.getSourceIp()).thenReturn(ip); - when(accountDao.findById(anyLong())).thenReturn(accountVO); - when(ip.addr()).thenReturn("192.168.100.100"); - when(getTungstenLoadBalancerAnswer.getApiObjectBase()).thenReturn(loadbalancer); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); - - assertTrue(tungstenService.updateLoadBalancer(network, loadBalancingRule)); - } - - @Test - public void createTungstenSecurityGroupTest() { - SecurityGroup securityGroup = mock(SecurityGroup.class); - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - DomainVO domainVO = mock(DomainVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer createTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(domainDao.findById(anyLong())).thenReturn(domainVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenSecurityGroupCommand.class), anyLong())).thenReturn(createTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - - try (MockedStatic transactionMocked = Mockito.mockStatic(Transaction.class)) { - transactionMocked.when(() -> Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); - assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); - } - } - - @Test - public void deleteTungstenSecurityGroupTest() { - SecurityGroup securityGroup = mock(SecurityGroup.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); - - assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); - } - - @Test - public void addTungstenSecurityGroupEgressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - NicVO nicVO = mock(NicVO.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); - when(tungstenSecurityGroupRuleDao.findDefaultSecurityRule(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); - when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); - when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(securityRule.getAllowedNetworkId()).thenReturn(1L); - - assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); - } - - @Test - public void addTungstenSecurityGroupIngressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); - when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); - when(securityRule.getAllowedNetworkId()).thenReturn(null); - - assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); - } - - @Test - public void removeTungstenSecurityGroupEgressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NicVO nicVO = mock(NicVO.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); - when(securityRule.getType()).thenReturn("egress"); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(securityRule.getAllowedNetworkId()).thenReturn(1L); - when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(tungstenSecurityGroupRuleDao.findBySecurityGroupAndRuleTypeAndRuleTarget(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); - - assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); - } - - @Test - public void removeTungstenSecurityGroupIngressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(securityRule.getAllowedNetworkId()).thenReturn(null); - - assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); - } - - @Test - public void addTungstenNicSecondaryIpAddressTest() { - NicSecondaryIp nicSecondaryIp = mock(NicSecondaryIp.class); - Network network = mock(Network.class); - DataCenter dataCenter = mock(DataCenter.class); - Nic nic = mock(Nic.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer addTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); - when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); - when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); - when(entityMgr.findById(eq(Nic.class), anyLong())).thenReturn(nic); - when(nicSecondaryIp.getIp4Address()).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(addTungstenSecondaryIpAddressAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); - when(network.getGuestType()).thenReturn(Network.GuestType.Shared); - when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); - when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - - assertTrue(tungstenService.addTungstenNicSecondaryIpAddress(1L)); - } - - @Test - public void removeTungstenNicSecondaryIpAddressTest() { - NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); - Network network = mock(Network.class); - DataCenter dataCenter = mock(DataCenter.class); - TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); - when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - - when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); - when(network.getGuestType()).thenReturn(Network.GuestType.Shared); - when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); - when(nicSecondaryIpVO.getIp4Address()).thenReturn("192.168.100.100"); - - assertTrue(tungstenService.removeTungstenNicSecondaryIpAddress(nicSecondaryIpVO)); - } - - @Test - public void createTungstenPolicyTest() { - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(createTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - - assertNotNull(tungstenService.createTungstenPolicy(1L, "test")); - } - - @Test - public void addTungstenPolicyRuleTest() throws Exception { - TungstenAnswer addTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenPolicyRuleCommand.class), anyLong())).thenReturn(addTungstenPolicyRuleAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(addTungstenPolicyRuleAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - try (MockedConstruction ignored = - Mockito.mockConstruction(AddTungstenPolicyRuleCommand.class, (mock, context) -> { - when(mock.getUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - })) { - - assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", - "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, - "network2", "192.168.200.200", 32, 80, 80)); - } - } - - @Test - public void listTungstenPolicyTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer listTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findById(anyLong())).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyCommand.class), anyLong())).thenReturn(listTungstenPolicyAnswer); - when(listTungstenPolicyAnswer.getTungstenModelList()).thenReturn(List.of(tungstenNetworkPolicy)); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn( - List.of(virtualNetwork)); - - assertNotNull(tungstenService.listTungstenPolicy(1L, 2L, 3L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenNetworkTest() { - TungstenAnswer listTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNetworkCommand.class), anyLong())).thenReturn(listTungstenNetworkAnswer); - doReturn(List.of(virtualNetwork)).when(listTungstenNetworkAnswer).getApiObjectBaseList(); - when((virtualNetwork.getName())).thenReturn("guestNetwork1"); - - assertNotNull(tungstenService.listTungstenNetwork(1L, "948f421c-edde-4518-a391-09299cc25dc2", false)); - } - - @Test - public void listTungstenNicTest() { - TungstenAnswer listTungstenNicAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNicCommand.class), anyLong())).thenReturn(listTungstenNicAnswer); - doReturn(List.of(virtualMachineInterface)).when(listTungstenNicAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenNic(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenVmTest() { - TungstenAnswer listTungstenVmAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenVmCommand.class), anyLong())).thenReturn(listTungstenVmAnswer); - doReturn(List.of(virtualMachine)).when(listTungstenVmAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenVm(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenPolicyTest() { - TungstenAnswer deleteTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); - - assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenPolicyRuleWithRuleUuidTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); - doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenPolicyRuleWithAllRuleTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); - doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", null)); - } - - @Test - public void removeTungstenPolicyRuleTest() { - TungstenAnswer removeTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyRuleCommand.class), anyLong())).thenReturn(removeTungstenPolicyRuleAnswer); - when(removeTungstenPolicyRuleAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void createTungstenTagTest() { - TungstenAnswer createTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagCommand.class), anyLong())).thenReturn(createTungstenTagAnswer); - when(createTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); - doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); - doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); - doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); - - assertNotNull(tungstenService.createTungstenTag(1L, "testTag", "testTagType")); - } - - @Test - public void createTungstenTagTypeTest() { - TungstenAnswer createTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); - TagType tagtype = mock(TagType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(createTungstenTagTypeAnswer.getApiObjectBase()).thenReturn(tagtype); - - assertNotNull(tungstenService.createTungstenTagType(1L, "testTagType")); - } - - @Test - public void listTungstenTagsTest() { - TungstenAnswer listTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagCommand.class), anyLong())).thenReturn(listTungstenTagAnswer); - when(listTungstenTagAnswer.getTungstenModelList()).thenReturn(List.of(tungstenTag)); - when(tungstenTag.getTag()).thenReturn(tag); - doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); - doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); - doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); - doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); - - assertNotNull(tungstenService.listTungstenTags(1L, "948f421c-edde-4518-a391-09299cc25dc2" - , "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", "a329662e-1805-4a89-9b05-2b818ea35978", - "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); - } - - @Test - public void listTungstenTagTypesTest() { - TungstenAnswer listTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); - TagType tagtype = mock(TagType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagTypeCommand.class), anyLong())).thenReturn(listTungstenTagTypeAnswer); - doReturn(List.of(tagtype)).when(listTungstenTagTypeAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenTagTypes(1L, "testTagType")); - } - - @Test - public void deleteTungstenTagTest() { - TungstenAnswer deleteTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); - - assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenTagTypeTest() { - TungstenAnswer deleteTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); - - assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void applyTungstenPolicyTest() { - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(applyTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.applyTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", 1, 1)); - } - - @Test - public void applyTungstenTagTest() { - TungstenAnswer applyTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenTagCommand.class), anyLong())).thenReturn(applyTungstenTagAnswer); - when(applyTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); - when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); - when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); - - assertNotNull(tungstenService.applyTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85") - , List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb" - , "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); - } - - @Test - public void removeTungstenPolicyTest() { - TungstenAnswer removeTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyCommand.class), anyLong())).thenReturn(removeTungstenPolicyAnswer); - when(removeTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void removeTungstenTagTest() { - TungstenAnswer removeTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenTagCommand.class), anyLong())).thenReturn(removeTungstenTagAnswer); - when(removeTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); - when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); - when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); - - assertNotNull(tungstenService.removeTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), - List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85"), - List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", null, - "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb")); - } - - @Test - public void createTungstenAddressGroupTest() { - TungstenAnswer createTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); - AddressGroup addressGroup = mock(AddressGroup.class); - SubnetListType subnetListType = mock(SubnetListType.class); - SubnetType subnetType = mock(SubnetType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenAddressGroupCommand.class), anyLong())).thenReturn(createTungstenAddressGroupAnswer); - when(createTungstenAddressGroupAnswer.getApiObjectBase()).thenReturn(addressGroup); - when(addressGroup.getPrefix()).thenReturn(subnetListType); - when(subnetListType.getSubnet()).thenReturn(List.of(subnetType)); - - assertNotNull(tungstenService.createTungstenAddressGroup(1L, "test", "192.168.100.0", 24)); - } - - @Test - public void createTungstenServiceGroupTest() { - TungstenAnswer createTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); - ServiceGroup serviceGroup = mock(ServiceGroup.class); - FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); - FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenServiceGroupCommand.class), anyLong())).thenReturn(createTungstenServiceGroupAnswer); - when(createTungstenServiceGroupAnswer.getApiObjectBase()).thenReturn(serviceGroup); - when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); - when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); - when(firewallServiceType.getDstPorts()).thenReturn(portType); - - assertNotNull(tungstenService.createTungstenServiceGroup(1L, "test", "tcp", 80, 80)); - } - - @Test - public void createTungstenFirewallRuleTest() { - TungstenAnswer createTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); - net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); - ActionListType actionListType = mock(ActionListType.class); - ObjectReference serviceGroup = mock(ObjectReference.class); - FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); - FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); - FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallRuleCommand.class), anyLong())).thenReturn(createTungstenFirewallRuleAnswer); - when(createTungstenFirewallRuleAnswer.getApiObjectBase()).thenReturn(firewallRule); - when(firewallRule.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); - when(serviceGroup.getReferredName()).thenReturn(List.of("service")); - when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); - when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); - when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); - when(firewallRuleEndpointType2.getTags()).thenReturn(null); - when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); - when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); - - assertNotNull(tungstenService.createTungstenFirewallRule(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "test", "pass", "948f421c-edde-4518-a391-09299cc25dc2", - "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", null, "<>", "a329662e-1805-4a89-9b05-2b818ea35978" - , "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", null, "df8e4490-2a40-4d63-a6f3-1f829ffe4fc6", 1)); - } - - @Test - public void createTungstenFirewallPolicyTest() { - TungstenAnswer createTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(createTungstenFirewallPolicyAnswer); - when(createTungstenFirewallPolicyAnswer.getApiObjectBase()).thenReturn(firewallPolicy); - when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.createTungstenFirewallPolicy(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652","test", 1)); - } - - @Test - public void createTungstenApplicationPolicySetTest() { - TungstenAnswer createTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - ObjectReference objectReference = mock(ObjectReference.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(createTungstenApplicationPolicySetAnswer); - when(createTungstenApplicationPolicySetAnswer.getApiObjectBase()).thenReturn(applicationPolicySet); - when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); - when(objectReference.getReferredName()).thenReturn(List.of("tag")); - when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.createTungstenApplicationPolicySet(1L, "test")); - } - - @Test - public void listTungstenApplicationPolicySetTest() { - TungstenAnswer listTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - ObjectReference objectReference = mock(ObjectReference.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(listTungstenApplicationPolicySetAnswer); - doReturn(List.of(applicationPolicySet)).when(listTungstenApplicationPolicySetAnswer).getApiObjectBaseList(); - when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); - when(objectReference.getReferredName()).thenReturn(List.of("tag")); - when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.listTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenFirewallPolicyTest() { - TungstenAnswer listTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(listTungstenFirewallPolicyAnswer); - doReturn(List.of(firewallPolicy)).when(listTungstenFirewallPolicyAnswer).getApiObjectBaseList(); - when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.listTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenFirewallRuleTest() { - TungstenAnswer listTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); - net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); - ActionListType actionListType = mock(ActionListType.class); - ObjectReference serviceGroup = mock(ObjectReference.class); - FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); - FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); - FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallRuleCommand.class), anyLong())).thenReturn(listTungstenFirewallRuleAnswer); - doReturn(List.of(firewallRule)).when(listTungstenFirewallRuleAnswer).getApiObjectBaseList(); - when(firewallRule.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); - when(serviceGroup.getReferredName()).thenReturn(List.of("service")); - when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); - when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); - when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); - when(firewallRuleEndpointType2.getTags()).thenReturn(null); - when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); - when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); - - assertNotNull(tungstenService.listTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", - "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenAddressGroupTest() { - TungstenAnswer listTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); - AddressGroup addressGroup = mock(AddressGroup.class); - SubnetListType subnetListType = mock(SubnetListType.class); - SubnetType subnetType = mock(SubnetType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenAddressGroupCommand.class), anyLong())).thenReturn(listTungstenAddressGroupAnswer); - doReturn(List.of(addressGroup)).when(listTungstenAddressGroupAnswer).getApiObjectBaseList(); - when(addressGroup.getPrefix()).thenReturn(subnetListType); - when(subnetListType.getSubnet()).thenReturn( - List.of(subnetType)); - - assertNotNull(tungstenService.listTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenServiceGroupTest() { - TungstenAnswer listTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); - ServiceGroup serviceGroup = mock(ServiceGroup.class); - FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); - FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenServiceGroupCommand.class), anyLong())).thenReturn(listTungstenServiceGroupAnswer); - doReturn(List.of(serviceGroup)).when(listTungstenServiceGroupAnswer).getApiObjectBaseList(); - when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); - when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); - when(firewallServiceType.getDstPorts()).thenReturn(portType); - - assertNotNull(tungstenService.listTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenApplicationPolicySetTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenFirewallPolicyTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenFirewallRuleTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenServiceGroupTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenAddressGroupTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void createSharedNetworkTest() { - Network network = mock(Network.class); - Vlan vlan = mock(Vlan.class); - AccountVO accountVO = mock(AccountVO.class); - TungstenAnswer createTungstenSharedNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - HostVO hostVO = mock(HostVO.class); - Answer answer = mock(Answer.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); - - when(accountDao.findById(anyLong())).thenReturn(accountVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenSharedNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(network.getMode()).thenReturn(Networks.Mode.Dhcp); - when(network.getCidr()).thenReturn("192.168.100.0/24"); - when(vlan.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); - when(vlan.getVlanGateway()).thenReturn("192.168.100.1"); - when(vlan.getIp6Gateway()).thenReturn("fd00::1"); - when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(hostDao.findByPublicIp(anyString())).thenReturn(hostVO); - when(agentMgr.easySend(anyLong(), any(SetupTungstenVRouterCommand.class))).thenReturn(answer); - when(answer.getResult()).thenReturn(true); - when(vlan.getIp6Cidr()).thenReturn("fd00::1/64"); - when(vlan.getIp6Range()).thenReturn("fd00::100-fd00::200"); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.1.150"); - when(createTungstenSharedNetworkAnswer.getApiObjectBase()).thenReturn(apiObjectBase); - when(apiObjectBase.getQualifiedName()).thenReturn(List.of("network")); - when(tungstenProviderVO.getGateway()).thenReturn("192.168.100.1"); - - assertTrue(tungstenService.createSharedNetwork(network, vlan)); - } - - @Test - public void addTungstenVmSecurityGroupTest() { - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenVmToSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - NicVO nicVO = mock(NicVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenVmToSecurityGroupCommand.class), anyLong())).thenReturn(addTungstenVmToSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); - when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - - assertTrue(tungstenService.addTungstenVmSecurityGroup(vmInstanceVO)); - } - - @Test - public void removeTungstenVmSecurityGroupTest() { - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - NicVO nicVO = mock(NicVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - - assertTrue(tungstenService.removeTungstenVmSecurityGroup(vmInstanceVO)); - } - - @Test - public void createRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.createRoutingLogicalRouter(1L, "default-domain:default-project", "testLR")); - } - - @Test - public void addNetworkGatewayToLogicalRouterTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findByUuid(anyString())).thenReturn(networkVO); - when(ipAddressManager.acquireLastGuestIpAddress(any(Network.class))).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkGatewayToLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.addNetworkGatewayToLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModelList()).thenReturn(List.of(tungstenLogicalRouter)); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.listRoutingLogicalRouter(1L, null, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void removeNetworkGatewayFromLogicalRouterTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findByUuid(anyString())).thenReturn(networkVO); - when(tungstenGuestNetworkIpAddressDao.findByNetworkAndLogicalRouter(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkGatewayFromLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeNetworkGatewayFromLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void deleteLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +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 com.cloud.agent.AgentManager; +import com.cloud.agent.api.Answer; +import com.cloud.configuration.Config; +import com.cloud.configuration.ConfigurationManager; +import com.cloud.dc.DataCenter; +import com.cloud.dc.DataCenterIpAddressVO; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.HostPodVO; +import com.cloud.dc.Vlan; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.DataCenterIpAddressDao; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.hypervisor.Hypervisor; +import com.cloud.network.IpAddressManager; +import com.cloud.network.Network; +import com.cloud.network.NetworkModel; +import com.cloud.network.NetworkService; +import com.cloud.network.Networks; +import com.cloud.network.TungstenGuestNetworkIpAddressVO; +import com.cloud.network.dao.FirewallRulesDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.LoadBalancerCertMapDao; +import com.cloud.network.dao.LoadBalancerCertMapVO; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDetailVO; +import com.cloud.network.dao.NetworkDetailsDao; +import com.cloud.network.dao.NetworkVO; +import com.cloud.network.dao.SslCertVO; +import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.security.SecurityGroup; +import com.cloud.network.security.SecurityGroupManager; +import com.cloud.network.security.SecurityGroupRuleVO; +import com.cloud.network.security.SecurityGroupService; +import com.cloud.network.security.SecurityGroupVO; +import com.cloud.network.security.SecurityRule; +import com.cloud.network.security.TungstenSecurityGroupRuleVO; +import com.cloud.network.security.dao.SecurityGroupDao; +import com.cloud.network.security.dao.SecurityGroupRuleDao; +import com.cloud.network.security.dao.SecurityGroupVMMapDao; +import com.cloud.network.security.dao.TungstenSecurityGroupRuleDao; +import com.cloud.projects.ProjectManager; +import com.cloud.projects.ProjectVO; +import com.cloud.projects.dao.ProjectDao; +import com.cloud.user.AccountVO; +import com.cloud.user.DomainManager; +import com.cloud.user.dao.AccountDao; +import com.cloud.utils.db.EntityManager; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.db.TransactionCallback; +import com.cloud.utils.net.Ip; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.Nic; +import com.cloud.vm.NicSecondaryIp; +import com.cloud.vm.NicVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.dao.NicDao; +import com.cloud.vm.dao.NicSecondaryIpDao; +import com.cloud.vm.dao.NicSecondaryIpVO; +import net.juniper.tungsten.api.ApiObjectBase; +import net.juniper.tungsten.api.ApiPropertyBase; +import net.juniper.tungsten.api.ObjectReference; +import net.juniper.tungsten.api.types.ActionListType; +import net.juniper.tungsten.api.types.AddressGroup; +import net.juniper.tungsten.api.types.AddressType; +import net.juniper.tungsten.api.types.ApplicationPolicySet; +import net.juniper.tungsten.api.types.FirewallPolicy; +import net.juniper.tungsten.api.types.FirewallRuleEndpointType; +import net.juniper.tungsten.api.types.FirewallRuleMatchTagsType; +import net.juniper.tungsten.api.types.FirewallSequence; +import net.juniper.tungsten.api.types.FirewallServiceGroupType; +import net.juniper.tungsten.api.types.FirewallServiceType; +import net.juniper.tungsten.api.types.Loadbalancer; +import net.juniper.tungsten.api.types.LogicalRouter; +import net.juniper.tungsten.api.types.NetworkPolicy; +import net.juniper.tungsten.api.types.PolicyEntriesType; +import net.juniper.tungsten.api.types.PolicyRuleType; +import net.juniper.tungsten.api.types.PortType; +import net.juniper.tungsten.api.types.ServiceGroup; +import net.juniper.tungsten.api.types.SubnetListType; +import net.juniper.tungsten.api.types.SubnetType; +import net.juniper.tungsten.api.types.Tag; +import net.juniper.tungsten.api.types.TagType; +import net.juniper.tungsten.api.types.VirtualMachine; +import net.juniper.tungsten.api.types.VirtualMachineInterface; +import net.juniper.tungsten.api.types.VirtualNetwork; +import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.messagebus.MessageBus; +import org.apache.cloudstack.framework.messagebus.MessageSubscriber; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkGatewayToLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkSubnetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecondaryIpAddressCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecurityGroupRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenVmToSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDefaultProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDomainCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpPoolCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenDomainCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpPoolCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenFabricNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenLoadBalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenNetworkDnsCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNicCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenVmCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkGatewayFromLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkSubnetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecondaryIpAddressCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecurityGroupRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateLoadBalancerServiceInstanceCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenDefaultSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerSslCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerStatsCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenVrouterConfigCommand; +import org.apache.cloudstack.network.tungsten.model.TungstenLogicalRouter; +import org.apache.cloudstack.network.tungsten.model.TungstenNetworkPolicy; +import org.apache.cloudstack.network.tungsten.model.TungstenRule; +import org.apache.cloudstack.network.tungsten.model.TungstenTag; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockedConstruction; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; + +import java.util.Arrays; +import java.util.List; + +@RunWith(MockitoJUnitRunner.class) +public class TungstenServiceImplTest { + @Mock + MessageBus messageBus; + @Mock + ProjectDao projectDao; + @Mock + AccountDao accountDao; + @Mock + NetworkDao networkDao; + @Mock + ConfigurationDao configDao; + @Mock + IPAddressDao ipAddressDao; + @Mock + EntityManager entityMgr; + @Mock + NetworkModel networkModel; + @Mock + DomainDao domainDao; + @Mock + LoadBalancerCertMapDao lbCertMapDao; + @Mock + FirewallRulesDao fwRulesDao; + @Mock + TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; + @Mock + TungstenProviderDao tungstenProviderDao; + @Mock + TungstenFabricUtils tungstenFabricUtils; + @Mock + AgentManager agentMgr; + @Mock + HostDao hostDao; + @Mock + NetworkDetailsDao networkDetailsDao; + @Mock + SecurityGroupDao securityGroupDao; + @Mock + NicDao nicDao; + @Mock + TungstenSecurityGroupRuleDao tungstenSecurityGroupRuleDao; + @Mock + SecurityGroupVMMapDao securityGroupVMMapDao; + @Mock + SecurityGroupRuleDao securityGroupRuleDao; + @Mock + SecurityGroupManager securityGroupManager; + @Mock + NicSecondaryIpDao nicSecIpDao; + @Mock + DataCenterIpAddressDao dataCenterIpAddressDao; + @Mock + DataCenterDao dataCenterDao; + @Mock + IpAddressManager ipAddressManager; + + TungstenServiceImpl tungstenService; + + AutoCloseable closeable; + + @Before + public void setup() { + closeable = MockitoAnnotations.openMocks(this); + tungstenService = new TungstenServiceImpl(); + tungstenService.projectDao = projectDao; + tungstenService.tungstenProviderDao = tungstenProviderDao; + tungstenService.networkModel = networkModel; + tungstenService.ipAddressDao = ipAddressDao; + tungstenService.tungstenFabricUtils = tungstenFabricUtils; + tungstenService.domainDao = domainDao; + tungstenService.accountDao = accountDao; + tungstenService.dataCenterIpAddressDao = dataCenterIpAddressDao; + tungstenService.networkDetailsDao = networkDetailsDao; + tungstenService.agentMgr = agentMgr; + tungstenService.hostDao = hostDao; + tungstenService.configDao = configDao; + tungstenService.fwRulesDao = fwRulesDao; + tungstenService.lbCertMapDao = lbCertMapDao; + tungstenService.entityMgr = entityMgr; + tungstenService.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; + tungstenService.securityGroupDao = securityGroupDao; + tungstenService.tungstenSecurityGroupRuleDao = tungstenSecurityGroupRuleDao; + tungstenService.securityGroupVMMapDao = securityGroupVMMapDao; + tungstenService.nicDao = nicDao; + tungstenService.nicSecIpDao = nicSecIpDao; + tungstenService.securityGroupRuleDao = securityGroupRuleDao; + tungstenService.securityGroupManager = securityGroupManager; + tungstenService.networkDao = networkDao; + tungstenService.dataCenterDao = dataCenterDao; + tungstenService.ipAddressManager = ipAddressManager; + tungstenService.messageBus = messageBus; + } + + @After + public void tearDown() throws Exception { + closeable.close(); + } + + @Test + public void createTungstenFloatingIpTest() throws Exception { + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer createTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + Ip ip = mock(Ip.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); + when(ipAddressVO.getAddress()).thenReturn(ip); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); + } + + @Test + public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer deleteTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); + } + + @Test + public void deleteTungstenDomainTest() throws Exception { + DomainVO domainVO = mock(DomainVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); + } + + @Test + public void deleteTungstenProjectTest() throws Exception { + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); + } + + @Test + public void addTungstenDefaultNetworkPolicyTest() { + TungstenRule tungstenRule = mock(TungstenRule.class); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + + assertTrue(tungstenService.addTungstenDefaultNetworkPolicy(1L, "default-domain:default-project", "policyName", "7279ed91-314e-45be-81b4-b10395fd2ae3" + , List.of(tungstenRule), 1, 1)); + } + + @Test + public void createManagementNetworkTest() { + Network managementNetwork = mock(Network.class); + VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); + VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer createTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenVrouterConfigCommand.class), anyLong())).thenReturn(updateTungstenGlobalVrouterConfigAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + + when(createTungstenNetworkAnswer.getApiObjectBase()).thenReturn(managementVirtualNetwork); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); + + assertTrue(tungstenService.createManagementNetwork(1L)); + } + + @Test + public void addManagementNetworkSubnetTest() { + HostPodVO hostPodVO = mock(HostPodVO.class); + Network managementNetwork = mock(Network.class); + TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); + + when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(managementNetwork.getCidr()).thenReturn("192.168.100.0/24"); + when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); + when(dataCenterIpAddressDao.mark(anyLong(), anyLong(), anyString())).thenReturn(true); + + assertTrue(tungstenService.addManagementNetworkSubnet(hostPodVO)); + } + + @Test + public void deleteManagementNetworkTest() { + Network managementNetwork = mock(Network.class); + TungstenAnswer deleteTungstenManagementPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenFabricPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenFabricPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); + when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); + + assertTrue(tungstenService.deleteManagementNetwork(1L)); + } + + @Test + public void removeManagementNetworkSubnetTest() { + HostPodVO hostPodVO = mock(HostPodVO.class); + Network managementNetwork = mock(Network.class); + TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); + + assertTrue(tungstenService.removeManagementNetworkSubnet(hostPodVO)); + verify(dataCenterIpAddressDao, times(1)).releasePodIpAddress(anyLong()); + } + + @Test + public void createPublicNetworkTest() { + Network publicNetwork = mock(Network.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer createPublicNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(createPublicNetworkAnswer.getApiObjectBase()).thenReturn(virtualNetwork); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); + when(virtualNetwork.getQualifiedName()).thenReturn(Arrays.asList("default-domain", "default-project", "publicNetwork")); + + assertTrue(tungstenService.createPublicNetwork(1L)); + } + + @Test + public void addPublicNetworkSubnetTest() { + VlanVO vlanVO = mock(VlanVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(vlanVO.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); + when(vlanVO.getVlanGateway()).thenReturn("192.168.100.1"); + when(vlanVO.getVlanNetmask()).thenReturn("255.255.255.0"); + when(publicNetwork.getCidr()).thenReturn("192.168.100.0/24"); + when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); + + assertTrue(tungstenService.addPublicNetworkSubnet(vlanVO)); + } + + @Test + public void deletePublicNetworkTest() { + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); + + assertTrue(tungstenService.deletePublicNetwork(1L)); + } + + @Test + public void removePublicNetworkSubnetTest() { + VlanVO vlanVO = mock(VlanVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + + assertTrue(tungstenService.removePublicNetworkSubnet(vlanVO)); + verify(ipAddressDao, times(1)).unassignIpAddress(anyLong()); + } + + @Test + public void allocateDnsIpAddressTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); + when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); + when(tungstenGuestNetworkIpAddressDao.persist(any(TungstenGuestNetworkIpAddressVO.class))).thenReturn(tungstenGuestNetworkIpAddressVO); + when(networkVO.getCidr()).thenReturn("192.168.100.0/24"); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); + + assertTrue(tungstenService.allocateDnsIpAddress(networkVO, null, "test")); + } + + @Test + public void deallocateDnsIpAddressTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); + when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); + when(tungstenGuestNetworkIpAddressDao.findByNetworkAndGuestIpAddress(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); + + tungstenService.deallocateDnsIpAddress(networkVO, null, "test"); + verify(tungstenGuestNetworkIpAddressDao, times(1)).expunge(anyLong()); + } + + @Test + public void subscribeTungstenEventTest() { + tungstenService.subscribeTungstenEvent(); + + verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_ASSIGN_IPADDR_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_RELEASE_IPADDR_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_APPLY_NETWORK_POLICY_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_CREATE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_DELETE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_DELETE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_SYNC_TUNGSTEN_DB_WITH_DOMAINS_AND_PROJECTS_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_CREATE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_DELETE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_ADD_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_REMOVE_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_ASSIGN_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_RELEASE_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); + } + + @Test + public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { + DomainVO domainVO = mock(DomainVO.class); + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer createTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenDefaultProjectAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + + when(domainDao.listAll()).thenReturn(List.of(domainVO)); + when(projectDao.listAll()).thenReturn(List.of(projectVO)); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDomainCommand.class), anyLong())).thenReturn(createTungstenDomainAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenProjectCommand.class), anyLong())).thenReturn(createTungstenProjectAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDefaultProjectCommand.class), anyLong())).thenReturn(createTungstenDefaultProjectAnswer); + when(domainDao.findById(anyLong())).thenReturn(domainVO); + + assertTrue(tungstenService.syncTungstenDbWithCloudstackProjectsAndDomains()); + } + + @Test + public void updateLoadBalancerTest() { + Network network = mock(Network.class); + LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); + Network publicNetwork = mock(Network.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + HostVO hostVO = mock(HostVO.class); + TungstenAnswer getTungstenLoadBalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new MockTungstenAnswerFactory(true).get(); + Answer updateTungstenLoadbalancerStatsAnswer = mock(Answer.class); + Answer updateTungstenLoadbalancerSslAnswer = mock(Answer.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); + SslCertVO sslCertVO = mock(SslCertVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + Ip ip = mock(Ip.class); + AccountVO accountVO = mock(AccountVO.class); + Loadbalancer loadbalancer = mock(Loadbalancer.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(hostDao.listAllHostsByZoneAndHypervisorType(anyLong(), eq(Hypervisor.HypervisorType.KVM))).thenReturn(List.of(hostVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenLoadBalancerCommand.class), anyLong())).thenReturn(getTungstenLoadBalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateLoadBalancerServiceInstanceCommand.class), anyLong())).thenReturn(updateLoadBalancerServiceInstanceAnswer); + when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerStatsCommand.class))).thenReturn(updateTungstenLoadbalancerStatsAnswer); + when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerSslCommand.class))).thenReturn(updateTungstenLoadbalancerSslAnswer); + when(updateTungstenLoadbalancerStatsAnswer.getResult()).thenReturn(true); + when(updateTungstenLoadbalancerSslAnswer.getResult()).thenReturn(true); + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); + when(fwRulesDao.listByIpAndPurposeAndNotRevoked(anyLong(), eq(FirewallRule.Purpose.LoadBalancing))).thenReturn(List.of(firewallRuleVO)); + when(lbCertMapDao.findByLbRuleId(anyLong())).thenReturn(loadBalancerCertMapVO); + when(entityMgr.findById(eq(SslCertVO.class), anyLong())).thenReturn(sslCertVO); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(loadBalancingRule.getSourceIp()).thenReturn(ip); + when(accountDao.findById(anyLong())).thenReturn(accountVO); + when(ip.addr()).thenReturn("192.168.100.100"); + when(getTungstenLoadBalancerAnswer.getApiObjectBase()).thenReturn(loadbalancer); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); + + assertTrue(tungstenService.updateLoadBalancer(network, loadBalancingRule)); + } + + @Test + public void createTungstenSecurityGroupTest() { + SecurityGroup securityGroup = mock(SecurityGroup.class); + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + DomainVO domainVO = mock(DomainVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer createTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(domainDao.findById(anyLong())).thenReturn(domainVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenSecurityGroupCommand.class), anyLong())).thenReturn(createTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + + try (MockedStatic transactionMocked = Mockito.mockStatic(Transaction.class)) { + transactionMocked.when(() -> Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); + assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); + } + } + + @Test + public void deleteTungstenSecurityGroupTest() { + SecurityGroup securityGroup = mock(SecurityGroup.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); + + assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); + } + + @Test + public void addTungstenSecurityGroupEgressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + NicVO nicVO = mock(NicVO.class); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); + when(tungstenSecurityGroupRuleDao.findDefaultSecurityRule(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); + when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); + when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(securityRule.getAllowedNetworkId()).thenReturn(1L); + + assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); + } + + @Test + public void addTungstenSecurityGroupIngressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); + when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); + when(securityRule.getAllowedNetworkId()).thenReturn(null); + + assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); + } + + @Test + public void removeTungstenSecurityGroupEgressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NicVO nicVO = mock(NicVO.class); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); + when(securityRule.getType()).thenReturn("egress"); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(securityRule.getAllowedNetworkId()).thenReturn(1L); + when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(tungstenSecurityGroupRuleDao.findBySecurityGroupAndRuleTypeAndRuleTarget(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); + + assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); + } + + @Test + public void removeTungstenSecurityGroupIngressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(securityRule.getAllowedNetworkId()).thenReturn(null); + + assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); + } + + @Test + public void addTungstenNicSecondaryIpAddressTest() { + NicSecondaryIp nicSecondaryIp = mock(NicSecondaryIp.class); + Network network = mock(Network.class); + DataCenter dataCenter = mock(DataCenter.class); + Nic nic = mock(Nic.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer addTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); + when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); + when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); + when(entityMgr.findById(eq(Nic.class), anyLong())).thenReturn(nic); + when(nicSecondaryIp.getIp4Address()).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(addTungstenSecondaryIpAddressAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); + when(network.getGuestType()).thenReturn(Network.GuestType.Shared); + when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); + when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + + assertTrue(tungstenService.addTungstenNicSecondaryIpAddress(1L)); + } + + @Test + public void removeTungstenNicSecondaryIpAddressTest() { + NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); + Network network = mock(Network.class); + DataCenter dataCenter = mock(DataCenter.class); + TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); + when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + + when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); + when(network.getGuestType()).thenReturn(Network.GuestType.Shared); + when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); + when(nicSecondaryIpVO.getIp4Address()).thenReturn("192.168.100.100"); + + assertTrue(tungstenService.removeTungstenNicSecondaryIpAddress(nicSecondaryIpVO)); + } + + @Test + public void createTungstenPolicyTest() { + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(createTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + + assertNotNull(tungstenService.createTungstenPolicy(1L, "test")); + } + + @Test + public void addTungstenPolicyRuleTest() throws Exception { + TungstenAnswer addTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenPolicyRuleCommand.class), anyLong())).thenReturn(addTungstenPolicyRuleAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(addTungstenPolicyRuleAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + + try (MockedConstruction ignored = + Mockito.mockConstruction(AddTungstenPolicyRuleCommand.class, (mock, context) -> { + when(mock.getUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + })) { + + assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", + "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, + "network2", "192.168.200.200", 32, 80, 80)); + } + } + + @Test + public void listTungstenPolicyTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer listTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findById(anyLong())).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyCommand.class), anyLong())).thenReturn(listTungstenPolicyAnswer); + when(listTungstenPolicyAnswer.getTungstenModelList()).thenReturn(List.of(tungstenNetworkPolicy)); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn( + List.of(virtualNetwork)); + + assertNotNull(tungstenService.listTungstenPolicy(1L, 2L, 3L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenNetworkTest() { + TungstenAnswer listTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNetworkCommand.class), anyLong())).thenReturn(listTungstenNetworkAnswer); + doReturn(List.of(virtualNetwork)).when(listTungstenNetworkAnswer).getApiObjectBaseList(); + when((virtualNetwork.getName())).thenReturn("guestNetwork1"); + + assertNotNull(tungstenService.listTungstenNetwork(1L, "948f421c-edde-4518-a391-09299cc25dc2", false)); + } + + @Test + public void listTungstenNicTest() { + TungstenAnswer listTungstenNicAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNicCommand.class), anyLong())).thenReturn(listTungstenNicAnswer); + doReturn(List.of(virtualMachineInterface)).when(listTungstenNicAnswer).getApiObjectBaseList(); + + assertNotNull(tungstenService.listTungstenNic(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenVmTest() { + TungstenAnswer listTungstenVmAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenVmCommand.class), anyLong())).thenReturn(listTungstenVmAnswer); + doReturn(List.of(virtualMachine)).when(listTungstenVmAnswer).getApiObjectBaseList(); + + assertNotNull(tungstenService.listTungstenVm(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenPolicyTest() { + TungstenAnswer deleteTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); + + assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenPolicyRuleWithRuleUuidTest() { + TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); + doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + + assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listTungstenPolicyRuleWithAllRuleTest() { + TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); + doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + + assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", null)); + } + + @Test + public void removeTungstenPolicyRuleTest() { + TungstenAnswer removeTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyRuleCommand.class), anyLong())).thenReturn(removeTungstenPolicyRuleAnswer); + when(removeTungstenPolicyRuleAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.removeTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void createTungstenTagTest() { + TungstenAnswer createTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagCommand.class), anyLong())).thenReturn(createTungstenTagAnswer); + when(createTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); + doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); + doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); + doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); + + assertNotNull(tungstenService.createTungstenTag(1L, "testTag", "testTagType")); + } + + @Test + public void createTungstenTagTypeTest() { + TungstenAnswer createTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + TagType tagtype = mock(TagType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(createTungstenTagTypeAnswer.getApiObjectBase()).thenReturn(tagtype); + + assertNotNull(tungstenService.createTungstenTagType(1L, "testTagType")); + } + + @Test + public void listTungstenTagsTest() { + TungstenAnswer listTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagCommand.class), anyLong())).thenReturn(listTungstenTagAnswer); + when(listTungstenTagAnswer.getTungstenModelList()).thenReturn(List.of(tungstenTag)); + when(tungstenTag.getTag()).thenReturn(tag); + doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); + doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); + doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); + doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); + + assertNotNull(tungstenService.listTungstenTags(1L, "948f421c-edde-4518-a391-09299cc25dc2" + , "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", "a329662e-1805-4a89-9b05-2b818ea35978", + "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); + } + + @Test + public void listTungstenTagTypesTest() { + TungstenAnswer listTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + TagType tagtype = mock(TagType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagTypeCommand.class), anyLong())).thenReturn(listTungstenTagTypeAnswer); + doReturn(List.of(tagtype)).when(listTungstenTagTypeAnswer).getApiObjectBaseList(); + + assertNotNull(tungstenService.listTungstenTagTypes(1L, "testTagType")); + } + + @Test + public void deleteTungstenTagTest() { + TungstenAnswer deleteTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); + + assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenTagTypeTest() { + TungstenAnswer deleteTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); + + assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void applyTungstenPolicyTest() { + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(applyTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.applyTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", 1, 1)); + } + + @Test + public void applyTungstenTagTest() { + TungstenAnswer applyTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenTagCommand.class), anyLong())).thenReturn(applyTungstenTagAnswer); + when(applyTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); + when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); + when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); + + assertNotNull(tungstenService.applyTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85") + , List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb" + , "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); + } + + @Test + public void removeTungstenPolicyTest() { + TungstenAnswer removeTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyCommand.class), anyLong())).thenReturn(removeTungstenPolicyAnswer); + when(removeTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.removeTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void removeTungstenTagTest() { + TungstenAnswer removeTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenTagCommand.class), anyLong())).thenReturn(removeTungstenTagAnswer); + when(removeTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); + when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); + when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); + + assertNotNull(tungstenService.removeTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), + List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85"), + List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", null, + "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb")); + } + + @Test + public void createTungstenAddressGroupTest() { + TungstenAnswer createTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); + AddressGroup addressGroup = mock(AddressGroup.class); + SubnetListType subnetListType = mock(SubnetListType.class); + SubnetType subnetType = mock(SubnetType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenAddressGroupCommand.class), anyLong())).thenReturn(createTungstenAddressGroupAnswer); + when(createTungstenAddressGroupAnswer.getApiObjectBase()).thenReturn(addressGroup); + when(addressGroup.getPrefix()).thenReturn(subnetListType); + when(subnetListType.getSubnet()).thenReturn(List.of(subnetType)); + + assertNotNull(tungstenService.createTungstenAddressGroup(1L, "test", "192.168.100.0", 24)); + } + + @Test + public void createTungstenServiceGroupTest() { + TungstenAnswer createTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); + ServiceGroup serviceGroup = mock(ServiceGroup.class); + FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); + FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenServiceGroupCommand.class), anyLong())).thenReturn(createTungstenServiceGroupAnswer); + when(createTungstenServiceGroupAnswer.getApiObjectBase()).thenReturn(serviceGroup); + when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); + when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); + when(firewallServiceType.getDstPorts()).thenReturn(portType); + + assertNotNull(tungstenService.createTungstenServiceGroup(1L, "test", "tcp", 80, 80)); + } + + @Test + public void createTungstenFirewallRuleTest() { + TungstenAnswer createTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); + net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); + ActionListType actionListType = mock(ActionListType.class); + ObjectReference serviceGroup = mock(ObjectReference.class); + FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); + FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); + FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallRuleCommand.class), anyLong())).thenReturn(createTungstenFirewallRuleAnswer); + when(createTungstenFirewallRuleAnswer.getApiObjectBase()).thenReturn(firewallRule); + when(firewallRule.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); + when(serviceGroup.getReferredName()).thenReturn(List.of("service")); + when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); + when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); + when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); + when(firewallRuleEndpointType2.getTags()).thenReturn(null); + when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); + when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); + + assertNotNull(tungstenService.createTungstenFirewallRule(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "test", "pass", "948f421c-edde-4518-a391-09299cc25dc2", + "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", null, "<>", "a329662e-1805-4a89-9b05-2b818ea35978" + , "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", null, "df8e4490-2a40-4d63-a6f3-1f829ffe4fc6", 1)); + } + + @Test + public void createTungstenFirewallPolicyTest() { + TungstenAnswer createTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(createTungstenFirewallPolicyAnswer); + when(createTungstenFirewallPolicyAnswer.getApiObjectBase()).thenReturn(firewallPolicy); + when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.createTungstenFirewallPolicy(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652","test", 1)); + } + + @Test + public void createTungstenApplicationPolicySetTest() { + TungstenAnswer createTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + ObjectReference objectReference = mock(ObjectReference.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(createTungstenApplicationPolicySetAnswer); + when(createTungstenApplicationPolicySetAnswer.getApiObjectBase()).thenReturn(applicationPolicySet); + when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); + when(objectReference.getReferredName()).thenReturn(List.of("tag")); + when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.createTungstenApplicationPolicySet(1L, "test")); + } + + @Test + public void listTungstenApplicationPolicySetTest() { + TungstenAnswer listTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + ObjectReference objectReference = mock(ObjectReference.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(listTungstenApplicationPolicySetAnswer); + doReturn(List.of(applicationPolicySet)).when(listTungstenApplicationPolicySetAnswer).getApiObjectBaseList(); + when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); + when(objectReference.getReferredName()).thenReturn(List.of("tag")); + when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.listTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenFirewallPolicyTest() { + TungstenAnswer listTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(listTungstenFirewallPolicyAnswer); + doReturn(List.of(firewallPolicy)).when(listTungstenFirewallPolicyAnswer).getApiObjectBaseList(); + when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.listTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listTungstenFirewallRuleTest() { + TungstenAnswer listTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); + net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); + ActionListType actionListType = mock(ActionListType.class); + ObjectReference serviceGroup = mock(ObjectReference.class); + FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); + FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); + FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallRuleCommand.class), anyLong())).thenReturn(listTungstenFirewallRuleAnswer); + doReturn(List.of(firewallRule)).when(listTungstenFirewallRuleAnswer).getApiObjectBaseList(); + when(firewallRule.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); + when(serviceGroup.getReferredName()).thenReturn(List.of("service")); + when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); + when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); + when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); + when(firewallRuleEndpointType2.getTags()).thenReturn(null); + when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); + when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); + + assertNotNull(tungstenService.listTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", + "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listTungstenAddressGroupTest() { + TungstenAnswer listTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); + AddressGroup addressGroup = mock(AddressGroup.class); + SubnetListType subnetListType = mock(SubnetListType.class); + SubnetType subnetType = mock(SubnetType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenAddressGroupCommand.class), anyLong())).thenReturn(listTungstenAddressGroupAnswer); + doReturn(List.of(addressGroup)).when(listTungstenAddressGroupAnswer).getApiObjectBaseList(); + when(addressGroup.getPrefix()).thenReturn(subnetListType); + when(subnetListType.getSubnet()).thenReturn( + List.of(subnetType)); + + assertNotNull(tungstenService.listTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenServiceGroupTest() { + TungstenAnswer listTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); + ServiceGroup serviceGroup = mock(ServiceGroup.class); + FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); + FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenServiceGroupCommand.class), anyLong())).thenReturn(listTungstenServiceGroupAnswer); + doReturn(List.of(serviceGroup)).when(listTungstenServiceGroupAnswer).getApiObjectBaseList(); + when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); + when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); + when(firewallServiceType.getDstPorts()).thenReturn(portType); + + assertNotNull(tungstenService.listTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenApplicationPolicySetTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenFirewallPolicyTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenFirewallRuleTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenServiceGroupTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenAddressGroupTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void createSharedNetworkTest() { + Network network = mock(Network.class); + Vlan vlan = mock(Vlan.class); + AccountVO accountVO = mock(AccountVO.class); + TungstenAnswer createTungstenSharedNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + HostVO hostVO = mock(HostVO.class); + Answer answer = mock(Answer.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); + + when(accountDao.findById(anyLong())).thenReturn(accountVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenSharedNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(network.getMode()).thenReturn(Networks.Mode.Dhcp); + when(network.getCidr()).thenReturn("192.168.100.0/24"); + when(vlan.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); + when(vlan.getVlanGateway()).thenReturn("192.168.100.1"); + when(vlan.getIp6Gateway()).thenReturn("fd00::1"); + when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(hostDao.findByPublicIp(anyString())).thenReturn(hostVO); + when(agentMgr.easySend(anyLong(), any(SetupTungstenVRouterCommand.class))).thenReturn(answer); + when(answer.getResult()).thenReturn(true); + when(vlan.getIp6Cidr()).thenReturn("fd00::1/64"); + when(vlan.getIp6Range()).thenReturn("fd00::100-fd00::200"); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.1.150"); + when(createTungstenSharedNetworkAnswer.getApiObjectBase()).thenReturn(apiObjectBase); + when(apiObjectBase.getQualifiedName()).thenReturn(List.of("network")); + when(tungstenProviderVO.getGateway()).thenReturn("192.168.100.1"); + + assertTrue(tungstenService.createSharedNetwork(network, vlan)); + } + + @Test + public void addTungstenVmSecurityGroupTest() { + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); + TungstenAnswer addTungstenVmToSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + NicVO nicVO = mock(NicVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenVmToSecurityGroupCommand.class), anyLong())).thenReturn(addTungstenVmToSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); + when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + + assertTrue(tungstenService.addTungstenVmSecurityGroup(vmInstanceVO)); + } + + @Test + public void removeTungstenVmSecurityGroupTest() { + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + NicVO nicVO = mock(NicVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + + assertTrue(tungstenService.removeTungstenVmSecurityGroup(vmInstanceVO)); + } + + @Test + public void createRoutingLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.createRoutingLogicalRouter(1L, "default-domain:default-project", "testLR")); + } + + @Test + public void addNetworkGatewayToLogicalRouterTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findByUuid(anyString())).thenReturn(networkVO); + when(ipAddressManager.acquireLastGuestIpAddress(any(Network.class))).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkGatewayToLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.addNetworkGatewayToLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listRoutingLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModelList()).thenReturn(List.of(tungstenLogicalRouter)); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.listRoutingLogicalRouter(1L, null, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void removeNetworkGatewayFromLogicalRouterTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findByUuid(anyString())).thenReturn(networkVO); + when(tungstenGuestNetworkIpAddressDao.findByNetworkAndLogicalRouter(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkGatewayFromLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.removeNetworkGatewayFromLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void deleteLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } } \ No newline at end of file From 3985310dac3fe41ae9b42a636b3f36299ce8f692 Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Wed, 18 Oct 2023 13:12:26 -0400 Subject: [PATCH 07/12] Replace all \r with \n. --- .../service/TungstenFabricUtilsTest.java | 104 +++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java index 908fcea37b4d..d8e461fb6ae0 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java @@ -1 +1,103 @@ -// 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 org.apache.cloudstack.network.tungsten.service; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import com.cloud.agent.AgentManager; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.dao.TungstenProviderDao; import com.cloud.network.element.TungstenProviderVO; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class TungstenFabricUtilsTest { @Mock AgentManager agentMgr; @Mock TungstenProviderDao tungstenProviderDao; TungstenFabricUtils tungstenFabricUtils; AutoCloseable closeable; @Before public void setup() { closeable = MockitoAnnotations.openMocks(this); tungstenFabricUtils = new TungstenFabricUtils(); tungstenFabricUtils.agentMgr = agentMgr; tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; } @After public void tearDown() throws Exception { closeable.close(); } @Test public void sendTungstenCommandSuccessTest() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithNullTungstenProvider() { TungstenCommand tungstenCommand = mock(TungstenCommand.class); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithNullAnswer() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithFalseAnswer() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } } \ No newline at end of file +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.cloud.agent.AgentManager; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class TungstenFabricUtilsTest { + @Mock + AgentManager agentMgr; + @Mock + TungstenProviderDao tungstenProviderDao; + + TungstenFabricUtils tungstenFabricUtils; + + AutoCloseable closeable; + + @Before + public void setup() { + closeable = MockitoAnnotations.openMocks(this); + tungstenFabricUtils = new TungstenFabricUtils(); + tungstenFabricUtils.agentMgr = agentMgr; + tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; + } + + @After + public void tearDown() throws Exception { + closeable.close(); + } + + @Test + public void sendTungstenCommandSuccessTest() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); + + assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithNullTungstenProvider() { + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithNullAnswer() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithFalseAnswer() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } +} \ No newline at end of file From b613c99407560417a0441111a842acf24d103ec6 Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Fri, 20 Oct 2023 11:01:10 -0400 Subject: [PATCH 08/12] temp for re-uploading --- .../service/MockTungstenAnswerFactory.java | 35 - .../tungsten/service/TungstenElementTest.java | 1014 ---------- .../service/TungstenFabricUtilsTest.java | 103 - .../service/TungstenServiceImplTest.java | 1671 ----------------- 4 files changed, 2823 deletions(-) diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java index 0eeaae26e8cd..e69de29bb2d1 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java @@ -1,35 +0,0 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class MockTungstenAnswerFactory { - - TungstenAnswer tungstenAnswer; - MockTungstenAnswerFactory(boolean returnResult){ - tungstenAnswer=mock(TungstenAnswer.class); - when(tungstenAnswer.getResult()).thenReturn(returnResult); - } - TungstenAnswer get() { - return tungstenAnswer; - } - -} diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java index a9603ac1d3f3..e69de29bb2d1 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java @@ -1,1014 +0,0 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.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 com.cloud.agent.AgentManager; -import com.cloud.api.ApiDBUtils; -import com.cloud.configuration.Config; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.dc.VlanVO; -import com.cloud.dc.dao.DataCenterDao; -import com.cloud.dc.dao.HostPodDao; -import com.cloud.dc.dao.VlanDao; -import com.cloud.deploy.DeployDestination; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.hypervisor.Hypervisor; -import com.cloud.network.IpAddressManager; -import com.cloud.network.Network; -import com.cloud.network.NetworkModel; -import com.cloud.network.Networks; -import com.cloud.network.PhysicalNetworkServiceProvider; -import com.cloud.network.TungstenGuestNetworkIpAddressVO; -import com.cloud.network.dao.IPAddressDao; -import com.cloud.network.dao.IPAddressVO; -import com.cloud.network.dao.LoadBalancerCertMapDao; -import com.cloud.network.dao.LoadBalancerDao; -import com.cloud.network.dao.LoadBalancerVMMapDao; -import com.cloud.network.dao.LoadBalancerVMMapVO; -import com.cloud.network.dao.LoadBalancerVO; -import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.NetworkDetailsDao; -import com.cloud.network.dao.NetworkServiceMapDao; -import com.cloud.network.dao.NetworkVO; -import com.cloud.network.dao.PhysicalNetworkDao; -import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; -import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; -import com.cloud.network.dao.PhysicalNetworkVO; -import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.rules.FirewallRule; -import com.cloud.network.rules.FirewallRuleVO; -import com.cloud.network.rules.PortForwardingRule; -import com.cloud.network.rules.StaticNatImpl; -import com.cloud.user.AccountManager; -import com.cloud.user.User; -import com.cloud.uservm.UserVm; -import com.cloud.utils.EncryptionUtil; -import com.cloud.utils.Pair; -import com.cloud.utils.TungstenUtils; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.fsm.StateMachine2; -import com.cloud.utils.net.Ip; -import com.cloud.utils.net.NetUtils; -import com.cloud.vm.Nic; -import com.cloud.vm.NicProfile; -import com.cloud.vm.ReservationContext; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachineProfile; -import com.cloud.vm.dao.VMInstanceDao; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; -import org.apache.cloudstack.framework.messagebus.MessageBus; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenPortForwardingCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AssignTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkLoadbalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenVirtualMachineCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerListenerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVRouterPortCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmInterfaceCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ReleaseTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerHealthMonitorCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerMemberCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerPoolCommand; -import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorDao; -import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorVO; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; - -import java.util.Arrays; -import java.util.List; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenElementTest { - @Mock - TungstenFabricUtils tungstenFabricUtils; - @Mock - NetworkModel networkModel; - @Mock - IPAddressDao ipAddressDao; - @Mock - VMInstanceDao vmInstanceDao; - @Mock - LoadBalancerVMMapDao lbVmMapDao; - @Mock - TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; - @Mock - IpAddressManager ipAddressMgr; - @Mock - ConfigurationDao configDao; - @Mock - LoadBalancerDao lbDao; - @Mock - AccountManager accountMgr; - @Mock - HostDao hostDao; - @Mock - MessageBus messageBus; - @Mock - PhysicalNetworkTrafficTypeDao physicalNetworkTrafficTypeDao; - @Mock - PhysicalNetworkDao physicalNetworkDao; - @Mock - TungstenProviderDao tungstenProviderDao; - @Mock - DataCenterDao dataCenterDao; - @Mock - VlanDao vlanDao; - @Mock - NetworkServiceMapDao networkServiceMapDao; - @Mock - HostPodDao hostPodDao; - @Mock - NetworkDetailsDao networkDetailsDao; - @Mock - AgentManager agentManager; - @Mock - NetworkDao networkDao; - @Mock - TungstenService tungstenService; - @Mock - TungstenFabricLBHealthMonitorDao tungstenFabricLBHealthMonitorDao; - @Mock - LoadBalancerCertMapDao loadBalancerCertMapDao; - - TungstenElement tungstenElement; - - MockedStatic apiDBUtilsMocked; - - MockedStatic encryptionUtilMocked; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenElement = new TungstenElement(); - tungstenElement.tungstenFabricUtils = tungstenFabricUtils; - tungstenElement.networkModel = networkModel; - tungstenElement.ipAddressDao = ipAddressDao; - tungstenElement.vmInstanceDao = vmInstanceDao; - tungstenElement.lbVmMapDao = lbVmMapDao; - tungstenElement.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; - tungstenElement.ipAddressMgr = ipAddressMgr; - tungstenElement.configDao = configDao; - tungstenElement.lbDao = lbDao; - tungstenElement.accountMgr = accountMgr; - tungstenElement.hostDao = hostDao; - tungstenElement.messageBus = messageBus; - tungstenElement.physicalNetworkDao = physicalNetworkDao; - tungstenElement.tungstenService = tungstenService; - tungstenElement.tungstenProviderDao = tungstenProviderDao; - tungstenElement.dataCenterDao = dataCenterDao; - tungstenElement.vlanDao = vlanDao; - tungstenElement.networkServiceMapDao = networkServiceMapDao; - tungstenElement.podDao = hostPodDao; - tungstenElement.agentMgr = agentManager; - tungstenElement.networkDetailsDao = networkDetailsDao; - tungstenElement.networkDao = networkDao; - tungstenElement.physicalNetworkTrafficTypeDao = physicalNetworkTrafficTypeDao; - tungstenElement.tungstenFabricLBHealthMonitorDao = tungstenFabricLBHealthMonitorDao; - tungstenElement.loadBalancerCertMapDao = loadBalancerCertMapDao; - - apiDBUtilsMocked = Mockito.mockStatic(ApiDBUtils.class); - encryptionUtilMocked = Mockito.mockStatic(EncryptionUtil.class); - - when(tungstenService.getTungstenProjectFqn(any())).thenReturn("default-domain:default-project"); - } - - @After - public void tearDown() throws Exception { - apiDBUtilsMocked.close(); - encryptionUtilMocked.close(); - closeable.close(); - } - - @Test - public void canHandleSuccessTest() { - Network network = mock(Network.class); - Network.Service service = mock(Network.Service.class); - - when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(true); - - assertTrue(tungstenElement.canHandle(network, service)); - } - - @Test - public void canHandleFailTest() { - Network network = mock(Network.class); - Network.Service service = mock(Network.Service.class); - - when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(false); - - assertFalse(tungstenElement.canHandle(network, service)); - } - - @Test - public void applyStaticNatsAddRuleSuccessTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(false); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); - - assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsAddRuleFailTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(false); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); - - assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsRevokeRuleSuccessTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(true); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); - - assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsRevokeRuleFailTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(true); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); - - assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyLBRulesAddRuleSuccessTest() { - User caller = mock(User.class); - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); - LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); - LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); - List lbStickinessPolicyList = List.of(lbStickinessPolicy); - List loadBalancerVOList = List.of(loadBalancerVO); - TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); - LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); - when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); - List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); - - when(lbStickinessPolicy.getParams()).thenReturn(pairList); - when(loadBalancingRule1.getId()).thenReturn(1L); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); - when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); - when(loadBalancingRule1.getSourcePortStart()).thenReturn(443); - when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); - when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); - when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); - when(ip.addr()).thenReturn("10.10.10.10"); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); - when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); - when(EncryptionUtil.generateSignature(anyString(), anyString())).thenReturn("generatedString"); - when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); - - assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesAddRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); - LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); - LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); - List lbStickinessPolicyList = List.of(lbStickinessPolicy); - List loadBalancerVOList = List.of(loadBalancerVO); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); - List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); - TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); - - when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); - when(lbStickinessPolicy.getParams()).thenReturn(pairList); - when(loadBalancingRule1.getId()).thenReturn(1L); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); - when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); - when(loadBalancingRule1.getSourcePortStart()).thenReturn(80); - when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); - when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); - when(ip.addr()).thenReturn("10.10.10.10"); - when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("disabled"); - when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); - - assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesRevokeRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip1 = mock(Ip.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVOList1 = List.of(loadBalancerVO1); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Revoke); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip1); - when(ip1.addr()).thenReturn("10.10.10.10"); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); - when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList1); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenGuestNetworkIpAddressDao.remove(anyLong())).thenReturn(false); - - assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesRevokeRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); - LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); - LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); - List loadBalancingRuleList = List.of(loadBalancingRule); - List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(loadBalancingRule.getSourceIp()).thenReturn(ip); - when(loadBalancingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ip.addr()).thenReturn("10.10.10.10"); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); - when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); - when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); - - assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList)); - } - - @Test - public void applyPFRulesAddRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesAddRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesRevokeRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesRevokeRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void preparePublicNetworkTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer createTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenNetworkPolicyAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - - assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); - assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); - assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); - } - - @Test - public void prepareManagementNetworkTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - - assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); - assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); - assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); - } - - @Test(expected = CloudRuntimeException.class) - public void prepareWithExceptionTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - - tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext); - } - - @Test - public void releasePublicNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); - - when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - - assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); - } - - @Test - public void releaseManagementNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); - - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); - - assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); - } - - @Test(expected = CloudRuntimeException.class) - public void releaseWithExceptionTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenThrow(IllegalArgumentException.class); - - tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext); - } - - @Test - public void destroyTest() throws ConcurrentOperationException, ResourceUnavailableException { - IPAddressVO ipAddressVO1 = mock(IPAddressVO.class); - IPAddressVO ipAddressVO2 = mock(IPAddressVO.class); - Network network = mock(Network.class); - ReservationContext reservationContext = mock(ReservationContext.class); - List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); - TungstenAnswer tungstenDeleteFIPAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer tungstenDeleteNPAnswer = new MockTungstenAnswerFactory(true).get(); - - when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(tungstenDeleteNPAnswer); - - assertTrue(tungstenElement.destroy(network, reservationContext)); - } - - @Test - public void isReadyTest() { - PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); - PhysicalNetworkTrafficTypeVO physicalNetworkTrafficTypeVO = mock(PhysicalNetworkTrafficTypeVO.class); - - when(physicalNetworkTrafficTypeDao.findBy(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(physicalNetworkTrafficTypeVO); - - assertTrue(tungstenElement.isReady(physicalNetworkServiceProvider)); - } - - @Test - public void shutdownProviderInstancesTest() throws ConcurrentOperationException { - PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); - ReservationContext reservationContext = mock(ReservationContext.class); - PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - Network publicNetwork = mock(Network.class); - VlanVO vlanVO1 = mock(VlanVO.class); - VlanVO vlanVO2 = mock(VlanVO.class); - List vlanVOList = Arrays.asList(vlanVO1, vlanVO2); - HostPodVO hostPodVO1 = mock(HostPodVO.class); - HostPodVO hostPodVO2 = mock(HostPodVO.class); - List hostPodVOList = Arrays.asList(hostPodVO1, hostPodVO2); - - when(physicalNetworkDao.findById(anyLong())).thenReturn(physicalNetworkVO); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(vlanDao.listVlansByNetworkIdIncludingRemoved(anyLong())).thenReturn(vlanVOList); - when(hostPodDao.listByDataCenterId(anyLong())).thenReturn(hostPodVOList); - - assertTrue(tungstenElement.shutdownProviderInstances(physicalNetworkServiceProvider, reservationContext)); - verify(networkServiceMapDao, times(1)).deleteByNetworkId(anyLong()); - verify(tungstenService, times(2)).removePublicNetworkSubnet(any(VlanVO.class)); - verify(tungstenService, times(1)).deletePublicNetwork(anyLong()); - verify(tungstenService, times(2)).removeManagementNetworkSubnet(any(HostPodVO.class)); - verify(tungstenService, times(1)).deleteManagementNetwork(anyLong()); - } - - //@Test - //public void processConnectWithoutSecurityGroupTest() throws ConnectionException { - // Host host = mock(Host.class); - // StartupCommand startupCommand = mock(StartupCommand.class); - // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - // DataCenterVO dataCenterVO = mock(DataCenterVO.class); - // VlanVO vlanVO1 = mock(VlanVO.class); - // VlanVO vlanVO2 = mock(VlanVO.class); - // List vlanList = Arrays.asList(vlanVO1, vlanVO2); - // Network publicNetwork = mock(Network.class); - // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); -// - // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); - // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - // when(vlanDao.listByZone(anyLong())).thenReturn(vlanList); - // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); - // when(vlanVO1.getVlanGateway()).thenReturn("192.168.100.1"); - // when(vlanVO1.getVlanNetmask()).thenReturn("255.255.255.0"); - // when(vlanVO2.getVlanGateway()).thenReturn("192.168.101.1"); - // when(vlanVO2.getVlanNetmask()).thenReturn("255.255.255.0"); - // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); -// - // tungstenElement.processConnect(host, startupCommand, true); - // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - //} - - //@Test - //public void processConnectWithSecurityGroupTest() throws ConnectionException { - // Host host = mock(Host.class); - // StartupCommand startupCommand = mock(StartupCommand.class); - // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - // DataCenterVO dataCenterVO = mock(DataCenterVO.class); - // NetworkVO network = mock(NetworkVO.class); - // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); - // Network publicNetwork = mock(Network.class); -// - // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); - // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - // when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(Arrays.asList(network)); - // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); - // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); -// - // tungstenElement.processConnect(host, startupCommand, true); - // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - //} - - @Test - public void processHostAboutToBeRemovedWithSecurityGroupTest() { - HostVO hostVO = mock(HostVO.class); - TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - NetworkVO network = mock(NetworkVO.class); - - when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); - when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(List.of(network)); - - tungstenElement.processHostAboutToBeRemoved(1L); - verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - } - - @Test - public void processHostAboutToBeRemovedWithoutSecurityGroupTest() { - HostVO hostVO = mock(HostVO.class); - TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); - when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); - - tungstenElement.processHostAboutToBeRemoved(1L); - verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - } - - @Test - public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); - when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); - when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Egress); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - Ip ip = mock(Ip.class); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); - when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); - when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(ipAddressDao.findById(anyLong())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteNetworkPolicyAnswer = mock(TungstenAnswer.class); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteNetworkPolicyAnswer); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void postStateTransitionEventWithVmStartedTest() { - StateMachine2.Transition transition = mock(StateMachine2.Transition.class); - VMInstanceVO vo = mock(VMInstanceVO.class); - Object opaque = mock(Object.class); - - when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Starting); - when(transition.getToState()).thenReturn(VirtualMachine.State.Running); - when(tungstenService.addTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); - - assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); - } - - @Test - public void postStateTransitionEventWithVmStopedTest() { - StateMachine2.Transition transition = mock(StateMachine2.Transition.class); - VMInstanceVO vo = mock(VMInstanceVO.class); - Object opaque = mock(Object.class); - - when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Stopping); - when(transition.getToState()).thenReturn(VirtualMachine.State.Stopped); - when(tungstenService.removeTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); - - assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); - } - - @Test - public void prepareMigrationTest() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - DeployDestination dest = mock(DeployDestination.class); - ReservationContext context = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO hostVO = mock(HostVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenElement.prepareMigration(nic, network, vm, dest, context)); - } - - @Test - public void rollbackMigration() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - ReservationContext src = mock(ReservationContext.class); - ReservationContext dest = mock(ReservationContext.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - HostVO hostVO = mock(HostVO.class); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(vm.getVirtualMachine()).thenReturn(virtualMachine); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - - tungstenElement.rollbackMigration(nic, network, vm, src, dest); - verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); - } - - @Test - public void commitMigration() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - ReservationContext src = mock(ReservationContext.class); - ReservationContext dest = mock(ReservationContext.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - HostVO hostVO = mock(HostVO.class); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(vm.getVirtualMachine()).thenReturn(virtualMachine); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - - tungstenElement.commitMigration(nic, network, vm, src, dest); - verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); - } -} \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java index d8e461fb6ae0..e69de29bb2d1 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java @@ -1,103 +0,0 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import com.cloud.agent.AgentManager; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenFabricUtilsTest { - @Mock - AgentManager agentMgr; - @Mock - TungstenProviderDao tungstenProviderDao; - - TungstenFabricUtils tungstenFabricUtils; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenFabricUtils = new TungstenFabricUtils(); - tungstenFabricUtils.agentMgr = agentMgr; - tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; - } - - @After - public void tearDown() throws Exception { - closeable.close(); - } - - @Test - public void sendTungstenCommandSuccessTest() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); - - assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithNullTungstenProvider() { - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithNullAnswer() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithFalseAnswer() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } -} \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java index 3eb61510b09f..e69de29bb2d1 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java @@ -1,1671 +0,0 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -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 com.cloud.agent.AgentManager; -import com.cloud.agent.api.Answer; -import com.cloud.configuration.Config; -import com.cloud.configuration.ConfigurationManager; -import com.cloud.dc.DataCenter; -import com.cloud.dc.DataCenterIpAddressVO; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.dc.Vlan; -import com.cloud.dc.VlanVO; -import com.cloud.dc.dao.DataCenterDao; -import com.cloud.dc.dao.DataCenterIpAddressDao; -import com.cloud.domain.DomainVO; -import com.cloud.domain.dao.DomainDao; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.hypervisor.Hypervisor; -import com.cloud.network.IpAddressManager; -import com.cloud.network.Network; -import com.cloud.network.NetworkModel; -import com.cloud.network.NetworkService; -import com.cloud.network.Networks; -import com.cloud.network.TungstenGuestNetworkIpAddressVO; -import com.cloud.network.dao.FirewallRulesDao; -import com.cloud.network.dao.IPAddressDao; -import com.cloud.network.dao.IPAddressVO; -import com.cloud.network.dao.LoadBalancerCertMapDao; -import com.cloud.network.dao.LoadBalancerCertMapVO; -import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.NetworkDetailVO; -import com.cloud.network.dao.NetworkDetailsDao; -import com.cloud.network.dao.NetworkVO; -import com.cloud.network.dao.SslCertVO; -import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.rules.FirewallRule; -import com.cloud.network.rules.FirewallRuleVO; -import com.cloud.network.security.SecurityGroup; -import com.cloud.network.security.SecurityGroupManager; -import com.cloud.network.security.SecurityGroupRuleVO; -import com.cloud.network.security.SecurityGroupService; -import com.cloud.network.security.SecurityGroupVO; -import com.cloud.network.security.SecurityRule; -import com.cloud.network.security.TungstenSecurityGroupRuleVO; -import com.cloud.network.security.dao.SecurityGroupDao; -import com.cloud.network.security.dao.SecurityGroupRuleDao; -import com.cloud.network.security.dao.SecurityGroupVMMapDao; -import com.cloud.network.security.dao.TungstenSecurityGroupRuleDao; -import com.cloud.projects.ProjectManager; -import com.cloud.projects.ProjectVO; -import com.cloud.projects.dao.ProjectDao; -import com.cloud.user.AccountVO; -import com.cloud.user.DomainManager; -import com.cloud.user.dao.AccountDao; -import com.cloud.utils.db.EntityManager; -import com.cloud.utils.db.Transaction; -import com.cloud.utils.db.TransactionCallback; -import com.cloud.utils.net.Ip; -import com.cloud.utils.net.NetUtils; -import com.cloud.vm.Nic; -import com.cloud.vm.NicSecondaryIp; -import com.cloud.vm.NicVO; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.dao.NicDao; -import com.cloud.vm.dao.NicSecondaryIpDao; -import com.cloud.vm.dao.NicSecondaryIpVO; -import net.juniper.tungsten.api.ApiObjectBase; -import net.juniper.tungsten.api.ApiPropertyBase; -import net.juniper.tungsten.api.ObjectReference; -import net.juniper.tungsten.api.types.ActionListType; -import net.juniper.tungsten.api.types.AddressGroup; -import net.juniper.tungsten.api.types.AddressType; -import net.juniper.tungsten.api.types.ApplicationPolicySet; -import net.juniper.tungsten.api.types.FirewallPolicy; -import net.juniper.tungsten.api.types.FirewallRuleEndpointType; -import net.juniper.tungsten.api.types.FirewallRuleMatchTagsType; -import net.juniper.tungsten.api.types.FirewallSequence; -import net.juniper.tungsten.api.types.FirewallServiceGroupType; -import net.juniper.tungsten.api.types.FirewallServiceType; -import net.juniper.tungsten.api.types.Loadbalancer; -import net.juniper.tungsten.api.types.LogicalRouter; -import net.juniper.tungsten.api.types.NetworkPolicy; -import net.juniper.tungsten.api.types.PolicyEntriesType; -import net.juniper.tungsten.api.types.PolicyRuleType; -import net.juniper.tungsten.api.types.PortType; -import net.juniper.tungsten.api.types.ServiceGroup; -import net.juniper.tungsten.api.types.SubnetListType; -import net.juniper.tungsten.api.types.SubnetType; -import net.juniper.tungsten.api.types.Tag; -import net.juniper.tungsten.api.types.TagType; -import net.juniper.tungsten.api.types.VirtualMachine; -import net.juniper.tungsten.api.types.VirtualMachineInterface; -import net.juniper.tungsten.api.types.VirtualNetwork; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; -import org.apache.cloudstack.framework.messagebus.MessageBus; -import org.apache.cloudstack.framework.messagebus.MessageSubscriber; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkGatewayToLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkSubnetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecondaryIpAddressCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecurityGroupRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenVmToSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDefaultProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDomainCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpPoolCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenDomainCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpPoolCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenFabricNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenLoadBalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenNetworkDnsCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNicCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenVmCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkGatewayFromLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkSubnetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecondaryIpAddressCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecurityGroupRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateLoadBalancerServiceInstanceCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenDefaultSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerSslCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerStatsCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenVrouterConfigCommand; -import org.apache.cloudstack.network.tungsten.model.TungstenLogicalRouter; -import org.apache.cloudstack.network.tungsten.model.TungstenNetworkPolicy; -import org.apache.cloudstack.network.tungsten.model.TungstenRule; -import org.apache.cloudstack.network.tungsten.model.TungstenTag; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockedConstruction; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.test.util.ReflectionTestUtils; - -import java.util.Arrays; -import java.util.List; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenServiceImplTest { - @Mock - MessageBus messageBus; - @Mock - ProjectDao projectDao; - @Mock - AccountDao accountDao; - @Mock - NetworkDao networkDao; - @Mock - ConfigurationDao configDao; - @Mock - IPAddressDao ipAddressDao; - @Mock - EntityManager entityMgr; - @Mock - NetworkModel networkModel; - @Mock - DomainDao domainDao; - @Mock - LoadBalancerCertMapDao lbCertMapDao; - @Mock - FirewallRulesDao fwRulesDao; - @Mock - TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; - @Mock - TungstenProviderDao tungstenProviderDao; - @Mock - TungstenFabricUtils tungstenFabricUtils; - @Mock - AgentManager agentMgr; - @Mock - HostDao hostDao; - @Mock - NetworkDetailsDao networkDetailsDao; - @Mock - SecurityGroupDao securityGroupDao; - @Mock - NicDao nicDao; - @Mock - TungstenSecurityGroupRuleDao tungstenSecurityGroupRuleDao; - @Mock - SecurityGroupVMMapDao securityGroupVMMapDao; - @Mock - SecurityGroupRuleDao securityGroupRuleDao; - @Mock - SecurityGroupManager securityGroupManager; - @Mock - NicSecondaryIpDao nicSecIpDao; - @Mock - DataCenterIpAddressDao dataCenterIpAddressDao; - @Mock - DataCenterDao dataCenterDao; - @Mock - IpAddressManager ipAddressManager; - - TungstenServiceImpl tungstenService; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenService = new TungstenServiceImpl(); - tungstenService.projectDao = projectDao; - tungstenService.tungstenProviderDao = tungstenProviderDao; - tungstenService.networkModel = networkModel; - tungstenService.ipAddressDao = ipAddressDao; - tungstenService.tungstenFabricUtils = tungstenFabricUtils; - tungstenService.domainDao = domainDao; - tungstenService.accountDao = accountDao; - tungstenService.dataCenterIpAddressDao = dataCenterIpAddressDao; - tungstenService.networkDetailsDao = networkDetailsDao; - tungstenService.agentMgr = agentMgr; - tungstenService.hostDao = hostDao; - tungstenService.configDao = configDao; - tungstenService.fwRulesDao = fwRulesDao; - tungstenService.lbCertMapDao = lbCertMapDao; - tungstenService.entityMgr = entityMgr; - tungstenService.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; - tungstenService.securityGroupDao = securityGroupDao; - tungstenService.tungstenSecurityGroupRuleDao = tungstenSecurityGroupRuleDao; - tungstenService.securityGroupVMMapDao = securityGroupVMMapDao; - tungstenService.nicDao = nicDao; - tungstenService.nicSecIpDao = nicSecIpDao; - tungstenService.securityGroupRuleDao = securityGroupRuleDao; - tungstenService.securityGroupManager = securityGroupManager; - tungstenService.networkDao = networkDao; - tungstenService.dataCenterDao = dataCenterDao; - tungstenService.ipAddressManager = ipAddressManager; - tungstenService.messageBus = messageBus; - } - - @After - public void tearDown() throws Exception { - closeable.close(); - } - - @Test - public void createTungstenFloatingIpTest() throws Exception { - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer createTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - Ip ip = mock(Ip.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); - when(ipAddressVO.getAddress()).thenReturn(ip); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); - } - - @Test - public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer deleteTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); - } - - @Test - public void deleteTungstenDomainTest() throws Exception { - DomainVO domainVO = mock(DomainVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); - } - - @Test - public void deleteTungstenProjectTest() throws Exception { - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); - } - - @Test - public void addTungstenDefaultNetworkPolicyTest() { - TungstenRule tungstenRule = mock(TungstenRule.class); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - - assertTrue(tungstenService.addTungstenDefaultNetworkPolicy(1L, "default-domain:default-project", "policyName", "7279ed91-314e-45be-81b4-b10395fd2ae3" - , List.of(tungstenRule), 1, 1)); - } - - @Test - public void createManagementNetworkTest() { - Network managementNetwork = mock(Network.class); - VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); - VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenVrouterConfigCommand.class), anyLong())).thenReturn(updateTungstenGlobalVrouterConfigAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - - when(createTungstenNetworkAnswer.getApiObjectBase()).thenReturn(managementVirtualNetwork); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); - - assertTrue(tungstenService.createManagementNetwork(1L)); - } - - @Test - public void addManagementNetworkSubnetTest() { - HostPodVO hostPodVO = mock(HostPodVO.class); - Network managementNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); - - when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(managementNetwork.getCidr()).thenReturn("192.168.100.0/24"); - when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); - when(dataCenterIpAddressDao.mark(anyLong(), anyLong(), anyString())).thenReturn(true); - - assertTrue(tungstenService.addManagementNetworkSubnet(hostPodVO)); - } - - @Test - public void deleteManagementNetworkTest() { - Network managementNetwork = mock(Network.class); - TungstenAnswer deleteTungstenManagementPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenFabricPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenFabricPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); - when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); - - assertTrue(tungstenService.deleteManagementNetwork(1L)); - } - - @Test - public void removeManagementNetworkSubnetTest() { - HostPodVO hostPodVO = mock(HostPodVO.class); - Network managementNetwork = mock(Network.class); - TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); - - assertTrue(tungstenService.removeManagementNetworkSubnet(hostPodVO)); - verify(dataCenterIpAddressDao, times(1)).releasePodIpAddress(anyLong()); - } - - @Test - public void createPublicNetworkTest() { - Network publicNetwork = mock(Network.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createPublicNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(createPublicNetworkAnswer.getApiObjectBase()).thenReturn(virtualNetwork); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); - when(virtualNetwork.getQualifiedName()).thenReturn(Arrays.asList("default-domain", "default-project", "publicNetwork")); - - assertTrue(tungstenService.createPublicNetwork(1L)); - } - - @Test - public void addPublicNetworkSubnetTest() { - VlanVO vlanVO = mock(VlanVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(vlanVO.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); - when(vlanVO.getVlanGateway()).thenReturn("192.168.100.1"); - when(vlanVO.getVlanNetmask()).thenReturn("255.255.255.0"); - when(publicNetwork.getCidr()).thenReturn("192.168.100.0/24"); - when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); - - assertTrue(tungstenService.addPublicNetworkSubnet(vlanVO)); - } - - @Test - public void deletePublicNetworkTest() { - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); - - assertTrue(tungstenService.deletePublicNetwork(1L)); - } - - @Test - public void removePublicNetworkSubnetTest() { - VlanVO vlanVO = mock(VlanVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - - assertTrue(tungstenService.removePublicNetworkSubnet(vlanVO)); - verify(ipAddressDao, times(1)).unassignIpAddress(anyLong()); - } - - @Test - public void allocateDnsIpAddressTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); - when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); - when(tungstenGuestNetworkIpAddressDao.persist(any(TungstenGuestNetworkIpAddressVO.class))).thenReturn(tungstenGuestNetworkIpAddressVO); - when(networkVO.getCidr()).thenReturn("192.168.100.0/24"); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); - - assertTrue(tungstenService.allocateDnsIpAddress(networkVO, null, "test")); - } - - @Test - public void deallocateDnsIpAddressTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); - when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); - when(tungstenGuestNetworkIpAddressDao.findByNetworkAndGuestIpAddress(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); - - tungstenService.deallocateDnsIpAddress(networkVO, null, "test"); - verify(tungstenGuestNetworkIpAddressDao, times(1)).expunge(anyLong()); - } - - @Test - public void subscribeTungstenEventTest() { - tungstenService.subscribeTungstenEvent(); - - verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_ASSIGN_IPADDR_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_RELEASE_IPADDR_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_APPLY_NETWORK_POLICY_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_CREATE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_DELETE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_DELETE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_SYNC_TUNGSTEN_DB_WITH_DOMAINS_AND_PROJECTS_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_CREATE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_DELETE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_ADD_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_REMOVE_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_ASSIGN_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_RELEASE_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); - } - - @Test - public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { - DomainVO domainVO = mock(DomainVO.class); - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer createTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenDefaultProjectAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - - when(domainDao.listAll()).thenReturn(List.of(domainVO)); - when(projectDao.listAll()).thenReturn(List.of(projectVO)); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDomainCommand.class), anyLong())).thenReturn(createTungstenDomainAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenProjectCommand.class), anyLong())).thenReturn(createTungstenProjectAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDefaultProjectCommand.class), anyLong())).thenReturn(createTungstenDefaultProjectAnswer); - when(domainDao.findById(anyLong())).thenReturn(domainVO); - - assertTrue(tungstenService.syncTungstenDbWithCloudstackProjectsAndDomains()); - } - - @Test - public void updateLoadBalancerTest() { - Network network = mock(Network.class); - LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); - Network publicNetwork = mock(Network.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - HostVO hostVO = mock(HostVO.class); - TungstenAnswer getTungstenLoadBalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new MockTungstenAnswerFactory(true).get(); - Answer updateTungstenLoadbalancerStatsAnswer = mock(Answer.class); - Answer updateTungstenLoadbalancerSslAnswer = mock(Answer.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); - SslCertVO sslCertVO = mock(SslCertVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - Ip ip = mock(Ip.class); - AccountVO accountVO = mock(AccountVO.class); - Loadbalancer loadbalancer = mock(Loadbalancer.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(hostDao.listAllHostsByZoneAndHypervisorType(anyLong(), eq(Hypervisor.HypervisorType.KVM))).thenReturn(List.of(hostVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenLoadBalancerCommand.class), anyLong())).thenReturn(getTungstenLoadBalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateLoadBalancerServiceInstanceCommand.class), anyLong())).thenReturn(updateLoadBalancerServiceInstanceAnswer); - when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerStatsCommand.class))).thenReturn(updateTungstenLoadbalancerStatsAnswer); - when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerSslCommand.class))).thenReturn(updateTungstenLoadbalancerSslAnswer); - when(updateTungstenLoadbalancerStatsAnswer.getResult()).thenReturn(true); - when(updateTungstenLoadbalancerSslAnswer.getResult()).thenReturn(true); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); - when(fwRulesDao.listByIpAndPurposeAndNotRevoked(anyLong(), eq(FirewallRule.Purpose.LoadBalancing))).thenReturn(List.of(firewallRuleVO)); - when(lbCertMapDao.findByLbRuleId(anyLong())).thenReturn(loadBalancerCertMapVO); - when(entityMgr.findById(eq(SslCertVO.class), anyLong())).thenReturn(sslCertVO); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(loadBalancingRule.getSourceIp()).thenReturn(ip); - when(accountDao.findById(anyLong())).thenReturn(accountVO); - when(ip.addr()).thenReturn("192.168.100.100"); - when(getTungstenLoadBalancerAnswer.getApiObjectBase()).thenReturn(loadbalancer); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); - - assertTrue(tungstenService.updateLoadBalancer(network, loadBalancingRule)); - } - - @Test - public void createTungstenSecurityGroupTest() { - SecurityGroup securityGroup = mock(SecurityGroup.class); - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - DomainVO domainVO = mock(DomainVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer createTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(domainDao.findById(anyLong())).thenReturn(domainVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenSecurityGroupCommand.class), anyLong())).thenReturn(createTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - - try (MockedStatic transactionMocked = Mockito.mockStatic(Transaction.class)) { - transactionMocked.when(() -> Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); - assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); - } - } - - @Test - public void deleteTungstenSecurityGroupTest() { - SecurityGroup securityGroup = mock(SecurityGroup.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); - - assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); - } - - @Test - public void addTungstenSecurityGroupEgressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - NicVO nicVO = mock(NicVO.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); - when(tungstenSecurityGroupRuleDao.findDefaultSecurityRule(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); - when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); - when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(securityRule.getAllowedNetworkId()).thenReturn(1L); - - assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); - } - - @Test - public void addTungstenSecurityGroupIngressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); - when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); - when(securityRule.getAllowedNetworkId()).thenReturn(null); - - assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); - } - - @Test - public void removeTungstenSecurityGroupEgressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NicVO nicVO = mock(NicVO.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); - when(securityRule.getType()).thenReturn("egress"); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(securityRule.getAllowedNetworkId()).thenReturn(1L); - when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(tungstenSecurityGroupRuleDao.findBySecurityGroupAndRuleTypeAndRuleTarget(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); - - assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); - } - - @Test - public void removeTungstenSecurityGroupIngressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(securityRule.getAllowedNetworkId()).thenReturn(null); - - assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); - } - - @Test - public void addTungstenNicSecondaryIpAddressTest() { - NicSecondaryIp nicSecondaryIp = mock(NicSecondaryIp.class); - Network network = mock(Network.class); - DataCenter dataCenter = mock(DataCenter.class); - Nic nic = mock(Nic.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer addTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); - when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); - when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); - when(entityMgr.findById(eq(Nic.class), anyLong())).thenReturn(nic); - when(nicSecondaryIp.getIp4Address()).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(addTungstenSecondaryIpAddressAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); - when(network.getGuestType()).thenReturn(Network.GuestType.Shared); - when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); - when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - - assertTrue(tungstenService.addTungstenNicSecondaryIpAddress(1L)); - } - - @Test - public void removeTungstenNicSecondaryIpAddressTest() { - NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); - Network network = mock(Network.class); - DataCenter dataCenter = mock(DataCenter.class); - TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); - when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - - when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); - when(network.getGuestType()).thenReturn(Network.GuestType.Shared); - when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); - when(nicSecondaryIpVO.getIp4Address()).thenReturn("192.168.100.100"); - - assertTrue(tungstenService.removeTungstenNicSecondaryIpAddress(nicSecondaryIpVO)); - } - - @Test - public void createTungstenPolicyTest() { - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(createTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - - assertNotNull(tungstenService.createTungstenPolicy(1L, "test")); - } - - @Test - public void addTungstenPolicyRuleTest() throws Exception { - TungstenAnswer addTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenPolicyRuleCommand.class), anyLong())).thenReturn(addTungstenPolicyRuleAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(addTungstenPolicyRuleAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - try (MockedConstruction ignored = - Mockito.mockConstruction(AddTungstenPolicyRuleCommand.class, (mock, context) -> { - when(mock.getUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - })) { - - assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", - "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, - "network2", "192.168.200.200", 32, 80, 80)); - } - } - - @Test - public void listTungstenPolicyTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer listTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findById(anyLong())).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyCommand.class), anyLong())).thenReturn(listTungstenPolicyAnswer); - when(listTungstenPolicyAnswer.getTungstenModelList()).thenReturn(List.of(tungstenNetworkPolicy)); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn( - List.of(virtualNetwork)); - - assertNotNull(tungstenService.listTungstenPolicy(1L, 2L, 3L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenNetworkTest() { - TungstenAnswer listTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNetworkCommand.class), anyLong())).thenReturn(listTungstenNetworkAnswer); - doReturn(List.of(virtualNetwork)).when(listTungstenNetworkAnswer).getApiObjectBaseList(); - when((virtualNetwork.getName())).thenReturn("guestNetwork1"); - - assertNotNull(tungstenService.listTungstenNetwork(1L, "948f421c-edde-4518-a391-09299cc25dc2", false)); - } - - @Test - public void listTungstenNicTest() { - TungstenAnswer listTungstenNicAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNicCommand.class), anyLong())).thenReturn(listTungstenNicAnswer); - doReturn(List.of(virtualMachineInterface)).when(listTungstenNicAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenNic(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenVmTest() { - TungstenAnswer listTungstenVmAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenVmCommand.class), anyLong())).thenReturn(listTungstenVmAnswer); - doReturn(List.of(virtualMachine)).when(listTungstenVmAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenVm(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenPolicyTest() { - TungstenAnswer deleteTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); - - assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenPolicyRuleWithRuleUuidTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); - doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenPolicyRuleWithAllRuleTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); - doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", null)); - } - - @Test - public void removeTungstenPolicyRuleTest() { - TungstenAnswer removeTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyRuleCommand.class), anyLong())).thenReturn(removeTungstenPolicyRuleAnswer); - when(removeTungstenPolicyRuleAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void createTungstenTagTest() { - TungstenAnswer createTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagCommand.class), anyLong())).thenReturn(createTungstenTagAnswer); - when(createTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); - doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); - doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); - doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); - - assertNotNull(tungstenService.createTungstenTag(1L, "testTag", "testTagType")); - } - - @Test - public void createTungstenTagTypeTest() { - TungstenAnswer createTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); - TagType tagtype = mock(TagType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(createTungstenTagTypeAnswer.getApiObjectBase()).thenReturn(tagtype); - - assertNotNull(tungstenService.createTungstenTagType(1L, "testTagType")); - } - - @Test - public void listTungstenTagsTest() { - TungstenAnswer listTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagCommand.class), anyLong())).thenReturn(listTungstenTagAnswer); - when(listTungstenTagAnswer.getTungstenModelList()).thenReturn(List.of(tungstenTag)); - when(tungstenTag.getTag()).thenReturn(tag); - doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); - doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); - doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); - doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); - - assertNotNull(tungstenService.listTungstenTags(1L, "948f421c-edde-4518-a391-09299cc25dc2" - , "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", "a329662e-1805-4a89-9b05-2b818ea35978", - "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); - } - - @Test - public void listTungstenTagTypesTest() { - TungstenAnswer listTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); - TagType tagtype = mock(TagType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagTypeCommand.class), anyLong())).thenReturn(listTungstenTagTypeAnswer); - doReturn(List.of(tagtype)).when(listTungstenTagTypeAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenTagTypes(1L, "testTagType")); - } - - @Test - public void deleteTungstenTagTest() { - TungstenAnswer deleteTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); - - assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenTagTypeTest() { - TungstenAnswer deleteTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); - - assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void applyTungstenPolicyTest() { - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(applyTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.applyTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", 1, 1)); - } - - @Test - public void applyTungstenTagTest() { - TungstenAnswer applyTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenTagCommand.class), anyLong())).thenReturn(applyTungstenTagAnswer); - when(applyTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); - when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); - when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); - - assertNotNull(tungstenService.applyTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85") - , List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb" - , "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); - } - - @Test - public void removeTungstenPolicyTest() { - TungstenAnswer removeTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyCommand.class), anyLong())).thenReturn(removeTungstenPolicyAnswer); - when(removeTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void removeTungstenTagTest() { - TungstenAnswer removeTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenTagCommand.class), anyLong())).thenReturn(removeTungstenTagAnswer); - when(removeTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); - when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); - when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); - - assertNotNull(tungstenService.removeTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), - List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85"), - List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", null, - "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb")); - } - - @Test - public void createTungstenAddressGroupTest() { - TungstenAnswer createTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); - AddressGroup addressGroup = mock(AddressGroup.class); - SubnetListType subnetListType = mock(SubnetListType.class); - SubnetType subnetType = mock(SubnetType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenAddressGroupCommand.class), anyLong())).thenReturn(createTungstenAddressGroupAnswer); - when(createTungstenAddressGroupAnswer.getApiObjectBase()).thenReturn(addressGroup); - when(addressGroup.getPrefix()).thenReturn(subnetListType); - when(subnetListType.getSubnet()).thenReturn(List.of(subnetType)); - - assertNotNull(tungstenService.createTungstenAddressGroup(1L, "test", "192.168.100.0", 24)); - } - - @Test - public void createTungstenServiceGroupTest() { - TungstenAnswer createTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); - ServiceGroup serviceGroup = mock(ServiceGroup.class); - FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); - FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenServiceGroupCommand.class), anyLong())).thenReturn(createTungstenServiceGroupAnswer); - when(createTungstenServiceGroupAnswer.getApiObjectBase()).thenReturn(serviceGroup); - when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); - when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); - when(firewallServiceType.getDstPorts()).thenReturn(portType); - - assertNotNull(tungstenService.createTungstenServiceGroup(1L, "test", "tcp", 80, 80)); - } - - @Test - public void createTungstenFirewallRuleTest() { - TungstenAnswer createTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); - net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); - ActionListType actionListType = mock(ActionListType.class); - ObjectReference serviceGroup = mock(ObjectReference.class); - FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); - FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); - FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallRuleCommand.class), anyLong())).thenReturn(createTungstenFirewallRuleAnswer); - when(createTungstenFirewallRuleAnswer.getApiObjectBase()).thenReturn(firewallRule); - when(firewallRule.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); - when(serviceGroup.getReferredName()).thenReturn(List.of("service")); - when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); - when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); - when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); - when(firewallRuleEndpointType2.getTags()).thenReturn(null); - when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); - when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); - - assertNotNull(tungstenService.createTungstenFirewallRule(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "test", "pass", "948f421c-edde-4518-a391-09299cc25dc2", - "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", null, "<>", "a329662e-1805-4a89-9b05-2b818ea35978" - , "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", null, "df8e4490-2a40-4d63-a6f3-1f829ffe4fc6", 1)); - } - - @Test - public void createTungstenFirewallPolicyTest() { - TungstenAnswer createTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(createTungstenFirewallPolicyAnswer); - when(createTungstenFirewallPolicyAnswer.getApiObjectBase()).thenReturn(firewallPolicy); - when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.createTungstenFirewallPolicy(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652","test", 1)); - } - - @Test - public void createTungstenApplicationPolicySetTest() { - TungstenAnswer createTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - ObjectReference objectReference = mock(ObjectReference.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(createTungstenApplicationPolicySetAnswer); - when(createTungstenApplicationPolicySetAnswer.getApiObjectBase()).thenReturn(applicationPolicySet); - when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); - when(objectReference.getReferredName()).thenReturn(List.of("tag")); - when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.createTungstenApplicationPolicySet(1L, "test")); - } - - @Test - public void listTungstenApplicationPolicySetTest() { - TungstenAnswer listTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - ObjectReference objectReference = mock(ObjectReference.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(listTungstenApplicationPolicySetAnswer); - doReturn(List.of(applicationPolicySet)).when(listTungstenApplicationPolicySetAnswer).getApiObjectBaseList(); - when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); - when(objectReference.getReferredName()).thenReturn(List.of("tag")); - when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.listTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenFirewallPolicyTest() { - TungstenAnswer listTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(listTungstenFirewallPolicyAnswer); - doReturn(List.of(firewallPolicy)).when(listTungstenFirewallPolicyAnswer).getApiObjectBaseList(); - when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.listTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenFirewallRuleTest() { - TungstenAnswer listTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); - net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); - ActionListType actionListType = mock(ActionListType.class); - ObjectReference serviceGroup = mock(ObjectReference.class); - FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); - FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); - FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallRuleCommand.class), anyLong())).thenReturn(listTungstenFirewallRuleAnswer); - doReturn(List.of(firewallRule)).when(listTungstenFirewallRuleAnswer).getApiObjectBaseList(); - when(firewallRule.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); - when(serviceGroup.getReferredName()).thenReturn(List.of("service")); - when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); - when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); - when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); - when(firewallRuleEndpointType2.getTags()).thenReturn(null); - when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); - when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); - - assertNotNull(tungstenService.listTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", - "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenAddressGroupTest() { - TungstenAnswer listTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); - AddressGroup addressGroup = mock(AddressGroup.class); - SubnetListType subnetListType = mock(SubnetListType.class); - SubnetType subnetType = mock(SubnetType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenAddressGroupCommand.class), anyLong())).thenReturn(listTungstenAddressGroupAnswer); - doReturn(List.of(addressGroup)).when(listTungstenAddressGroupAnswer).getApiObjectBaseList(); - when(addressGroup.getPrefix()).thenReturn(subnetListType); - when(subnetListType.getSubnet()).thenReturn( - List.of(subnetType)); - - assertNotNull(tungstenService.listTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenServiceGroupTest() { - TungstenAnswer listTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); - ServiceGroup serviceGroup = mock(ServiceGroup.class); - FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); - FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenServiceGroupCommand.class), anyLong())).thenReturn(listTungstenServiceGroupAnswer); - doReturn(List.of(serviceGroup)).when(listTungstenServiceGroupAnswer).getApiObjectBaseList(); - when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); - when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); - when(firewallServiceType.getDstPorts()).thenReturn(portType); - - assertNotNull(tungstenService.listTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenApplicationPolicySetTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenFirewallPolicyTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenFirewallRuleTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenServiceGroupTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenAddressGroupTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void createSharedNetworkTest() { - Network network = mock(Network.class); - Vlan vlan = mock(Vlan.class); - AccountVO accountVO = mock(AccountVO.class); - TungstenAnswer createTungstenSharedNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - HostVO hostVO = mock(HostVO.class); - Answer answer = mock(Answer.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); - - when(accountDao.findById(anyLong())).thenReturn(accountVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenSharedNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(network.getMode()).thenReturn(Networks.Mode.Dhcp); - when(network.getCidr()).thenReturn("192.168.100.0/24"); - when(vlan.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); - when(vlan.getVlanGateway()).thenReturn("192.168.100.1"); - when(vlan.getIp6Gateway()).thenReturn("fd00::1"); - when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(hostDao.findByPublicIp(anyString())).thenReturn(hostVO); - when(agentMgr.easySend(anyLong(), any(SetupTungstenVRouterCommand.class))).thenReturn(answer); - when(answer.getResult()).thenReturn(true); - when(vlan.getIp6Cidr()).thenReturn("fd00::1/64"); - when(vlan.getIp6Range()).thenReturn("fd00::100-fd00::200"); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.1.150"); - when(createTungstenSharedNetworkAnswer.getApiObjectBase()).thenReturn(apiObjectBase); - when(apiObjectBase.getQualifiedName()).thenReturn(List.of("network")); - when(tungstenProviderVO.getGateway()).thenReturn("192.168.100.1"); - - assertTrue(tungstenService.createSharedNetwork(network, vlan)); - } - - @Test - public void addTungstenVmSecurityGroupTest() { - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenVmToSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - NicVO nicVO = mock(NicVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenVmToSecurityGroupCommand.class), anyLong())).thenReturn(addTungstenVmToSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); - when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - - assertTrue(tungstenService.addTungstenVmSecurityGroup(vmInstanceVO)); - } - - @Test - public void removeTungstenVmSecurityGroupTest() { - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - NicVO nicVO = mock(NicVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - - assertTrue(tungstenService.removeTungstenVmSecurityGroup(vmInstanceVO)); - } - - @Test - public void createRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.createRoutingLogicalRouter(1L, "default-domain:default-project", "testLR")); - } - - @Test - public void addNetworkGatewayToLogicalRouterTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findByUuid(anyString())).thenReturn(networkVO); - when(ipAddressManager.acquireLastGuestIpAddress(any(Network.class))).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkGatewayToLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.addNetworkGatewayToLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModelList()).thenReturn(List.of(tungstenLogicalRouter)); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.listRoutingLogicalRouter(1L, null, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void removeNetworkGatewayFromLogicalRouterTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findByUuid(anyString())).thenReturn(networkVO); - when(tungstenGuestNetworkIpAddressDao.findByNetworkAndLogicalRouter(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkGatewayFromLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeNetworkGatewayFromLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void deleteLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } -} \ No newline at end of file From 1e1c8a28dc2aa83417b7325af8c1de276d492a0a Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Fri, 20 Oct 2023 11:05:46 -0400 Subject: [PATCH 09/12] reupdate --- .../service/MockTungstenAnswerFactory.java | 35 + .../tungsten/service/TungstenElementTest.java | 1014 ++++++++++ .../service/TungstenFabricUtilsTest.java | 103 + .../service/TungstenServiceImplTest.java | 1671 +++++++++++++++++ 4 files changed, 2823 insertions(+) diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java index e69de29bb2d1..0eeaae26e8cd 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java @@ -0,0 +1,35 @@ +// 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 org.apache.cloudstack.network.tungsten.service; + +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class MockTungstenAnswerFactory { + + TungstenAnswer tungstenAnswer; + MockTungstenAnswerFactory(boolean returnResult){ + tungstenAnswer=mock(TungstenAnswer.class); + when(tungstenAnswer.getResult()).thenReturn(returnResult); + } + TungstenAnswer get() { + return tungstenAnswer; + } + +} diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java index e69de29bb2d1..a9603ac1d3f3 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java @@ -0,0 +1,1014 @@ +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.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 com.cloud.agent.AgentManager; +import com.cloud.api.ApiDBUtils; +import com.cloud.configuration.Config; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.HostPodVO; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.HostPodDao; +import com.cloud.dc.dao.VlanDao; +import com.cloud.deploy.DeployDestination; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.hypervisor.Hypervisor; +import com.cloud.network.IpAddressManager; +import com.cloud.network.Network; +import com.cloud.network.NetworkModel; +import com.cloud.network.Networks; +import com.cloud.network.PhysicalNetworkServiceProvider; +import com.cloud.network.TungstenGuestNetworkIpAddressVO; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.LoadBalancerCertMapDao; +import com.cloud.network.dao.LoadBalancerDao; +import com.cloud.network.dao.LoadBalancerVMMapDao; +import com.cloud.network.dao.LoadBalancerVMMapVO; +import com.cloud.network.dao.LoadBalancerVO; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDetailsDao; +import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.dao.NetworkVO; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; +import com.cloud.network.dao.PhysicalNetworkVO; +import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.PortForwardingRule; +import com.cloud.network.rules.StaticNatImpl; +import com.cloud.user.AccountManager; +import com.cloud.user.User; +import com.cloud.uservm.UserVm; +import com.cloud.utils.EncryptionUtil; +import com.cloud.utils.Pair; +import com.cloud.utils.TungstenUtils; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.fsm.StateMachine2; +import com.cloud.utils.net.Ip; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.dao.VMInstanceDao; +import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.messagebus.MessageBus; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenPortForwardingCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AssignTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkLoadbalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenVirtualMachineCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerListenerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVRouterPortCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmInterfaceCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ReleaseTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerHealthMonitorCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerMemberCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerPoolCommand; +import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorDao; +import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorVO; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.Arrays; +import java.util.List; + +@RunWith(MockitoJUnitRunner.class) +public class TungstenElementTest { + @Mock + TungstenFabricUtils tungstenFabricUtils; + @Mock + NetworkModel networkModel; + @Mock + IPAddressDao ipAddressDao; + @Mock + VMInstanceDao vmInstanceDao; + @Mock + LoadBalancerVMMapDao lbVmMapDao; + @Mock + TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; + @Mock + IpAddressManager ipAddressMgr; + @Mock + ConfigurationDao configDao; + @Mock + LoadBalancerDao lbDao; + @Mock + AccountManager accountMgr; + @Mock + HostDao hostDao; + @Mock + MessageBus messageBus; + @Mock + PhysicalNetworkTrafficTypeDao physicalNetworkTrafficTypeDao; + @Mock + PhysicalNetworkDao physicalNetworkDao; + @Mock + TungstenProviderDao tungstenProviderDao; + @Mock + DataCenterDao dataCenterDao; + @Mock + VlanDao vlanDao; + @Mock + NetworkServiceMapDao networkServiceMapDao; + @Mock + HostPodDao hostPodDao; + @Mock + NetworkDetailsDao networkDetailsDao; + @Mock + AgentManager agentManager; + @Mock + NetworkDao networkDao; + @Mock + TungstenService tungstenService; + @Mock + TungstenFabricLBHealthMonitorDao tungstenFabricLBHealthMonitorDao; + @Mock + LoadBalancerCertMapDao loadBalancerCertMapDao; + + TungstenElement tungstenElement; + + MockedStatic apiDBUtilsMocked; + + MockedStatic encryptionUtilMocked; + + AutoCloseable closeable; + + @Before + public void setup() { + closeable = MockitoAnnotations.openMocks(this); + tungstenElement = new TungstenElement(); + tungstenElement.tungstenFabricUtils = tungstenFabricUtils; + tungstenElement.networkModel = networkModel; + tungstenElement.ipAddressDao = ipAddressDao; + tungstenElement.vmInstanceDao = vmInstanceDao; + tungstenElement.lbVmMapDao = lbVmMapDao; + tungstenElement.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; + tungstenElement.ipAddressMgr = ipAddressMgr; + tungstenElement.configDao = configDao; + tungstenElement.lbDao = lbDao; + tungstenElement.accountMgr = accountMgr; + tungstenElement.hostDao = hostDao; + tungstenElement.messageBus = messageBus; + tungstenElement.physicalNetworkDao = physicalNetworkDao; + tungstenElement.tungstenService = tungstenService; + tungstenElement.tungstenProviderDao = tungstenProviderDao; + tungstenElement.dataCenterDao = dataCenterDao; + tungstenElement.vlanDao = vlanDao; + tungstenElement.networkServiceMapDao = networkServiceMapDao; + tungstenElement.podDao = hostPodDao; + tungstenElement.agentMgr = agentManager; + tungstenElement.networkDetailsDao = networkDetailsDao; + tungstenElement.networkDao = networkDao; + tungstenElement.physicalNetworkTrafficTypeDao = physicalNetworkTrafficTypeDao; + tungstenElement.tungstenFabricLBHealthMonitorDao = tungstenFabricLBHealthMonitorDao; + tungstenElement.loadBalancerCertMapDao = loadBalancerCertMapDao; + + apiDBUtilsMocked = Mockito.mockStatic(ApiDBUtils.class); + encryptionUtilMocked = Mockito.mockStatic(EncryptionUtil.class); + + when(tungstenService.getTungstenProjectFqn(any())).thenReturn("default-domain:default-project"); + } + + @After + public void tearDown() throws Exception { + apiDBUtilsMocked.close(); + encryptionUtilMocked.close(); + closeable.close(); + } + + @Test + public void canHandleSuccessTest() { + Network network = mock(Network.class); + Network.Service service = mock(Network.Service.class); + + when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(true); + + assertTrue(tungstenElement.canHandle(network, service)); + } + + @Test + public void canHandleFailTest() { + Network network = mock(Network.class); + Network.Service service = mock(Network.Service.class); + + when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(false); + + assertFalse(tungstenElement.canHandle(network, service)); + } + + @Test + public void applyStaticNatsAddRuleSuccessTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(false); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); + + assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsAddRuleFailTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(false); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); + + assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsRevokeRuleSuccessTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(true); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); + + assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsRevokeRuleFailTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(true); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); + + assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyLBRulesAddRuleSuccessTest() { + User caller = mock(User.class); + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); + LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); + LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); + List lbStickinessPolicyList = List.of(lbStickinessPolicy); + List loadBalancerVOList = List.of(loadBalancerVO); + TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); + LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); + when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); + List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); + + when(lbStickinessPolicy.getParams()).thenReturn(pairList); + when(loadBalancingRule1.getId()).thenReturn(1L); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); + when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); + when(loadBalancingRule1.getSourcePortStart()).thenReturn(443); + when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); + when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); + when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); + when(ip.addr()).thenReturn("10.10.10.10"); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); + when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); + when(EncryptionUtil.generateSignature(anyString(), anyString())).thenReturn("generatedString"); + when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); + + assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesAddRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); + LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); + LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); + List lbStickinessPolicyList = List.of(lbStickinessPolicy); + List loadBalancerVOList = List.of(loadBalancerVO); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); + List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); + TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); + + when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); + when(lbStickinessPolicy.getParams()).thenReturn(pairList); + when(loadBalancingRule1.getId()).thenReturn(1L); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); + when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); + when(loadBalancingRule1.getSourcePortStart()).thenReturn(80); + when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); + when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); + when(ip.addr()).thenReturn("10.10.10.10"); + when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("disabled"); + when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); + + assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesRevokeRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip1 = mock(Ip.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVOList1 = List.of(loadBalancerVO1); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Revoke); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip1); + when(ip1.addr()).thenReturn("10.10.10.10"); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); + when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList1); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(tungstenGuestNetworkIpAddressDao.remove(anyLong())).thenReturn(false); + + assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesRevokeRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); + LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); + LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); + List loadBalancingRuleList = List.of(loadBalancingRule); + List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(loadBalancingRule.getSourceIp()).thenReturn(ip); + when(loadBalancingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ip.addr()).thenReturn("10.10.10.10"); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); + when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); + when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); + + assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList)); + } + + @Test + public void applyPFRulesAddRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesAddRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesRevokeRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesRevokeRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void preparePublicNetworkTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenAnswer createTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenNetworkPolicyAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + + assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); + assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); + assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); + } + + @Test + public void prepareManagementNetworkTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + + assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); + assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); + assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); + } + + @Test(expected = CloudRuntimeException.class) + public void prepareWithExceptionTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + + tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext); + } + + @Test + public void releasePublicNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); + + when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + + assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); + } + + @Test + public void releaseManagementNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); + + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); + + assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); + } + + @Test(expected = CloudRuntimeException.class) + public void releaseWithExceptionTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); + + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenThrow(IllegalArgumentException.class); + + tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext); + } + + @Test + public void destroyTest() throws ConcurrentOperationException, ResourceUnavailableException { + IPAddressVO ipAddressVO1 = mock(IPAddressVO.class); + IPAddressVO ipAddressVO2 = mock(IPAddressVO.class); + Network network = mock(Network.class); + ReservationContext reservationContext = mock(ReservationContext.class); + List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); + TungstenAnswer tungstenDeleteFIPAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenDeleteNPAnswer = new MockTungstenAnswerFactory(true).get(); + + when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(tungstenDeleteNPAnswer); + + assertTrue(tungstenElement.destroy(network, reservationContext)); + } + + @Test + public void isReadyTest() { + PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); + PhysicalNetworkTrafficTypeVO physicalNetworkTrafficTypeVO = mock(PhysicalNetworkTrafficTypeVO.class); + + when(physicalNetworkTrafficTypeDao.findBy(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(physicalNetworkTrafficTypeVO); + + assertTrue(tungstenElement.isReady(physicalNetworkServiceProvider)); + } + + @Test + public void shutdownProviderInstancesTest() throws ConcurrentOperationException { + PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); + ReservationContext reservationContext = mock(ReservationContext.class); + PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + Network publicNetwork = mock(Network.class); + VlanVO vlanVO1 = mock(VlanVO.class); + VlanVO vlanVO2 = mock(VlanVO.class); + List vlanVOList = Arrays.asList(vlanVO1, vlanVO2); + HostPodVO hostPodVO1 = mock(HostPodVO.class); + HostPodVO hostPodVO2 = mock(HostPodVO.class); + List hostPodVOList = Arrays.asList(hostPodVO1, hostPodVO2); + + when(physicalNetworkDao.findById(anyLong())).thenReturn(physicalNetworkVO); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(vlanDao.listVlansByNetworkIdIncludingRemoved(anyLong())).thenReturn(vlanVOList); + when(hostPodDao.listByDataCenterId(anyLong())).thenReturn(hostPodVOList); + + assertTrue(tungstenElement.shutdownProviderInstances(physicalNetworkServiceProvider, reservationContext)); + verify(networkServiceMapDao, times(1)).deleteByNetworkId(anyLong()); + verify(tungstenService, times(2)).removePublicNetworkSubnet(any(VlanVO.class)); + verify(tungstenService, times(1)).deletePublicNetwork(anyLong()); + verify(tungstenService, times(2)).removeManagementNetworkSubnet(any(HostPodVO.class)); + verify(tungstenService, times(1)).deleteManagementNetwork(anyLong()); + } + + //@Test + //public void processConnectWithoutSecurityGroupTest() throws ConnectionException { + // Host host = mock(Host.class); + // StartupCommand startupCommand = mock(StartupCommand.class); + // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + // DataCenterVO dataCenterVO = mock(DataCenterVO.class); + // VlanVO vlanVO1 = mock(VlanVO.class); + // VlanVO vlanVO2 = mock(VlanVO.class); + // List vlanList = Arrays.asList(vlanVO1, vlanVO2); + // Network publicNetwork = mock(Network.class); + // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); +// + // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); + // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + // when(vlanDao.listByZone(anyLong())).thenReturn(vlanList); + // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); + // when(vlanVO1.getVlanGateway()).thenReturn("192.168.100.1"); + // when(vlanVO1.getVlanNetmask()).thenReturn("255.255.255.0"); + // when(vlanVO2.getVlanGateway()).thenReturn("192.168.101.1"); + // when(vlanVO2.getVlanNetmask()).thenReturn("255.255.255.0"); + // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); +// + // tungstenElement.processConnect(host, startupCommand, true); + // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + //} + + //@Test + //public void processConnectWithSecurityGroupTest() throws ConnectionException { + // Host host = mock(Host.class); + // StartupCommand startupCommand = mock(StartupCommand.class); + // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + // DataCenterVO dataCenterVO = mock(DataCenterVO.class); + // NetworkVO network = mock(NetworkVO.class); + // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); + // Network publicNetwork = mock(Network.class); +// + // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); + // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + // when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(Arrays.asList(network)); + // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); + // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); +// + // tungstenElement.processConnect(host, startupCommand, true); + // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + //} + + @Test + public void processHostAboutToBeRemovedWithSecurityGroupTest() { + HostVO hostVO = mock(HostVO.class); + TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + NetworkVO network = mock(NetworkVO.class); + + when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); + when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(List.of(network)); + + tungstenElement.processHostAboutToBeRemoved(1L); + verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + } + + @Test + public void processHostAboutToBeRemovedWithoutSecurityGroupTest() { + HostVO hostVO = mock(HostVO.class); + TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); + when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); + + tungstenElement.processHostAboutToBeRemoved(1L); + verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + } + + @Test + public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); + when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); + when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Egress); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + Ip ip = mock(Ip.class); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); + when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); + when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(ipAddressDao.findById(anyLong())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteNetworkPolicyAnswer = mock(TungstenAnswer.class); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void postStateTransitionEventWithVmStartedTest() { + StateMachine2.Transition transition = mock(StateMachine2.Transition.class); + VMInstanceVO vo = mock(VMInstanceVO.class); + Object opaque = mock(Object.class); + + when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Starting); + when(transition.getToState()).thenReturn(VirtualMachine.State.Running); + when(tungstenService.addTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); + + assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); + } + + @Test + public void postStateTransitionEventWithVmStopedTest() { + StateMachine2.Transition transition = mock(StateMachine2.Transition.class); + VMInstanceVO vo = mock(VMInstanceVO.class); + Object opaque = mock(Object.class); + + when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Stopping); + when(transition.getToState()).thenReturn(VirtualMachine.State.Stopped); + when(tungstenService.removeTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); + + assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); + } + + @Test + public void prepareMigrationTest() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + DeployDestination dest = mock(DeployDestination.class); + ReservationContext context = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO hostVO = mock(HostVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenElement.prepareMigration(nic, network, vm, dest, context)); + } + + @Test + public void rollbackMigration() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + ReservationContext src = mock(ReservationContext.class); + ReservationContext dest = mock(ReservationContext.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + HostVO hostVO = mock(HostVO.class); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(vm.getVirtualMachine()).thenReturn(virtualMachine); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + + tungstenElement.rollbackMigration(nic, network, vm, src, dest); + verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); + } + + @Test + public void commitMigration() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + ReservationContext src = mock(ReservationContext.class); + ReservationContext dest = mock(ReservationContext.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + HostVO hostVO = mock(HostVO.class); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(vm.getVirtualMachine()).thenReturn(virtualMachine); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + + tungstenElement.commitMigration(nic, network, vm, src, dest); + verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); + } +} \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java index e69de29bb2d1..d8e461fb6ae0 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java @@ -0,0 +1,103 @@ +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.cloud.agent.AgentManager; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class TungstenFabricUtilsTest { + @Mock + AgentManager agentMgr; + @Mock + TungstenProviderDao tungstenProviderDao; + + TungstenFabricUtils tungstenFabricUtils; + + AutoCloseable closeable; + + @Before + public void setup() { + closeable = MockitoAnnotations.openMocks(this); + tungstenFabricUtils = new TungstenFabricUtils(); + tungstenFabricUtils.agentMgr = agentMgr; + tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; + } + + @After + public void tearDown() throws Exception { + closeable.close(); + } + + @Test + public void sendTungstenCommandSuccessTest() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); + + assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithNullTungstenProvider() { + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithNullAnswer() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithFalseAnswer() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } +} \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java index e69de29bb2d1..3eb61510b09f 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java @@ -0,0 +1,1671 @@ +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +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 com.cloud.agent.AgentManager; +import com.cloud.agent.api.Answer; +import com.cloud.configuration.Config; +import com.cloud.configuration.ConfigurationManager; +import com.cloud.dc.DataCenter; +import com.cloud.dc.DataCenterIpAddressVO; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.HostPodVO; +import com.cloud.dc.Vlan; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.DataCenterIpAddressDao; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.hypervisor.Hypervisor; +import com.cloud.network.IpAddressManager; +import com.cloud.network.Network; +import com.cloud.network.NetworkModel; +import com.cloud.network.NetworkService; +import com.cloud.network.Networks; +import com.cloud.network.TungstenGuestNetworkIpAddressVO; +import com.cloud.network.dao.FirewallRulesDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.LoadBalancerCertMapDao; +import com.cloud.network.dao.LoadBalancerCertMapVO; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDetailVO; +import com.cloud.network.dao.NetworkDetailsDao; +import com.cloud.network.dao.NetworkVO; +import com.cloud.network.dao.SslCertVO; +import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.security.SecurityGroup; +import com.cloud.network.security.SecurityGroupManager; +import com.cloud.network.security.SecurityGroupRuleVO; +import com.cloud.network.security.SecurityGroupService; +import com.cloud.network.security.SecurityGroupVO; +import com.cloud.network.security.SecurityRule; +import com.cloud.network.security.TungstenSecurityGroupRuleVO; +import com.cloud.network.security.dao.SecurityGroupDao; +import com.cloud.network.security.dao.SecurityGroupRuleDao; +import com.cloud.network.security.dao.SecurityGroupVMMapDao; +import com.cloud.network.security.dao.TungstenSecurityGroupRuleDao; +import com.cloud.projects.ProjectManager; +import com.cloud.projects.ProjectVO; +import com.cloud.projects.dao.ProjectDao; +import com.cloud.user.AccountVO; +import com.cloud.user.DomainManager; +import com.cloud.user.dao.AccountDao; +import com.cloud.utils.db.EntityManager; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.db.TransactionCallback; +import com.cloud.utils.net.Ip; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.Nic; +import com.cloud.vm.NicSecondaryIp; +import com.cloud.vm.NicVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.dao.NicDao; +import com.cloud.vm.dao.NicSecondaryIpDao; +import com.cloud.vm.dao.NicSecondaryIpVO; +import net.juniper.tungsten.api.ApiObjectBase; +import net.juniper.tungsten.api.ApiPropertyBase; +import net.juniper.tungsten.api.ObjectReference; +import net.juniper.tungsten.api.types.ActionListType; +import net.juniper.tungsten.api.types.AddressGroup; +import net.juniper.tungsten.api.types.AddressType; +import net.juniper.tungsten.api.types.ApplicationPolicySet; +import net.juniper.tungsten.api.types.FirewallPolicy; +import net.juniper.tungsten.api.types.FirewallRuleEndpointType; +import net.juniper.tungsten.api.types.FirewallRuleMatchTagsType; +import net.juniper.tungsten.api.types.FirewallSequence; +import net.juniper.tungsten.api.types.FirewallServiceGroupType; +import net.juniper.tungsten.api.types.FirewallServiceType; +import net.juniper.tungsten.api.types.Loadbalancer; +import net.juniper.tungsten.api.types.LogicalRouter; +import net.juniper.tungsten.api.types.NetworkPolicy; +import net.juniper.tungsten.api.types.PolicyEntriesType; +import net.juniper.tungsten.api.types.PolicyRuleType; +import net.juniper.tungsten.api.types.PortType; +import net.juniper.tungsten.api.types.ServiceGroup; +import net.juniper.tungsten.api.types.SubnetListType; +import net.juniper.tungsten.api.types.SubnetType; +import net.juniper.tungsten.api.types.Tag; +import net.juniper.tungsten.api.types.TagType; +import net.juniper.tungsten.api.types.VirtualMachine; +import net.juniper.tungsten.api.types.VirtualMachineInterface; +import net.juniper.tungsten.api.types.VirtualNetwork; +import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.messagebus.MessageBus; +import org.apache.cloudstack.framework.messagebus.MessageSubscriber; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkGatewayToLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkSubnetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecondaryIpAddressCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecurityGroupRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenVmToSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDefaultProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDomainCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpPoolCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenDomainCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpPoolCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenFabricNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenLoadBalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenNetworkDnsCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNicCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenVmCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkGatewayFromLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkSubnetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecondaryIpAddressCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecurityGroupRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateLoadBalancerServiceInstanceCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenDefaultSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerSslCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerStatsCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenVrouterConfigCommand; +import org.apache.cloudstack.network.tungsten.model.TungstenLogicalRouter; +import org.apache.cloudstack.network.tungsten.model.TungstenNetworkPolicy; +import org.apache.cloudstack.network.tungsten.model.TungstenRule; +import org.apache.cloudstack.network.tungsten.model.TungstenTag; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockedConstruction; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; + +import java.util.Arrays; +import java.util.List; + +@RunWith(MockitoJUnitRunner.class) +public class TungstenServiceImplTest { + @Mock + MessageBus messageBus; + @Mock + ProjectDao projectDao; + @Mock + AccountDao accountDao; + @Mock + NetworkDao networkDao; + @Mock + ConfigurationDao configDao; + @Mock + IPAddressDao ipAddressDao; + @Mock + EntityManager entityMgr; + @Mock + NetworkModel networkModel; + @Mock + DomainDao domainDao; + @Mock + LoadBalancerCertMapDao lbCertMapDao; + @Mock + FirewallRulesDao fwRulesDao; + @Mock + TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; + @Mock + TungstenProviderDao tungstenProviderDao; + @Mock + TungstenFabricUtils tungstenFabricUtils; + @Mock + AgentManager agentMgr; + @Mock + HostDao hostDao; + @Mock + NetworkDetailsDao networkDetailsDao; + @Mock + SecurityGroupDao securityGroupDao; + @Mock + NicDao nicDao; + @Mock + TungstenSecurityGroupRuleDao tungstenSecurityGroupRuleDao; + @Mock + SecurityGroupVMMapDao securityGroupVMMapDao; + @Mock + SecurityGroupRuleDao securityGroupRuleDao; + @Mock + SecurityGroupManager securityGroupManager; + @Mock + NicSecondaryIpDao nicSecIpDao; + @Mock + DataCenterIpAddressDao dataCenterIpAddressDao; + @Mock + DataCenterDao dataCenterDao; + @Mock + IpAddressManager ipAddressManager; + + TungstenServiceImpl tungstenService; + + AutoCloseable closeable; + + @Before + public void setup() { + closeable = MockitoAnnotations.openMocks(this); + tungstenService = new TungstenServiceImpl(); + tungstenService.projectDao = projectDao; + tungstenService.tungstenProviderDao = tungstenProviderDao; + tungstenService.networkModel = networkModel; + tungstenService.ipAddressDao = ipAddressDao; + tungstenService.tungstenFabricUtils = tungstenFabricUtils; + tungstenService.domainDao = domainDao; + tungstenService.accountDao = accountDao; + tungstenService.dataCenterIpAddressDao = dataCenterIpAddressDao; + tungstenService.networkDetailsDao = networkDetailsDao; + tungstenService.agentMgr = agentMgr; + tungstenService.hostDao = hostDao; + tungstenService.configDao = configDao; + tungstenService.fwRulesDao = fwRulesDao; + tungstenService.lbCertMapDao = lbCertMapDao; + tungstenService.entityMgr = entityMgr; + tungstenService.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; + tungstenService.securityGroupDao = securityGroupDao; + tungstenService.tungstenSecurityGroupRuleDao = tungstenSecurityGroupRuleDao; + tungstenService.securityGroupVMMapDao = securityGroupVMMapDao; + tungstenService.nicDao = nicDao; + tungstenService.nicSecIpDao = nicSecIpDao; + tungstenService.securityGroupRuleDao = securityGroupRuleDao; + tungstenService.securityGroupManager = securityGroupManager; + tungstenService.networkDao = networkDao; + tungstenService.dataCenterDao = dataCenterDao; + tungstenService.ipAddressManager = ipAddressManager; + tungstenService.messageBus = messageBus; + } + + @After + public void tearDown() throws Exception { + closeable.close(); + } + + @Test + public void createTungstenFloatingIpTest() throws Exception { + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer createTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + Ip ip = mock(Ip.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); + when(ipAddressVO.getAddress()).thenReturn(ip); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); + } + + @Test + public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer deleteTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); + } + + @Test + public void deleteTungstenDomainTest() throws Exception { + DomainVO domainVO = mock(DomainVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); + } + + @Test + public void deleteTungstenProjectTest() throws Exception { + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); + } + + @Test + public void addTungstenDefaultNetworkPolicyTest() { + TungstenRule tungstenRule = mock(TungstenRule.class); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + + assertTrue(tungstenService.addTungstenDefaultNetworkPolicy(1L, "default-domain:default-project", "policyName", "7279ed91-314e-45be-81b4-b10395fd2ae3" + , List.of(tungstenRule), 1, 1)); + } + + @Test + public void createManagementNetworkTest() { + Network managementNetwork = mock(Network.class); + VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); + VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer createTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenVrouterConfigCommand.class), anyLong())).thenReturn(updateTungstenGlobalVrouterConfigAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + + when(createTungstenNetworkAnswer.getApiObjectBase()).thenReturn(managementVirtualNetwork); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); + + assertTrue(tungstenService.createManagementNetwork(1L)); + } + + @Test + public void addManagementNetworkSubnetTest() { + HostPodVO hostPodVO = mock(HostPodVO.class); + Network managementNetwork = mock(Network.class); + TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); + + when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(managementNetwork.getCidr()).thenReturn("192.168.100.0/24"); + when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); + when(dataCenterIpAddressDao.mark(anyLong(), anyLong(), anyString())).thenReturn(true); + + assertTrue(tungstenService.addManagementNetworkSubnet(hostPodVO)); + } + + @Test + public void deleteManagementNetworkTest() { + Network managementNetwork = mock(Network.class); + TungstenAnswer deleteTungstenManagementPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenFabricPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenFabricPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); + when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); + + assertTrue(tungstenService.deleteManagementNetwork(1L)); + } + + @Test + public void removeManagementNetworkSubnetTest() { + HostPodVO hostPodVO = mock(HostPodVO.class); + Network managementNetwork = mock(Network.class); + TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); + + assertTrue(tungstenService.removeManagementNetworkSubnet(hostPodVO)); + verify(dataCenterIpAddressDao, times(1)).releasePodIpAddress(anyLong()); + } + + @Test + public void createPublicNetworkTest() { + Network publicNetwork = mock(Network.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer createPublicNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(createPublicNetworkAnswer.getApiObjectBase()).thenReturn(virtualNetwork); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); + when(virtualNetwork.getQualifiedName()).thenReturn(Arrays.asList("default-domain", "default-project", "publicNetwork")); + + assertTrue(tungstenService.createPublicNetwork(1L)); + } + + @Test + public void addPublicNetworkSubnetTest() { + VlanVO vlanVO = mock(VlanVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(vlanVO.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); + when(vlanVO.getVlanGateway()).thenReturn("192.168.100.1"); + when(vlanVO.getVlanNetmask()).thenReturn("255.255.255.0"); + when(publicNetwork.getCidr()).thenReturn("192.168.100.0/24"); + when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); + + assertTrue(tungstenService.addPublicNetworkSubnet(vlanVO)); + } + + @Test + public void deletePublicNetworkTest() { + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); + + assertTrue(tungstenService.deletePublicNetwork(1L)); + } + + @Test + public void removePublicNetworkSubnetTest() { + VlanVO vlanVO = mock(VlanVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + + assertTrue(tungstenService.removePublicNetworkSubnet(vlanVO)); + verify(ipAddressDao, times(1)).unassignIpAddress(anyLong()); + } + + @Test + public void allocateDnsIpAddressTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); + when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); + when(tungstenGuestNetworkIpAddressDao.persist(any(TungstenGuestNetworkIpAddressVO.class))).thenReturn(tungstenGuestNetworkIpAddressVO); + when(networkVO.getCidr()).thenReturn("192.168.100.0/24"); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); + + assertTrue(tungstenService.allocateDnsIpAddress(networkVO, null, "test")); + } + + @Test + public void deallocateDnsIpAddressTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); + when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); + when(tungstenGuestNetworkIpAddressDao.findByNetworkAndGuestIpAddress(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); + + tungstenService.deallocateDnsIpAddress(networkVO, null, "test"); + verify(tungstenGuestNetworkIpAddressDao, times(1)).expunge(anyLong()); + } + + @Test + public void subscribeTungstenEventTest() { + tungstenService.subscribeTungstenEvent(); + + verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_ASSIGN_IPADDR_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_RELEASE_IPADDR_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_APPLY_NETWORK_POLICY_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_CREATE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_DELETE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_DELETE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_SYNC_TUNGSTEN_DB_WITH_DOMAINS_AND_PROJECTS_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_CREATE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_DELETE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_ADD_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_REMOVE_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_ASSIGN_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_RELEASE_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); + } + + @Test + public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { + DomainVO domainVO = mock(DomainVO.class); + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer createTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenDefaultProjectAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + + when(domainDao.listAll()).thenReturn(List.of(domainVO)); + when(projectDao.listAll()).thenReturn(List.of(projectVO)); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDomainCommand.class), anyLong())).thenReturn(createTungstenDomainAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenProjectCommand.class), anyLong())).thenReturn(createTungstenProjectAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDefaultProjectCommand.class), anyLong())).thenReturn(createTungstenDefaultProjectAnswer); + when(domainDao.findById(anyLong())).thenReturn(domainVO); + + assertTrue(tungstenService.syncTungstenDbWithCloudstackProjectsAndDomains()); + } + + @Test + public void updateLoadBalancerTest() { + Network network = mock(Network.class); + LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); + Network publicNetwork = mock(Network.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + HostVO hostVO = mock(HostVO.class); + TungstenAnswer getTungstenLoadBalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new MockTungstenAnswerFactory(true).get(); + Answer updateTungstenLoadbalancerStatsAnswer = mock(Answer.class); + Answer updateTungstenLoadbalancerSslAnswer = mock(Answer.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); + SslCertVO sslCertVO = mock(SslCertVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + Ip ip = mock(Ip.class); + AccountVO accountVO = mock(AccountVO.class); + Loadbalancer loadbalancer = mock(Loadbalancer.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(hostDao.listAllHostsByZoneAndHypervisorType(anyLong(), eq(Hypervisor.HypervisorType.KVM))).thenReturn(List.of(hostVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenLoadBalancerCommand.class), anyLong())).thenReturn(getTungstenLoadBalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateLoadBalancerServiceInstanceCommand.class), anyLong())).thenReturn(updateLoadBalancerServiceInstanceAnswer); + when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerStatsCommand.class))).thenReturn(updateTungstenLoadbalancerStatsAnswer); + when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerSslCommand.class))).thenReturn(updateTungstenLoadbalancerSslAnswer); + when(updateTungstenLoadbalancerStatsAnswer.getResult()).thenReturn(true); + when(updateTungstenLoadbalancerSslAnswer.getResult()).thenReturn(true); + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); + when(fwRulesDao.listByIpAndPurposeAndNotRevoked(anyLong(), eq(FirewallRule.Purpose.LoadBalancing))).thenReturn(List.of(firewallRuleVO)); + when(lbCertMapDao.findByLbRuleId(anyLong())).thenReturn(loadBalancerCertMapVO); + when(entityMgr.findById(eq(SslCertVO.class), anyLong())).thenReturn(sslCertVO); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(loadBalancingRule.getSourceIp()).thenReturn(ip); + when(accountDao.findById(anyLong())).thenReturn(accountVO); + when(ip.addr()).thenReturn("192.168.100.100"); + when(getTungstenLoadBalancerAnswer.getApiObjectBase()).thenReturn(loadbalancer); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); + + assertTrue(tungstenService.updateLoadBalancer(network, loadBalancingRule)); + } + + @Test + public void createTungstenSecurityGroupTest() { + SecurityGroup securityGroup = mock(SecurityGroup.class); + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + DomainVO domainVO = mock(DomainVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer createTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(domainDao.findById(anyLong())).thenReturn(domainVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenSecurityGroupCommand.class), anyLong())).thenReturn(createTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + + try (MockedStatic transactionMocked = Mockito.mockStatic(Transaction.class)) { + transactionMocked.when(() -> Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); + assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); + } + } + + @Test + public void deleteTungstenSecurityGroupTest() { + SecurityGroup securityGroup = mock(SecurityGroup.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); + + assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); + } + + @Test + public void addTungstenSecurityGroupEgressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + NicVO nicVO = mock(NicVO.class); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); + when(tungstenSecurityGroupRuleDao.findDefaultSecurityRule(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); + when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); + when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(securityRule.getAllowedNetworkId()).thenReturn(1L); + + assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); + } + + @Test + public void addTungstenSecurityGroupIngressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); + when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); + when(securityRule.getAllowedNetworkId()).thenReturn(null); + + assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); + } + + @Test + public void removeTungstenSecurityGroupEgressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NicVO nicVO = mock(NicVO.class); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); + when(securityRule.getType()).thenReturn("egress"); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(securityRule.getAllowedNetworkId()).thenReturn(1L); + when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(tungstenSecurityGroupRuleDao.findBySecurityGroupAndRuleTypeAndRuleTarget(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); + + assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); + } + + @Test + public void removeTungstenSecurityGroupIngressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(securityRule.getAllowedNetworkId()).thenReturn(null); + + assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); + } + + @Test + public void addTungstenNicSecondaryIpAddressTest() { + NicSecondaryIp nicSecondaryIp = mock(NicSecondaryIp.class); + Network network = mock(Network.class); + DataCenter dataCenter = mock(DataCenter.class); + Nic nic = mock(Nic.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer addTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); + when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); + when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); + when(entityMgr.findById(eq(Nic.class), anyLong())).thenReturn(nic); + when(nicSecondaryIp.getIp4Address()).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(addTungstenSecondaryIpAddressAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); + when(network.getGuestType()).thenReturn(Network.GuestType.Shared); + when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); + when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + + assertTrue(tungstenService.addTungstenNicSecondaryIpAddress(1L)); + } + + @Test + public void removeTungstenNicSecondaryIpAddressTest() { + NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); + Network network = mock(Network.class); + DataCenter dataCenter = mock(DataCenter.class); + TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); + when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + + when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); + when(network.getGuestType()).thenReturn(Network.GuestType.Shared); + when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); + when(nicSecondaryIpVO.getIp4Address()).thenReturn("192.168.100.100"); + + assertTrue(tungstenService.removeTungstenNicSecondaryIpAddress(nicSecondaryIpVO)); + } + + @Test + public void createTungstenPolicyTest() { + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(createTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + + assertNotNull(tungstenService.createTungstenPolicy(1L, "test")); + } + + @Test + public void addTungstenPolicyRuleTest() throws Exception { + TungstenAnswer addTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenPolicyRuleCommand.class), anyLong())).thenReturn(addTungstenPolicyRuleAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(addTungstenPolicyRuleAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + + try (MockedConstruction ignored = + Mockito.mockConstruction(AddTungstenPolicyRuleCommand.class, (mock, context) -> { + when(mock.getUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + })) { + + assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", + "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, + "network2", "192.168.200.200", 32, 80, 80)); + } + } + + @Test + public void listTungstenPolicyTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer listTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findById(anyLong())).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyCommand.class), anyLong())).thenReturn(listTungstenPolicyAnswer); + when(listTungstenPolicyAnswer.getTungstenModelList()).thenReturn(List.of(tungstenNetworkPolicy)); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn( + List.of(virtualNetwork)); + + assertNotNull(tungstenService.listTungstenPolicy(1L, 2L, 3L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenNetworkTest() { + TungstenAnswer listTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNetworkCommand.class), anyLong())).thenReturn(listTungstenNetworkAnswer); + doReturn(List.of(virtualNetwork)).when(listTungstenNetworkAnswer).getApiObjectBaseList(); + when((virtualNetwork.getName())).thenReturn("guestNetwork1"); + + assertNotNull(tungstenService.listTungstenNetwork(1L, "948f421c-edde-4518-a391-09299cc25dc2", false)); + } + + @Test + public void listTungstenNicTest() { + TungstenAnswer listTungstenNicAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNicCommand.class), anyLong())).thenReturn(listTungstenNicAnswer); + doReturn(List.of(virtualMachineInterface)).when(listTungstenNicAnswer).getApiObjectBaseList(); + + assertNotNull(tungstenService.listTungstenNic(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenVmTest() { + TungstenAnswer listTungstenVmAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenVmCommand.class), anyLong())).thenReturn(listTungstenVmAnswer); + doReturn(List.of(virtualMachine)).when(listTungstenVmAnswer).getApiObjectBaseList(); + + assertNotNull(tungstenService.listTungstenVm(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenPolicyTest() { + TungstenAnswer deleteTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); + + assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenPolicyRuleWithRuleUuidTest() { + TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); + doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + + assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listTungstenPolicyRuleWithAllRuleTest() { + TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); + doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + + assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", null)); + } + + @Test + public void removeTungstenPolicyRuleTest() { + TungstenAnswer removeTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyRuleCommand.class), anyLong())).thenReturn(removeTungstenPolicyRuleAnswer); + when(removeTungstenPolicyRuleAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.removeTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void createTungstenTagTest() { + TungstenAnswer createTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagCommand.class), anyLong())).thenReturn(createTungstenTagAnswer); + when(createTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); + doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); + doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); + doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); + + assertNotNull(tungstenService.createTungstenTag(1L, "testTag", "testTagType")); + } + + @Test + public void createTungstenTagTypeTest() { + TungstenAnswer createTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + TagType tagtype = mock(TagType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(createTungstenTagTypeAnswer.getApiObjectBase()).thenReturn(tagtype); + + assertNotNull(tungstenService.createTungstenTagType(1L, "testTagType")); + } + + @Test + public void listTungstenTagsTest() { + TungstenAnswer listTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagCommand.class), anyLong())).thenReturn(listTungstenTagAnswer); + when(listTungstenTagAnswer.getTungstenModelList()).thenReturn(List.of(tungstenTag)); + when(tungstenTag.getTag()).thenReturn(tag); + doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); + doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); + doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); + doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); + + assertNotNull(tungstenService.listTungstenTags(1L, "948f421c-edde-4518-a391-09299cc25dc2" + , "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", "a329662e-1805-4a89-9b05-2b818ea35978", + "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); + } + + @Test + public void listTungstenTagTypesTest() { + TungstenAnswer listTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + TagType tagtype = mock(TagType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagTypeCommand.class), anyLong())).thenReturn(listTungstenTagTypeAnswer); + doReturn(List.of(tagtype)).when(listTungstenTagTypeAnswer).getApiObjectBaseList(); + + assertNotNull(tungstenService.listTungstenTagTypes(1L, "testTagType")); + } + + @Test + public void deleteTungstenTagTest() { + TungstenAnswer deleteTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); + + assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenTagTypeTest() { + TungstenAnswer deleteTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); + + assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void applyTungstenPolicyTest() { + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(applyTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.applyTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", 1, 1)); + } + + @Test + public void applyTungstenTagTest() { + TungstenAnswer applyTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenTagCommand.class), anyLong())).thenReturn(applyTungstenTagAnswer); + when(applyTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); + when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); + when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); + + assertNotNull(tungstenService.applyTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85") + , List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb" + , "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); + } + + @Test + public void removeTungstenPolicyTest() { + TungstenAnswer removeTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyCommand.class), anyLong())).thenReturn(removeTungstenPolicyAnswer); + when(removeTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.removeTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void removeTungstenTagTest() { + TungstenAnswer removeTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenTagCommand.class), anyLong())).thenReturn(removeTungstenTagAnswer); + when(removeTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); + when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); + when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); + + assertNotNull(tungstenService.removeTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), + List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85"), + List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", null, + "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb")); + } + + @Test + public void createTungstenAddressGroupTest() { + TungstenAnswer createTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); + AddressGroup addressGroup = mock(AddressGroup.class); + SubnetListType subnetListType = mock(SubnetListType.class); + SubnetType subnetType = mock(SubnetType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenAddressGroupCommand.class), anyLong())).thenReturn(createTungstenAddressGroupAnswer); + when(createTungstenAddressGroupAnswer.getApiObjectBase()).thenReturn(addressGroup); + when(addressGroup.getPrefix()).thenReturn(subnetListType); + when(subnetListType.getSubnet()).thenReturn(List.of(subnetType)); + + assertNotNull(tungstenService.createTungstenAddressGroup(1L, "test", "192.168.100.0", 24)); + } + + @Test + public void createTungstenServiceGroupTest() { + TungstenAnswer createTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); + ServiceGroup serviceGroup = mock(ServiceGroup.class); + FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); + FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenServiceGroupCommand.class), anyLong())).thenReturn(createTungstenServiceGroupAnswer); + when(createTungstenServiceGroupAnswer.getApiObjectBase()).thenReturn(serviceGroup); + when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); + when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); + when(firewallServiceType.getDstPorts()).thenReturn(portType); + + assertNotNull(tungstenService.createTungstenServiceGroup(1L, "test", "tcp", 80, 80)); + } + + @Test + public void createTungstenFirewallRuleTest() { + TungstenAnswer createTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); + net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); + ActionListType actionListType = mock(ActionListType.class); + ObjectReference serviceGroup = mock(ObjectReference.class); + FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); + FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); + FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallRuleCommand.class), anyLong())).thenReturn(createTungstenFirewallRuleAnswer); + when(createTungstenFirewallRuleAnswer.getApiObjectBase()).thenReturn(firewallRule); + when(firewallRule.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); + when(serviceGroup.getReferredName()).thenReturn(List.of("service")); + when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); + when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); + when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); + when(firewallRuleEndpointType2.getTags()).thenReturn(null); + when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); + when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); + + assertNotNull(tungstenService.createTungstenFirewallRule(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "test", "pass", "948f421c-edde-4518-a391-09299cc25dc2", + "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", null, "<>", "a329662e-1805-4a89-9b05-2b818ea35978" + , "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", null, "df8e4490-2a40-4d63-a6f3-1f829ffe4fc6", 1)); + } + + @Test + public void createTungstenFirewallPolicyTest() { + TungstenAnswer createTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(createTungstenFirewallPolicyAnswer); + when(createTungstenFirewallPolicyAnswer.getApiObjectBase()).thenReturn(firewallPolicy); + when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.createTungstenFirewallPolicy(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652","test", 1)); + } + + @Test + public void createTungstenApplicationPolicySetTest() { + TungstenAnswer createTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + ObjectReference objectReference = mock(ObjectReference.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(createTungstenApplicationPolicySetAnswer); + when(createTungstenApplicationPolicySetAnswer.getApiObjectBase()).thenReturn(applicationPolicySet); + when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); + when(objectReference.getReferredName()).thenReturn(List.of("tag")); + when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.createTungstenApplicationPolicySet(1L, "test")); + } + + @Test + public void listTungstenApplicationPolicySetTest() { + TungstenAnswer listTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + ObjectReference objectReference = mock(ObjectReference.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(listTungstenApplicationPolicySetAnswer); + doReturn(List.of(applicationPolicySet)).when(listTungstenApplicationPolicySetAnswer).getApiObjectBaseList(); + when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); + when(objectReference.getReferredName()).thenReturn(List.of("tag")); + when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.listTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenFirewallPolicyTest() { + TungstenAnswer listTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(listTungstenFirewallPolicyAnswer); + doReturn(List.of(firewallPolicy)).when(listTungstenFirewallPolicyAnswer).getApiObjectBaseList(); + when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.listTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listTungstenFirewallRuleTest() { + TungstenAnswer listTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); + net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); + ActionListType actionListType = mock(ActionListType.class); + ObjectReference serviceGroup = mock(ObjectReference.class); + FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); + FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); + FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallRuleCommand.class), anyLong())).thenReturn(listTungstenFirewallRuleAnswer); + doReturn(List.of(firewallRule)).when(listTungstenFirewallRuleAnswer).getApiObjectBaseList(); + when(firewallRule.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); + when(serviceGroup.getReferredName()).thenReturn(List.of("service")); + when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); + when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); + when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); + when(firewallRuleEndpointType2.getTags()).thenReturn(null); + when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); + when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); + + assertNotNull(tungstenService.listTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", + "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listTungstenAddressGroupTest() { + TungstenAnswer listTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); + AddressGroup addressGroup = mock(AddressGroup.class); + SubnetListType subnetListType = mock(SubnetListType.class); + SubnetType subnetType = mock(SubnetType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenAddressGroupCommand.class), anyLong())).thenReturn(listTungstenAddressGroupAnswer); + doReturn(List.of(addressGroup)).when(listTungstenAddressGroupAnswer).getApiObjectBaseList(); + when(addressGroup.getPrefix()).thenReturn(subnetListType); + when(subnetListType.getSubnet()).thenReturn( + List.of(subnetType)); + + assertNotNull(tungstenService.listTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenServiceGroupTest() { + TungstenAnswer listTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); + ServiceGroup serviceGroup = mock(ServiceGroup.class); + FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); + FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenServiceGroupCommand.class), anyLong())).thenReturn(listTungstenServiceGroupAnswer); + doReturn(List.of(serviceGroup)).when(listTungstenServiceGroupAnswer).getApiObjectBaseList(); + when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); + when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); + when(firewallServiceType.getDstPorts()).thenReturn(portType); + + assertNotNull(tungstenService.listTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenApplicationPolicySetTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenFirewallPolicyTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenFirewallRuleTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenServiceGroupTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenAddressGroupTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void createSharedNetworkTest() { + Network network = mock(Network.class); + Vlan vlan = mock(Vlan.class); + AccountVO accountVO = mock(AccountVO.class); + TungstenAnswer createTungstenSharedNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + HostVO hostVO = mock(HostVO.class); + Answer answer = mock(Answer.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); + + when(accountDao.findById(anyLong())).thenReturn(accountVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenSharedNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(network.getMode()).thenReturn(Networks.Mode.Dhcp); + when(network.getCidr()).thenReturn("192.168.100.0/24"); + when(vlan.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); + when(vlan.getVlanGateway()).thenReturn("192.168.100.1"); + when(vlan.getIp6Gateway()).thenReturn("fd00::1"); + when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(hostDao.findByPublicIp(anyString())).thenReturn(hostVO); + when(agentMgr.easySend(anyLong(), any(SetupTungstenVRouterCommand.class))).thenReturn(answer); + when(answer.getResult()).thenReturn(true); + when(vlan.getIp6Cidr()).thenReturn("fd00::1/64"); + when(vlan.getIp6Range()).thenReturn("fd00::100-fd00::200"); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.1.150"); + when(createTungstenSharedNetworkAnswer.getApiObjectBase()).thenReturn(apiObjectBase); + when(apiObjectBase.getQualifiedName()).thenReturn(List.of("network")); + when(tungstenProviderVO.getGateway()).thenReturn("192.168.100.1"); + + assertTrue(tungstenService.createSharedNetwork(network, vlan)); + } + + @Test + public void addTungstenVmSecurityGroupTest() { + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); + TungstenAnswer addTungstenVmToSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + NicVO nicVO = mock(NicVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenVmToSecurityGroupCommand.class), anyLong())).thenReturn(addTungstenVmToSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); + when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + + assertTrue(tungstenService.addTungstenVmSecurityGroup(vmInstanceVO)); + } + + @Test + public void removeTungstenVmSecurityGroupTest() { + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + NicVO nicVO = mock(NicVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + + assertTrue(tungstenService.removeTungstenVmSecurityGroup(vmInstanceVO)); + } + + @Test + public void createRoutingLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.createRoutingLogicalRouter(1L, "default-domain:default-project", "testLR")); + } + + @Test + public void addNetworkGatewayToLogicalRouterTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findByUuid(anyString())).thenReturn(networkVO); + when(ipAddressManager.acquireLastGuestIpAddress(any(Network.class))).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkGatewayToLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.addNetworkGatewayToLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listRoutingLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModelList()).thenReturn(List.of(tungstenLogicalRouter)); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.listRoutingLogicalRouter(1L, null, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void removeNetworkGatewayFromLogicalRouterTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findByUuid(anyString())).thenReturn(networkVO); + when(tungstenGuestNetworkIpAddressDao.findByNetworkAndLogicalRouter(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkGatewayFromLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.removeNetworkGatewayFromLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void deleteLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } +} \ No newline at end of file From 69c290580486a2ebf977e84d2c2f87fb7c20f265 Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Tue, 24 Oct 2023 11:48:44 -0400 Subject: [PATCH 10/12] update line ending --- .../service/MockTungstenAnswerFactory.java | 36 +- .../tungsten/service/TungstenElementTest.java | 1015 +--------- .../service/TungstenFabricUtilsTest.java | 104 +- .../service/TungstenServiceImplTest.java | 1672 +---------------- 4 files changed, 4 insertions(+), 2823 deletions(-) diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java index 0eeaae26e8cd..f26831ac9bcb 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java @@ -1,35 +1 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; - -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -public class MockTungstenAnswerFactory { - - TungstenAnswer tungstenAnswer; - MockTungstenAnswerFactory(boolean returnResult){ - tungstenAnswer=mock(TungstenAnswer.class); - when(tungstenAnswer.getResult()).thenReturn(returnResult); - } - TungstenAnswer get() { - return tungstenAnswer; - } - -} +// 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 org.apache.cloudstack.network.tungsten.service; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class MockTungstenAnswerFactory { TungstenAnswer tungstenAnswer; MockTungstenAnswerFactory(boolean returnResult){ tungstenAnswer=mock(TungstenAnswer.class); when(tungstenAnswer.getResult()).thenReturn(returnResult); } TungstenAnswer get() { return tungstenAnswer; } } \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java index a9603ac1d3f3..f1c2dd785f59 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java @@ -1,1014 +1 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyBoolean; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.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 com.cloud.agent.AgentManager; -import com.cloud.api.ApiDBUtils; -import com.cloud.configuration.Config; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.dc.VlanVO; -import com.cloud.dc.dao.DataCenterDao; -import com.cloud.dc.dao.HostPodDao; -import com.cloud.dc.dao.VlanDao; -import com.cloud.deploy.DeployDestination; -import com.cloud.exception.ConcurrentOperationException; -import com.cloud.exception.ResourceUnavailableException; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.hypervisor.Hypervisor; -import com.cloud.network.IpAddressManager; -import com.cloud.network.Network; -import com.cloud.network.NetworkModel; -import com.cloud.network.Networks; -import com.cloud.network.PhysicalNetworkServiceProvider; -import com.cloud.network.TungstenGuestNetworkIpAddressVO; -import com.cloud.network.dao.IPAddressDao; -import com.cloud.network.dao.IPAddressVO; -import com.cloud.network.dao.LoadBalancerCertMapDao; -import com.cloud.network.dao.LoadBalancerDao; -import com.cloud.network.dao.LoadBalancerVMMapDao; -import com.cloud.network.dao.LoadBalancerVMMapVO; -import com.cloud.network.dao.LoadBalancerVO; -import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.NetworkDetailsDao; -import com.cloud.network.dao.NetworkServiceMapDao; -import com.cloud.network.dao.NetworkVO; -import com.cloud.network.dao.PhysicalNetworkDao; -import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; -import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; -import com.cloud.network.dao.PhysicalNetworkVO; -import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.rules.FirewallRule; -import com.cloud.network.rules.FirewallRuleVO; -import com.cloud.network.rules.PortForwardingRule; -import com.cloud.network.rules.StaticNatImpl; -import com.cloud.user.AccountManager; -import com.cloud.user.User; -import com.cloud.uservm.UserVm; -import com.cloud.utils.EncryptionUtil; -import com.cloud.utils.Pair; -import com.cloud.utils.TungstenUtils; -import com.cloud.utils.exception.CloudRuntimeException; -import com.cloud.utils.fsm.StateMachine2; -import com.cloud.utils.net.Ip; -import com.cloud.utils.net.NetUtils; -import com.cloud.vm.Nic; -import com.cloud.vm.NicProfile; -import com.cloud.vm.ReservationContext; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.VirtualMachine; -import com.cloud.vm.VirtualMachineProfile; -import com.cloud.vm.dao.VMInstanceDao; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; -import org.apache.cloudstack.framework.messagebus.MessageBus; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenPortForwardingCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AssignTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkLoadbalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenVirtualMachineCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerListenerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVRouterPortCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmInterfaceCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ReleaseTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerHealthMonitorCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerMemberCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerPoolCommand; -import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorDao; -import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorVO; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; - -import java.util.Arrays; -import java.util.List; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenElementTest { - @Mock - TungstenFabricUtils tungstenFabricUtils; - @Mock - NetworkModel networkModel; - @Mock - IPAddressDao ipAddressDao; - @Mock - VMInstanceDao vmInstanceDao; - @Mock - LoadBalancerVMMapDao lbVmMapDao; - @Mock - TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; - @Mock - IpAddressManager ipAddressMgr; - @Mock - ConfigurationDao configDao; - @Mock - LoadBalancerDao lbDao; - @Mock - AccountManager accountMgr; - @Mock - HostDao hostDao; - @Mock - MessageBus messageBus; - @Mock - PhysicalNetworkTrafficTypeDao physicalNetworkTrafficTypeDao; - @Mock - PhysicalNetworkDao physicalNetworkDao; - @Mock - TungstenProviderDao tungstenProviderDao; - @Mock - DataCenterDao dataCenterDao; - @Mock - VlanDao vlanDao; - @Mock - NetworkServiceMapDao networkServiceMapDao; - @Mock - HostPodDao hostPodDao; - @Mock - NetworkDetailsDao networkDetailsDao; - @Mock - AgentManager agentManager; - @Mock - NetworkDao networkDao; - @Mock - TungstenService tungstenService; - @Mock - TungstenFabricLBHealthMonitorDao tungstenFabricLBHealthMonitorDao; - @Mock - LoadBalancerCertMapDao loadBalancerCertMapDao; - - TungstenElement tungstenElement; - - MockedStatic apiDBUtilsMocked; - - MockedStatic encryptionUtilMocked; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenElement = new TungstenElement(); - tungstenElement.tungstenFabricUtils = tungstenFabricUtils; - tungstenElement.networkModel = networkModel; - tungstenElement.ipAddressDao = ipAddressDao; - tungstenElement.vmInstanceDao = vmInstanceDao; - tungstenElement.lbVmMapDao = lbVmMapDao; - tungstenElement.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; - tungstenElement.ipAddressMgr = ipAddressMgr; - tungstenElement.configDao = configDao; - tungstenElement.lbDao = lbDao; - tungstenElement.accountMgr = accountMgr; - tungstenElement.hostDao = hostDao; - tungstenElement.messageBus = messageBus; - tungstenElement.physicalNetworkDao = physicalNetworkDao; - tungstenElement.tungstenService = tungstenService; - tungstenElement.tungstenProviderDao = tungstenProviderDao; - tungstenElement.dataCenterDao = dataCenterDao; - tungstenElement.vlanDao = vlanDao; - tungstenElement.networkServiceMapDao = networkServiceMapDao; - tungstenElement.podDao = hostPodDao; - tungstenElement.agentMgr = agentManager; - tungstenElement.networkDetailsDao = networkDetailsDao; - tungstenElement.networkDao = networkDao; - tungstenElement.physicalNetworkTrafficTypeDao = physicalNetworkTrafficTypeDao; - tungstenElement.tungstenFabricLBHealthMonitorDao = tungstenFabricLBHealthMonitorDao; - tungstenElement.loadBalancerCertMapDao = loadBalancerCertMapDao; - - apiDBUtilsMocked = Mockito.mockStatic(ApiDBUtils.class); - encryptionUtilMocked = Mockito.mockStatic(EncryptionUtil.class); - - when(tungstenService.getTungstenProjectFqn(any())).thenReturn("default-domain:default-project"); - } - - @After - public void tearDown() throws Exception { - apiDBUtilsMocked.close(); - encryptionUtilMocked.close(); - closeable.close(); - } - - @Test - public void canHandleSuccessTest() { - Network network = mock(Network.class); - Network.Service service = mock(Network.Service.class); - - when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(true); - - assertTrue(tungstenElement.canHandle(network, service)); - } - - @Test - public void canHandleFailTest() { - Network network = mock(Network.class); - Network.Service service = mock(Network.Service.class); - - when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(false); - - assertFalse(tungstenElement.canHandle(network, service)); - } - - @Test - public void applyStaticNatsAddRuleSuccessTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(false); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); - - assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsAddRuleFailTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(false); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); - - assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsRevokeRuleSuccessTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(true); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); - - assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyStaticNatsRevokeRuleFailTest() { - Network network = mock(Network.class); - StaticNatImpl staticNat = mock(StaticNatImpl.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); - Nic nic = mock(Nic.class); - Network publicNetwork = mock(Network.class); - List staticNatList = List.of(staticNat); - - when(staticNat.isForRevoke()).thenReturn(true); - when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); - when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); - when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); - - assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); - } - - @Test - public void applyLBRulesAddRuleSuccessTest() { - User caller = mock(User.class); - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); - LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); - LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); - List lbStickinessPolicyList = List.of(lbStickinessPolicy); - List loadBalancerVOList = List.of(loadBalancerVO); - TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); - LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); - when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); - List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); - - when(lbStickinessPolicy.getParams()).thenReturn(pairList); - when(loadBalancingRule1.getId()).thenReturn(1L); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); - when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); - when(loadBalancingRule1.getSourcePortStart()).thenReturn(443); - when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); - when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); - when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); - when(ip.addr()).thenReturn("10.10.10.10"); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); - when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); - when(EncryptionUtil.generateSignature(anyString(), anyString())).thenReturn("generatedString"); - when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); - - assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesAddRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); - LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); - LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); - List lbStickinessPolicyList = List.of(lbStickinessPolicy); - List loadBalancerVOList = List.of(loadBalancerVO); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); - List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); - TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); - - when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); - when(lbStickinessPolicy.getParams()).thenReturn(pairList); - when(loadBalancingRule1.getId()).thenReturn(1L); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); - when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); - when(loadBalancingRule1.getSourcePortStart()).thenReturn(80); - when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); - when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); - when(ip.addr()).thenReturn("10.10.10.10"); - when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("disabled"); - when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); - - assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesRevokeRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip1 = mock(Ip.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); - LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); - List loadBalancingRuleList1 = List.of(loadBalancingRule1); - List loadBalancerVOList1 = List.of(loadBalancerVO1); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); - when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Revoke); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip1); - when(ip1.addr()).thenReturn("10.10.10.10"); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); - when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList1); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenGuestNetworkIpAddressDao.remove(anyLong())).thenReturn(false); - - assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); - } - - @Test - public void applyLBRulesRevokeRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - Ip ip = mock(Ip.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); - LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); - LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); - List loadBalancingRuleList = List.of(loadBalancingRule); - List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(loadBalancingRule.getSourceIp()).thenReturn(ip); - when(loadBalancingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(ip.addr()).thenReturn("10.10.10.10"); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); - when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); - when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); - - assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList)); - } - - @Test - public void applyPFRulesAddRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesAddRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesRevokeRuleSuccessTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void applyPFRulesRevokeRuleFailTest() { - Network network = mock(Network.class); - Network publicNetwork = mock(Network.class); - PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - UserVm userVm = mock(UserVm.class); - Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); - List portForwardingRuleList = List.of(portForwardingRule); - - when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); - when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); - when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); - when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); - - assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); - } - - @Test - public void preparePublicNetworkTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer createTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenNetworkPolicyAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - - assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); - assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); - assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); - } - - @Test - public void prepareManagementNetworkTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - - assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); - assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); - assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); - assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); - } - - @Test(expected = CloudRuntimeException.class) - public void prepareWithExceptionTest() throws ConcurrentOperationException { - Network network = mock(Network.class); - NicProfile nicProfile = new NicProfile(); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - DeployDestination deployDestination = mock(DeployDestination.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); - - nicProfile.setIPv4Address("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - - tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext); - } - - @Test - public void releasePublicNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); - - when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - - assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); - } - - @Test - public void releaseManagementNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); - - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); - - assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); - } - - @Test(expected = CloudRuntimeException.class) - public void releaseWithExceptionTest() throws ConcurrentOperationException, ResourceUnavailableException { - Network network = mock(Network.class); - NicProfile nicProfile = mock(NicProfile.class); - VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); - ReservationContext reservationContext = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO host = mock(HostVO.class); - TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); - TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); - - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(host); - when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenThrow(IllegalArgumentException.class); - - tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext); - } - - @Test - public void destroyTest() throws ConcurrentOperationException, ResourceUnavailableException { - IPAddressVO ipAddressVO1 = mock(IPAddressVO.class); - IPAddressVO ipAddressVO2 = mock(IPAddressVO.class); - Network network = mock(Network.class); - ReservationContext reservationContext = mock(ReservationContext.class); - List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); - TungstenAnswer tungstenDeleteFIPAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer tungstenDeleteNPAnswer = new MockTungstenAnswerFactory(true).get(); - - when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(tungstenDeleteNPAnswer); - - assertTrue(tungstenElement.destroy(network, reservationContext)); - } - - @Test - public void isReadyTest() { - PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); - PhysicalNetworkTrafficTypeVO physicalNetworkTrafficTypeVO = mock(PhysicalNetworkTrafficTypeVO.class); - - when(physicalNetworkTrafficTypeDao.findBy(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(physicalNetworkTrafficTypeVO); - - assertTrue(tungstenElement.isReady(physicalNetworkServiceProvider)); - } - - @Test - public void shutdownProviderInstancesTest() throws ConcurrentOperationException { - PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); - ReservationContext reservationContext = mock(ReservationContext.class); - PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - Network publicNetwork = mock(Network.class); - VlanVO vlanVO1 = mock(VlanVO.class); - VlanVO vlanVO2 = mock(VlanVO.class); - List vlanVOList = Arrays.asList(vlanVO1, vlanVO2); - HostPodVO hostPodVO1 = mock(HostPodVO.class); - HostPodVO hostPodVO2 = mock(HostPodVO.class); - List hostPodVOList = Arrays.asList(hostPodVO1, hostPodVO2); - - when(physicalNetworkDao.findById(anyLong())).thenReturn(physicalNetworkVO); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(vlanDao.listVlansByNetworkIdIncludingRemoved(anyLong())).thenReturn(vlanVOList); - when(hostPodDao.listByDataCenterId(anyLong())).thenReturn(hostPodVOList); - - assertTrue(tungstenElement.shutdownProviderInstances(physicalNetworkServiceProvider, reservationContext)); - verify(networkServiceMapDao, times(1)).deleteByNetworkId(anyLong()); - verify(tungstenService, times(2)).removePublicNetworkSubnet(any(VlanVO.class)); - verify(tungstenService, times(1)).deletePublicNetwork(anyLong()); - verify(tungstenService, times(2)).removeManagementNetworkSubnet(any(HostPodVO.class)); - verify(tungstenService, times(1)).deleteManagementNetwork(anyLong()); - } - - //@Test - //public void processConnectWithoutSecurityGroupTest() throws ConnectionException { - // Host host = mock(Host.class); - // StartupCommand startupCommand = mock(StartupCommand.class); - // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - // DataCenterVO dataCenterVO = mock(DataCenterVO.class); - // VlanVO vlanVO1 = mock(VlanVO.class); - // VlanVO vlanVO2 = mock(VlanVO.class); - // List vlanList = Arrays.asList(vlanVO1, vlanVO2); - // Network publicNetwork = mock(Network.class); - // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); -// - // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); - // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - // when(vlanDao.listByZone(anyLong())).thenReturn(vlanList); - // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); - // when(vlanVO1.getVlanGateway()).thenReturn("192.168.100.1"); - // when(vlanVO1.getVlanNetmask()).thenReturn("255.255.255.0"); - // when(vlanVO2.getVlanGateway()).thenReturn("192.168.101.1"); - // when(vlanVO2.getVlanNetmask()).thenReturn("255.255.255.0"); - // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); -// - // tungstenElement.processConnect(host, startupCommand, true); - // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - //} - - //@Test - //public void processConnectWithSecurityGroupTest() throws ConnectionException { - // Host host = mock(Host.class); - // StartupCommand startupCommand = mock(StartupCommand.class); - // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - // DataCenterVO dataCenterVO = mock(DataCenterVO.class); - // NetworkVO network = mock(NetworkVO.class); - // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); - // Network publicNetwork = mock(Network.class); -// - // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); - // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - // when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(Arrays.asList(network)); - // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); - // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); -// - // tungstenElement.processConnect(host, startupCommand, true); - // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - //} - - @Test - public void processHostAboutToBeRemovedWithSecurityGroupTest() { - HostVO hostVO = mock(HostVO.class); - TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - NetworkVO network = mock(NetworkVO.class); - - when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); - when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(List.of(network)); - - tungstenElement.processHostAboutToBeRemoved(1L); - verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - } - - @Test - public void processHostAboutToBeRemovedWithoutSecurityGroupTest() { - HostVO hostVO = mock(HostVO.class); - TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); - when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); - when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); - - tungstenElement.processHostAboutToBeRemoved(1L); - verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); - } - - @Test - public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); - when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); - when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Egress); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - Ip ip = mock(Ip.class); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); - when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); - when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(ipAddressDao.findById(anyLong())).thenReturn(ipAddressVO); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException { - Network network = mock(Network.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteNetworkPolicyAnswer = mock(TungstenAnswer.class); - - when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); - when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteNetworkPolicyAnswer); - - assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); - } - - @Test - public void postStateTransitionEventWithVmStartedTest() { - StateMachine2.Transition transition = mock(StateMachine2.Transition.class); - VMInstanceVO vo = mock(VMInstanceVO.class); - Object opaque = mock(Object.class); - - when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Starting); - when(transition.getToState()).thenReturn(VirtualMachine.State.Running); - when(tungstenService.addTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); - - assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); - } - - @Test - public void postStateTransitionEventWithVmStopedTest() { - StateMachine2.Transition transition = mock(StateMachine2.Transition.class); - VMInstanceVO vo = mock(VMInstanceVO.class); - Object opaque = mock(Object.class); - - when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Stopping); - when(transition.getToState()).thenReturn(VirtualMachine.State.Stopped); - when(tungstenService.removeTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); - - assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); - } - - @Test - public void prepareMigrationTest() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - DeployDestination dest = mock(DeployDestination.class); - ReservationContext context = mock(ReservationContext.class); - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - HostVO hostVO = mock(HostVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenElement.prepareMigration(nic, network, vm, dest, context)); - } - - @Test - public void rollbackMigration() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - ReservationContext src = mock(ReservationContext.class); - ReservationContext dest = mock(ReservationContext.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - HostVO hostVO = mock(HostVO.class); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(vm.getVirtualMachine()).thenReturn(virtualMachine); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - - tungstenElement.rollbackMigration(nic, network, vm, src, dest); - verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); - } - - @Test - public void commitMigration() { - NicProfile nic = mock(NicProfile.class); - Network network = mock(Network.class); - VirtualMachineProfile vm = mock(VirtualMachineProfile.class); - ReservationContext src = mock(ReservationContext.class); - ReservationContext dest = mock(ReservationContext.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - HostVO hostVO = mock(HostVO.class); - - when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); - when(vm.getVirtualMachine()).thenReturn(virtualMachine); - when(hostDao.findById(anyLong())).thenReturn(hostVO); - - tungstenElement.commitMigration(nic, network, vm, src, dest); - verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); - } -} \ No newline at end of file +// 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 org.apache.cloudstack.network.tungsten.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.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 com.cloud.agent.AgentManager; import com.cloud.api.ApiDBUtils; import com.cloud.configuration.Config; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.VlanVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.HostPodDao; import com.cloud.dc.dao.VlanDao; import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor; import com.cloud.network.IpAddressManager; import com.cloud.network.Network; import com.cloud.network.NetworkModel; import com.cloud.network.Networks; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.TungstenGuestNetworkIpAddressVO; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.IPAddressVO; import com.cloud.network.dao.LoadBalancerCertMapDao; import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.LoadBalancerVMMapDao; import com.cloud.network.dao.LoadBalancerVMMapVO; import com.cloud.network.dao.LoadBalancerVO; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkDetailsDao; import com.cloud.network.dao.NetworkServiceMapDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; import com.cloud.network.dao.PhysicalNetworkVO; import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; import com.cloud.network.dao.TungstenProviderDao; import com.cloud.network.element.TungstenProviderVO; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.StaticNatImpl; import com.cloud.user.AccountManager; import com.cloud.user.User; import com.cloud.uservm.UserVm; import com.cloud.utils.EncryptionUtil; import com.cloud.utils.Pair; import com.cloud.utils.TungstenUtils; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.fsm.StateMachine2; import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.dao.VMInstanceDao; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.framework.messagebus.MessageBus; import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenPortForwardingCommand; import org.apache.cloudstack.network.tungsten.agent.api.AssignTungstenFloatingIpCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkLoadbalancerCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenVirtualMachineCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerListenerCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVRouterPortCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmInterfaceCommand; import org.apache.cloudstack.network.tungsten.agent.api.ReleaseTungstenFloatingIpCommand; import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerHealthMonitorCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerMemberCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerPoolCommand; import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorDao; import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorVO; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; import java.util.Arrays; import java.util.List; @RunWith(MockitoJUnitRunner.class) public class TungstenElementTest { @Mock TungstenFabricUtils tungstenFabricUtils; @Mock NetworkModel networkModel; @Mock IPAddressDao ipAddressDao; @Mock VMInstanceDao vmInstanceDao; @Mock LoadBalancerVMMapDao lbVmMapDao; @Mock TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; @Mock IpAddressManager ipAddressMgr; @Mock ConfigurationDao configDao; @Mock LoadBalancerDao lbDao; @Mock AccountManager accountMgr; @Mock HostDao hostDao; @Mock MessageBus messageBus; @Mock PhysicalNetworkTrafficTypeDao physicalNetworkTrafficTypeDao; @Mock PhysicalNetworkDao physicalNetworkDao; @Mock TungstenProviderDao tungstenProviderDao; @Mock DataCenterDao dataCenterDao; @Mock VlanDao vlanDao; @Mock NetworkServiceMapDao networkServiceMapDao; @Mock HostPodDao hostPodDao; @Mock NetworkDetailsDao networkDetailsDao; @Mock AgentManager agentManager; @Mock NetworkDao networkDao; @Mock TungstenService tungstenService; @Mock TungstenFabricLBHealthMonitorDao tungstenFabricLBHealthMonitorDao; @Mock LoadBalancerCertMapDao loadBalancerCertMapDao; TungstenElement tungstenElement; MockedStatic apiDBUtilsMocked; MockedStatic encryptionUtilMocked; AutoCloseable closeable; @Before public void setup() { closeable = MockitoAnnotations.openMocks(this); tungstenElement = new TungstenElement(); tungstenElement.tungstenFabricUtils = tungstenFabricUtils; tungstenElement.networkModel = networkModel; tungstenElement.ipAddressDao = ipAddressDao; tungstenElement.vmInstanceDao = vmInstanceDao; tungstenElement.lbVmMapDao = lbVmMapDao; tungstenElement.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; tungstenElement.ipAddressMgr = ipAddressMgr; tungstenElement.configDao = configDao; tungstenElement.lbDao = lbDao; tungstenElement.accountMgr = accountMgr; tungstenElement.hostDao = hostDao; tungstenElement.messageBus = messageBus; tungstenElement.physicalNetworkDao = physicalNetworkDao; tungstenElement.tungstenService = tungstenService; tungstenElement.tungstenProviderDao = tungstenProviderDao; tungstenElement.dataCenterDao = dataCenterDao; tungstenElement.vlanDao = vlanDao; tungstenElement.networkServiceMapDao = networkServiceMapDao; tungstenElement.podDao = hostPodDao; tungstenElement.agentMgr = agentManager; tungstenElement.networkDetailsDao = networkDetailsDao; tungstenElement.networkDao = networkDao; tungstenElement.physicalNetworkTrafficTypeDao = physicalNetworkTrafficTypeDao; tungstenElement.tungstenFabricLBHealthMonitorDao = tungstenFabricLBHealthMonitorDao; tungstenElement.loadBalancerCertMapDao = loadBalancerCertMapDao; apiDBUtilsMocked = Mockito.mockStatic(ApiDBUtils.class); encryptionUtilMocked = Mockito.mockStatic(EncryptionUtil.class); when(tungstenService.getTungstenProjectFqn(any())).thenReturn("default-domain:default-project"); } @After public void tearDown() throws Exception { apiDBUtilsMocked.close(); encryptionUtilMocked.close(); closeable.close(); } @Test public void canHandleSuccessTest() { Network network = mock(Network.class); Network.Service service = mock(Network.Service.class); when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(true); assertTrue(tungstenElement.canHandle(network, service)); } @Test public void canHandleFailTest() { Network network = mock(Network.class); Network.Service service = mock(Network.Service.class); when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(false); assertFalse(tungstenElement.canHandle(network, service)); } @Test public void applyStaticNatsAddRuleSuccessTest() { Network network = mock(Network.class); StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(false); when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); } @Test public void applyStaticNatsAddRuleFailTest() { Network network = mock(Network.class); StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(false); when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); } @Test public void applyStaticNatsRevokeRuleSuccessTest() { Network network = mock(Network.class); StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(true); when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); } @Test public void applyStaticNatsRevokeRuleFailTest() { Network network = mock(Network.class); StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(true); when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); } @Test public void applyLBRulesAddRuleSuccessTest() { User caller = mock(User.class); Network network = mock(Network.class); Network publicNetwork = mock(Network.class); Ip ip = mock(Ip.class); LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); List loadBalancingRuleList1 = List.of(loadBalancingRule1); List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); List lbStickinessPolicyList = List.of(lbStickinessPolicy); List loadBalancerVOList = List.of(loadBalancerVO); TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); when(lbStickinessPolicy.getParams()).thenReturn(pairList); when(loadBalancingRule1.getId()).thenReturn(1L); when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); when(loadBalancingRule1.getSourcePortStart()).thenReturn(443); when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); when(loadBalancingRule1.getSourceIp()).thenReturn(ip); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ipAddressVO.getAddress()).thenReturn(ip); when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); when(ip.addr()).thenReturn("10.10.10.10"); when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); when(EncryptionUtil.generateSignature(anyString(), anyString())).thenReturn("generatedString"); when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); } @Test public void applyLBRulesAddRuleFailTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); Ip ip = mock(Ip.class); LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); List loadBalancingRuleList1 = List.of(loadBalancingRule1); List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); List lbStickinessPolicyList = List.of(lbStickinessPolicy); List loadBalancerVOList = List.of(loadBalancerVO); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); when(lbStickinessPolicy.getParams()).thenReturn(pairList); when(loadBalancingRule1.getId()).thenReturn(1L); when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); when(loadBalancingRule1.getSourcePortStart()).thenReturn(80); when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); when(loadBalancingRule1.getSourceIp()).thenReturn(ip); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ipAddressVO.getAddress()).thenReturn(ip); when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); when(ip.addr()).thenReturn("10.10.10.10"); when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("disabled"); when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); } @Test public void applyLBRulesRevokeRuleFailTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); Ip ip1 = mock(Ip.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); List loadBalancingRuleList1 = List.of(loadBalancingRule1); List loadBalancerVOList1 = List.of(loadBalancerVO1); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Revoke); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ipAddressVO.getAddress()).thenReturn(ip1); when(ip1.addr()).thenReturn("10.10.10.10"); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList1); when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(tungstenGuestNetworkIpAddressDao.remove(anyLong())).thenReturn(false); assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); } @Test public void applyLBRulesRevokeRuleSuccessTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); Ip ip = mock(Ip.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); List loadBalancingRuleList = List.of(loadBalancingRule); List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(loadBalancingRule.getSourceIp()).thenReturn(ip); when(loadBalancingRule.getState()).thenReturn(FirewallRule.State.Revoke); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ip.addr()).thenReturn("10.10.10.10"); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList)); } @Test public void applyPFRulesAddRuleSuccessTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); } @Test public void applyPFRulesAddRuleFailTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); } @Test public void applyPFRulesRevokeRuleSuccessTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); } @Test public void applyPFRulesRevokeRuleFailTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); } @Test public void preparePublicNetworkTest() throws ConcurrentOperationException { Network network = mock(Network.class); NicProfile nicProfile = new NicProfile(); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); DeployDestination deployDestination = mock(DeployDestination.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenAnswer createTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); nicProfile.setIPv4Address("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenNetworkPolicyAnswer); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); } @Test public void prepareManagementNetworkTest() throws ConcurrentOperationException { Network network = mock(Network.class); NicProfile nicProfile = new NicProfile(); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); DeployDestination deployDestination = mock(DeployDestination.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); nicProfile.setIPv4Address("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); } @Test(expected = CloudRuntimeException.class) public void prepareWithExceptionTest() throws ConcurrentOperationException { Network network = mock(Network.class); NicProfile nicProfile = new NicProfile(); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); DeployDestination deployDestination = mock(DeployDestination.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); nicProfile.setIPv4Address("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext); } @Test public void releasePublicNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { Network network = mock(Network.class); NicProfile nicProfile = mock(NicProfile.class); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); } @Test public void releaseManagementNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { Network network = mock(Network.class); NicProfile nicProfile = mock(NicProfile.class); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); } @Test(expected = CloudRuntimeException.class) public void releaseWithExceptionTest() throws ConcurrentOperationException, ResourceUnavailableException { Network network = mock(Network.class); NicProfile nicProfile = mock(NicProfile.class); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenThrow(IllegalArgumentException.class); tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext); } @Test public void destroyTest() throws ConcurrentOperationException, ResourceUnavailableException { IPAddressVO ipAddressVO1 = mock(IPAddressVO.class); IPAddressVO ipAddressVO2 = mock(IPAddressVO.class); Network network = mock(Network.class); ReservationContext reservationContext = mock(ReservationContext.class); List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); TungstenAnswer tungstenDeleteFIPAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer tungstenDeleteNPAnswer = new MockTungstenAnswerFactory(true).get(); when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(tungstenDeleteNPAnswer); assertTrue(tungstenElement.destroy(network, reservationContext)); } @Test public void isReadyTest() { PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); PhysicalNetworkTrafficTypeVO physicalNetworkTrafficTypeVO = mock(PhysicalNetworkTrafficTypeVO.class); when(physicalNetworkTrafficTypeDao.findBy(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(physicalNetworkTrafficTypeVO); assertTrue(tungstenElement.isReady(physicalNetworkServiceProvider)); } @Test public void shutdownProviderInstancesTest() throws ConcurrentOperationException { PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); ReservationContext reservationContext = mock(ReservationContext.class); PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); Network publicNetwork = mock(Network.class); VlanVO vlanVO1 = mock(VlanVO.class); VlanVO vlanVO2 = mock(VlanVO.class); List vlanVOList = Arrays.asList(vlanVO1, vlanVO2); HostPodVO hostPodVO1 = mock(HostPodVO.class); HostPodVO hostPodVO2 = mock(HostPodVO.class); List hostPodVOList = Arrays.asList(hostPodVO1, hostPodVO2); when(physicalNetworkDao.findById(anyLong())).thenReturn(physicalNetworkVO); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(vlanDao.listVlansByNetworkIdIncludingRemoved(anyLong())).thenReturn(vlanVOList); when(hostPodDao.listByDataCenterId(anyLong())).thenReturn(hostPodVOList); assertTrue(tungstenElement.shutdownProviderInstances(physicalNetworkServiceProvider, reservationContext)); verify(networkServiceMapDao, times(1)).deleteByNetworkId(anyLong()); verify(tungstenService, times(2)).removePublicNetworkSubnet(any(VlanVO.class)); verify(tungstenService, times(1)).deletePublicNetwork(anyLong()); verify(tungstenService, times(2)).removeManagementNetworkSubnet(any(HostPodVO.class)); verify(tungstenService, times(1)).deleteManagementNetwork(anyLong()); } //@Test //public void processConnectWithoutSecurityGroupTest() throws ConnectionException { // Host host = mock(Host.class); // StartupCommand startupCommand = mock(StartupCommand.class); // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); // DataCenterVO dataCenterVO = mock(DataCenterVO.class); // VlanVO vlanVO1 = mock(VlanVO.class); // VlanVO vlanVO2 = mock(VlanVO.class); // List vlanList = Arrays.asList(vlanVO1, vlanVO2); // Network publicNetwork = mock(Network.class); // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); // // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); // when(vlanDao.listByZone(anyLong())).thenReturn(vlanList); // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); // when(vlanVO1.getVlanGateway()).thenReturn("192.168.100.1"); // when(vlanVO1.getVlanNetmask()).thenReturn("255.255.255.0"); // when(vlanVO2.getVlanGateway()).thenReturn("192.168.101.1"); // when(vlanVO2.getVlanNetmask()).thenReturn("255.255.255.0"); // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); // // tungstenElement.processConnect(host, startupCommand, true); // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); //} //@Test //public void processConnectWithSecurityGroupTest() throws ConnectionException { // Host host = mock(Host.class); // StartupCommand startupCommand = mock(StartupCommand.class); // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); // DataCenterVO dataCenterVO = mock(DataCenterVO.class); // NetworkVO network = mock(NetworkVO.class); // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); // Network publicNetwork = mock(Network.class); // // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); // when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(Arrays.asList(network)); // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); // // tungstenElement.processConnect(host, startupCommand, true); // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); //} @Test public void processHostAboutToBeRemovedWithSecurityGroupTest() { HostVO hostVO = mock(HostVO.class); TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); NetworkVO network = mock(NetworkVO.class); when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(hostDao.findById(anyLong())).thenReturn(hostVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(List.of(network)); tungstenElement.processHostAboutToBeRemoved(1L); verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); } @Test public void processHostAboutToBeRemovedWithoutSecurityGroupTest() { HostVO hostVO = mock(HostVO.class); TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(hostDao.findById(anyLong())).thenReturn(hostVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); tungstenElement.processHostAboutToBeRemoved(1L); verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); } @Test public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableException { Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Egress); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); } @Test public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableException { Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); Ip ip = mock(Ip.class); when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(ipAddressDao.findById(anyLong())).thenReturn(ipAddressVO); when(ipAddressVO.getAddress()).thenReturn(ip); when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); } @Test public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException { Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); TungstenAnswer deleteNetworkPolicyAnswer = mock(TungstenAnswer.class); when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteNetworkPolicyAnswer); assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); } @Test public void postStateTransitionEventWithVmStartedTest() { StateMachine2.Transition transition = mock(StateMachine2.Transition.class); VMInstanceVO vo = mock(VMInstanceVO.class); Object opaque = mock(Object.class); when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Starting); when(transition.getToState()).thenReturn(VirtualMachine.State.Running); when(tungstenService.addTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); } @Test public void postStateTransitionEventWithVmStopedTest() { StateMachine2.Transition transition = mock(StateMachine2.Transition.class); VMInstanceVO vo = mock(VMInstanceVO.class); Object opaque = mock(Object.class); when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Stopping); when(transition.getToState()).thenReturn(VirtualMachine.State.Stopped); when(tungstenService.removeTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); } @Test public void prepareMigrationTest() { NicProfile nic = mock(NicProfile.class); Network network = mock(Network.class); VirtualMachineProfile vm = mock(VirtualMachineProfile.class); DeployDestination dest = mock(DeployDestination.class); ReservationContext context = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO hostVO = mock(HostVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(hostVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenElement.prepareMigration(nic, network, vm, dest, context)); } @Test public void rollbackMigration() { NicProfile nic = mock(NicProfile.class); Network network = mock(Network.class); VirtualMachineProfile vm = mock(VirtualMachineProfile.class); ReservationContext src = mock(ReservationContext.class); ReservationContext dest = mock(ReservationContext.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); HostVO hostVO = mock(HostVO.class); when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); when(vm.getVirtualMachine()).thenReturn(virtualMachine); when(hostDao.findById(anyLong())).thenReturn(hostVO); tungstenElement.rollbackMigration(nic, network, vm, src, dest); verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); } @Test public void commitMigration() { NicProfile nic = mock(NicProfile.class); Network network = mock(Network.class); VirtualMachineProfile vm = mock(VirtualMachineProfile.class); ReservationContext src = mock(ReservationContext.class); ReservationContext dest = mock(ReservationContext.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); HostVO hostVO = mock(HostVO.class); when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); when(vm.getVirtualMachine()).thenReturn(virtualMachine); when(hostDao.findById(anyLong())).thenReturn(hostVO); tungstenElement.commitMigration(nic, network, vm, src, dest); verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); } } \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java index d8e461fb6ae0..908fcea37b4d 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java @@ -1,103 +1 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; - -import com.cloud.agent.AgentManager; -import com.cloud.exception.InvalidParameterValueException; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenFabricUtilsTest { - @Mock - AgentManager agentMgr; - @Mock - TungstenProviderDao tungstenProviderDao; - - TungstenFabricUtils tungstenFabricUtils; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenFabricUtils = new TungstenFabricUtils(); - tungstenFabricUtils.agentMgr = agentMgr; - tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; - } - - @After - public void tearDown() throws Exception { - closeable.close(); - } - - @Test - public void sendTungstenCommandSuccessTest() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); - - assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithNullTungstenProvider() { - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithNullAnswer() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } - - @Test(expected = InvalidParameterValueException.class) - public void sendTungstenCommandWithFalseAnswer() { - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); - TungstenCommand tungstenCommand = mock(TungstenCommand.class); - - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); - - tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); - } -} \ No newline at end of file +// 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 org.apache.cloudstack.network.tungsten.service; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import com.cloud.agent.AgentManager; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.dao.TungstenProviderDao; import com.cloud.network.element.TungstenProviderVO; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class TungstenFabricUtilsTest { @Mock AgentManager agentMgr; @Mock TungstenProviderDao tungstenProviderDao; TungstenFabricUtils tungstenFabricUtils; AutoCloseable closeable; @Before public void setup() { closeable = MockitoAnnotations.openMocks(this); tungstenFabricUtils = new TungstenFabricUtils(); tungstenFabricUtils.agentMgr = agentMgr; tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; } @After public void tearDown() throws Exception { closeable.close(); } @Test public void sendTungstenCommandSuccessTest() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithNullTungstenProvider() { TungstenCommand tungstenCommand = mock(TungstenCommand.class); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithNullAnswer() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithFalseAnswer() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } } \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java index 3eb61510b09f..068757f0a136 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java @@ -1,1671 +1 @@ -// 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 org.apache.cloudstack.network.tungsten.service; - -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.ArgumentMatchers.anyLong; -import static org.mockito.ArgumentMatchers.anyString; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.doReturn; -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 com.cloud.agent.AgentManager; -import com.cloud.agent.api.Answer; -import com.cloud.configuration.Config; -import com.cloud.configuration.ConfigurationManager; -import com.cloud.dc.DataCenter; -import com.cloud.dc.DataCenterIpAddressVO; -import com.cloud.dc.DataCenterVO; -import com.cloud.dc.HostPodVO; -import com.cloud.dc.Vlan; -import com.cloud.dc.VlanVO; -import com.cloud.dc.dao.DataCenterDao; -import com.cloud.dc.dao.DataCenterIpAddressDao; -import com.cloud.domain.DomainVO; -import com.cloud.domain.dao.DomainDao; -import com.cloud.host.HostVO; -import com.cloud.host.dao.HostDao; -import com.cloud.hypervisor.Hypervisor; -import com.cloud.network.IpAddressManager; -import com.cloud.network.Network; -import com.cloud.network.NetworkModel; -import com.cloud.network.NetworkService; -import com.cloud.network.Networks; -import com.cloud.network.TungstenGuestNetworkIpAddressVO; -import com.cloud.network.dao.FirewallRulesDao; -import com.cloud.network.dao.IPAddressDao; -import com.cloud.network.dao.IPAddressVO; -import com.cloud.network.dao.LoadBalancerCertMapDao; -import com.cloud.network.dao.LoadBalancerCertMapVO; -import com.cloud.network.dao.NetworkDao; -import com.cloud.network.dao.NetworkDetailVO; -import com.cloud.network.dao.NetworkDetailsDao; -import com.cloud.network.dao.NetworkVO; -import com.cloud.network.dao.SslCertVO; -import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; -import com.cloud.network.dao.TungstenProviderDao; -import com.cloud.network.element.TungstenProviderVO; -import com.cloud.network.lb.LoadBalancingRule; -import com.cloud.network.rules.FirewallRule; -import com.cloud.network.rules.FirewallRuleVO; -import com.cloud.network.security.SecurityGroup; -import com.cloud.network.security.SecurityGroupManager; -import com.cloud.network.security.SecurityGroupRuleVO; -import com.cloud.network.security.SecurityGroupService; -import com.cloud.network.security.SecurityGroupVO; -import com.cloud.network.security.SecurityRule; -import com.cloud.network.security.TungstenSecurityGroupRuleVO; -import com.cloud.network.security.dao.SecurityGroupDao; -import com.cloud.network.security.dao.SecurityGroupRuleDao; -import com.cloud.network.security.dao.SecurityGroupVMMapDao; -import com.cloud.network.security.dao.TungstenSecurityGroupRuleDao; -import com.cloud.projects.ProjectManager; -import com.cloud.projects.ProjectVO; -import com.cloud.projects.dao.ProjectDao; -import com.cloud.user.AccountVO; -import com.cloud.user.DomainManager; -import com.cloud.user.dao.AccountDao; -import com.cloud.utils.db.EntityManager; -import com.cloud.utils.db.Transaction; -import com.cloud.utils.db.TransactionCallback; -import com.cloud.utils.net.Ip; -import com.cloud.utils.net.NetUtils; -import com.cloud.vm.Nic; -import com.cloud.vm.NicSecondaryIp; -import com.cloud.vm.NicVO; -import com.cloud.vm.VMInstanceVO; -import com.cloud.vm.dao.NicDao; -import com.cloud.vm.dao.NicSecondaryIpDao; -import com.cloud.vm.dao.NicSecondaryIpVO; -import net.juniper.tungsten.api.ApiObjectBase; -import net.juniper.tungsten.api.ApiPropertyBase; -import net.juniper.tungsten.api.ObjectReference; -import net.juniper.tungsten.api.types.ActionListType; -import net.juniper.tungsten.api.types.AddressGroup; -import net.juniper.tungsten.api.types.AddressType; -import net.juniper.tungsten.api.types.ApplicationPolicySet; -import net.juniper.tungsten.api.types.FirewallPolicy; -import net.juniper.tungsten.api.types.FirewallRuleEndpointType; -import net.juniper.tungsten.api.types.FirewallRuleMatchTagsType; -import net.juniper.tungsten.api.types.FirewallSequence; -import net.juniper.tungsten.api.types.FirewallServiceGroupType; -import net.juniper.tungsten.api.types.FirewallServiceType; -import net.juniper.tungsten.api.types.Loadbalancer; -import net.juniper.tungsten.api.types.LogicalRouter; -import net.juniper.tungsten.api.types.NetworkPolicy; -import net.juniper.tungsten.api.types.PolicyEntriesType; -import net.juniper.tungsten.api.types.PolicyRuleType; -import net.juniper.tungsten.api.types.PortType; -import net.juniper.tungsten.api.types.ServiceGroup; -import net.juniper.tungsten.api.types.SubnetListType; -import net.juniper.tungsten.api.types.SubnetType; -import net.juniper.tungsten.api.types.Tag; -import net.juniper.tungsten.api.types.TagType; -import net.juniper.tungsten.api.types.VirtualMachine; -import net.juniper.tungsten.api.types.VirtualMachineInterface; -import net.juniper.tungsten.api.types.VirtualNetwork; -import org.apache.cloudstack.framework.config.dao.ConfigurationDao; -import org.apache.cloudstack.framework.messagebus.MessageBus; -import org.apache.cloudstack.framework.messagebus.MessageSubscriber; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkGatewayToLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkSubnetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecondaryIpAddressCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecurityGroupRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenVmToSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDefaultProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDomainCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpPoolCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenDomainCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpPoolCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenProjectCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenFabricNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenLoadBalancerCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenNetworkDnsCommand; -import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenAddressGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenApplicationPolicySetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNetworkCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNicCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenRoutingLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenServiceGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagTypeCommand; -import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenVmCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkGatewayFromLogicalRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkSubnetCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecondaryIpAddressCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecurityGroupRuleCommand; -import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenTagCommand; -import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; -import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateLoadBalancerServiceInstanceCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenDefaultSecurityGroupCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerSslCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerStatsCommand; -import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenVrouterConfigCommand; -import org.apache.cloudstack.network.tungsten.model.TungstenLogicalRouter; -import org.apache.cloudstack.network.tungsten.model.TungstenNetworkPolicy; -import org.apache.cloudstack.network.tungsten.model.TungstenRule; -import org.apache.cloudstack.network.tungsten.model.TungstenTag; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.MockedConstruction; -import org.mockito.MockedStatic; -import org.mockito.Mockito; -import org.mockito.MockitoAnnotations; -import org.mockito.junit.MockitoJUnitRunner; -import org.springframework.test.util.ReflectionTestUtils; - -import java.util.Arrays; -import java.util.List; - -@RunWith(MockitoJUnitRunner.class) -public class TungstenServiceImplTest { - @Mock - MessageBus messageBus; - @Mock - ProjectDao projectDao; - @Mock - AccountDao accountDao; - @Mock - NetworkDao networkDao; - @Mock - ConfigurationDao configDao; - @Mock - IPAddressDao ipAddressDao; - @Mock - EntityManager entityMgr; - @Mock - NetworkModel networkModel; - @Mock - DomainDao domainDao; - @Mock - LoadBalancerCertMapDao lbCertMapDao; - @Mock - FirewallRulesDao fwRulesDao; - @Mock - TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; - @Mock - TungstenProviderDao tungstenProviderDao; - @Mock - TungstenFabricUtils tungstenFabricUtils; - @Mock - AgentManager agentMgr; - @Mock - HostDao hostDao; - @Mock - NetworkDetailsDao networkDetailsDao; - @Mock - SecurityGroupDao securityGroupDao; - @Mock - NicDao nicDao; - @Mock - TungstenSecurityGroupRuleDao tungstenSecurityGroupRuleDao; - @Mock - SecurityGroupVMMapDao securityGroupVMMapDao; - @Mock - SecurityGroupRuleDao securityGroupRuleDao; - @Mock - SecurityGroupManager securityGroupManager; - @Mock - NicSecondaryIpDao nicSecIpDao; - @Mock - DataCenterIpAddressDao dataCenterIpAddressDao; - @Mock - DataCenterDao dataCenterDao; - @Mock - IpAddressManager ipAddressManager; - - TungstenServiceImpl tungstenService; - - AutoCloseable closeable; - - @Before - public void setup() { - closeable = MockitoAnnotations.openMocks(this); - tungstenService = new TungstenServiceImpl(); - tungstenService.projectDao = projectDao; - tungstenService.tungstenProviderDao = tungstenProviderDao; - tungstenService.networkModel = networkModel; - tungstenService.ipAddressDao = ipAddressDao; - tungstenService.tungstenFabricUtils = tungstenFabricUtils; - tungstenService.domainDao = domainDao; - tungstenService.accountDao = accountDao; - tungstenService.dataCenterIpAddressDao = dataCenterIpAddressDao; - tungstenService.networkDetailsDao = networkDetailsDao; - tungstenService.agentMgr = agentMgr; - tungstenService.hostDao = hostDao; - tungstenService.configDao = configDao; - tungstenService.fwRulesDao = fwRulesDao; - tungstenService.lbCertMapDao = lbCertMapDao; - tungstenService.entityMgr = entityMgr; - tungstenService.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; - tungstenService.securityGroupDao = securityGroupDao; - tungstenService.tungstenSecurityGroupRuleDao = tungstenSecurityGroupRuleDao; - tungstenService.securityGroupVMMapDao = securityGroupVMMapDao; - tungstenService.nicDao = nicDao; - tungstenService.nicSecIpDao = nicSecIpDao; - tungstenService.securityGroupRuleDao = securityGroupRuleDao; - tungstenService.securityGroupManager = securityGroupManager; - tungstenService.networkDao = networkDao; - tungstenService.dataCenterDao = dataCenterDao; - tungstenService.ipAddressManager = ipAddressManager; - tungstenService.messageBus = messageBus; - } - - @After - public void tearDown() throws Exception { - closeable.close(); - } - - @Test - public void createTungstenFloatingIpTest() throws Exception { - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer createTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - Ip ip = mock(Ip.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); - when(ipAddressVO.getAddress()).thenReturn(ip); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); - } - - @Test - public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer deleteTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); - } - - @Test - public void deleteTungstenDomainTest() throws Exception { - DomainVO domainVO = mock(DomainVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); - } - - @Test - public void deleteTungstenProjectTest() throws Exception { - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); - - assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); - } - - @Test - public void addTungstenDefaultNetworkPolicyTest() { - TungstenRule tungstenRule = mock(TungstenRule.class); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - - assertTrue(tungstenService.addTungstenDefaultNetworkPolicy(1L, "default-domain:default-project", "policyName", "7279ed91-314e-45be-81b4-b10395fd2ae3" - , List.of(tungstenRule), 1, 1)); - } - - @Test - public void createManagementNetworkTest() { - Network managementNetwork = mock(Network.class); - VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); - VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenVrouterConfigCommand.class), anyLong())).thenReturn(updateTungstenGlobalVrouterConfigAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - - when(createTungstenNetworkAnswer.getApiObjectBase()).thenReturn(managementVirtualNetwork); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); - - assertTrue(tungstenService.createManagementNetwork(1L)); - } - - @Test - public void addManagementNetworkSubnetTest() { - HostPodVO hostPodVO = mock(HostPodVO.class); - Network managementNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); - - when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(managementNetwork.getCidr()).thenReturn("192.168.100.0/24"); - when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); - when(dataCenterIpAddressDao.mark(anyLong(), anyLong(), anyString())).thenReturn(true); - - assertTrue(tungstenService.addManagementNetworkSubnet(hostPodVO)); - } - - @Test - public void deleteManagementNetworkTest() { - Network managementNetwork = mock(Network.class); - TungstenAnswer deleteTungstenManagementPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenFabricPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenFabricPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); - when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); - - assertTrue(tungstenService.deleteManagementNetwork(1L)); - } - - @Test - public void removeManagementNetworkSubnetTest() { - HostPodVO hostPodVO = mock(HostPodVO.class); - Network managementNetwork = mock(Network.class); - TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), - eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); - when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); - - assertTrue(tungstenService.removeManagementNetworkSubnet(hostPodVO)); - verify(dataCenterIpAddressDao, times(1)).releasePodIpAddress(anyLong()); - } - - @Test - public void createPublicNetworkTest() { - Network publicNetwork = mock(Network.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createPublicNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(createPublicNetworkAnswer.getApiObjectBase()).thenReturn(virtualNetwork); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); - when(virtualNetwork.getQualifiedName()).thenReturn(Arrays.asList("default-domain", "default-project", "publicNetwork")); - - assertTrue(tungstenService.createPublicNetwork(1L)); - } - - @Test - public void addPublicNetworkSubnetTest() { - VlanVO vlanVO = mock(VlanVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(vlanVO.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); - when(vlanVO.getVlanGateway()).thenReturn("192.168.100.1"); - when(vlanVO.getVlanNetmask()).thenReturn("255.255.255.0"); - when(publicNetwork.getCidr()).thenReturn("192.168.100.0/24"); - when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); - - assertTrue(tungstenService.addPublicNetworkSubnet(vlanVO)); - } - - @Test - public void deletePublicNetworkTest() { - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); - - assertTrue(tungstenService.deletePublicNetwork(1L)); - } - - @Test - public void removePublicNetworkSubnetTest() { - VlanVO vlanVO = mock(VlanVO.class); - Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); - when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - - assertTrue(tungstenService.removePublicNetworkSubnet(vlanVO)); - verify(ipAddressDao, times(1)).unassignIpAddress(anyLong()); - } - - @Test - public void allocateDnsIpAddressTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); - when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); - when(tungstenGuestNetworkIpAddressDao.persist(any(TungstenGuestNetworkIpAddressVO.class))).thenReturn(tungstenGuestNetworkIpAddressVO); - when(networkVO.getCidr()).thenReturn("192.168.100.0/24"); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); - - assertTrue(tungstenService.allocateDnsIpAddress(networkVO, null, "test")); - } - - @Test - public void deallocateDnsIpAddressTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); - when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); - when(tungstenGuestNetworkIpAddressDao.findByNetworkAndGuestIpAddress(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); - - tungstenService.deallocateDnsIpAddress(networkVO, null, "test"); - verify(tungstenGuestNetworkIpAddressDao, times(1)).expunge(anyLong()); - } - - @Test - public void subscribeTungstenEventTest() { - tungstenService.subscribeTungstenEvent(); - - verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_ASSIGN_IPADDR_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_RELEASE_IPADDR_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_APPLY_NETWORK_POLICY_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_CREATE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_DELETE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_DELETE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_SYNC_TUNGSTEN_DB_WITH_DOMAINS_AND_PROJECTS_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_CREATE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_DELETE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_ADD_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_REMOVE_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_ASSIGN_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); - verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_RELEASE_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); - } - - @Test - public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { - DomainVO domainVO = mock(DomainVO.class); - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer createTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenDefaultProjectAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - - when(domainDao.listAll()).thenReturn(List.of(domainVO)); - when(projectDao.listAll()).thenReturn(List.of(projectVO)); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDomainCommand.class), anyLong())).thenReturn(createTungstenDomainAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenProjectCommand.class), anyLong())).thenReturn(createTungstenProjectAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDefaultProjectCommand.class), anyLong())).thenReturn(createTungstenDefaultProjectAnswer); - when(domainDao.findById(anyLong())).thenReturn(domainVO); - - assertTrue(tungstenService.syncTungstenDbWithCloudstackProjectsAndDomains()); - } - - @Test - public void updateLoadBalancerTest() { - Network network = mock(Network.class); - LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); - Network publicNetwork = mock(Network.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - HostVO hostVO = mock(HostVO.class); - TungstenAnswer getTungstenLoadBalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new MockTungstenAnswerFactory(true).get(); - Answer updateTungstenLoadbalancerStatsAnswer = mock(Answer.class); - Answer updateTungstenLoadbalancerSslAnswer = mock(Answer.class); - FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); - LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); - SslCertVO sslCertVO = mock(SslCertVO.class); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - Ip ip = mock(Ip.class); - AccountVO accountVO = mock(AccountVO.class); - Loadbalancer loadbalancer = mock(Loadbalancer.class); - - when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); - when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); - when(hostDao.listAllHostsByZoneAndHypervisorType(anyLong(), eq(Hypervisor.HypervisorType.KVM))).thenReturn(List.of(hostVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenLoadBalancerCommand.class), anyLong())).thenReturn(getTungstenLoadBalancerAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(UpdateLoadBalancerServiceInstanceCommand.class), anyLong())).thenReturn(updateLoadBalancerServiceInstanceAnswer); - when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerStatsCommand.class))).thenReturn(updateTungstenLoadbalancerStatsAnswer); - when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerSslCommand.class))).thenReturn(updateTungstenLoadbalancerSslAnswer); - when(updateTungstenLoadbalancerStatsAnswer.getResult()).thenReturn(true); - when(updateTungstenLoadbalancerSslAnswer.getResult()).thenReturn(true); - when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); - when(fwRulesDao.listByIpAndPurposeAndNotRevoked(anyLong(), eq(FirewallRule.Purpose.LoadBalancing))).thenReturn(List.of(firewallRuleVO)); - when(lbCertMapDao.findByLbRuleId(anyLong())).thenReturn(loadBalancerCertMapVO); - when(entityMgr.findById(eq(SslCertVO.class), anyLong())).thenReturn(sslCertVO); - when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(loadBalancingRule.getSourceIp()).thenReturn(ip); - when(accountDao.findById(anyLong())).thenReturn(accountVO); - when(ip.addr()).thenReturn("192.168.100.100"); - when(getTungstenLoadBalancerAnswer.getApiObjectBase()).thenReturn(loadbalancer); - when(ipAddressVO.getAddress()).thenReturn(ip); - when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); - - assertTrue(tungstenService.updateLoadBalancer(network, loadBalancingRule)); - } - - @Test - public void createTungstenSecurityGroupTest() { - SecurityGroup securityGroup = mock(SecurityGroup.class); - ProjectVO projectVO = mock(ProjectVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - DomainVO domainVO = mock(DomainVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer createTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(domainDao.findById(anyLong())).thenReturn(domainVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenSecurityGroupCommand.class), anyLong())).thenReturn(createTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - - try (MockedStatic transactionMocked = Mockito.mockStatic(Transaction.class)) { - transactionMocked.when(() -> Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); - assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); - } - } - - @Test - public void deleteTungstenSecurityGroupTest() { - SecurityGroup securityGroup = mock(SecurityGroup.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); - - assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); - } - - @Test - public void addTungstenSecurityGroupEgressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - NicVO nicVO = mock(NicVO.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); - when(tungstenSecurityGroupRuleDao.findDefaultSecurityRule(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); - when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); - when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(securityRule.getAllowedNetworkId()).thenReturn(1L); - - assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); - } - - @Test - public void addTungstenSecurityGroupIngressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); - when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); - when(securityRule.getAllowedNetworkId()).thenReturn(null); - - assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); - } - - @Test - public void removeTungstenSecurityGroupEgressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NicVO nicVO = mock(NicVO.class); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); - when(securityRule.getType()).thenReturn("egress"); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(securityRule.getAllowedNetworkId()).thenReturn(1L); - when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(tungstenSecurityGroupRuleDao.findBySecurityGroupAndRuleTypeAndRuleTarget(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); - - assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); - } - - @Test - public void removeTungstenSecurityGroupIngressRuleTest() { - SecurityRule securityRule = mock(SecurityRule.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - when(securityRule.getAllowedNetworkId()).thenReturn(null); - - assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); - } - - @Test - public void addTungstenNicSecondaryIpAddressTest() { - NicSecondaryIp nicSecondaryIp = mock(NicSecondaryIp.class); - Network network = mock(Network.class); - DataCenter dataCenter = mock(DataCenter.class); - Nic nic = mock(Nic.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer addTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); - when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); - when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); - when(entityMgr.findById(eq(Nic.class), anyLong())).thenReturn(nic); - when(nicSecondaryIp.getIp4Address()).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(addTungstenSecondaryIpAddressAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); - when(network.getGuestType()).thenReturn(Network.GuestType.Shared); - when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); - when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - - assertTrue(tungstenService.addTungstenNicSecondaryIpAddress(1L)); - } - - @Test - public void removeTungstenNicSecondaryIpAddressTest() { - NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); - Network network = mock(Network.class); - DataCenter dataCenter = mock(DataCenter.class); - TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); - when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); - - when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); - when(network.getGuestType()).thenReturn(Network.GuestType.Shared); - when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); - when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); - when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); - when(nicSecondaryIpVO.getIp4Address()).thenReturn("192.168.100.100"); - - assertTrue(tungstenService.removeTungstenNicSecondaryIpAddress(nicSecondaryIpVO)); - } - - @Test - public void createTungstenPolicyTest() { - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(createTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - - assertNotNull(tungstenService.createTungstenPolicy(1L, "test")); - } - - @Test - public void addTungstenPolicyRuleTest() throws Exception { - TungstenAnswer addTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenPolicyRuleCommand.class), anyLong())).thenReturn(addTungstenPolicyRuleAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(addTungstenPolicyRuleAnswer.getApiObjectBase()).thenReturn(networkPolicy); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - try (MockedConstruction ignored = - Mockito.mockConstruction(AddTungstenPolicyRuleCommand.class, (mock, context) -> { - when(mock.getUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - })) { - - assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", - "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, - "network2", "192.168.200.200", 32, 80, 80)); - } - } - - @Test - public void listTungstenPolicyTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer listTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findById(anyLong())).thenReturn(networkVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyCommand.class), anyLong())).thenReturn(listTungstenPolicyAnswer); - when(listTungstenPolicyAnswer.getTungstenModelList()).thenReturn(List.of(tungstenNetworkPolicy)); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn( - List.of(virtualNetwork)); - - assertNotNull(tungstenService.listTungstenPolicy(1L, 2L, 3L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenNetworkTest() { - TungstenAnswer listTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNetworkCommand.class), anyLong())).thenReturn(listTungstenNetworkAnswer); - doReturn(List.of(virtualNetwork)).when(listTungstenNetworkAnswer).getApiObjectBaseList(); - when((virtualNetwork.getName())).thenReturn("guestNetwork1"); - - assertNotNull(tungstenService.listTungstenNetwork(1L, "948f421c-edde-4518-a391-09299cc25dc2", false)); - } - - @Test - public void listTungstenNicTest() { - TungstenAnswer listTungstenNicAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNicCommand.class), anyLong())).thenReturn(listTungstenNicAnswer); - doReturn(List.of(virtualMachineInterface)).when(listTungstenNicAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenNic(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenVmTest() { - TungstenAnswer listTungstenVmAnswer = new MockTungstenAnswerFactory(true).get(); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenVmCommand.class), anyLong())).thenReturn(listTungstenVmAnswer); - doReturn(List.of(virtualMachine)).when(listTungstenVmAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenVm(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenPolicyTest() { - TungstenAnswer deleteTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); - - assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenPolicyRuleWithRuleUuidTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); - doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenPolicyRuleWithAllRuleTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); - PolicyRuleType policyRuleType = mock(PolicyRuleType.class); - ActionListType actionListType = mock(ActionListType.class); - AddressType addressType = mock(AddressType.class); - SubnetType subnetType = mock(SubnetType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); - doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); - when(networkPolicy.getEntries()).thenReturn(policyEntriesType); - when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); - when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); - when(policyRuleType.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); - when(addressType.getSubnet()).thenReturn(subnetType); - when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); - when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); - when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); - - assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", null)); - } - - @Test - public void removeTungstenPolicyRuleTest() { - TungstenAnswer removeTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyRuleCommand.class), anyLong())).thenReturn(removeTungstenPolicyRuleAnswer); - when(removeTungstenPolicyRuleAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void createTungstenTagTest() { - TungstenAnswer createTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagCommand.class), anyLong())).thenReturn(createTungstenTagAnswer); - when(createTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); - doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); - doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); - doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); - - assertNotNull(tungstenService.createTungstenTag(1L, "testTag", "testTagType")); - } - - @Test - public void createTungstenTagTypeTest() { - TungstenAnswer createTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); - TagType tagtype = mock(TagType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(createTungstenTagTypeAnswer.getApiObjectBase()).thenReturn(tagtype); - - assertNotNull(tungstenService.createTungstenTagType(1L, "testTagType")); - } - - @Test - public void listTungstenTagsTest() { - TungstenAnswer listTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagCommand.class), anyLong())).thenReturn(listTungstenTagAnswer); - when(listTungstenTagAnswer.getTungstenModelList()).thenReturn(List.of(tungstenTag)); - when(tungstenTag.getTag()).thenReturn(tag); - doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); - doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); - doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); - doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); - - assertNotNull(tungstenService.listTungstenTags(1L, "948f421c-edde-4518-a391-09299cc25dc2" - , "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", "a329662e-1805-4a89-9b05-2b818ea35978", - "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); - } - - @Test - public void listTungstenTagTypesTest() { - TungstenAnswer listTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); - TagType tagtype = mock(TagType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagTypeCommand.class), anyLong())).thenReturn(listTungstenTagTypeAnswer); - doReturn(List.of(tagtype)).when(listTungstenTagTypeAnswer).getApiObjectBaseList(); - - assertNotNull(tungstenService.listTungstenTagTypes(1L, "testTagType")); - } - - @Test - public void deleteTungstenTagTest() { - TungstenAnswer deleteTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); - - assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenTagTypeTest() { - TungstenAnswer deleteTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); - - assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void applyTungstenPolicyTest() { - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); - when(applyTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.applyTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", 1, 1)); - } - - @Test - public void applyTungstenTagTest() { - TungstenAnswer applyTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenTagCommand.class), anyLong())).thenReturn(applyTungstenTagAnswer); - when(applyTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); - when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); - when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); - - assertNotNull(tungstenService.applyTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85") - , List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb" - , "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); - } - - @Test - public void removeTungstenPolicyTest() { - TungstenAnswer removeTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyCommand.class), anyLong())).thenReturn(removeTungstenPolicyAnswer); - when(removeTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); - when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); - when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void removeTungstenTagTest() { - TungstenAnswer removeTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenTag tungstenTag = mock(TungstenTag.class); - Tag tag = mock(Tag.class); - NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - VirtualMachine virtualMachine = mock(VirtualMachine.class); - VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenTagCommand.class), anyLong())).thenReturn(removeTungstenTagAnswer); - when(removeTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); - when(tungstenTag.getTag()).thenReturn(tag); - when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); - when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); - when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); - - assertNotNull(tungstenService.removeTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), - List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85"), - List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", null, - "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb")); - } - - @Test - public void createTungstenAddressGroupTest() { - TungstenAnswer createTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); - AddressGroup addressGroup = mock(AddressGroup.class); - SubnetListType subnetListType = mock(SubnetListType.class); - SubnetType subnetType = mock(SubnetType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenAddressGroupCommand.class), anyLong())).thenReturn(createTungstenAddressGroupAnswer); - when(createTungstenAddressGroupAnswer.getApiObjectBase()).thenReturn(addressGroup); - when(addressGroup.getPrefix()).thenReturn(subnetListType); - when(subnetListType.getSubnet()).thenReturn(List.of(subnetType)); - - assertNotNull(tungstenService.createTungstenAddressGroup(1L, "test", "192.168.100.0", 24)); - } - - @Test - public void createTungstenServiceGroupTest() { - TungstenAnswer createTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); - ServiceGroup serviceGroup = mock(ServiceGroup.class); - FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); - FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenServiceGroupCommand.class), anyLong())).thenReturn(createTungstenServiceGroupAnswer); - when(createTungstenServiceGroupAnswer.getApiObjectBase()).thenReturn(serviceGroup); - when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); - when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); - when(firewallServiceType.getDstPorts()).thenReturn(portType); - - assertNotNull(tungstenService.createTungstenServiceGroup(1L, "test", "tcp", 80, 80)); - } - - @Test - public void createTungstenFirewallRuleTest() { - TungstenAnswer createTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); - net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); - ActionListType actionListType = mock(ActionListType.class); - ObjectReference serviceGroup = mock(ObjectReference.class); - FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); - FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); - FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallRuleCommand.class), anyLong())).thenReturn(createTungstenFirewallRuleAnswer); - when(createTungstenFirewallRuleAnswer.getApiObjectBase()).thenReturn(firewallRule); - when(firewallRule.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); - when(serviceGroup.getReferredName()).thenReturn(List.of("service")); - when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); - when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); - when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); - when(firewallRuleEndpointType2.getTags()).thenReturn(null); - when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); - when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); - - assertNotNull(tungstenService.createTungstenFirewallRule(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "test", "pass", "948f421c-edde-4518-a391-09299cc25dc2", - "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", null, "<>", "a329662e-1805-4a89-9b05-2b818ea35978" - , "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", null, "df8e4490-2a40-4d63-a6f3-1f829ffe4fc6", 1)); - } - - @Test - public void createTungstenFirewallPolicyTest() { - TungstenAnswer createTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(createTungstenFirewallPolicyAnswer); - when(createTungstenFirewallPolicyAnswer.getApiObjectBase()).thenReturn(firewallPolicy); - when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.createTungstenFirewallPolicy(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652","test", 1)); - } - - @Test - public void createTungstenApplicationPolicySetTest() { - TungstenAnswer createTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - ObjectReference objectReference = mock(ObjectReference.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(createTungstenApplicationPolicySetAnswer); - when(createTungstenApplicationPolicySetAnswer.getApiObjectBase()).thenReturn(applicationPolicySet); - when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); - when(objectReference.getReferredName()).thenReturn(List.of("tag")); - when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.createTungstenApplicationPolicySet(1L, "test")); - } - - @Test - public void listTungstenApplicationPolicySetTest() { - TungstenAnswer listTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); - ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); - ObjectReference objectReference = mock(ObjectReference.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(listTungstenApplicationPolicySetAnswer); - doReturn(List.of(applicationPolicySet)).when(listTungstenApplicationPolicySetAnswer).getApiObjectBaseList(); - when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); - when(objectReference.getReferredName()).thenReturn(List.of("tag")); - when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.listTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenFirewallPolicyTest() { - TungstenAnswer listTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); - ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(listTungstenFirewallPolicyAnswer); - doReturn(List.of(firewallPolicy)).when(listTungstenFirewallPolicyAnswer).getApiObjectBaseList(); - when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); - when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); - - assertNotNull(tungstenService.listTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenFirewallRuleTest() { - TungstenAnswer listTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); - net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); - ActionListType actionListType = mock(ActionListType.class); - ObjectReference serviceGroup = mock(ObjectReference.class); - FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); - FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); - FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallRuleCommand.class), anyLong())).thenReturn(listTungstenFirewallRuleAnswer); - doReturn(List.of(firewallRule)).when(listTungstenFirewallRuleAnswer).getApiObjectBaseList(); - when(firewallRule.getActionList()).thenReturn(actionListType); - when(actionListType.getSimpleAction()).thenReturn("pass"); - when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); - when(serviceGroup.getReferredName()).thenReturn(List.of("service")); - when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); - when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); - when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); - when(firewallRuleEndpointType2.getTags()).thenReturn(null); - when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); - when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); - - assertNotNull(tungstenService.listTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", - "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listTungstenAddressGroupTest() { - TungstenAnswer listTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); - AddressGroup addressGroup = mock(AddressGroup.class); - SubnetListType subnetListType = mock(SubnetListType.class); - SubnetType subnetType = mock(SubnetType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenAddressGroupCommand.class), anyLong())).thenReturn(listTungstenAddressGroupAnswer); - doReturn(List.of(addressGroup)).when(listTungstenAddressGroupAnswer).getApiObjectBaseList(); - when(addressGroup.getPrefix()).thenReturn(subnetListType); - when(subnetListType.getSubnet()).thenReturn( - List.of(subnetType)); - - assertNotNull(tungstenService.listTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void listTungstenServiceGroupTest() { - TungstenAnswer listTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); - ServiceGroup serviceGroup = mock(ServiceGroup.class); - FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); - FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); - PortType portType = mock(PortType.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenServiceGroupCommand.class), anyLong())).thenReturn(listTungstenServiceGroupAnswer); - doReturn(List.of(serviceGroup)).when(listTungstenServiceGroupAnswer).getApiObjectBaseList(); - when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); - when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); - when(firewallServiceType.getDstPorts()).thenReturn(portType); - - assertNotNull(tungstenService.listTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenApplicationPolicySetTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenFirewallPolicyTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenFirewallRuleTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenServiceGroupTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void deleteTungstenAddressGroupTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void createSharedNetworkTest() { - Network network = mock(Network.class); - Vlan vlan = mock(Vlan.class); - AccountVO accountVO = mock(AccountVO.class); - TungstenAnswer createTungstenSharedNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); - NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - HostVO hostVO = mock(HostVO.class); - Answer answer = mock(Answer.class); - IPAddressVO ipAddressVO = mock(IPAddressVO.class); - ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); - - when(accountDao.findById(anyLong())).thenReturn(accountVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenSharedNetworkAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addNetworkSubnetAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); - when(network.getMode()).thenReturn(Networks.Mode.Dhcp); - when(network.getCidr()).thenReturn("192.168.100.0/24"); - when(vlan.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); - when(vlan.getVlanGateway()).thenReturn("192.168.100.1"); - when(vlan.getIp6Gateway()).thenReturn("fd00::1"); - when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); - when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); - when(hostDao.findByPublicIp(anyString())).thenReturn(hostVO); - when(agentMgr.easySend(anyLong(), any(SetupTungstenVRouterCommand.class))).thenReturn(answer); - when(answer.getResult()).thenReturn(true); - when(vlan.getIp6Cidr()).thenReturn("fd00::1/64"); - when(vlan.getIp6Range()).thenReturn("fd00::100-fd00::200"); - when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.1.150"); - when(createTungstenSharedNetworkAnswer.getApiObjectBase()).thenReturn(apiObjectBase); - when(apiObjectBase.getQualifiedName()).thenReturn(List.of("network")); - when(tungstenProviderVO.getGateway()).thenReturn("192.168.100.1"); - - assertTrue(tungstenService.createSharedNetwork(network, vlan)); - } - - @Test - public void addTungstenVmSecurityGroupTest() { - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenVmToSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); - NicVO nicVO = mock(NicVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); - when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); - when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenVmToSecurityGroupCommand.class), anyLong())).thenReturn(addTungstenVmToSecurityGroupAnswer); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); - when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); - when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); - when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); - when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); - when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); - when(nicVO.getIPv6Address()).thenReturn("fd00::1"); - when(nicVO.getSecondaryIp()).thenReturn(true); - when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); - when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); - when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); - - assertTrue(tungstenService.addTungstenVmSecurityGroup(vmInstanceVO)); - } - - @Test - public void removeTungstenVmSecurityGroupTest() { - VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - NicVO nicVO = mock(NicVO.class); - SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); - - assertTrue(tungstenService.removeTungstenVmSecurityGroup(vmInstanceVO)); - } - - @Test - public void createRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.createRoutingLogicalRouter(1L, "default-domain:default-project", "testLR")); - } - - @Test - public void addNetworkGatewayToLogicalRouterTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findByUuid(anyString())).thenReturn(networkVO); - when(ipAddressManager.acquireLastGuestIpAddress(any(Network.class))).thenReturn("192.168.100.100"); - when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkGatewayToLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.addNetworkGatewayToLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void listRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModelList()).thenReturn(List.of(tungstenLogicalRouter)); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.listRoutingLogicalRouter(1L, null, "948f421c-edde-4518-a391-09299cc25dc2")); - } - - @Test - public void removeNetworkGatewayFromLogicalRouterTest() { - NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); - LogicalRouter logicalRouter = mock(LogicalRouter.class); - VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); - DataCenterVO dataCenterVO = mock(DataCenterVO.class); - - when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); - when(networkDao.findByUuid(anyString())).thenReturn(networkVO); - when(tungstenGuestNetworkIpAddressDao.findByNetworkAndLogicalRouter(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); - when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkGatewayFromLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); - when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); - when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); - - assertNotNull(tungstenService.removeNetworkGatewayFromLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); - } - - @Test - public void deleteLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); - - when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); - - assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); - } -} \ No newline at end of file +// 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 org.apache.cloudstack.network.tungsten.service; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; 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 com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenterIpAddressVO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.Vlan; import com.cloud.dc.VlanVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.DataCenterIpAddressDao; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor; import com.cloud.network.IpAddressManager; import com.cloud.network.Network; import com.cloud.network.NetworkModel; import com.cloud.network.NetworkService; import com.cloud.network.Networks; import com.cloud.network.TungstenGuestNetworkIpAddressVO; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.IPAddressVO; import com.cloud.network.dao.LoadBalancerCertMapDao; import com.cloud.network.dao.LoadBalancerCertMapVO; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkDetailVO; import com.cloud.network.dao.NetworkDetailsDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.dao.SslCertVO; import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; import com.cloud.network.dao.TungstenProviderDao; import com.cloud.network.element.TungstenProviderVO; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityGroupManager; import com.cloud.network.security.SecurityGroupRuleVO; import com.cloud.network.security.SecurityGroupService; import com.cloud.network.security.SecurityGroupVO; import com.cloud.network.security.SecurityRule; import com.cloud.network.security.TungstenSecurityGroupRuleVO; import com.cloud.network.security.dao.SecurityGroupDao; import com.cloud.network.security.dao.SecurityGroupRuleDao; import com.cloud.network.security.dao.SecurityGroupVMMapDao; import com.cloud.network.security.dao.TungstenSecurityGroupRuleDao; import com.cloud.projects.ProjectManager; import com.cloud.projects.ProjectVO; import com.cloud.projects.dao.ProjectDao; import com.cloud.user.AccountVO; import com.cloud.user.DomainManager; import com.cloud.user.dao.AccountDao; import com.cloud.utils.db.EntityManager; import com.cloud.utils.db.Transaction; import com.cloud.utils.db.TransactionCallback; import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; import com.cloud.vm.Nic; import com.cloud.vm.NicSecondaryIp; import com.cloud.vm.NicVO; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.NicSecondaryIpDao; import com.cloud.vm.dao.NicSecondaryIpVO; import net.juniper.tungsten.api.ApiObjectBase; import net.juniper.tungsten.api.ApiPropertyBase; import net.juniper.tungsten.api.ObjectReference; import net.juniper.tungsten.api.types.ActionListType; import net.juniper.tungsten.api.types.AddressGroup; import net.juniper.tungsten.api.types.AddressType; import net.juniper.tungsten.api.types.ApplicationPolicySet; import net.juniper.tungsten.api.types.FirewallPolicy; import net.juniper.tungsten.api.types.FirewallRuleEndpointType; import net.juniper.tungsten.api.types.FirewallRuleMatchTagsType; import net.juniper.tungsten.api.types.FirewallSequence; import net.juniper.tungsten.api.types.FirewallServiceGroupType; import net.juniper.tungsten.api.types.FirewallServiceType; import net.juniper.tungsten.api.types.Loadbalancer; import net.juniper.tungsten.api.types.LogicalRouter; import net.juniper.tungsten.api.types.NetworkPolicy; import net.juniper.tungsten.api.types.PolicyEntriesType; import net.juniper.tungsten.api.types.PolicyRuleType; import net.juniper.tungsten.api.types.PortType; import net.juniper.tungsten.api.types.ServiceGroup; import net.juniper.tungsten.api.types.SubnetListType; import net.juniper.tungsten.api.types.SubnetType; import net.juniper.tungsten.api.types.Tag; import net.juniper.tungsten.api.types.TagType; import net.juniper.tungsten.api.types.VirtualMachine; import net.juniper.tungsten.api.types.VirtualMachineInterface; import net.juniper.tungsten.api.types.VirtualNetwork; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.framework.messagebus.MessageBus; import org.apache.cloudstack.framework.messagebus.MessageSubscriber; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkGatewayToLogicalRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkSubnetCommand; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenPolicyRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecondaryIpAddressCommand; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecurityGroupRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenVmToSecurityGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenTagCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenAddressGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenApplicationPolicySetCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDefaultProjectCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDomainCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpPoolCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenProjectCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenRoutingLogicalRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenSecurityGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenServiceGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagTypeCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenAddressGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenApplicationPolicySetCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenDomainCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpPoolCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenProjectCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenRoutingLogicalRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenSecurityGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenServiceGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagTypeCommand; import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenFabricNetworkCommand; import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenLoadBalancerCommand; import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenNetworkDnsCommand; import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenSecurityGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenAddressGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenApplicationPolicySetCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNetworkCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNicCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenRoutingLogicalRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenServiceGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagTypeCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenVmCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkGatewayFromLogicalRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkSubnetCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecondaryIpAddressCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecurityGroupRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenTagCommand; import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import org.apache.cloudstack.network.tungsten.agent.api.UpdateLoadBalancerServiceInstanceCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenDefaultSecurityGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerSslCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerStatsCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenVrouterConfigCommand; import org.apache.cloudstack.network.tungsten.model.TungstenLogicalRouter; import org.apache.cloudstack.network.tungsten.model.TungstenNetworkPolicy; import org.apache.cloudstack.network.tungsten.model.TungstenRule; import org.apache.cloudstack.network.tungsten.model.TungstenTag; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockedConstruction; import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.test.util.ReflectionTestUtils; import java.util.Arrays; import java.util.List; @RunWith(MockitoJUnitRunner.class) public class TungstenServiceImplTest { @Mock MessageBus messageBus; @Mock ProjectDao projectDao; @Mock AccountDao accountDao; @Mock NetworkDao networkDao; @Mock ConfigurationDao configDao; @Mock IPAddressDao ipAddressDao; @Mock EntityManager entityMgr; @Mock NetworkModel networkModel; @Mock DomainDao domainDao; @Mock LoadBalancerCertMapDao lbCertMapDao; @Mock FirewallRulesDao fwRulesDao; @Mock TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; @Mock TungstenProviderDao tungstenProviderDao; @Mock TungstenFabricUtils tungstenFabricUtils; @Mock AgentManager agentMgr; @Mock HostDao hostDao; @Mock NetworkDetailsDao networkDetailsDao; @Mock SecurityGroupDao securityGroupDao; @Mock NicDao nicDao; @Mock TungstenSecurityGroupRuleDao tungstenSecurityGroupRuleDao; @Mock SecurityGroupVMMapDao securityGroupVMMapDao; @Mock SecurityGroupRuleDao securityGroupRuleDao; @Mock SecurityGroupManager securityGroupManager; @Mock NicSecondaryIpDao nicSecIpDao; @Mock DataCenterIpAddressDao dataCenterIpAddressDao; @Mock DataCenterDao dataCenterDao; @Mock IpAddressManager ipAddressManager; TungstenServiceImpl tungstenService; AutoCloseable closeable; @Before public void setup() { closeable = MockitoAnnotations.openMocks(this); tungstenService = new TungstenServiceImpl(); tungstenService.projectDao = projectDao; tungstenService.tungstenProviderDao = tungstenProviderDao; tungstenService.networkModel = networkModel; tungstenService.ipAddressDao = ipAddressDao; tungstenService.tungstenFabricUtils = tungstenFabricUtils; tungstenService.domainDao = domainDao; tungstenService.accountDao = accountDao; tungstenService.dataCenterIpAddressDao = dataCenterIpAddressDao; tungstenService.networkDetailsDao = networkDetailsDao; tungstenService.agentMgr = agentMgr; tungstenService.hostDao = hostDao; tungstenService.configDao = configDao; tungstenService.fwRulesDao = fwRulesDao; tungstenService.lbCertMapDao = lbCertMapDao; tungstenService.entityMgr = entityMgr; tungstenService.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; tungstenService.securityGroupDao = securityGroupDao; tungstenService.tungstenSecurityGroupRuleDao = tungstenSecurityGroupRuleDao; tungstenService.securityGroupVMMapDao = securityGroupVMMapDao; tungstenService.nicDao = nicDao; tungstenService.nicSecIpDao = nicSecIpDao; tungstenService.securityGroupRuleDao = securityGroupRuleDao; tungstenService.securityGroupManager = securityGroupManager; tungstenService.networkDao = networkDao; tungstenService.dataCenterDao = dataCenterDao; tungstenService.ipAddressManager = ipAddressManager; tungstenService.messageBus = messageBus; } @After public void tearDown() throws Exception { closeable.close(); } @Test public void createTungstenFloatingIpTest() throws Exception { IPAddressVO ipAddressVO = mock(IPAddressVO.class); NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer createTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); Ip ip = mock(Ip.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); when(ipAddressVO.getAddress()).thenReturn(ip); assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); } @Test public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { IPAddressVO ipAddressVO = mock(IPAddressVO.class); NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer deleteTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); } @Test public void deleteTungstenDomainTest() throws Exception { DomainVO domainVO = mock(DomainVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); } @Test public void deleteTungstenProjectTest() throws Exception { ProjectVO projectVO = mock(ProjectVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); } @Test public void addTungstenDefaultNetworkPolicyTest() { TungstenRule tungstenRule = mock(TungstenRule.class); TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); assertTrue(tungstenService.addTungstenDefaultNetworkPolicy(1L, "default-domain:default-project", "policyName", "7279ed91-314e-45be-81b4-b10395fd2ae3" , List.of(tungstenRule), 1, 1)); } @Test public void createManagementNetworkTest() { Network managementNetwork = mock(Network.class); VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); TungstenAnswer createTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenVrouterConfigCommand.class), anyLong())).thenReturn(updateTungstenGlobalVrouterConfigAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(createTungstenNetworkAnswer.getApiObjectBase()).thenReturn(managementVirtualNetwork); when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); assertTrue(tungstenService.createManagementNetwork(1L)); } @Test public void addManagementNetworkSubnetTest() { HostPodVO hostPodVO = mock(HostPodVO.class); Network managementNetwork = mock(Network.class); TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); when(managementNetwork.getCidr()).thenReturn("192.168.100.0/24"); when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); when(dataCenterIpAddressDao.mark(anyLong(), anyLong(), anyString())).thenReturn(true); assertTrue(tungstenService.addManagementNetworkSubnet(hostPodVO)); } @Test public void deleteManagementNetworkTest() { Network managementNetwork = mock(Network.class); TungstenAnswer deleteTungstenManagementPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenFabricPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenFabricPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); assertTrue(tungstenService.deleteManagementNetwork(1L)); } @Test public void removeManagementNetworkSubnetTest() { HostPodVO hostPodVO = mock(HostPodVO.class); Network managementNetwork = mock(Network.class); TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); assertTrue(tungstenService.removeManagementNetworkSubnet(hostPodVO)); verify(dataCenterIpAddressDao, times(1)).releasePodIpAddress(anyLong()); } @Test public void createPublicNetworkTest() { Network publicNetwork = mock(Network.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); TungstenAnswer createPublicNetworkAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(createPublicNetworkAnswer.getApiObjectBase()).thenReturn(virtualNetwork); when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); when(virtualNetwork.getQualifiedName()).thenReturn(Arrays.asList("default-domain", "default-project", "publicNetwork")); assertTrue(tungstenService.createPublicNetwork(1L)); } @Test public void addPublicNetworkSubnetTest() { VlanVO vlanVO = mock(VlanVO.class); Network publicNetwork = mock(Network.class); TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); when(vlanVO.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); when(vlanVO.getVlanGateway()).thenReturn("192.168.100.1"); when(vlanVO.getVlanNetmask()).thenReturn("255.255.255.0"); when(publicNetwork.getCidr()).thenReturn("192.168.100.0/24"); when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); assertTrue(tungstenService.addPublicNetworkSubnet(vlanVO)); } @Test public void deletePublicNetworkTest() { Network publicNetwork = mock(Network.class); TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); assertTrue(tungstenService.deletePublicNetwork(1L)); } @Test public void removePublicNetworkSubnetTest() { VlanVO vlanVO = mock(VlanVO.class); Network publicNetwork = mock(Network.class); TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); assertTrue(tungstenService.removePublicNetworkSubnet(vlanVO)); verify(ipAddressDao, times(1)).unassignIpAddress(anyLong()); } @Test public void allocateDnsIpAddressTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); when(tungstenGuestNetworkIpAddressDao.persist(any(TungstenGuestNetworkIpAddressVO.class))).thenReturn(tungstenGuestNetworkIpAddressVO); when(networkVO.getCidr()).thenReturn("192.168.100.0/24"); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); assertTrue(tungstenService.allocateDnsIpAddress(networkVO, null, "test")); } @Test public void deallocateDnsIpAddressTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); when(tungstenGuestNetworkIpAddressDao.findByNetworkAndGuestIpAddress(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); tungstenService.deallocateDnsIpAddress(networkVO, null, "test"); verify(tungstenGuestNetworkIpAddressDao, times(1)).expunge(anyLong()); } @Test public void subscribeTungstenEventTest() { tungstenService.subscribeTungstenEvent(); verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_ASSIGN_IPADDR_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_RELEASE_IPADDR_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_APPLY_NETWORK_POLICY_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_CREATE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_DELETE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_DELETE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_SYNC_TUNGSTEN_DB_WITH_DOMAINS_AND_PROJECTS_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_CREATE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_DELETE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_ADD_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_REMOVE_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_ASSIGN_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_RELEASE_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); } @Test public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { DomainVO domainVO = mock(DomainVO.class); ProjectVO projectVO = mock(ProjectVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer createTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenDefaultProjectAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); when(domainDao.listAll()).thenReturn(List.of(domainVO)); when(projectDao.listAll()).thenReturn(List.of(projectVO)); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDomainCommand.class), anyLong())).thenReturn(createTungstenDomainAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenProjectCommand.class), anyLong())).thenReturn(createTungstenProjectAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDefaultProjectCommand.class), anyLong())).thenReturn(createTungstenDefaultProjectAnswer); when(domainDao.findById(anyLong())).thenReturn(domainVO); assertTrue(tungstenService.syncTungstenDbWithCloudstackProjectsAndDomains()); } @Test public void updateLoadBalancerTest() { Network network = mock(Network.class); LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); Network publicNetwork = mock(Network.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); HostVO hostVO = mock(HostVO.class); TungstenAnswer getTungstenLoadBalancerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new MockTungstenAnswerFactory(true).get(); Answer updateTungstenLoadbalancerStatsAnswer = mock(Answer.class); Answer updateTungstenLoadbalancerSslAnswer = mock(Answer.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); SslCertVO sslCertVO = mock(SslCertVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); Ip ip = mock(Ip.class); AccountVO accountVO = mock(AccountVO.class); Loadbalancer loadbalancer = mock(Loadbalancer.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(hostDao.listAllHostsByZoneAndHypervisorType(anyLong(), eq(Hypervisor.HypervisorType.KVM))).thenReturn(List.of(hostVO)); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenLoadBalancerCommand.class), anyLong())).thenReturn(getTungstenLoadBalancerAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateLoadBalancerServiceInstanceCommand.class), anyLong())).thenReturn(updateLoadBalancerServiceInstanceAnswer); when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerStatsCommand.class))).thenReturn(updateTungstenLoadbalancerStatsAnswer); when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerSslCommand.class))).thenReturn(updateTungstenLoadbalancerSslAnswer); when(updateTungstenLoadbalancerStatsAnswer.getResult()).thenReturn(true); when(updateTungstenLoadbalancerSslAnswer.getResult()).thenReturn(true); when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); when(fwRulesDao.listByIpAndPurposeAndNotRevoked(anyLong(), eq(FirewallRule.Purpose.LoadBalancing))).thenReturn(List.of(firewallRuleVO)); when(lbCertMapDao.findByLbRuleId(anyLong())).thenReturn(loadBalancerCertMapVO); when(entityMgr.findById(eq(SslCertVO.class), anyLong())).thenReturn(sslCertVO); when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(loadBalancingRule.getSourceIp()).thenReturn(ip); when(accountDao.findById(anyLong())).thenReturn(accountVO); when(ip.addr()).thenReturn("192.168.100.100"); when(getTungstenLoadBalancerAnswer.getApiObjectBase()).thenReturn(loadbalancer); when(ipAddressVO.getAddress()).thenReturn(ip); when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); assertTrue(tungstenService.updateLoadBalancer(network, loadBalancingRule)); } @Test public void createTungstenSecurityGroupTest() { SecurityGroup securityGroup = mock(SecurityGroup.class); ProjectVO projectVO = mock(ProjectVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); DomainVO domainVO = mock(DomainVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenAnswer createTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(domainDao.findById(anyLong())).thenReturn(domainVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenSecurityGroupCommand.class), anyLong())).thenReturn(createTungstenSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); try (MockedStatic transactionMocked = Mockito.mockStatic(Transaction.class)) { transactionMocked.when(() -> Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); } } @Test public void deleteTungstenSecurityGroupTest() { SecurityGroup securityGroup = mock(SecurityGroup.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer deleteTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); } @Test public void addTungstenSecurityGroupEgressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); NicVO nicVO = mock(NicVO.class); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); when(tungstenSecurityGroupRuleDao.findDefaultSecurityRule(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); when(nicVO.getIPv6Address()).thenReturn("fd00::1"); when(nicVO.getSecondaryIp()).thenReturn(true); when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); when(securityRule.getAllowedNetworkId()).thenReturn(1L); assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); } @Test public void addTungstenSecurityGroupIngressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); when(securityRule.getAllowedNetworkId()).thenReturn(null); assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); } @Test public void removeTungstenSecurityGroupEgressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); NicVO nicVO = mock(NicVO.class); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); when(securityRule.getType()).thenReturn("egress"); when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); when(securityRule.getAllowedNetworkId()).thenReturn(1L); when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); when(nicVO.getIPv6Address()).thenReturn("fd00::1"); when(nicVO.getSecondaryIp()).thenReturn(true); when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); when(tungstenSecurityGroupRuleDao.findBySecurityGroupAndRuleTypeAndRuleTarget(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); } @Test public void removeTungstenSecurityGroupIngressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); when(securityRule.getAllowedNetworkId()).thenReturn(null); assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); } @Test public void addTungstenNicSecondaryIpAddressTest() { NicSecondaryIp nicSecondaryIp = mock(NicSecondaryIp.class); Network network = mock(Network.class); DataCenter dataCenter = mock(DataCenter.class); Nic nic = mock(Nic.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer addTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); when(entityMgr.findById(eq(Nic.class), anyLong())).thenReturn(nic); when(nicSecondaryIp.getIp4Address()).thenReturn("192.168.100.100"); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(addTungstenSecondaryIpAddressAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); when(network.getGuestType()).thenReturn(Network.GuestType.Shared); when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); assertTrue(tungstenService.addTungstenNicSecondaryIpAddress(1L)); } @Test public void removeTungstenNicSecondaryIpAddressTest() { NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); Network network = mock(Network.class); DataCenter dataCenter = mock(DataCenter.class); TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); when(network.getGuestType()).thenReturn(Network.GuestType.Shared); when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); when(nicSecondaryIpVO.getIp4Address()).thenReturn("192.168.100.100"); assertTrue(tungstenService.removeTungstenNicSecondaryIpAddress(nicSecondaryIpVO)); } @Test public void createTungstenPolicyTest() { TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(createTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); assertNotNull(tungstenService.createTungstenPolicy(1L, "test")); } @Test public void addTungstenPolicyRuleTest() throws Exception { TungstenAnswer addTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); ActionListType actionListType = mock(ActionListType.class); AddressType addressType = mock(AddressType.class); SubnetType subnetType = mock(SubnetType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenPolicyRuleCommand.class), anyLong())).thenReturn(addTungstenPolicyRuleAnswer); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(addTungstenPolicyRuleAnswer.getApiObjectBase()).thenReturn(networkPolicy); when(networkPolicy.getEntries()).thenReturn(policyEntriesType); when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); when(policyRuleType.getActionList()).thenReturn(actionListType); when(actionListType.getSimpleAction()).thenReturn("pass"); when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); when(addressType.getSubnet()).thenReturn(subnetType); when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); try (MockedConstruction ignored = Mockito.mockConstruction(AddTungstenPolicyRuleCommand.class, (mock, context) -> { when(mock.getUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); })) { assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, "network2", "192.168.200.200", 32, 80, 80)); } } @Test public void listTungstenPolicyTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer listTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(networkDao.findById(anyLong())).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyCommand.class), anyLong())).thenReturn(listTungstenPolicyAnswer); when(listTungstenPolicyAnswer.getTungstenModelList()).thenReturn(List.of(tungstenNetworkPolicy)); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn( List.of(virtualNetwork)); assertNotNull(tungstenService.listTungstenPolicy(1L, 2L, 3L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void listTungstenNetworkTest() { TungstenAnswer listTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNetworkCommand.class), anyLong())).thenReturn(listTungstenNetworkAnswer); doReturn(List.of(virtualNetwork)).when(listTungstenNetworkAnswer).getApiObjectBaseList(); when((virtualNetwork.getName())).thenReturn("guestNetwork1"); assertNotNull(tungstenService.listTungstenNetwork(1L, "948f421c-edde-4518-a391-09299cc25dc2", false)); } @Test public void listTungstenNicTest() { TungstenAnswer listTungstenNicAnswer = new MockTungstenAnswerFactory(true).get(); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNicCommand.class), anyLong())).thenReturn(listTungstenNicAnswer); doReturn(List.of(virtualMachineInterface)).when(listTungstenNicAnswer).getApiObjectBaseList(); assertNotNull(tungstenService.listTungstenNic(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void listTungstenVmTest() { TungstenAnswer listTungstenVmAnswer = new MockTungstenAnswerFactory(true).get(); VirtualMachine virtualMachine = mock(VirtualMachine.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenVmCommand.class), anyLong())).thenReturn(listTungstenVmAnswer); doReturn(List.of(virtualMachine)).when(listTungstenVmAnswer).getApiObjectBaseList(); assertNotNull(tungstenService.listTungstenVm(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenPolicyTest() { TungstenAnswer deleteTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void listTungstenPolicyRuleWithRuleUuidTest() { TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); ActionListType actionListType = mock(ActionListType.class); AddressType addressType = mock(AddressType.class); SubnetType subnetType = mock(SubnetType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); when(networkPolicy.getEntries()).thenReturn(policyEntriesType); when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); when(policyRuleType.getActionList()).thenReturn(actionListType); when(actionListType.getSimpleAction()).thenReturn("pass"); when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); when(addressType.getSubnet()).thenReturn(subnetType); when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void listTungstenPolicyRuleWithAllRuleTest() { TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); ActionListType actionListType = mock(ActionListType.class); AddressType addressType = mock(AddressType.class); SubnetType subnetType = mock(SubnetType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); when(networkPolicy.getEntries()).thenReturn(policyEntriesType); when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); when(policyRuleType.getActionList()).thenReturn(actionListType); when(actionListType.getSimpleAction()).thenReturn("pass"); when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); when(addressType.getSubnet()).thenReturn(subnetType); when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", null)); } @Test public void removeTungstenPolicyRuleTest() { TungstenAnswer removeTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyRuleCommand.class), anyLong())).thenReturn(removeTungstenPolicyRuleAnswer); when(removeTungstenPolicyRuleAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.removeTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void createTungstenTagTest() { TungstenAnswer createTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagCommand.class), anyLong())).thenReturn(createTungstenTagAnswer); when(createTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); when(tungstenTag.getTag()).thenReturn(tag); doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); assertNotNull(tungstenService.createTungstenTag(1L, "testTag", "testTagType")); } @Test public void createTungstenTagTypeTest() { TungstenAnswer createTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); TagType tagtype = mock(TagType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(createTungstenTagTypeAnswer.getApiObjectBase()).thenReturn(tagtype); assertNotNull(tungstenService.createTungstenTagType(1L, "testTagType")); } @Test public void listTungstenTagsTest() { TungstenAnswer listTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagCommand.class), anyLong())).thenReturn(listTungstenTagAnswer); when(listTungstenTagAnswer.getTungstenModelList()).thenReturn(List.of(tungstenTag)); when(tungstenTag.getTag()).thenReturn(tag); doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); assertNotNull(tungstenService.listTungstenTags(1L, "948f421c-edde-4518-a391-09299cc25dc2" , "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); } @Test public void listTungstenTagTypesTest() { TungstenAnswer listTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); TagType tagtype = mock(TagType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagTypeCommand.class), anyLong())).thenReturn(listTungstenTagTypeAnswer); doReturn(List.of(tagtype)).when(listTungstenTagTypeAnswer).getApiObjectBaseList(); assertNotNull(tungstenService.listTungstenTagTypes(1L, "testTagType")); } @Test public void deleteTungstenTagTest() { TungstenAnswer deleteTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenTagTypeTest() { TungstenAnswer deleteTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void applyTungstenPolicyTest() { TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(applyTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.applyTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", 1, 1)); } @Test public void applyTungstenTagTest() { TungstenAnswer applyTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenTagCommand.class), anyLong())).thenReturn(applyTungstenTagAnswer); when(applyTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); when(tungstenTag.getTag()).thenReturn(tag); when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); assertNotNull(tungstenService.applyTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85") , List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb" , "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); } @Test public void removeTungstenPolicyTest() { TungstenAnswer removeTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyCommand.class), anyLong())).thenReturn(removeTungstenPolicyAnswer); when(removeTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.removeTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void removeTungstenTagTest() { TungstenAnswer removeTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenTagCommand.class), anyLong())).thenReturn(removeTungstenTagAnswer); when(removeTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); when(tungstenTag.getTag()).thenReturn(tag); when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); assertNotNull(tungstenService.removeTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85"), List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", null, "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb")); } @Test public void createTungstenAddressGroupTest() { TungstenAnswer createTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); AddressGroup addressGroup = mock(AddressGroup.class); SubnetListType subnetListType = mock(SubnetListType.class); SubnetType subnetType = mock(SubnetType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenAddressGroupCommand.class), anyLong())).thenReturn(createTungstenAddressGroupAnswer); when(createTungstenAddressGroupAnswer.getApiObjectBase()).thenReturn(addressGroup); when(addressGroup.getPrefix()).thenReturn(subnetListType); when(subnetListType.getSubnet()).thenReturn(List.of(subnetType)); assertNotNull(tungstenService.createTungstenAddressGroup(1L, "test", "192.168.100.0", 24)); } @Test public void createTungstenServiceGroupTest() { TungstenAnswer createTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); ServiceGroup serviceGroup = mock(ServiceGroup.class); FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenServiceGroupCommand.class), anyLong())).thenReturn(createTungstenServiceGroupAnswer); when(createTungstenServiceGroupAnswer.getApiObjectBase()).thenReturn(serviceGroup); when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); when(firewallServiceType.getDstPorts()).thenReturn(portType); assertNotNull(tungstenService.createTungstenServiceGroup(1L, "test", "tcp", 80, 80)); } @Test public void createTungstenFirewallRuleTest() { TungstenAnswer createTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); ActionListType actionListType = mock(ActionListType.class); ObjectReference serviceGroup = mock(ObjectReference.class); FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallRuleCommand.class), anyLong())).thenReturn(createTungstenFirewallRuleAnswer); when(createTungstenFirewallRuleAnswer.getApiObjectBase()).thenReturn(firewallRule); when(firewallRule.getActionList()).thenReturn(actionListType); when(actionListType.getSimpleAction()).thenReturn("pass"); when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); when(serviceGroup.getReferredName()).thenReturn(List.of("service")); when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); when(firewallRuleEndpointType2.getTags()).thenReturn(null); when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); assertNotNull(tungstenService.createTungstenFirewallRule(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "test", "pass", "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", null, "<>", "a329662e-1805-4a89-9b05-2b818ea35978" , "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", null, "df8e4490-2a40-4d63-a6f3-1f829ffe4fc6", 1)); } @Test public void createTungstenFirewallPolicyTest() { TungstenAnswer createTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(createTungstenFirewallPolicyAnswer); when(createTungstenFirewallPolicyAnswer.getApiObjectBase()).thenReturn(firewallPolicy); when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); assertNotNull(tungstenService.createTungstenFirewallPolicy(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652","test", 1)); } @Test public void createTungstenApplicationPolicySetTest() { TungstenAnswer createTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); ObjectReference objectReference = mock(ObjectReference.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(createTungstenApplicationPolicySetAnswer); when(createTungstenApplicationPolicySetAnswer.getApiObjectBase()).thenReturn(applicationPolicySet); when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); when(objectReference.getReferredName()).thenReturn(List.of("tag")); when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); assertNotNull(tungstenService.createTungstenApplicationPolicySet(1L, "test")); } @Test public void listTungstenApplicationPolicySetTest() { TungstenAnswer listTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); ObjectReference objectReference = mock(ObjectReference.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(listTungstenApplicationPolicySetAnswer); doReturn(List.of(applicationPolicySet)).when(listTungstenApplicationPolicySetAnswer).getApiObjectBaseList(); when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); when(objectReference.getReferredName()).thenReturn(List.of("tag")); when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); assertNotNull(tungstenService.listTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void listTungstenFirewallPolicyTest() { TungstenAnswer listTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(listTungstenFirewallPolicyAnswer); doReturn(List.of(firewallPolicy)).when(listTungstenFirewallPolicyAnswer).getApiObjectBaseList(); when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); assertNotNull(tungstenService.listTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void listTungstenFirewallRuleTest() { TungstenAnswer listTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); ActionListType actionListType = mock(ActionListType.class); ObjectReference serviceGroup = mock(ObjectReference.class); FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallRuleCommand.class), anyLong())).thenReturn(listTungstenFirewallRuleAnswer); doReturn(List.of(firewallRule)).when(listTungstenFirewallRuleAnswer).getApiObjectBaseList(); when(firewallRule.getActionList()).thenReturn(actionListType); when(actionListType.getSimpleAction()).thenReturn("pass"); when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); when(serviceGroup.getReferredName()).thenReturn(List.of("service")); when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); when(firewallRuleEndpointType2.getTags()).thenReturn(null); when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); assertNotNull(tungstenService.listTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void listTungstenAddressGroupTest() { TungstenAnswer listTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); AddressGroup addressGroup = mock(AddressGroup.class); SubnetListType subnetListType = mock(SubnetListType.class); SubnetType subnetType = mock(SubnetType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenAddressGroupCommand.class), anyLong())).thenReturn(listTungstenAddressGroupAnswer); doReturn(List.of(addressGroup)).when(listTungstenAddressGroupAnswer).getApiObjectBaseList(); when(addressGroup.getPrefix()).thenReturn(subnetListType); when(subnetListType.getSubnet()).thenReturn( List.of(subnetType)); assertNotNull(tungstenService.listTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void listTungstenServiceGroupTest() { TungstenAnswer listTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); ServiceGroup serviceGroup = mock(ServiceGroup.class); FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenServiceGroupCommand.class), anyLong())).thenReturn(listTungstenServiceGroupAnswer); doReturn(List.of(serviceGroup)).when(listTungstenServiceGroupAnswer).getApiObjectBaseList(); when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); when(firewallServiceType.getDstPorts()).thenReturn(portType); assertNotNull(tungstenService.listTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenApplicationPolicySetTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenFirewallPolicyTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenFirewallRuleTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenServiceGroupTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenAddressGroupTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void createSharedNetworkTest() { Network network = mock(Network.class); Vlan vlan = mock(Vlan.class); AccountVO accountVO = mock(AccountVO.class); TungstenAnswer createTungstenSharedNetworkAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer addNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); HostVO hostVO = mock(HostVO.class); Answer answer = mock(Answer.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); when(accountDao.findById(anyLong())).thenReturn(accountVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenSharedNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addNetworkSubnetAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(network.getMode()).thenReturn(Networks.Mode.Dhcp); when(network.getCidr()).thenReturn("192.168.100.0/24"); when(vlan.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); when(vlan.getVlanGateway()).thenReturn("192.168.100.1"); when(vlan.getIp6Gateway()).thenReturn("fd00::1"); when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(hostDao.findByPublicIp(anyString())).thenReturn(hostVO); when(agentMgr.easySend(anyLong(), any(SetupTungstenVRouterCommand.class))).thenReturn(answer); when(answer.getResult()).thenReturn(true); when(vlan.getIp6Cidr()).thenReturn("fd00::1/64"); when(vlan.getIp6Range()).thenReturn("fd00::100-fd00::200"); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.1.150"); when(createTungstenSharedNetworkAnswer.getApiObjectBase()).thenReturn(apiObjectBase); when(apiObjectBase.getQualifiedName()).thenReturn(List.of("network")); when(tungstenProviderVO.getGateway()).thenReturn("192.168.100.1"); assertTrue(tungstenService.createSharedNetwork(network, vlan)); } @Test public void addTungstenVmSecurityGroupTest() { VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); TungstenAnswer addTungstenVmToSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); NicVO nicVO = mock(NicVO.class); SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenVmToSecurityGroupCommand.class), anyLong())).thenReturn(addTungstenVmToSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); when(nicVO.getIPv6Address()).thenReturn("fd00::1"); when(nicVO.getSecondaryIp()).thenReturn(true); when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); assertTrue(tungstenService.addTungstenVmSecurityGroup(vmInstanceVO)); } @Test public void removeTungstenVmSecurityGroupTest() { VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); NicVO nicVO = mock(NicVO.class); SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); assertTrue(tungstenService.removeTungstenVmSecurityGroup(vmInstanceVO)); } @Test public void createRoutingLogicalRouterTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.createRoutingLogicalRouter(1L, "default-domain:default-project", "testLR")); } @Test public void addNetworkGatewayToLogicalRouterTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(networkDao.findByUuid(anyString())).thenReturn(networkVO); when(ipAddressManager.acquireLastGuestIpAddress(any(Network.class))).thenReturn("192.168.100.100"); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkGatewayToLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.addNetworkGatewayToLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void listRoutingLogicalRouterTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); when(tungstenAnswer.getTungstenModelList()).thenReturn(List.of(tungstenLogicalRouter)); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.listRoutingLogicalRouter(1L, null, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void removeNetworkGatewayFromLogicalRouterTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(networkDao.findByUuid(anyString())).thenReturn(networkVO); when(tungstenGuestNetworkIpAddressDao.findByNetworkAndLogicalRouter(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkGatewayFromLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.removeNetworkGatewayFromLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void deleteLogicalRouterTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } } \ No newline at end of file From 66f5737a1502b78c373eb5d940212d9da494e507 Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Tue, 24 Oct 2023 11:53:06 -0400 Subject: [PATCH 11/12] update ling ending --- .../service/MockTungstenAnswerFactory.java | 36 +- .../tungsten/service/TungstenElementTest.java | 1015 +++++++++- .../service/TungstenFabricUtilsTest.java | 104 +- .../service/TungstenServiceImplTest.java | 1672 ++++++++++++++++- 4 files changed, 2823 insertions(+), 4 deletions(-) diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java index f26831ac9bcb..0eeaae26e8cd 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java @@ -1 +1,35 @@ -// 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 org.apache.cloudstack.network.tungsten.service; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class MockTungstenAnswerFactory { TungstenAnswer tungstenAnswer; MockTungstenAnswerFactory(boolean returnResult){ tungstenAnswer=mock(TungstenAnswer.class); when(tungstenAnswer.getResult()).thenReturn(returnResult); } TungstenAnswer get() { return tungstenAnswer; } } \ No newline at end of file +// 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 org.apache.cloudstack.network.tungsten.service; + +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class MockTungstenAnswerFactory { + + TungstenAnswer tungstenAnswer; + MockTungstenAnswerFactory(boolean returnResult){ + tungstenAnswer=mock(TungstenAnswer.class); + when(tungstenAnswer.getResult()).thenReturn(returnResult); + } + TungstenAnswer get() { + return tungstenAnswer; + } + +} diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java index f1c2dd785f59..a9603ac1d3f3 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java @@ -1 +1,1014 @@ -// 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 org.apache.cloudstack.network.tungsten.service; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.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 com.cloud.agent.AgentManager; import com.cloud.api.ApiDBUtils; import com.cloud.configuration.Config; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.VlanVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.HostPodDao; import com.cloud.dc.dao.VlanDao; import com.cloud.deploy.DeployDestination; import com.cloud.exception.ConcurrentOperationException; import com.cloud.exception.ResourceUnavailableException; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor; import com.cloud.network.IpAddressManager; import com.cloud.network.Network; import com.cloud.network.NetworkModel; import com.cloud.network.Networks; import com.cloud.network.PhysicalNetworkServiceProvider; import com.cloud.network.TungstenGuestNetworkIpAddressVO; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.IPAddressVO; import com.cloud.network.dao.LoadBalancerCertMapDao; import com.cloud.network.dao.LoadBalancerDao; import com.cloud.network.dao.LoadBalancerVMMapDao; import com.cloud.network.dao.LoadBalancerVMMapVO; import com.cloud.network.dao.LoadBalancerVO; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkDetailsDao; import com.cloud.network.dao.NetworkServiceMapDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; import com.cloud.network.dao.PhysicalNetworkVO; import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; import com.cloud.network.dao.TungstenProviderDao; import com.cloud.network.element.TungstenProviderVO; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.rules.PortForwardingRule; import com.cloud.network.rules.StaticNatImpl; import com.cloud.user.AccountManager; import com.cloud.user.User; import com.cloud.uservm.UserVm; import com.cloud.utils.EncryptionUtil; import com.cloud.utils.Pair; import com.cloud.utils.TungstenUtils; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.fsm.StateMachine2; import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; import com.cloud.vm.Nic; import com.cloud.vm.NicProfile; import com.cloud.vm.ReservationContext; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachineProfile; import com.cloud.vm.dao.VMInstanceDao; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.framework.messagebus.MessageBus; import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenPortForwardingCommand; import org.apache.cloudstack.network.tungsten.agent.api.AssignTungstenFloatingIpCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkLoadbalancerCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenVirtualMachineCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerListenerCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVRouterPortCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmInterfaceCommand; import org.apache.cloudstack.network.tungsten.agent.api.ReleaseTungstenFloatingIpCommand; import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerHealthMonitorCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerMemberCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerPoolCommand; import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorDao; import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorVO; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; import java.util.Arrays; import java.util.List; @RunWith(MockitoJUnitRunner.class) public class TungstenElementTest { @Mock TungstenFabricUtils tungstenFabricUtils; @Mock NetworkModel networkModel; @Mock IPAddressDao ipAddressDao; @Mock VMInstanceDao vmInstanceDao; @Mock LoadBalancerVMMapDao lbVmMapDao; @Mock TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; @Mock IpAddressManager ipAddressMgr; @Mock ConfigurationDao configDao; @Mock LoadBalancerDao lbDao; @Mock AccountManager accountMgr; @Mock HostDao hostDao; @Mock MessageBus messageBus; @Mock PhysicalNetworkTrafficTypeDao physicalNetworkTrafficTypeDao; @Mock PhysicalNetworkDao physicalNetworkDao; @Mock TungstenProviderDao tungstenProviderDao; @Mock DataCenterDao dataCenterDao; @Mock VlanDao vlanDao; @Mock NetworkServiceMapDao networkServiceMapDao; @Mock HostPodDao hostPodDao; @Mock NetworkDetailsDao networkDetailsDao; @Mock AgentManager agentManager; @Mock NetworkDao networkDao; @Mock TungstenService tungstenService; @Mock TungstenFabricLBHealthMonitorDao tungstenFabricLBHealthMonitorDao; @Mock LoadBalancerCertMapDao loadBalancerCertMapDao; TungstenElement tungstenElement; MockedStatic apiDBUtilsMocked; MockedStatic encryptionUtilMocked; AutoCloseable closeable; @Before public void setup() { closeable = MockitoAnnotations.openMocks(this); tungstenElement = new TungstenElement(); tungstenElement.tungstenFabricUtils = tungstenFabricUtils; tungstenElement.networkModel = networkModel; tungstenElement.ipAddressDao = ipAddressDao; tungstenElement.vmInstanceDao = vmInstanceDao; tungstenElement.lbVmMapDao = lbVmMapDao; tungstenElement.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; tungstenElement.ipAddressMgr = ipAddressMgr; tungstenElement.configDao = configDao; tungstenElement.lbDao = lbDao; tungstenElement.accountMgr = accountMgr; tungstenElement.hostDao = hostDao; tungstenElement.messageBus = messageBus; tungstenElement.physicalNetworkDao = physicalNetworkDao; tungstenElement.tungstenService = tungstenService; tungstenElement.tungstenProviderDao = tungstenProviderDao; tungstenElement.dataCenterDao = dataCenterDao; tungstenElement.vlanDao = vlanDao; tungstenElement.networkServiceMapDao = networkServiceMapDao; tungstenElement.podDao = hostPodDao; tungstenElement.agentMgr = agentManager; tungstenElement.networkDetailsDao = networkDetailsDao; tungstenElement.networkDao = networkDao; tungstenElement.physicalNetworkTrafficTypeDao = physicalNetworkTrafficTypeDao; tungstenElement.tungstenFabricLBHealthMonitorDao = tungstenFabricLBHealthMonitorDao; tungstenElement.loadBalancerCertMapDao = loadBalancerCertMapDao; apiDBUtilsMocked = Mockito.mockStatic(ApiDBUtils.class); encryptionUtilMocked = Mockito.mockStatic(EncryptionUtil.class); when(tungstenService.getTungstenProjectFqn(any())).thenReturn("default-domain:default-project"); } @After public void tearDown() throws Exception { apiDBUtilsMocked.close(); encryptionUtilMocked.close(); closeable.close(); } @Test public void canHandleSuccessTest() { Network network = mock(Network.class); Network.Service service = mock(Network.Service.class); when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(true); assertTrue(tungstenElement.canHandle(network, service)); } @Test public void canHandleFailTest() { Network network = mock(Network.class); Network.Service service = mock(Network.Service.class); when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(false); assertFalse(tungstenElement.canHandle(network, service)); } @Test public void applyStaticNatsAddRuleSuccessTest() { Network network = mock(Network.class); StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(false); when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); } @Test public void applyStaticNatsAddRuleFailTest() { Network network = mock(Network.class); StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(false); when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); } @Test public void applyStaticNatsRevokeRuleSuccessTest() { Network network = mock(Network.class); StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(true); when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); } @Test public void applyStaticNatsRevokeRuleFailTest() { Network network = mock(Network.class); StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); when(staticNat.isForRevoke()).thenReturn(true); when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); } @Test public void applyLBRulesAddRuleSuccessTest() { User caller = mock(User.class); Network network = mock(Network.class); Network publicNetwork = mock(Network.class); Ip ip = mock(Ip.class); LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); List loadBalancingRuleList1 = List.of(loadBalancingRule1); List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); List lbStickinessPolicyList = List.of(lbStickinessPolicy); List loadBalancerVOList = List.of(loadBalancerVO); TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); when(lbStickinessPolicy.getParams()).thenReturn(pairList); when(loadBalancingRule1.getId()).thenReturn(1L); when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); when(loadBalancingRule1.getSourcePortStart()).thenReturn(443); when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); when(loadBalancingRule1.getSourceIp()).thenReturn(ip); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ipAddressVO.getAddress()).thenReturn(ip); when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); when(ip.addr()).thenReturn("10.10.10.10"); when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); when(EncryptionUtil.generateSignature(anyString(), anyString())).thenReturn("generatedString"); when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); } @Test public void applyLBRulesAddRuleFailTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); Ip ip = mock(Ip.class); LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); List loadBalancingRuleList1 = List.of(loadBalancingRule1); List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); List lbStickinessPolicyList = List.of(lbStickinessPolicy); List loadBalancerVOList = List.of(loadBalancerVO); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); when(lbStickinessPolicy.getParams()).thenReturn(pairList); when(loadBalancingRule1.getId()).thenReturn(1L); when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); when(loadBalancingRule1.getSourcePortStart()).thenReturn(80); when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); when(loadBalancingRule1.getSourceIp()).thenReturn(ip); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ipAddressVO.getAddress()).thenReturn(ip); when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); when(ip.addr()).thenReturn("10.10.10.10"); when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("disabled"); when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); } @Test public void applyLBRulesRevokeRuleFailTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); Ip ip1 = mock(Ip.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); List loadBalancingRuleList1 = List.of(loadBalancingRule1); List loadBalancerVOList1 = List.of(loadBalancerVO1); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Revoke); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ipAddressVO.getAddress()).thenReturn(ip1); when(ip1.addr()).thenReturn("10.10.10.10"); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList1); when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(tungstenGuestNetworkIpAddressDao.remove(anyLong())).thenReturn(false); assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); } @Test public void applyLBRulesRevokeRuleSuccessTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); Ip ip = mock(Ip.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); List loadBalancingRuleList = List.of(loadBalancingRule); List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(loadBalancingRule.getSourceIp()).thenReturn(ip); when(loadBalancingRule.getState()).thenReturn(FirewallRule.State.Revoke); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(ip.addr()).thenReturn("10.10.10.10"); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList)); } @Test public void applyPFRulesAddRuleSuccessTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); } @Test public void applyPFRulesAddRuleFailTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); } @Test public void applyPFRulesRevokeRuleSuccessTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); } @Test public void applyPFRulesRevokeRuleFailTest() { Network network = mock(Network.class); Network publicNetwork = mock(Network.class); PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); } @Test public void preparePublicNetworkTest() throws ConcurrentOperationException { Network network = mock(Network.class); NicProfile nicProfile = new NicProfile(); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); DeployDestination deployDestination = mock(DeployDestination.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenAnswer createTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); nicProfile.setIPv4Address("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenNetworkPolicyAnswer); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); } @Test public void prepareManagementNetworkTest() throws ConcurrentOperationException { Network network = mock(Network.class); NicProfile nicProfile = new NicProfile(); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); DeployDestination deployDestination = mock(DeployDestination.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); nicProfile.setIPv4Address("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); } @Test(expected = CloudRuntimeException.class) public void prepareWithExceptionTest() throws ConcurrentOperationException { Network network = mock(Network.class); NicProfile nicProfile = new NicProfile(); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); DeployDestination deployDestination = mock(DeployDestination.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); nicProfile.setIPv4Address("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext); } @Test public void releasePublicNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { Network network = mock(Network.class); NicProfile nicProfile = mock(NicProfile.class); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); } @Test public void releaseManagementNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { Network network = mock(Network.class); NicProfile nicProfile = mock(NicProfile.class); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); } @Test(expected = CloudRuntimeException.class) public void releaseWithExceptionTest() throws ConcurrentOperationException, ResourceUnavailableException { Network network = mock(Network.class); NicProfile nicProfile = mock(NicProfile.class); VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(host); when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenThrow(IllegalArgumentException.class); tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext); } @Test public void destroyTest() throws ConcurrentOperationException, ResourceUnavailableException { IPAddressVO ipAddressVO1 = mock(IPAddressVO.class); IPAddressVO ipAddressVO2 = mock(IPAddressVO.class); Network network = mock(Network.class); ReservationContext reservationContext = mock(ReservationContext.class); List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); TungstenAnswer tungstenDeleteFIPAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer tungstenDeleteNPAnswer = new MockTungstenAnswerFactory(true).get(); when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(tungstenDeleteNPAnswer); assertTrue(tungstenElement.destroy(network, reservationContext)); } @Test public void isReadyTest() { PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); PhysicalNetworkTrafficTypeVO physicalNetworkTrafficTypeVO = mock(PhysicalNetworkTrafficTypeVO.class); when(physicalNetworkTrafficTypeDao.findBy(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(physicalNetworkTrafficTypeVO); assertTrue(tungstenElement.isReady(physicalNetworkServiceProvider)); } @Test public void shutdownProviderInstancesTest() throws ConcurrentOperationException { PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); ReservationContext reservationContext = mock(ReservationContext.class); PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); Network publicNetwork = mock(Network.class); VlanVO vlanVO1 = mock(VlanVO.class); VlanVO vlanVO2 = mock(VlanVO.class); List vlanVOList = Arrays.asList(vlanVO1, vlanVO2); HostPodVO hostPodVO1 = mock(HostPodVO.class); HostPodVO hostPodVO2 = mock(HostPodVO.class); List hostPodVOList = Arrays.asList(hostPodVO1, hostPodVO2); when(physicalNetworkDao.findById(anyLong())).thenReturn(physicalNetworkVO); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(vlanDao.listVlansByNetworkIdIncludingRemoved(anyLong())).thenReturn(vlanVOList); when(hostPodDao.listByDataCenterId(anyLong())).thenReturn(hostPodVOList); assertTrue(tungstenElement.shutdownProviderInstances(physicalNetworkServiceProvider, reservationContext)); verify(networkServiceMapDao, times(1)).deleteByNetworkId(anyLong()); verify(tungstenService, times(2)).removePublicNetworkSubnet(any(VlanVO.class)); verify(tungstenService, times(1)).deletePublicNetwork(anyLong()); verify(tungstenService, times(2)).removeManagementNetworkSubnet(any(HostPodVO.class)); verify(tungstenService, times(1)).deleteManagementNetwork(anyLong()); } //@Test //public void processConnectWithoutSecurityGroupTest() throws ConnectionException { // Host host = mock(Host.class); // StartupCommand startupCommand = mock(StartupCommand.class); // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); // DataCenterVO dataCenterVO = mock(DataCenterVO.class); // VlanVO vlanVO1 = mock(VlanVO.class); // VlanVO vlanVO2 = mock(VlanVO.class); // List vlanList = Arrays.asList(vlanVO1, vlanVO2); // Network publicNetwork = mock(Network.class); // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); // // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); // when(vlanDao.listByZone(anyLong())).thenReturn(vlanList); // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); // when(vlanVO1.getVlanGateway()).thenReturn("192.168.100.1"); // when(vlanVO1.getVlanNetmask()).thenReturn("255.255.255.0"); // when(vlanVO2.getVlanGateway()).thenReturn("192.168.101.1"); // when(vlanVO2.getVlanNetmask()).thenReturn("255.255.255.0"); // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); // // tungstenElement.processConnect(host, startupCommand, true); // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); //} //@Test //public void processConnectWithSecurityGroupTest() throws ConnectionException { // Host host = mock(Host.class); // StartupCommand startupCommand = mock(StartupCommand.class); // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); // DataCenterVO dataCenterVO = mock(DataCenterVO.class); // NetworkVO network = mock(NetworkVO.class); // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); // Network publicNetwork = mock(Network.class); // // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); // when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(Arrays.asList(network)); // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); // // tungstenElement.processConnect(host, startupCommand, true); // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); //} @Test public void processHostAboutToBeRemovedWithSecurityGroupTest() { HostVO hostVO = mock(HostVO.class); TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); NetworkVO network = mock(NetworkVO.class); when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(hostDao.findById(anyLong())).thenReturn(hostVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(List.of(network)); tungstenElement.processHostAboutToBeRemoved(1L); verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); } @Test public void processHostAboutToBeRemovedWithoutSecurityGroupTest() { HostVO hostVO = mock(HostVO.class); TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(hostDao.findById(anyLong())).thenReturn(hostVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); tungstenElement.processHostAboutToBeRemoved(1L); verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); } @Test public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableException { Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Egress); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); } @Test public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableException { Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); Ip ip = mock(Ip.class); when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(ipAddressDao.findById(anyLong())).thenReturn(ipAddressVO); when(ipAddressVO.getAddress()).thenReturn(ip); when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); } @Test public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException { Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); TungstenAnswer deleteNetworkPolicyAnswer = mock(TungstenAnswer.class); when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteNetworkPolicyAnswer); assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); } @Test public void postStateTransitionEventWithVmStartedTest() { StateMachine2.Transition transition = mock(StateMachine2.Transition.class); VMInstanceVO vo = mock(VMInstanceVO.class); Object opaque = mock(Object.class); when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Starting); when(transition.getToState()).thenReturn(VirtualMachine.State.Running); when(tungstenService.addTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); } @Test public void postStateTransitionEventWithVmStopedTest() { StateMachine2.Transition transition = mock(StateMachine2.Transition.class); VMInstanceVO vo = mock(VMInstanceVO.class); Object opaque = mock(Object.class); when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Stopping); when(transition.getToState()).thenReturn(VirtualMachine.State.Stopped); when(tungstenService.removeTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); } @Test public void prepareMigrationTest() { NicProfile nic = mock(NicProfile.class); Network network = mock(Network.class); VirtualMachineProfile vm = mock(VirtualMachineProfile.class); DeployDestination dest = mock(DeployDestination.class); ReservationContext context = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO hostVO = mock(HostVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); when(hostDao.findById(anyLong())).thenReturn(hostVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenElement.prepareMigration(nic, network, vm, dest, context)); } @Test public void rollbackMigration() { NicProfile nic = mock(NicProfile.class); Network network = mock(Network.class); VirtualMachineProfile vm = mock(VirtualMachineProfile.class); ReservationContext src = mock(ReservationContext.class); ReservationContext dest = mock(ReservationContext.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); HostVO hostVO = mock(HostVO.class); when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); when(vm.getVirtualMachine()).thenReturn(virtualMachine); when(hostDao.findById(anyLong())).thenReturn(hostVO); tungstenElement.rollbackMigration(nic, network, vm, src, dest); verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); } @Test public void commitMigration() { NicProfile nic = mock(NicProfile.class); Network network = mock(Network.class); VirtualMachineProfile vm = mock(VirtualMachineProfile.class); ReservationContext src = mock(ReservationContext.class); ReservationContext dest = mock(ReservationContext.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); HostVO hostVO = mock(HostVO.class); when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); when(vm.getVirtualMachine()).thenReturn(virtualMachine); when(hostDao.findById(anyLong())).thenReturn(hostVO); tungstenElement.commitMigration(nic, network, vm, src, dest); verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); } } \ No newline at end of file +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.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 com.cloud.agent.AgentManager; +import com.cloud.api.ApiDBUtils; +import com.cloud.configuration.Config; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.HostPodVO; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.HostPodDao; +import com.cloud.dc.dao.VlanDao; +import com.cloud.deploy.DeployDestination; +import com.cloud.exception.ConcurrentOperationException; +import com.cloud.exception.ResourceUnavailableException; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.hypervisor.Hypervisor; +import com.cloud.network.IpAddressManager; +import com.cloud.network.Network; +import com.cloud.network.NetworkModel; +import com.cloud.network.Networks; +import com.cloud.network.PhysicalNetworkServiceProvider; +import com.cloud.network.TungstenGuestNetworkIpAddressVO; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.LoadBalancerCertMapDao; +import com.cloud.network.dao.LoadBalancerDao; +import com.cloud.network.dao.LoadBalancerVMMapDao; +import com.cloud.network.dao.LoadBalancerVMMapVO; +import com.cloud.network.dao.LoadBalancerVO; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDetailsDao; +import com.cloud.network.dao.NetworkServiceMapDao; +import com.cloud.network.dao.NetworkVO; +import com.cloud.network.dao.PhysicalNetworkDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeDao; +import com.cloud.network.dao.PhysicalNetworkTrafficTypeVO; +import com.cloud.network.dao.PhysicalNetworkVO; +import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.rules.PortForwardingRule; +import com.cloud.network.rules.StaticNatImpl; +import com.cloud.user.AccountManager; +import com.cloud.user.User; +import com.cloud.uservm.UserVm; +import com.cloud.utils.EncryptionUtil; +import com.cloud.utils.Pair; +import com.cloud.utils.TungstenUtils; +import com.cloud.utils.exception.CloudRuntimeException; +import com.cloud.utils.fsm.StateMachine2; +import com.cloud.utils.net.Ip; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.Nic; +import com.cloud.vm.NicProfile; +import com.cloud.vm.ReservationContext; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.VirtualMachine; +import com.cloud.vm.VirtualMachineProfile; +import com.cloud.vm.dao.VMInstanceDao; +import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.messagebus.MessageBus; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenPortForwardingCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AssignTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkLoadbalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenVirtualMachineCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenLoadBalancerListenerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVRouterPortCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenVmInterfaceCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ReleaseTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerHealthMonitorCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerMemberCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadBalancerPoolCommand; +import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorDao; +import org.apache.cloudstack.network.tungsten.dao.TungstenFabricLBHealthMonitorVO; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; + +import java.util.Arrays; +import java.util.List; + +@RunWith(MockitoJUnitRunner.class) +public class TungstenElementTest { + @Mock + TungstenFabricUtils tungstenFabricUtils; + @Mock + NetworkModel networkModel; + @Mock + IPAddressDao ipAddressDao; + @Mock + VMInstanceDao vmInstanceDao; + @Mock + LoadBalancerVMMapDao lbVmMapDao; + @Mock + TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; + @Mock + IpAddressManager ipAddressMgr; + @Mock + ConfigurationDao configDao; + @Mock + LoadBalancerDao lbDao; + @Mock + AccountManager accountMgr; + @Mock + HostDao hostDao; + @Mock + MessageBus messageBus; + @Mock + PhysicalNetworkTrafficTypeDao physicalNetworkTrafficTypeDao; + @Mock + PhysicalNetworkDao physicalNetworkDao; + @Mock + TungstenProviderDao tungstenProviderDao; + @Mock + DataCenterDao dataCenterDao; + @Mock + VlanDao vlanDao; + @Mock + NetworkServiceMapDao networkServiceMapDao; + @Mock + HostPodDao hostPodDao; + @Mock + NetworkDetailsDao networkDetailsDao; + @Mock + AgentManager agentManager; + @Mock + NetworkDao networkDao; + @Mock + TungstenService tungstenService; + @Mock + TungstenFabricLBHealthMonitorDao tungstenFabricLBHealthMonitorDao; + @Mock + LoadBalancerCertMapDao loadBalancerCertMapDao; + + TungstenElement tungstenElement; + + MockedStatic apiDBUtilsMocked; + + MockedStatic encryptionUtilMocked; + + AutoCloseable closeable; + + @Before + public void setup() { + closeable = MockitoAnnotations.openMocks(this); + tungstenElement = new TungstenElement(); + tungstenElement.tungstenFabricUtils = tungstenFabricUtils; + tungstenElement.networkModel = networkModel; + tungstenElement.ipAddressDao = ipAddressDao; + tungstenElement.vmInstanceDao = vmInstanceDao; + tungstenElement.lbVmMapDao = lbVmMapDao; + tungstenElement.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; + tungstenElement.ipAddressMgr = ipAddressMgr; + tungstenElement.configDao = configDao; + tungstenElement.lbDao = lbDao; + tungstenElement.accountMgr = accountMgr; + tungstenElement.hostDao = hostDao; + tungstenElement.messageBus = messageBus; + tungstenElement.physicalNetworkDao = physicalNetworkDao; + tungstenElement.tungstenService = tungstenService; + tungstenElement.tungstenProviderDao = tungstenProviderDao; + tungstenElement.dataCenterDao = dataCenterDao; + tungstenElement.vlanDao = vlanDao; + tungstenElement.networkServiceMapDao = networkServiceMapDao; + tungstenElement.podDao = hostPodDao; + tungstenElement.agentMgr = agentManager; + tungstenElement.networkDetailsDao = networkDetailsDao; + tungstenElement.networkDao = networkDao; + tungstenElement.physicalNetworkTrafficTypeDao = physicalNetworkTrafficTypeDao; + tungstenElement.tungstenFabricLBHealthMonitorDao = tungstenFabricLBHealthMonitorDao; + tungstenElement.loadBalancerCertMapDao = loadBalancerCertMapDao; + + apiDBUtilsMocked = Mockito.mockStatic(ApiDBUtils.class); + encryptionUtilMocked = Mockito.mockStatic(EncryptionUtil.class); + + when(tungstenService.getTungstenProjectFqn(any())).thenReturn("default-domain:default-project"); + } + + @After + public void tearDown() throws Exception { + apiDBUtilsMocked.close(); + encryptionUtilMocked.close(); + closeable.close(); + } + + @Test + public void canHandleSuccessTest() { + Network network = mock(Network.class); + Network.Service service = mock(Network.Service.class); + + when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(true); + + assertTrue(tungstenElement.canHandle(network, service)); + } + + @Test + public void canHandleFailTest() { + Network network = mock(Network.class); + Network.Service service = mock(Network.Service.class); + + when(networkModel.isProviderForNetwork(any(), anyLong())).thenReturn(false); + + assertFalse(tungstenElement.canHandle(network, service)); + } + + @Test + public void applyStaticNatsAddRuleSuccessTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(false); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); + + assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsAddRuleFailTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(false); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AssignTungstenFloatingIpCommand.class), anyLong())).thenReturn(assignFloatingIpAnswer); + + assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsRevokeRuleSuccessTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(true); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); + + assertTrue(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyStaticNatsRevokeRuleFailTest() { + Network network = mock(Network.class); + StaticNatImpl staticNat = mock(StaticNatImpl.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); + Nic nic = mock(Nic.class); + Network publicNetwork = mock(Network.class); + List staticNatList = List.of(staticNat); + + when(staticNat.isForRevoke()).thenReturn(true); + when(ipAddressDao.findByIdIncludingRemoved(anyLong())).thenReturn(ipAddressVO); + when(vmInstanceDao.findByIdIncludingRemoved(anyLong())).thenReturn(vmInstanceVO); + when(networkModel.getNicInNetworkIncludingRemoved(anyLong(), anyLong())).thenReturn(nic); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(ReleaseTungstenFloatingIpCommand.class), anyLong())).thenReturn(releaseFloatingIpAnswer); + + assertFalse(tungstenElement.applyStaticNats(network, staticNatList)); + } + + @Test + public void applyLBRulesAddRuleSuccessTest() { + User caller = mock(User.class); + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); + LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); + LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); + List lbStickinessPolicyList = List.of(lbStickinessPolicy); + List loadBalancerVOList = List.of(loadBalancerVO); + TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); + LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); + when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); + List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); + + when(lbStickinessPolicy.getParams()).thenReturn(pairList); + when(loadBalancingRule1.getId()).thenReturn(1L); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); + when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); + when(loadBalancingRule1.getSourcePortStart()).thenReturn(443); + when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); + when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); + when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); + when(ip.addr()).thenReturn("10.10.10.10"); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); + when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); + when(EncryptionUtil.generateSignature(anyString(), anyString())).thenReturn("generatedString"); + when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); + + assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesAddRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVMMapVO loadBalancerVMMapVO = mock(LoadBalancerVMMapVO.class); + LoadBalancerVO loadBalancerVO = mock(LoadBalancerVO.class); + LoadBalancingRule.LbStickinessPolicy lbStickinessPolicy = mock(LoadBalancingRule.LbStickinessPolicy.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVMMapVOList = List.of(loadBalancerVMMapVO); + List lbStickinessPolicyList = List.of(lbStickinessPolicy); + List loadBalancerVOList = List.of(loadBalancerVO); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); + List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); + TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); + + when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); + when(lbStickinessPolicy.getParams()).thenReturn(pairList); + when(loadBalancingRule1.getId()).thenReturn(1L); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Add); + when(loadBalancingRule1.getAlgorithm()).thenReturn("roundrobin"); + when(loadBalancingRule1.getSourcePortStart()).thenReturn(80); + when(loadBalancingRule1.getDefaultPortStart()).thenReturn(443); + when(loadBalancingRule1.getStickinessPolicies()).thenReturn(lbStickinessPolicyList); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(lbVmMapDao.listByLoadBalancerId(anyLong(), anyBoolean())).thenReturn(loadBalancerVMMapVOList); + when(ip.addr()).thenReturn("10.10.10.10"); + when(ipAddressMgr.acquireGuestIpAddress(any(), any())).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkLoadbalancerCommand.class), anyLong())).thenReturn(createTungstenNetworkLoadbalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerPoolCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerMemberCommand.class), anyLong())).thenReturn(updateTungstenLoadBalancerMemberAnswer); + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("disabled"); + when(tungstenFabricLBHealthMonitorDao.findByLbId(anyLong())).thenReturn(tungstenFabricLBHealthMonitorVO); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenLoadBalancerHealthMonitorCommand.class), anyLong())).thenReturn(updateTungstenHealthMonitorAnswer); + + assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesRevokeRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip1 = mock(Ip.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + LoadBalancingRule loadBalancingRule1 = mock(LoadBalancingRule.class); + LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); + List loadBalancingRuleList1 = List.of(loadBalancingRule1); + List loadBalancerVOList1 = List.of(loadBalancerVO1); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); + when(loadBalancingRule1.getState()).thenReturn(FirewallRule.State.Revoke); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip1); + when(ip1.addr()).thenReturn("10.10.10.10"); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerCommand); + when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList1); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(),anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(tungstenGuestNetworkIpAddressDao.remove(anyLong())).thenReturn(false); + + assertFalse(tungstenElement.applyLBRules(network, loadBalancingRuleList1)); + } + + @Test + public void applyLBRulesRevokeRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + Ip ip = mock(Ip.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); + LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); + LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); + List loadBalancingRuleList = List.of(loadBalancingRule); + List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(loadBalancingRule.getSourceIp()).thenReturn(ip); + when(loadBalancingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(ip.addr()).thenReturn("10.10.10.10"); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenLoadBalancerListenerCommand.class), anyLong())).thenReturn(deleteTungstenLoadBalancerListenerAnswer); + when(tungstenService.updateLoadBalancer(any(), any())).thenReturn(true); + when(lbDao.listByIpAddress(anyLong())).thenReturn(loadBalancerVOList); + + assertTrue(tungstenElement.applyLBRules(network, loadBalancingRuleList)); + } + + @Test + public void applyPFRulesAddRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesAddRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesRevokeRuleSuccessTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertTrue(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void applyPFRulesRevokeRuleFailTest() { + Network network = mock(Network.class); + Network publicNetwork = mock(Network.class); + PortForwardingRule portForwardingRule = mock(PortForwardingRule.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + UserVm userVm = mock(UserVm.class); + Nic nic = mock(Nic.class); + TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); + List portForwardingRuleList = List.of(portForwardingRule); + + when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); + when(ApiDBUtils.findIpAddressById(anyLong())).thenReturn(ipAddressVO); + when(ApiDBUtils.findUserVmById(anyLong())).thenReturn(userVm); + when(networkModel.getNicInNetwork(anyLong(), anyLong())).thenReturn(nic); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenPortForwardingCommand.class), anyLong())).thenReturn(applyTungstenPortForwardingAnswer); + + assertFalse(tungstenElement.applyPFRules(network, portForwardingRuleList)); + } + + @Test + public void preparePublicNetworkTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenAnswer createTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenNetworkPolicyAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + + assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); + assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); + assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); + } + + @Test + public void prepareManagementNetworkTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + + assertTrue(tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext)); + assertEquals(Nic.ReservationStrategy.Create, nicProfile.getReservationStrategy()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN, nicProfile.getBroadcastType()); + assertEquals(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf"), nicProfile.getBroadCastUri()); + assertEquals(TungstenUtils.DEFAULT_VHOST_INTERFACE, nicProfile.getName()); + } + + @Test(expected = CloudRuntimeException.class) + public void prepareWithExceptionTest() throws ConcurrentOperationException { + Network network = mock(Network.class); + NicProfile nicProfile = new NicProfile(); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + DeployDestination deployDestination = mock(DeployDestination.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer createTungstenVMAnswer = mock(TungstenAnswer.class); + + nicProfile.setIPv4Address("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(createTungstenVMAnswer); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + + tungstenElement.prepare(network, nicProfile, virtualMachineProfile, deployDestination, reservationContext); + } + + @Test + public void releasePublicNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = mock(TungstenAnswer.class); + + when(nicProfile.getIPv4Address()).thenReturn("192.168.100.100"); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + + assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); + } + + @Test + public void releaseManagementNetworkTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmAnswer = mock(TungstenAnswer.class); + + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenReturn(deleteVmAnswer); + + assertTrue(tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext)); + } + + @Test(expected = CloudRuntimeException.class) + public void releaseWithExceptionTest() throws ConcurrentOperationException, ResourceUnavailableException { + Network network = mock(Network.class); + NicProfile nicProfile = mock(NicProfile.class); + VirtualMachineProfile virtualMachineProfile = mock(VirtualMachineProfile.class); + ReservationContext reservationContext = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO host = mock(HostVO.class); + TungstenAnswer deleteTungstenVRouterPortAnswer = mock(TungstenAnswer.class); + TungstenAnswer deleteVmiAnswer = mock(TungstenAnswer.class); + + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(host); + when(virtualMachineProfile.getType()).thenReturn(VirtualMachine.Type.SecondaryStorageVm); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong())).thenReturn(deleteTungstenVRouterPortAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmInterfaceCommand.class), anyLong())).thenReturn(deleteVmiAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenVmCommand.class), anyLong())).thenThrow(IllegalArgumentException.class); + + tungstenElement.release(network, nicProfile, virtualMachineProfile, reservationContext); + } + + @Test + public void destroyTest() throws ConcurrentOperationException, ResourceUnavailableException { + IPAddressVO ipAddressVO1 = mock(IPAddressVO.class); + IPAddressVO ipAddressVO2 = mock(IPAddressVO.class); + Network network = mock(Network.class); + ReservationContext reservationContext = mock(ReservationContext.class); + List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); + TungstenAnswer tungstenDeleteFIPAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenDeleteNPAnswer = new MockTungstenAnswerFactory(true).get(); + + when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(tungstenDeleteNPAnswer); + + assertTrue(tungstenElement.destroy(network, reservationContext)); + } + + @Test + public void isReadyTest() { + PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); + PhysicalNetworkTrafficTypeVO physicalNetworkTrafficTypeVO = mock(PhysicalNetworkTrafficTypeVO.class); + + when(physicalNetworkTrafficTypeDao.findBy(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(physicalNetworkTrafficTypeVO); + + assertTrue(tungstenElement.isReady(physicalNetworkServiceProvider)); + } + + @Test + public void shutdownProviderInstancesTest() throws ConcurrentOperationException { + PhysicalNetworkServiceProvider physicalNetworkServiceProvider = mock(PhysicalNetworkServiceProvider.class); + ReservationContext reservationContext = mock(ReservationContext.class); + PhysicalNetworkVO physicalNetworkVO = mock(PhysicalNetworkVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + Network publicNetwork = mock(Network.class); + VlanVO vlanVO1 = mock(VlanVO.class); + VlanVO vlanVO2 = mock(VlanVO.class); + List vlanVOList = Arrays.asList(vlanVO1, vlanVO2); + HostPodVO hostPodVO1 = mock(HostPodVO.class); + HostPodVO hostPodVO2 = mock(HostPodVO.class); + List hostPodVOList = Arrays.asList(hostPodVO1, hostPodVO2); + + when(physicalNetworkDao.findById(anyLong())).thenReturn(physicalNetworkVO); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(vlanDao.listVlansByNetworkIdIncludingRemoved(anyLong())).thenReturn(vlanVOList); + when(hostPodDao.listByDataCenterId(anyLong())).thenReturn(hostPodVOList); + + assertTrue(tungstenElement.shutdownProviderInstances(physicalNetworkServiceProvider, reservationContext)); + verify(networkServiceMapDao, times(1)).deleteByNetworkId(anyLong()); + verify(tungstenService, times(2)).removePublicNetworkSubnet(any(VlanVO.class)); + verify(tungstenService, times(1)).deletePublicNetwork(anyLong()); + verify(tungstenService, times(2)).removeManagementNetworkSubnet(any(HostPodVO.class)); + verify(tungstenService, times(1)).deleteManagementNetwork(anyLong()); + } + + //@Test + //public void processConnectWithoutSecurityGroupTest() throws ConnectionException { + // Host host = mock(Host.class); + // StartupCommand startupCommand = mock(StartupCommand.class); + // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + // DataCenterVO dataCenterVO = mock(DataCenterVO.class); + // VlanVO vlanVO1 = mock(VlanVO.class); + // VlanVO vlanVO2 = mock(VlanVO.class); + // List vlanList = Arrays.asList(vlanVO1, vlanVO2); + // Network publicNetwork = mock(Network.class); + // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); +// + // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); + // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + // when(vlanDao.listByZone(anyLong())).thenReturn(vlanList); + // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); + // when(vlanVO1.getVlanGateway()).thenReturn("192.168.100.1"); + // when(vlanVO1.getVlanNetmask()).thenReturn("255.255.255.0"); + // when(vlanVO2.getVlanGateway()).thenReturn("192.168.101.1"); + // when(vlanVO2.getVlanNetmask()).thenReturn("255.255.255.0"); + // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); +// + // tungstenElement.processConnect(host, startupCommand, true); + // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + //} + + //@Test + //public void processConnectWithSecurityGroupTest() throws ConnectionException { + // Host host = mock(Host.class); + // StartupCommand startupCommand = mock(StartupCommand.class); + // TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + // DataCenterVO dataCenterVO = mock(DataCenterVO.class); + // NetworkVO network = mock(NetworkVO.class); + // NetworkDetailVO networkDetail = mock(NetworkDetailVO.class); + // Network publicNetwork = mock(Network.class); +// + // when(host.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + // when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + // when(host.getPublicIpAddress()).thenReturn("192.168.100.100"); + // when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + // when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + // when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(Arrays.asList(network)); + // when(networkDetailsDao.findDetail(anyLong(), anyString())).thenReturn(networkDetail); + // when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + // when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); +// + // tungstenElement.processConnect(host, startupCommand, true); + // verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + //} + + @Test + public void processHostAboutToBeRemovedWithSecurityGroupTest() { + HostVO hostVO = mock(HostVO.class); + TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + NetworkVO network = mock(NetworkVO.class); + + when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); + when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + when(networkDao.listByZoneSecurityGroup(anyLong())).thenReturn(List.of(network)); + + tungstenElement.processHostAboutToBeRemoved(1L); + verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + } + + @Test + public void processHostAboutToBeRemovedWithoutSecurityGroupTest() { + HostVO hostVO = mock(HostVO.class); + TungstenProviderVO tungstenProvider = mock(TungstenProviderVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(hostVO.getHypervisorType()).thenReturn(Hypervisor.HypervisorType.KVM); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProvider); + when(hostVO.getPublicIpAddress()).thenReturn("192.168.100.100"); + when(tungstenProvider.getGateway()).thenReturn("192.168.100.100"); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(false); + + tungstenElement.processHostAboutToBeRemoved(1L); + verify(agentManager, times(1)).easySend(anyLong(), any(SetupTungstenVRouterCommand.class)); + } + + @Test + public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); + when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); + when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Egress); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + Ip ip = mock(Ip.class); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); + when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); + when(firewallRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(ipAddressDao.findById(anyLong())).thenReturn(ipAddressVO); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void applyFWRulesWithRevokeRuleTest() throws ResourceUnavailableException { + Network network = mock(Network.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteNetworkPolicyAnswer = mock(TungstenAnswer.class); + + when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Revoke); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(firewallRuleVO.getPurpose()).thenReturn(FirewallRule.Purpose.Firewall); + when(firewallRuleVO.getTrafficType()).thenReturn(FirewallRule.TrafficType.Ingress); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteNetworkPolicyAnswer); + + assertTrue(tungstenElement.applyFWRules(network, List.of(firewallRuleVO))); + } + + @Test + public void postStateTransitionEventWithVmStartedTest() { + StateMachine2.Transition transition = mock(StateMachine2.Transition.class); + VMInstanceVO vo = mock(VMInstanceVO.class); + Object opaque = mock(Object.class); + + when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Starting); + when(transition.getToState()).thenReturn(VirtualMachine.State.Running); + when(tungstenService.addTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); + + assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); + } + + @Test + public void postStateTransitionEventWithVmStopedTest() { + StateMachine2.Transition transition = mock(StateMachine2.Transition.class); + VMInstanceVO vo = mock(VMInstanceVO.class); + Object opaque = mock(Object.class); + + when(transition.getCurrentState()).thenReturn(VirtualMachine.State.Stopping); + when(transition.getToState()).thenReturn(VirtualMachine.State.Stopped); + when(tungstenService.removeTungstenVmSecurityGroup(any(VMInstanceVO.class))).thenReturn(true); + + assertTrue(tungstenElement.postStateTransitionEvent(transition, vo, true, opaque)); + } + + @Test + public void prepareMigrationTest() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + DeployDestination dest = mock(DeployDestination.class); + ReservationContext context = mock(ReservationContext.class); + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + HostVO hostVO = mock(HostVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(vmInstanceDao.findById(anyLong())).thenReturn(vmInstanceVO); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenVirtualMachineCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenElement.prepareMigration(nic, network, vm, dest, context)); + } + + @Test + public void rollbackMigration() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + ReservationContext src = mock(ReservationContext.class); + ReservationContext dest = mock(ReservationContext.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + HostVO hostVO = mock(HostVO.class); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(vm.getVirtualMachine()).thenReturn(virtualMachine); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + + tungstenElement.rollbackMigration(nic, network, vm, src, dest); + verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); + } + + @Test + public void commitMigration() { + NicProfile nic = mock(NicProfile.class); + Network network = mock(Network.class); + VirtualMachineProfile vm = mock(VirtualMachineProfile.class); + ReservationContext src = mock(ReservationContext.class); + ReservationContext dest = mock(ReservationContext.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + HostVO hostVO = mock(HostVO.class); + + when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); + when(vm.getVirtualMachine()).thenReturn(virtualMachine); + when(hostDao.findById(anyLong())).thenReturn(hostVO); + + tungstenElement.commitMigration(nic, network, vm, src, dest); + verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); + } +} \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java index 908fcea37b4d..d8e461fb6ae0 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java @@ -1 +1,103 @@ -// 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 org.apache.cloudstack.network.tungsten.service; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import com.cloud.agent.AgentManager; import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.dao.TungstenProviderDao; import com.cloud.network.element.TungstenProviderVO; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class TungstenFabricUtilsTest { @Mock AgentManager agentMgr; @Mock TungstenProviderDao tungstenProviderDao; TungstenFabricUtils tungstenFabricUtils; AutoCloseable closeable; @Before public void setup() { closeable = MockitoAnnotations.openMocks(this); tungstenFabricUtils = new TungstenFabricUtils(); tungstenFabricUtils.agentMgr = agentMgr; tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; } @After public void tearDown() throws Exception { closeable.close(); } @Test public void sendTungstenCommandSuccessTest() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithNullTungstenProvider() { TungstenCommand tungstenCommand = mock(TungstenCommand.class); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithNullAnswer() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithFalseAnswer() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } } \ No newline at end of file +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import com.cloud.agent.AgentManager; +import com.cloud.exception.InvalidParameterValueException; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenCommand; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class TungstenFabricUtilsTest { + @Mock + AgentManager agentMgr; + @Mock + TungstenProviderDao tungstenProviderDao; + + TungstenFabricUtils tungstenFabricUtils; + + AutoCloseable closeable; + + @Before + public void setup() { + closeable = MockitoAnnotations.openMocks(this); + tungstenFabricUtils = new TungstenFabricUtils(); + tungstenFabricUtils.agentMgr = agentMgr; + tungstenFabricUtils.tungstenProviderDao = tungstenProviderDao; + } + + @After + public void tearDown() throws Exception { + closeable.close(); + } + + @Test + public void sendTungstenCommandSuccessTest() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); + + assertEquals(tungstenAnswer, tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong())); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithNullTungstenProvider() { + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithNullAnswer() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } + + @Test(expected = InvalidParameterValueException.class) + public void sendTungstenCommandWithFalseAnswer() { + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); + TungstenCommand tungstenCommand = mock(TungstenCommand.class); + + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(agentMgr.easySend(anyLong(), any(TungstenCommand.class))).thenReturn(tungstenAnswer); + + tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); + } +} \ No newline at end of file diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java index 068757f0a136..3eb61510b09f 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java @@ -1 +1,1671 @@ -// 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 org.apache.cloudstack.network.tungsten.service; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; 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 com.cloud.agent.AgentManager; import com.cloud.agent.api.Answer; import com.cloud.configuration.Config; import com.cloud.configuration.ConfigurationManager; import com.cloud.dc.DataCenter; import com.cloud.dc.DataCenterIpAddressVO; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.Vlan; import com.cloud.dc.VlanVO; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.DataCenterIpAddressDao; import com.cloud.domain.DomainVO; import com.cloud.domain.dao.DomainDao; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.hypervisor.Hypervisor; import com.cloud.network.IpAddressManager; import com.cloud.network.Network; import com.cloud.network.NetworkModel; import com.cloud.network.NetworkService; import com.cloud.network.Networks; import com.cloud.network.TungstenGuestNetworkIpAddressVO; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.IPAddressVO; import com.cloud.network.dao.LoadBalancerCertMapDao; import com.cloud.network.dao.LoadBalancerCertMapVO; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkDetailVO; import com.cloud.network.dao.NetworkDetailsDao; import com.cloud.network.dao.NetworkVO; import com.cloud.network.dao.SslCertVO; import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; import com.cloud.network.dao.TungstenProviderDao; import com.cloud.network.element.TungstenProviderVO; import com.cloud.network.lb.LoadBalancingRule; import com.cloud.network.rules.FirewallRule; import com.cloud.network.rules.FirewallRuleVO; import com.cloud.network.security.SecurityGroup; import com.cloud.network.security.SecurityGroupManager; import com.cloud.network.security.SecurityGroupRuleVO; import com.cloud.network.security.SecurityGroupService; import com.cloud.network.security.SecurityGroupVO; import com.cloud.network.security.SecurityRule; import com.cloud.network.security.TungstenSecurityGroupRuleVO; import com.cloud.network.security.dao.SecurityGroupDao; import com.cloud.network.security.dao.SecurityGroupRuleDao; import com.cloud.network.security.dao.SecurityGroupVMMapDao; import com.cloud.network.security.dao.TungstenSecurityGroupRuleDao; import com.cloud.projects.ProjectManager; import com.cloud.projects.ProjectVO; import com.cloud.projects.dao.ProjectDao; import com.cloud.user.AccountVO; import com.cloud.user.DomainManager; import com.cloud.user.dao.AccountDao; import com.cloud.utils.db.EntityManager; import com.cloud.utils.db.Transaction; import com.cloud.utils.db.TransactionCallback; import com.cloud.utils.net.Ip; import com.cloud.utils.net.NetUtils; import com.cloud.vm.Nic; import com.cloud.vm.NicSecondaryIp; import com.cloud.vm.NicVO; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.NicSecondaryIpDao; import com.cloud.vm.dao.NicSecondaryIpVO; import net.juniper.tungsten.api.ApiObjectBase; import net.juniper.tungsten.api.ApiPropertyBase; import net.juniper.tungsten.api.ObjectReference; import net.juniper.tungsten.api.types.ActionListType; import net.juniper.tungsten.api.types.AddressGroup; import net.juniper.tungsten.api.types.AddressType; import net.juniper.tungsten.api.types.ApplicationPolicySet; import net.juniper.tungsten.api.types.FirewallPolicy; import net.juniper.tungsten.api.types.FirewallRuleEndpointType; import net.juniper.tungsten.api.types.FirewallRuleMatchTagsType; import net.juniper.tungsten.api.types.FirewallSequence; import net.juniper.tungsten.api.types.FirewallServiceGroupType; import net.juniper.tungsten.api.types.FirewallServiceType; import net.juniper.tungsten.api.types.Loadbalancer; import net.juniper.tungsten.api.types.LogicalRouter; import net.juniper.tungsten.api.types.NetworkPolicy; import net.juniper.tungsten.api.types.PolicyEntriesType; import net.juniper.tungsten.api.types.PolicyRuleType; import net.juniper.tungsten.api.types.PortType; import net.juniper.tungsten.api.types.ServiceGroup; import net.juniper.tungsten.api.types.SubnetListType; import net.juniper.tungsten.api.types.SubnetType; import net.juniper.tungsten.api.types.Tag; import net.juniper.tungsten.api.types.TagType; import net.juniper.tungsten.api.types.VirtualMachine; import net.juniper.tungsten.api.types.VirtualMachineInterface; import net.juniper.tungsten.api.types.VirtualNetwork; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.framework.messagebus.MessageBus; import org.apache.cloudstack.framework.messagebus.MessageSubscriber; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkGatewayToLogicalRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkSubnetCommand; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenPolicyRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecondaryIpAddressCommand; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecurityGroupRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenVmToSecurityGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenTagCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenAddressGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenApplicationPolicySetCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDefaultProjectCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDomainCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpPoolCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenProjectCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenRoutingLogicalRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenSecurityGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenServiceGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagCommand; import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagTypeCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenAddressGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenApplicationPolicySetCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenDomainCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpPoolCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenProjectCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenRoutingLogicalRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenSecurityGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenServiceGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagCommand; import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagTypeCommand; import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenFabricNetworkCommand; import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenLoadBalancerCommand; import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenNetworkDnsCommand; import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenSecurityGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenAddressGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenApplicationPolicySetCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNetworkCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNicCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenRoutingLogicalRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenServiceGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagTypeCommand; import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenVmCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkGatewayFromLogicalRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkSubnetCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecondaryIpAddressCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecurityGroupRuleCommand; import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenTagCommand; import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; import org.apache.cloudstack.network.tungsten.agent.api.UpdateLoadBalancerServiceInstanceCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenDefaultSecurityGroupCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerSslCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerStatsCommand; import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenVrouterConfigCommand; import org.apache.cloudstack.network.tungsten.model.TungstenLogicalRouter; import org.apache.cloudstack.network.tungsten.model.TungstenNetworkPolicy; import org.apache.cloudstack.network.tungsten.model.TungstenRule; import org.apache.cloudstack.network.tungsten.model.TungstenTag; import org.junit.After; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockedConstruction; import org.mockito.MockedStatic; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.mockito.junit.MockitoJUnitRunner; import org.springframework.test.util.ReflectionTestUtils; import java.util.Arrays; import java.util.List; @RunWith(MockitoJUnitRunner.class) public class TungstenServiceImplTest { @Mock MessageBus messageBus; @Mock ProjectDao projectDao; @Mock AccountDao accountDao; @Mock NetworkDao networkDao; @Mock ConfigurationDao configDao; @Mock IPAddressDao ipAddressDao; @Mock EntityManager entityMgr; @Mock NetworkModel networkModel; @Mock DomainDao domainDao; @Mock LoadBalancerCertMapDao lbCertMapDao; @Mock FirewallRulesDao fwRulesDao; @Mock TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; @Mock TungstenProviderDao tungstenProviderDao; @Mock TungstenFabricUtils tungstenFabricUtils; @Mock AgentManager agentMgr; @Mock HostDao hostDao; @Mock NetworkDetailsDao networkDetailsDao; @Mock SecurityGroupDao securityGroupDao; @Mock NicDao nicDao; @Mock TungstenSecurityGroupRuleDao tungstenSecurityGroupRuleDao; @Mock SecurityGroupVMMapDao securityGroupVMMapDao; @Mock SecurityGroupRuleDao securityGroupRuleDao; @Mock SecurityGroupManager securityGroupManager; @Mock NicSecondaryIpDao nicSecIpDao; @Mock DataCenterIpAddressDao dataCenterIpAddressDao; @Mock DataCenterDao dataCenterDao; @Mock IpAddressManager ipAddressManager; TungstenServiceImpl tungstenService; AutoCloseable closeable; @Before public void setup() { closeable = MockitoAnnotations.openMocks(this); tungstenService = new TungstenServiceImpl(); tungstenService.projectDao = projectDao; tungstenService.tungstenProviderDao = tungstenProviderDao; tungstenService.networkModel = networkModel; tungstenService.ipAddressDao = ipAddressDao; tungstenService.tungstenFabricUtils = tungstenFabricUtils; tungstenService.domainDao = domainDao; tungstenService.accountDao = accountDao; tungstenService.dataCenterIpAddressDao = dataCenterIpAddressDao; tungstenService.networkDetailsDao = networkDetailsDao; tungstenService.agentMgr = agentMgr; tungstenService.hostDao = hostDao; tungstenService.configDao = configDao; tungstenService.fwRulesDao = fwRulesDao; tungstenService.lbCertMapDao = lbCertMapDao; tungstenService.entityMgr = entityMgr; tungstenService.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; tungstenService.securityGroupDao = securityGroupDao; tungstenService.tungstenSecurityGroupRuleDao = tungstenSecurityGroupRuleDao; tungstenService.securityGroupVMMapDao = securityGroupVMMapDao; tungstenService.nicDao = nicDao; tungstenService.nicSecIpDao = nicSecIpDao; tungstenService.securityGroupRuleDao = securityGroupRuleDao; tungstenService.securityGroupManager = securityGroupManager; tungstenService.networkDao = networkDao; tungstenService.dataCenterDao = dataCenterDao; tungstenService.ipAddressManager = ipAddressManager; tungstenService.messageBus = messageBus; } @After public void tearDown() throws Exception { closeable.close(); } @Test public void createTungstenFloatingIpTest() throws Exception { IPAddressVO ipAddressVO = mock(IPAddressVO.class); NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer createTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); Ip ip = mock(Ip.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); when(ipAddressVO.getAddress()).thenReturn(ip); assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); } @Test public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { IPAddressVO ipAddressVO = mock(IPAddressVO.class); NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer deleteTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); } @Test public void deleteTungstenDomainTest() throws Exception { DomainVO domainVO = mock(DomainVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); } @Test public void deleteTungstenProjectTest() throws Exception { ProjectVO projectVO = mock(ProjectVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); } @Test public void addTungstenDefaultNetworkPolicyTest() { TungstenRule tungstenRule = mock(TungstenRule.class); TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); assertTrue(tungstenService.addTungstenDefaultNetworkPolicy(1L, "default-domain:default-project", "policyName", "7279ed91-314e-45be-81b4-b10395fd2ae3" , List.of(tungstenRule), 1, 1)); } @Test public void createManagementNetworkTest() { Network managementNetwork = mock(Network.class); VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); TungstenAnswer createTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenVrouterConfigCommand.class), anyLong())).thenReturn(updateTungstenGlobalVrouterConfigAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(createTungstenNetworkAnswer.getApiObjectBase()).thenReturn(managementVirtualNetwork); when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); assertTrue(tungstenService.createManagementNetwork(1L)); } @Test public void addManagementNetworkSubnetTest() { HostPodVO hostPodVO = mock(HostPodVO.class); Network managementNetwork = mock(Network.class); TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); when(managementNetwork.getCidr()).thenReturn("192.168.100.0/24"); when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); when(dataCenterIpAddressDao.mark(anyLong(), anyLong(), anyString())).thenReturn(true); assertTrue(tungstenService.addManagementNetworkSubnet(hostPodVO)); } @Test public void deleteManagementNetworkTest() { Network managementNetwork = mock(Network.class); TungstenAnswer deleteTungstenManagementPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenFabricPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenFabricPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); assertTrue(tungstenService.deleteManagementNetwork(1L)); } @Test public void removeManagementNetworkSubnetTest() { HostPodVO hostPodVO = mock(HostPodVO.class); Network managementNetwork = mock(Network.class); TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); assertTrue(tungstenService.removeManagementNetworkSubnet(hostPodVO)); verify(dataCenterIpAddressDao, times(1)).releasePodIpAddress(anyLong()); } @Test public void createPublicNetworkTest() { Network publicNetwork = mock(Network.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); TungstenAnswer createPublicNetworkAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(createPublicNetworkAnswer.getApiObjectBase()).thenReturn(virtualNetwork); when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); when(virtualNetwork.getQualifiedName()).thenReturn(Arrays.asList("default-domain", "default-project", "publicNetwork")); assertTrue(tungstenService.createPublicNetwork(1L)); } @Test public void addPublicNetworkSubnetTest() { VlanVO vlanVO = mock(VlanVO.class); Network publicNetwork = mock(Network.class); TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); when(vlanVO.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); when(vlanVO.getVlanGateway()).thenReturn("192.168.100.1"); when(vlanVO.getVlanNetmask()).thenReturn("255.255.255.0"); when(publicNetwork.getCidr()).thenReturn("192.168.100.0/24"); when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); assertTrue(tungstenService.addPublicNetworkSubnet(vlanVO)); } @Test public void deletePublicNetworkTest() { Network publicNetwork = mock(Network.class); TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); assertTrue(tungstenService.deletePublicNetwork(1L)); } @Test public void removePublicNetworkSubnetTest() { VlanVO vlanVO = mock(VlanVO.class); Network publicNetwork = mock(Network.class); TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); IPAddressVO ipAddressVO = mock(IPAddressVO.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); assertTrue(tungstenService.removePublicNetworkSubnet(vlanVO)); verify(ipAddressDao, times(1)).unassignIpAddress(anyLong()); } @Test public void allocateDnsIpAddressTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); when(tungstenGuestNetworkIpAddressDao.persist(any(TungstenGuestNetworkIpAddressVO.class))).thenReturn(tungstenGuestNetworkIpAddressVO); when(networkVO.getCidr()).thenReturn("192.168.100.0/24"); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); assertTrue(tungstenService.allocateDnsIpAddress(networkVO, null, "test")); } @Test public void deallocateDnsIpAddressTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); when(tungstenGuestNetworkIpAddressDao.findByNetworkAndGuestIpAddress(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); tungstenService.deallocateDnsIpAddress(networkVO, null, "test"); verify(tungstenGuestNetworkIpAddressDao, times(1)).expunge(anyLong()); } @Test public void subscribeTungstenEventTest() { tungstenService.subscribeTungstenEvent(); verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_ASSIGN_IPADDR_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_RELEASE_IPADDR_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_APPLY_NETWORK_POLICY_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_CREATE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_DELETE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_DELETE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_SYNC_TUNGSTEN_DB_WITH_DOMAINS_AND_PROJECTS_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_CREATE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_DELETE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_ADD_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_REMOVE_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_ASSIGN_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_RELEASE_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); } @Test public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { DomainVO domainVO = mock(DomainVO.class); ProjectVO projectVO = mock(ProjectVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer createTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer createTungstenDefaultProjectAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); when(domainDao.listAll()).thenReturn(List.of(domainVO)); when(projectDao.listAll()).thenReturn(List.of(projectVO)); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDomainCommand.class), anyLong())).thenReturn(createTungstenDomainAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenProjectCommand.class), anyLong())).thenReturn(createTungstenProjectAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDefaultProjectCommand.class), anyLong())).thenReturn(createTungstenDefaultProjectAnswer); when(domainDao.findById(anyLong())).thenReturn(domainVO); assertTrue(tungstenService.syncTungstenDbWithCloudstackProjectsAndDomains()); } @Test public void updateLoadBalancerTest() { Network network = mock(Network.class); LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); Network publicNetwork = mock(Network.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); HostVO hostVO = mock(HostVO.class); TungstenAnswer getTungstenLoadBalancerAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new MockTungstenAnswerFactory(true).get(); Answer updateTungstenLoadbalancerStatsAnswer = mock(Answer.class); Answer updateTungstenLoadbalancerSslAnswer = mock(Answer.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); SslCertVO sslCertVO = mock(SslCertVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); Ip ip = mock(Ip.class); AccountVO accountVO = mock(AccountVO.class); Loadbalancer loadbalancer = mock(Loadbalancer.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); when(hostDao.listAllHostsByZoneAndHypervisorType(anyLong(), eq(Hypervisor.HypervisorType.KVM))).thenReturn(List.of(hostVO)); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenLoadBalancerCommand.class), anyLong())).thenReturn(getTungstenLoadBalancerAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(UpdateLoadBalancerServiceInstanceCommand.class), anyLong())).thenReturn(updateLoadBalancerServiceInstanceAnswer); when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerStatsCommand.class))).thenReturn(updateTungstenLoadbalancerStatsAnswer); when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerSslCommand.class))).thenReturn(updateTungstenLoadbalancerSslAnswer); when(updateTungstenLoadbalancerStatsAnswer.getResult()).thenReturn(true); when(updateTungstenLoadbalancerSslAnswer.getResult()).thenReturn(true); when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); when(fwRulesDao.listByIpAndPurposeAndNotRevoked(anyLong(), eq(FirewallRule.Purpose.LoadBalancing))).thenReturn(List.of(firewallRuleVO)); when(lbCertMapDao.findByLbRuleId(anyLong())).thenReturn(loadBalancerCertMapVO); when(entityMgr.findById(eq(SslCertVO.class), anyLong())).thenReturn(sslCertVO); when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(loadBalancingRule.getSourceIp()).thenReturn(ip); when(accountDao.findById(anyLong())).thenReturn(accountVO); when(ip.addr()).thenReturn("192.168.100.100"); when(getTungstenLoadBalancerAnswer.getApiObjectBase()).thenReturn(loadbalancer); when(ipAddressVO.getAddress()).thenReturn(ip); when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); assertTrue(tungstenService.updateLoadBalancer(network, loadBalancingRule)); } @Test public void createTungstenSecurityGroupTest() { SecurityGroup securityGroup = mock(SecurityGroup.class); ProjectVO projectVO = mock(ProjectVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); DomainVO domainVO = mock(DomainVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenAnswer createTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(domainDao.findById(anyLong())).thenReturn(domainVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenSecurityGroupCommand.class), anyLong())).thenReturn(createTungstenSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); try (MockedStatic transactionMocked = Mockito.mockStatic(Transaction.class)) { transactionMocked.when(() -> Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); } } @Test public void deleteTungstenSecurityGroupTest() { SecurityGroup securityGroup = mock(SecurityGroup.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer deleteTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); } @Test public void addTungstenSecurityGroupEgressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); NicVO nicVO = mock(NicVO.class); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); when(tungstenSecurityGroupRuleDao.findDefaultSecurityRule(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); when(nicVO.getIPv6Address()).thenReturn("fd00::1"); when(nicVO.getSecondaryIp()).thenReturn(true); when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); when(securityRule.getAllowedNetworkId()).thenReturn(1L); assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); } @Test public void addTungstenSecurityGroupIngressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); when(securityRule.getAllowedNetworkId()).thenReturn(null); assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); } @Test public void removeTungstenSecurityGroupEgressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); NicVO nicVO = mock(NicVO.class); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); when(securityRule.getType()).thenReturn("egress"); when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); when(securityRule.getAllowedNetworkId()).thenReturn(1L); when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); when(nicVO.getIPv6Address()).thenReturn("fd00::1"); when(nicVO.getSecondaryIp()).thenReturn(true); when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); when(tungstenSecurityGroupRuleDao.findBySecurityGroupAndRuleTypeAndRuleTarget(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); } @Test public void removeTungstenSecurityGroupIngressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); when(securityRule.getAllowedNetworkId()).thenReturn(null); assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); } @Test public void addTungstenNicSecondaryIpAddressTest() { NicSecondaryIp nicSecondaryIp = mock(NicSecondaryIp.class); Network network = mock(Network.class); DataCenter dataCenter = mock(DataCenter.class); Nic nic = mock(Nic.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer addTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); when(entityMgr.findById(eq(Nic.class), anyLong())).thenReturn(nic); when(nicSecondaryIp.getIp4Address()).thenReturn("192.168.100.100"); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(addTungstenSecondaryIpAddressAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); when(network.getGuestType()).thenReturn(Network.GuestType.Shared); when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); assertTrue(tungstenService.addTungstenNicSecondaryIpAddress(1L)); } @Test public void removeTungstenNicSecondaryIpAddressTest() { NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); Network network = mock(Network.class); DataCenter dataCenter = mock(DataCenter.class); TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); when(network.getGuestType()).thenReturn(Network.GuestType.Shared); when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); when(nicSecondaryIpVO.getIp4Address()).thenReturn("192.168.100.100"); assertTrue(tungstenService.removeTungstenNicSecondaryIpAddress(nicSecondaryIpVO)); } @Test public void createTungstenPolicyTest() { TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(createTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); assertNotNull(tungstenService.createTungstenPolicy(1L, "test")); } @Test public void addTungstenPolicyRuleTest() throws Exception { TungstenAnswer addTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); ActionListType actionListType = mock(ActionListType.class); AddressType addressType = mock(AddressType.class); SubnetType subnetType = mock(SubnetType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenPolicyRuleCommand.class), anyLong())).thenReturn(addTungstenPolicyRuleAnswer); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(addTungstenPolicyRuleAnswer.getApiObjectBase()).thenReturn(networkPolicy); when(networkPolicy.getEntries()).thenReturn(policyEntriesType); when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); when(policyRuleType.getActionList()).thenReturn(actionListType); when(actionListType.getSimpleAction()).thenReturn("pass"); when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); when(addressType.getSubnet()).thenReturn(subnetType); when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); try (MockedConstruction ignored = Mockito.mockConstruction(AddTungstenPolicyRuleCommand.class, (mock, context) -> { when(mock.getUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); })) { assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, "network2", "192.168.200.200", 32, 80, 80)); } } @Test public void listTungstenPolicyTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer listTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(networkDao.findById(anyLong())).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyCommand.class), anyLong())).thenReturn(listTungstenPolicyAnswer); when(listTungstenPolicyAnswer.getTungstenModelList()).thenReturn(List.of(tungstenNetworkPolicy)); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn( List.of(virtualNetwork)); assertNotNull(tungstenService.listTungstenPolicy(1L, 2L, 3L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void listTungstenNetworkTest() { TungstenAnswer listTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNetworkCommand.class), anyLong())).thenReturn(listTungstenNetworkAnswer); doReturn(List.of(virtualNetwork)).when(listTungstenNetworkAnswer).getApiObjectBaseList(); when((virtualNetwork.getName())).thenReturn("guestNetwork1"); assertNotNull(tungstenService.listTungstenNetwork(1L, "948f421c-edde-4518-a391-09299cc25dc2", false)); } @Test public void listTungstenNicTest() { TungstenAnswer listTungstenNicAnswer = new MockTungstenAnswerFactory(true).get(); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNicCommand.class), anyLong())).thenReturn(listTungstenNicAnswer); doReturn(List.of(virtualMachineInterface)).when(listTungstenNicAnswer).getApiObjectBaseList(); assertNotNull(tungstenService.listTungstenNic(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void listTungstenVmTest() { TungstenAnswer listTungstenVmAnswer = new MockTungstenAnswerFactory(true).get(); VirtualMachine virtualMachine = mock(VirtualMachine.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenVmCommand.class), anyLong())).thenReturn(listTungstenVmAnswer); doReturn(List.of(virtualMachine)).when(listTungstenVmAnswer).getApiObjectBaseList(); assertNotNull(tungstenService.listTungstenVm(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenPolicyTest() { TungstenAnswer deleteTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void listTungstenPolicyRuleWithRuleUuidTest() { TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); ActionListType actionListType = mock(ActionListType.class); AddressType addressType = mock(AddressType.class); SubnetType subnetType = mock(SubnetType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); when(networkPolicy.getEntries()).thenReturn(policyEntriesType); when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); when(policyRuleType.getActionList()).thenReturn(actionListType); when(actionListType.getSimpleAction()).thenReturn("pass"); when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); when(addressType.getSubnet()).thenReturn(subnetType); when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void listTungstenPolicyRuleWithAllRuleTest() { TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); ActionListType actionListType = mock(ActionListType.class); AddressType addressType = mock(AddressType.class); SubnetType subnetType = mock(SubnetType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); when(networkPolicy.getEntries()).thenReturn(policyEntriesType); when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); when(policyRuleType.getActionList()).thenReturn(actionListType); when(actionListType.getSimpleAction()).thenReturn("pass"); when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); when(addressType.getSubnet()).thenReturn(subnetType); when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", null)); } @Test public void removeTungstenPolicyRuleTest() { TungstenAnswer removeTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyRuleCommand.class), anyLong())).thenReturn(removeTungstenPolicyRuleAnswer); when(removeTungstenPolicyRuleAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.removeTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void createTungstenTagTest() { TungstenAnswer createTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagCommand.class), anyLong())).thenReturn(createTungstenTagAnswer); when(createTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); when(tungstenTag.getTag()).thenReturn(tag); doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); assertNotNull(tungstenService.createTungstenTag(1L, "testTag", "testTagType")); } @Test public void createTungstenTagTypeTest() { TungstenAnswer createTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); TagType tagtype = mock(TagType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(createTungstenTagTypeAnswer.getApiObjectBase()).thenReturn(tagtype); assertNotNull(tungstenService.createTungstenTagType(1L, "testTagType")); } @Test public void listTungstenTagsTest() { TungstenAnswer listTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagCommand.class), anyLong())).thenReturn(listTungstenTagAnswer); when(listTungstenTagAnswer.getTungstenModelList()).thenReturn(List.of(tungstenTag)); when(tungstenTag.getTag()).thenReturn(tag); doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); assertNotNull(tungstenService.listTungstenTags(1L, "948f421c-edde-4518-a391-09299cc25dc2" , "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); } @Test public void listTungstenTagTypesTest() { TungstenAnswer listTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); TagType tagtype = mock(TagType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagTypeCommand.class), anyLong())).thenReturn(listTungstenTagTypeAnswer); doReturn(List.of(tagtype)).when(listTungstenTagTypeAnswer).getApiObjectBaseList(); assertNotNull(tungstenService.listTungstenTagTypes(1L, "testTagType")); } @Test public void deleteTungstenTagTest() { TungstenAnswer deleteTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenTagTypeTest() { TungstenAnswer deleteTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void applyTungstenPolicyTest() { TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); when(applyTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.applyTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", 1, 1)); } @Test public void applyTungstenTagTest() { TungstenAnswer applyTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenTagCommand.class), anyLong())).thenReturn(applyTungstenTagAnswer); when(applyTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); when(tungstenTag.getTag()).thenReturn(tag); when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); assertNotNull(tungstenService.applyTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85") , List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb" , "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); } @Test public void removeTungstenPolicyTest() { TungstenAnswer removeTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyCommand.class), anyLong())).thenReturn(removeTungstenPolicyAnswer); when(removeTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.removeTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void removeTungstenTagTest() { TungstenAnswer removeTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); VirtualMachine virtualMachine = mock(VirtualMachine.class); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenTagCommand.class), anyLong())).thenReturn(removeTungstenTagAnswer); when(removeTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); when(tungstenTag.getTag()).thenReturn(tag); when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); assertNotNull(tungstenService.removeTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85"), List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", null, "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb")); } @Test public void createTungstenAddressGroupTest() { TungstenAnswer createTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); AddressGroup addressGroup = mock(AddressGroup.class); SubnetListType subnetListType = mock(SubnetListType.class); SubnetType subnetType = mock(SubnetType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenAddressGroupCommand.class), anyLong())).thenReturn(createTungstenAddressGroupAnswer); when(createTungstenAddressGroupAnswer.getApiObjectBase()).thenReturn(addressGroup); when(addressGroup.getPrefix()).thenReturn(subnetListType); when(subnetListType.getSubnet()).thenReturn(List.of(subnetType)); assertNotNull(tungstenService.createTungstenAddressGroup(1L, "test", "192.168.100.0", 24)); } @Test public void createTungstenServiceGroupTest() { TungstenAnswer createTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); ServiceGroup serviceGroup = mock(ServiceGroup.class); FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenServiceGroupCommand.class), anyLong())).thenReturn(createTungstenServiceGroupAnswer); when(createTungstenServiceGroupAnswer.getApiObjectBase()).thenReturn(serviceGroup); when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); when(firewallServiceType.getDstPorts()).thenReturn(portType); assertNotNull(tungstenService.createTungstenServiceGroup(1L, "test", "tcp", 80, 80)); } @Test public void createTungstenFirewallRuleTest() { TungstenAnswer createTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); ActionListType actionListType = mock(ActionListType.class); ObjectReference serviceGroup = mock(ObjectReference.class); FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallRuleCommand.class), anyLong())).thenReturn(createTungstenFirewallRuleAnswer); when(createTungstenFirewallRuleAnswer.getApiObjectBase()).thenReturn(firewallRule); when(firewallRule.getActionList()).thenReturn(actionListType); when(actionListType.getSimpleAction()).thenReturn("pass"); when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); when(serviceGroup.getReferredName()).thenReturn(List.of("service")); when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); when(firewallRuleEndpointType2.getTags()).thenReturn(null); when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); assertNotNull(tungstenService.createTungstenFirewallRule(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "test", "pass", "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", null, "<>", "a329662e-1805-4a89-9b05-2b818ea35978" , "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", null, "df8e4490-2a40-4d63-a6f3-1f829ffe4fc6", 1)); } @Test public void createTungstenFirewallPolicyTest() { TungstenAnswer createTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(createTungstenFirewallPolicyAnswer); when(createTungstenFirewallPolicyAnswer.getApiObjectBase()).thenReturn(firewallPolicy); when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); assertNotNull(tungstenService.createTungstenFirewallPolicy(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652","test", 1)); } @Test public void createTungstenApplicationPolicySetTest() { TungstenAnswer createTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); ObjectReference objectReference = mock(ObjectReference.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(createTungstenApplicationPolicySetAnswer); when(createTungstenApplicationPolicySetAnswer.getApiObjectBase()).thenReturn(applicationPolicySet); when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); when(objectReference.getReferredName()).thenReturn(List.of("tag")); when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); assertNotNull(tungstenService.createTungstenApplicationPolicySet(1L, "test")); } @Test public void listTungstenApplicationPolicySetTest() { TungstenAnswer listTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); ObjectReference objectReference = mock(ObjectReference.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(listTungstenApplicationPolicySetAnswer); doReturn(List.of(applicationPolicySet)).when(listTungstenApplicationPolicySetAnswer).getApiObjectBaseList(); when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); when(objectReference.getReferredName()).thenReturn(List.of("tag")); when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); assertNotNull(tungstenService.listTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void listTungstenFirewallPolicyTest() { TungstenAnswer listTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(listTungstenFirewallPolicyAnswer); doReturn(List.of(firewallPolicy)).when(listTungstenFirewallPolicyAnswer).getApiObjectBaseList(); when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); assertNotNull(tungstenService.listTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void listTungstenFirewallRuleTest() { TungstenAnswer listTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); ActionListType actionListType = mock(ActionListType.class); ObjectReference serviceGroup = mock(ObjectReference.class); FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallRuleCommand.class), anyLong())).thenReturn(listTungstenFirewallRuleAnswer); doReturn(List.of(firewallRule)).when(listTungstenFirewallRuleAnswer).getApiObjectBaseList(); when(firewallRule.getActionList()).thenReturn(actionListType); when(actionListType.getSimpleAction()).thenReturn("pass"); when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); when(serviceGroup.getReferredName()).thenReturn(List.of("service")); when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); when(firewallRuleEndpointType2.getTags()).thenReturn(null); when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); assertNotNull(tungstenService.listTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void listTungstenAddressGroupTest() { TungstenAnswer listTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); AddressGroup addressGroup = mock(AddressGroup.class); SubnetListType subnetListType = mock(SubnetListType.class); SubnetType subnetType = mock(SubnetType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenAddressGroupCommand.class), anyLong())).thenReturn(listTungstenAddressGroupAnswer); doReturn(List.of(addressGroup)).when(listTungstenAddressGroupAnswer).getApiObjectBaseList(); when(addressGroup.getPrefix()).thenReturn(subnetListType); when(subnetListType.getSubnet()).thenReturn( List.of(subnetType)); assertNotNull(tungstenService.listTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void listTungstenServiceGroupTest() { TungstenAnswer listTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); ServiceGroup serviceGroup = mock(ServiceGroup.class); FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); PortType portType = mock(PortType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenServiceGroupCommand.class), anyLong())).thenReturn(listTungstenServiceGroupAnswer); doReturn(List.of(serviceGroup)).when(listTungstenServiceGroupAnswer).getApiObjectBaseList(); when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); when(firewallServiceType.getDstPorts()).thenReturn(portType); assertNotNull(tungstenService.listTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenApplicationPolicySetTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenFirewallPolicyTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenFirewallRuleTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenServiceGroupTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void deleteTungstenAddressGroupTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void createSharedNetworkTest() { Network network = mock(Network.class); Vlan vlan = mock(Vlan.class); AccountVO accountVO = mock(AccountVO.class); TungstenAnswer createTungstenSharedNetworkAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer addNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); HostVO hostVO = mock(HostVO.class); Answer answer = mock(Answer.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); when(accountDao.findById(anyLong())).thenReturn(accountVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenSharedNetworkAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addNetworkSubnetAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); when(network.getMode()).thenReturn(Networks.Mode.Dhcp); when(network.getCidr()).thenReturn("192.168.100.0/24"); when(vlan.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); when(vlan.getVlanGateway()).thenReturn("192.168.100.1"); when(vlan.getIp6Gateway()).thenReturn("fd00::1"); when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); when(hostDao.findByPublicIp(anyString())).thenReturn(hostVO); when(agentMgr.easySend(anyLong(), any(SetupTungstenVRouterCommand.class))).thenReturn(answer); when(answer.getResult()).thenReturn(true); when(vlan.getIp6Cidr()).thenReturn("fd00::1/64"); when(vlan.getIp6Range()).thenReturn("fd00::100-fd00::200"); when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.1.150"); when(createTungstenSharedNetworkAnswer.getApiObjectBase()).thenReturn(apiObjectBase); when(apiObjectBase.getQualifiedName()).thenReturn(List.of("network")); when(tungstenProviderVO.getGateway()).thenReturn("192.168.100.1"); assertTrue(tungstenService.createSharedNetwork(network, vlan)); } @Test public void addTungstenVmSecurityGroupTest() { VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); TungstenAnswer addTungstenVmToSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); NicVO nicVO = mock(NicVO.class); SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenVmToSecurityGroupCommand.class), anyLong())).thenReturn(addTungstenVmToSecurityGroupAnswer); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); when(nicVO.getIPv6Address()).thenReturn("fd00::1"); when(nicVO.getSecondaryIp()).thenReturn(true); when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); assertTrue(tungstenService.addTungstenVmSecurityGroup(vmInstanceVO)); } @Test public void removeTungstenVmSecurityGroupTest() { VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); NicVO nicVO = mock(NicVO.class); SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); assertTrue(tungstenService.removeTungstenVmSecurityGroup(vmInstanceVO)); } @Test public void createRoutingLogicalRouterTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.createRoutingLogicalRouter(1L, "default-domain:default-project", "testLR")); } @Test public void addNetworkGatewayToLogicalRouterTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(networkDao.findByUuid(anyString())).thenReturn(networkVO); when(ipAddressManager.acquireLastGuestIpAddress(any(Network.class))).thenReturn("192.168.100.100"); when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkGatewayToLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.addNetworkGatewayToLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void listRoutingLogicalRouterTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); when(tungstenAnswer.getTungstenModelList()).thenReturn(List.of(tungstenLogicalRouter)); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.listRoutingLogicalRouter(1L, null, "948f421c-edde-4518-a391-09299cc25dc2")); } @Test public void removeNetworkGatewayFromLogicalRouterTest() { NetworkVO networkVO = mock(NetworkVO.class); TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(networkDao.findByUuid(anyString())).thenReturn(networkVO); when(tungstenGuestNetworkIpAddressDao.findByNetworkAndLogicalRouter(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkGatewayFromLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); assertNotNull(tungstenService.removeNetworkGatewayFromLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); } @Test public void deleteLogicalRouterTest() { TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } } \ No newline at end of file +// 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 org.apache.cloudstack.network.tungsten.service; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +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 com.cloud.agent.AgentManager; +import com.cloud.agent.api.Answer; +import com.cloud.configuration.Config; +import com.cloud.configuration.ConfigurationManager; +import com.cloud.dc.DataCenter; +import com.cloud.dc.DataCenterIpAddressVO; +import com.cloud.dc.DataCenterVO; +import com.cloud.dc.HostPodVO; +import com.cloud.dc.Vlan; +import com.cloud.dc.VlanVO; +import com.cloud.dc.dao.DataCenterDao; +import com.cloud.dc.dao.DataCenterIpAddressDao; +import com.cloud.domain.DomainVO; +import com.cloud.domain.dao.DomainDao; +import com.cloud.host.HostVO; +import com.cloud.host.dao.HostDao; +import com.cloud.hypervisor.Hypervisor; +import com.cloud.network.IpAddressManager; +import com.cloud.network.Network; +import com.cloud.network.NetworkModel; +import com.cloud.network.NetworkService; +import com.cloud.network.Networks; +import com.cloud.network.TungstenGuestNetworkIpAddressVO; +import com.cloud.network.dao.FirewallRulesDao; +import com.cloud.network.dao.IPAddressDao; +import com.cloud.network.dao.IPAddressVO; +import com.cloud.network.dao.LoadBalancerCertMapDao; +import com.cloud.network.dao.LoadBalancerCertMapVO; +import com.cloud.network.dao.NetworkDao; +import com.cloud.network.dao.NetworkDetailVO; +import com.cloud.network.dao.NetworkDetailsDao; +import com.cloud.network.dao.NetworkVO; +import com.cloud.network.dao.SslCertVO; +import com.cloud.network.dao.TungstenGuestNetworkIpAddressDao; +import com.cloud.network.dao.TungstenProviderDao; +import com.cloud.network.element.TungstenProviderVO; +import com.cloud.network.lb.LoadBalancingRule; +import com.cloud.network.rules.FirewallRule; +import com.cloud.network.rules.FirewallRuleVO; +import com.cloud.network.security.SecurityGroup; +import com.cloud.network.security.SecurityGroupManager; +import com.cloud.network.security.SecurityGroupRuleVO; +import com.cloud.network.security.SecurityGroupService; +import com.cloud.network.security.SecurityGroupVO; +import com.cloud.network.security.SecurityRule; +import com.cloud.network.security.TungstenSecurityGroupRuleVO; +import com.cloud.network.security.dao.SecurityGroupDao; +import com.cloud.network.security.dao.SecurityGroupRuleDao; +import com.cloud.network.security.dao.SecurityGroupVMMapDao; +import com.cloud.network.security.dao.TungstenSecurityGroupRuleDao; +import com.cloud.projects.ProjectManager; +import com.cloud.projects.ProjectVO; +import com.cloud.projects.dao.ProjectDao; +import com.cloud.user.AccountVO; +import com.cloud.user.DomainManager; +import com.cloud.user.dao.AccountDao; +import com.cloud.utils.db.EntityManager; +import com.cloud.utils.db.Transaction; +import com.cloud.utils.db.TransactionCallback; +import com.cloud.utils.net.Ip; +import com.cloud.utils.net.NetUtils; +import com.cloud.vm.Nic; +import com.cloud.vm.NicSecondaryIp; +import com.cloud.vm.NicVO; +import com.cloud.vm.VMInstanceVO; +import com.cloud.vm.dao.NicDao; +import com.cloud.vm.dao.NicSecondaryIpDao; +import com.cloud.vm.dao.NicSecondaryIpVO; +import net.juniper.tungsten.api.ApiObjectBase; +import net.juniper.tungsten.api.ApiPropertyBase; +import net.juniper.tungsten.api.ObjectReference; +import net.juniper.tungsten.api.types.ActionListType; +import net.juniper.tungsten.api.types.AddressGroup; +import net.juniper.tungsten.api.types.AddressType; +import net.juniper.tungsten.api.types.ApplicationPolicySet; +import net.juniper.tungsten.api.types.FirewallPolicy; +import net.juniper.tungsten.api.types.FirewallRuleEndpointType; +import net.juniper.tungsten.api.types.FirewallRuleMatchTagsType; +import net.juniper.tungsten.api.types.FirewallSequence; +import net.juniper.tungsten.api.types.FirewallServiceGroupType; +import net.juniper.tungsten.api.types.FirewallServiceType; +import net.juniper.tungsten.api.types.Loadbalancer; +import net.juniper.tungsten.api.types.LogicalRouter; +import net.juniper.tungsten.api.types.NetworkPolicy; +import net.juniper.tungsten.api.types.PolicyEntriesType; +import net.juniper.tungsten.api.types.PolicyRuleType; +import net.juniper.tungsten.api.types.PortType; +import net.juniper.tungsten.api.types.ServiceGroup; +import net.juniper.tungsten.api.types.SubnetListType; +import net.juniper.tungsten.api.types.SubnetType; +import net.juniper.tungsten.api.types.Tag; +import net.juniper.tungsten.api.types.TagType; +import net.juniper.tungsten.api.types.VirtualMachine; +import net.juniper.tungsten.api.types.VirtualMachineInterface; +import net.juniper.tungsten.api.types.VirtualNetwork; +import org.apache.cloudstack.framework.config.dao.ConfigurationDao; +import org.apache.cloudstack.framework.messagebus.MessageBus; +import org.apache.cloudstack.framework.messagebus.MessageSubscriber; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkGatewayToLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenNetworkSubnetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecondaryIpAddressCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenSecurityGroupRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.AddTungstenVmToSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ApplyTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDefaultProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenDomainCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenFloatingIpPoolCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.CreateTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenDomainCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenFloatingIpPoolCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenNetworkPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenProjectCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.DeleteTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenFabricNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenLoadBalancerCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenNetworkDnsCommand; +import org.apache.cloudstack.network.tungsten.agent.api.GetTungstenSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenAddressGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenApplicationPolicySetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenFirewallRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNetworkCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenNicCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenRoutingLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenServiceGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenTagTypeCommand; +import org.apache.cloudstack.network.tungsten.agent.api.ListTungstenVmCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkGatewayFromLogicalRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenNetworkSubnetCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenPolicyRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecondaryIpAddressCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenSecurityGroupRuleCommand; +import org.apache.cloudstack.network.tungsten.agent.api.RemoveTungstenTagCommand; +import org.apache.cloudstack.network.tungsten.agent.api.SetupTungstenVRouterCommand; +import org.apache.cloudstack.network.tungsten.agent.api.TungstenAnswer; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateLoadBalancerServiceInstanceCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenDefaultSecurityGroupCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerSslCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenLoadbalancerStatsCommand; +import org.apache.cloudstack.network.tungsten.agent.api.UpdateTungstenVrouterConfigCommand; +import org.apache.cloudstack.network.tungsten.model.TungstenLogicalRouter; +import org.apache.cloudstack.network.tungsten.model.TungstenNetworkPolicy; +import org.apache.cloudstack.network.tungsten.model.TungstenRule; +import org.apache.cloudstack.network.tungsten.model.TungstenTag; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockedConstruction; +import org.mockito.MockedStatic; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.junit.MockitoJUnitRunner; +import org.springframework.test.util.ReflectionTestUtils; + +import java.util.Arrays; +import java.util.List; + +@RunWith(MockitoJUnitRunner.class) +public class TungstenServiceImplTest { + @Mock + MessageBus messageBus; + @Mock + ProjectDao projectDao; + @Mock + AccountDao accountDao; + @Mock + NetworkDao networkDao; + @Mock + ConfigurationDao configDao; + @Mock + IPAddressDao ipAddressDao; + @Mock + EntityManager entityMgr; + @Mock + NetworkModel networkModel; + @Mock + DomainDao domainDao; + @Mock + LoadBalancerCertMapDao lbCertMapDao; + @Mock + FirewallRulesDao fwRulesDao; + @Mock + TungstenGuestNetworkIpAddressDao tungstenGuestNetworkIpAddressDao; + @Mock + TungstenProviderDao tungstenProviderDao; + @Mock + TungstenFabricUtils tungstenFabricUtils; + @Mock + AgentManager agentMgr; + @Mock + HostDao hostDao; + @Mock + NetworkDetailsDao networkDetailsDao; + @Mock + SecurityGroupDao securityGroupDao; + @Mock + NicDao nicDao; + @Mock + TungstenSecurityGroupRuleDao tungstenSecurityGroupRuleDao; + @Mock + SecurityGroupVMMapDao securityGroupVMMapDao; + @Mock + SecurityGroupRuleDao securityGroupRuleDao; + @Mock + SecurityGroupManager securityGroupManager; + @Mock + NicSecondaryIpDao nicSecIpDao; + @Mock + DataCenterIpAddressDao dataCenterIpAddressDao; + @Mock + DataCenterDao dataCenterDao; + @Mock + IpAddressManager ipAddressManager; + + TungstenServiceImpl tungstenService; + + AutoCloseable closeable; + + @Before + public void setup() { + closeable = MockitoAnnotations.openMocks(this); + tungstenService = new TungstenServiceImpl(); + tungstenService.projectDao = projectDao; + tungstenService.tungstenProviderDao = tungstenProviderDao; + tungstenService.networkModel = networkModel; + tungstenService.ipAddressDao = ipAddressDao; + tungstenService.tungstenFabricUtils = tungstenFabricUtils; + tungstenService.domainDao = domainDao; + tungstenService.accountDao = accountDao; + tungstenService.dataCenterIpAddressDao = dataCenterIpAddressDao; + tungstenService.networkDetailsDao = networkDetailsDao; + tungstenService.agentMgr = agentMgr; + tungstenService.hostDao = hostDao; + tungstenService.configDao = configDao; + tungstenService.fwRulesDao = fwRulesDao; + tungstenService.lbCertMapDao = lbCertMapDao; + tungstenService.entityMgr = entityMgr; + tungstenService.tungstenGuestNetworkIpAddressDao = tungstenGuestNetworkIpAddressDao; + tungstenService.securityGroupDao = securityGroupDao; + tungstenService.tungstenSecurityGroupRuleDao = tungstenSecurityGroupRuleDao; + tungstenService.securityGroupVMMapDao = securityGroupVMMapDao; + tungstenService.nicDao = nicDao; + tungstenService.nicSecIpDao = nicSecIpDao; + tungstenService.securityGroupRuleDao = securityGroupRuleDao; + tungstenService.securityGroupManager = securityGroupManager; + tungstenService.networkDao = networkDao; + tungstenService.dataCenterDao = dataCenterDao; + tungstenService.ipAddressManager = ipAddressManager; + tungstenService.messageBus = messageBus; + } + + @After + public void tearDown() throws Exception { + closeable.close(); + } + + @Test + public void createTungstenFloatingIpTest() throws Exception { + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer createTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + Ip ip = mock(Ip.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpCommand.class), anyLong())).thenReturn(createTungstenFloatingIpAnswer); + when(ipAddressVO.getAddress()).thenReturn(ip); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "createTungstenFloatingIp", 1L, ipAddressVO)); + } + + @Test + public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer deleteTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenFloatingIp", 1L, ipAddressVO)); + } + + @Test + public void deleteTungstenDomainTest() throws Exception { + DomainVO domainVO = mock(DomainVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenDomain", domainVO)); + } + + @Test + public void deleteTungstenProjectTest() throws Exception { + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); + + assertTrue(ReflectionTestUtils.invokeMethod(tungstenService, "deleteTungstenProject", projectVO)); + } + + @Test + public void addTungstenDefaultNetworkPolicyTest() { + TungstenRule tungstenRule = mock(TungstenRule.class); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + + assertTrue(tungstenService.addTungstenDefaultNetworkPolicy(1L, "default-domain:default-project", "policyName", "7279ed91-314e-45be-81b4-b10395fd2ae3" + , List.of(tungstenRule), 1, 1)); + } + + @Test + public void createManagementNetworkTest() { + Network managementNetwork = mock(Network.class); + VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); + VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer createTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenVrouterConfigCommand.class), anyLong())).thenReturn(updateTungstenGlobalVrouterConfigAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + + when(createTungstenNetworkAnswer.getApiObjectBase()).thenReturn(managementVirtualNetwork); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); + + assertTrue(tungstenService.createManagementNetwork(1L)); + } + + @Test + public void addManagementNetworkSubnetTest() { + HostPodVO hostPodVO = mock(HostPodVO.class); + Network managementNetwork = mock(Network.class); + TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); + + when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(managementNetwork.getCidr()).thenReturn("192.168.100.0/24"); + when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); + when(dataCenterIpAddressDao.mark(anyLong(), anyLong(), anyString())).thenReturn(true); + + assertTrue(tungstenService.addManagementNetworkSubnet(hostPodVO)); + } + + @Test + public void deleteManagementNetworkTest() { + Network managementNetwork = mock(Network.class); + TungstenAnswer deleteTungstenManagementPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenFabricPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenFabricNetworkCommand.class), anyLong())).thenReturn(getTungstenFabricNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenFabricPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); + when(getTungstenFabricNetworkAnswer.getApiObjectBase()).thenReturn(fabricVirtualNetwork); + + assertTrue(tungstenService.deleteManagementNetwork(1L)); + } + + @Test + public void removeManagementNetworkSubnetTest() { + HostPodVO hostPodVO = mock(HostPodVO.class); + Network managementNetwork = mock(Network.class); + TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), + eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(managementNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Management); + when(dataCenterIpAddressDao.listByPodIdDcIdIpAddress(anyLong(), anyLong(), anyString())).thenReturn(List.of(dataCenterIpAddressVO)); + + assertTrue(tungstenService.removeManagementNetworkSubnet(hostPodVO)); + verify(dataCenterIpAddressDao, times(1)).releasePodIpAddress(anyLong()); + } + + @Test + public void createPublicNetworkTest() { + Network publicNetwork = mock(Network.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer createPublicNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(createFloatingIpPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(createPublicNetworkAnswer.getApiObjectBase()).thenReturn(virtualNetwork); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); + when(virtualNetwork.getQualifiedName()).thenReturn(Arrays.asList("default-domain", "default-project", "publicNetwork")); + + assertTrue(tungstenService.createPublicNetwork(1L)); + } + + @Test + public void addPublicNetworkSubnetTest() { + VlanVO vlanVO = mock(VlanVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(vlanVO.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); + when(vlanVO.getVlanGateway()).thenReturn("192.168.100.1"); + when(vlanVO.getVlanNetmask()).thenReturn("255.255.255.0"); + when(publicNetwork.getCidr()).thenReturn("192.168.100.0/24"); + when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(createTungstenPolicyAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(ipAddressDao.mark(anyLong(), any(Ip.class))).thenReturn(true); + + assertTrue(tungstenService.addPublicNetworkSubnet(vlanVO)); + } + + @Test + public void deletePublicNetworkTest() { + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpPoolCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpPoolAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkCommand.class), anyLong())).thenReturn(deleteTungstenNetworkAnswer); + + assertTrue(tungstenService.deletePublicNetwork(1L)); + } + + @Test + public void removePublicNetworkSubnetTest() { + VlanVO vlanVO = mock(VlanVO.class); + Network publicNetwork = mock(Network.class); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(removeTungstenNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.150"); + when(publicNetwork.getTrafficType()).thenReturn(Networks.TrafficType.Public); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + + assertTrue(tungstenService.removePublicNetworkSubnet(vlanVO)); + verify(ipAddressDao, times(1)).unassignIpAddress(anyLong()); + } + + @Test + public void allocateDnsIpAddressTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); + when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); + when(tungstenGuestNetworkIpAddressDao.persist(any(TungstenGuestNetworkIpAddressVO.class))).thenReturn(tungstenGuestNetworkIpAddressVO); + when(networkVO.getCidr()).thenReturn("192.168.100.0/24"); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); + + assertTrue(tungstenService.allocateDnsIpAddress(networkVO, null, "test")); + } + + @Test + public void deallocateDnsIpAddressTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(networkVO.getTrafficType()).thenReturn(Networks.TrafficType.Guest); + when(networkVO.getGuestType()).thenReturn(Network.GuestType.Isolated); + when(tungstenGuestNetworkIpAddressDao.findByNetworkAndGuestIpAddress(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.100.100"); + + tungstenService.deallocateDnsIpAddress(networkVO, null, "test"); + verify(tungstenGuestNetworkIpAddressDao, times(1)).expunge(anyLong()); + } + + @Test + public void subscribeTungstenEventTest() { + tungstenService.subscribeTungstenEvent(); + + verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_ASSIGN_IPADDR_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(IpAddressManager.MESSAGE_RELEASE_IPADDR_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_APPLY_NETWORK_POLICY_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_VLAN_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_CREATE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ConfigurationManager.MESSAGE_DELETE_POD_IP_RANGE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_CREATE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(DomainManager.MESSAGE_DELETE_TUNGSTEN_DOMAIN_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_CREATE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(ProjectManager.MESSAGE_DELETE_TUNGSTEN_PROJECT_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(TungstenService.MESSAGE_SYNC_TUNGSTEN_DB_WITH_DOMAINS_AND_PROJECTS_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_CREATE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_DELETE_TUNGSTEN_SECURITY_GROUP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_ADD_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(SecurityGroupService.MESSAGE_REMOVE_SECURITY_GROUP_RULE_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_ASSIGN_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); + verify(messageBus, times(1)).subscribe(eq(NetworkService.MESSAGE_RELEASE_NIC_SECONDARY_IP_EVENT), any(MessageSubscriber.class)); + } + + @Test + public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { + DomainVO domainVO = mock(DomainVO.class); + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer createTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenDefaultProjectAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + + when(domainDao.listAll()).thenReturn(List.of(domainVO)); + when(projectDao.listAll()).thenReturn(List.of(projectVO)); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDomainCommand.class), anyLong())).thenReturn(createTungstenDomainAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenProjectCommand.class), anyLong())).thenReturn(createTungstenProjectAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateTungstenDefaultSecurityGroupCommand.class), anyLong())).thenReturn(updateTungstenDefaultSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenDefaultProjectCommand.class), anyLong())).thenReturn(createTungstenDefaultProjectAnswer); + when(domainDao.findById(anyLong())).thenReturn(domainVO); + + assertTrue(tungstenService.syncTungstenDbWithCloudstackProjectsAndDomains()); + } + + @Test + public void updateLoadBalancerTest() { + Network network = mock(Network.class); + LoadBalancingRule loadBalancingRule = mock(LoadBalancingRule.class); + Network publicNetwork = mock(Network.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + HostVO hostVO = mock(HostVO.class); + TungstenAnswer getTungstenLoadBalancerAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new MockTungstenAnswerFactory(true).get(); + Answer updateTungstenLoadbalancerStatsAnswer = mock(Answer.class); + Answer updateTungstenLoadbalancerSslAnswer = mock(Answer.class); + FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); + LoadBalancerCertMapVO loadBalancerCertMapVO = mock(LoadBalancerCertMapVO.class); + SslCertVO sslCertVO = mock(SslCertVO.class); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + Ip ip = mock(Ip.class); + AccountVO accountVO = mock(AccountVO.class); + Loadbalancer loadbalancer = mock(Loadbalancer.class); + + when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); + when(ipAddressDao.findByIpAndDcId(anyLong(), anyString())).thenReturn(ipAddressVO); + when(hostDao.listAllHostsByZoneAndHypervisorType(anyLong(), eq(Hypervisor.HypervisorType.KVM))).thenReturn(List.of(hostVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenLoadBalancerCommand.class), anyLong())).thenReturn(getTungstenLoadBalancerAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(UpdateLoadBalancerServiceInstanceCommand.class), anyLong())).thenReturn(updateLoadBalancerServiceInstanceAnswer); + when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerStatsCommand.class))).thenReturn(updateTungstenLoadbalancerStatsAnswer); + when(agentMgr.easySend(anyLong(), any(UpdateTungstenLoadbalancerSslCommand.class))).thenReturn(updateTungstenLoadbalancerSslAnswer); + when(updateTungstenLoadbalancerStatsAnswer.getResult()).thenReturn(true); + when(updateTungstenLoadbalancerSslAnswer.getResult()).thenReturn(true); + when(configDao.getValue(Config.NetworkLBHaproxyStatsVisbility.key())).thenReturn("enabled"); + when(fwRulesDao.listByIpAndPurposeAndNotRevoked(anyLong(), eq(FirewallRule.Purpose.LoadBalancing))).thenReturn(List.of(firewallRuleVO)); + when(lbCertMapDao.findByLbRuleId(anyLong())).thenReturn(loadBalancerCertMapVO); + when(entityMgr.findById(eq(SslCertVO.class), anyLong())).thenReturn(sslCertVO); + when(tungstenGuestNetworkIpAddressDao.findByNetworkIdAndPublicIp(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(loadBalancingRule.getSourceIp()).thenReturn(ip); + when(accountDao.findById(anyLong())).thenReturn(accountVO); + when(ip.addr()).thenReturn("192.168.100.100"); + when(getTungstenLoadBalancerAnswer.getApiObjectBase()).thenReturn(loadbalancer); + when(ipAddressVO.getAddress()).thenReturn(ip); + when(tungstenGuestNetworkIpAddressVO.getGuestIpAddress()).thenReturn(ip); + + assertTrue(tungstenService.updateLoadBalancer(network, loadBalancingRule)); + } + + @Test + public void createTungstenSecurityGroupTest() { + SecurityGroup securityGroup = mock(SecurityGroup.class); + ProjectVO projectVO = mock(ProjectVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + DomainVO domainVO = mock(DomainVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer createTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(domainDao.findById(anyLong())).thenReturn(domainVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenSecurityGroupCommand.class), anyLong())).thenReturn(createTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + + try (MockedStatic transactionMocked = Mockito.mockStatic(Transaction.class)) { + transactionMocked.when(() -> Transaction.execute(any(TransactionCallback.class))).thenReturn(List.of(tungstenSecurityGroupRuleVO)); + assertTrue(tungstenService.createTungstenSecurityGroup(securityGroup)); + } + } + + @Test + public void deleteTungstenSecurityGroupTest() { + SecurityGroup securityGroup = mock(SecurityGroup.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer deleteTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); + + assertTrue(tungstenService.deleteTungstenSecurityGroup(securityGroup)); + } + + @Test + public void addTungstenSecurityGroupEgressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + NicVO nicVO = mock(NicVO.class); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); + when(tungstenSecurityGroupRuleDao.findDefaultSecurityRule(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); + when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); + when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(securityRule.getAllowedNetworkId()).thenReturn(1L); + + assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); + } + + @Test + public void addTungstenSecurityGroupIngressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); + when(securityRule.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(securityRule.getEndPort()).thenReturn(NetUtils.PORT_RANGE_MIN); + when(securityRule.getAllowedNetworkId()).thenReturn(null); + + assertTrue(tungstenService.addTungstenSecurityGroupRule(List.of(securityRule))); + } + + @Test + public void removeTungstenSecurityGroupEgressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NicVO nicVO = mock(NicVO.class); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.EgressRule); + when(securityRule.getType()).thenReturn("egress"); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(securityRule.getAllowedNetworkId()).thenReturn(1L); + when(securityGroupVMMapDao.listVmIdsBySecurityGroup(anyLong())).thenReturn(List.of(1L)); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(tungstenSecurityGroupRuleDao.findBySecurityGroupAndRuleTypeAndRuleTarget(anyLong(), anyString(), anyString())).thenReturn(tungstenSecurityGroupRuleVO); + + assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); + } + + @Test + public void removeTungstenSecurityGroupIngressRuleTest() { + SecurityRule securityRule = mock(SecurityRule.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(securityRule.getRuleType()).thenReturn(SecurityRule.SecurityRuleType.IngressRule); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + when(securityRule.getAllowedNetworkId()).thenReturn(null); + + assertTrue(tungstenService.removeTungstenSecurityGroupRule(securityRule)); + } + + @Test + public void addTungstenNicSecondaryIpAddressTest() { + NicSecondaryIp nicSecondaryIp = mock(NicSecondaryIp.class); + Network network = mock(Network.class); + DataCenter dataCenter = mock(DataCenter.class); + Nic nic = mock(Nic.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer addTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); + when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); + when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); + when(entityMgr.findById(eq(Nic.class), anyLong())).thenReturn(nic); + when(nicSecondaryIp.getIp4Address()).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(addTungstenSecondaryIpAddressAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); + when(network.getGuestType()).thenReturn(Network.GuestType.Shared); + when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); + when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + + assertTrue(tungstenService.addTungstenNicSecondaryIpAddress(1L)); + } + + @Test + public void removeTungstenNicSecondaryIpAddressTest() { + NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); + Network network = mock(Network.class); + DataCenter dataCenter = mock(DataCenter.class); + TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); + when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecondaryIpAddressCommand.class), anyLong())).thenReturn(removeTungstenSecondaryIpAddressAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(removeTungstenSecurityGroupRuleAnswer); + + when(dataCenter.isSecurityGroupEnabled()).thenReturn(true); + when(network.getGuestType()).thenReturn(Network.GuestType.Shared); + when(tungstenSecurityGroupRuleDao.listByRuleTarget(anyString())).thenReturn(List.of(tungstenSecurityGroupRuleVO)); + when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); + when(tungstenSecurityGroupRuleDao.expunge(anyLong())).thenReturn(true); + when(nicSecondaryIpVO.getIp4Address()).thenReturn("192.168.100.100"); + + assertTrue(tungstenService.removeTungstenNicSecondaryIpAddress(nicSecondaryIpVO)); + } + + @Test + public void createTungstenPolicyTest() { + TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(createTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + + assertNotNull(tungstenService.createTungstenPolicy(1L, "test")); + } + + @Test + public void addTungstenPolicyRuleTest() throws Exception { + TungstenAnswer addTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenPolicyRuleCommand.class), anyLong())).thenReturn(addTungstenPolicyRuleAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(addTungstenPolicyRuleAnswer.getApiObjectBase()).thenReturn(networkPolicy); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + + try (MockedConstruction ignored = + Mockito.mockConstruction(AddTungstenPolicyRuleCommand.class, (mock, context) -> { + when(mock.getUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + })) { + + assertNotNull(tungstenService.addTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "pass", + "<>", "tcp", "network1", "192.168.100.100", 32, 80, 80, + "network2", "192.168.200.200", 32, 80, 80)); + } + } + + @Test + public void listTungstenPolicyTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer listTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findById(anyLong())).thenReturn(networkVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyCommand.class), anyLong())).thenReturn(listTungstenPolicyAnswer); + when(listTungstenPolicyAnswer.getTungstenModelList()).thenReturn(List.of(tungstenNetworkPolicy)); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn( + List.of(virtualNetwork)); + + assertNotNull(tungstenService.listTungstenPolicy(1L, 2L, 3L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenNetworkTest() { + TungstenAnswer listTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNetworkCommand.class), anyLong())).thenReturn(listTungstenNetworkAnswer); + doReturn(List.of(virtualNetwork)).when(listTungstenNetworkAnswer).getApiObjectBaseList(); + when((virtualNetwork.getName())).thenReturn("guestNetwork1"); + + assertNotNull(tungstenService.listTungstenNetwork(1L, "948f421c-edde-4518-a391-09299cc25dc2", false)); + } + + @Test + public void listTungstenNicTest() { + TungstenAnswer listTungstenNicAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenNicCommand.class), anyLong())).thenReturn(listTungstenNicAnswer); + doReturn(List.of(virtualMachineInterface)).when(listTungstenNicAnswer).getApiObjectBaseList(); + + assertNotNull(tungstenService.listTungstenNic(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenVmTest() { + TungstenAnswer listTungstenVmAnswer = new MockTungstenAnswerFactory(true).get(); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenVmCommand.class), anyLong())).thenReturn(listTungstenVmAnswer); + doReturn(List.of(virtualMachine)).when(listTungstenVmAnswer).getApiObjectBaseList(); + + assertNotNull(tungstenService.listTungstenVm(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenPolicyTest() { + TungstenAnswer deleteTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); + + assertTrue(tungstenService.deleteTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenPolicyRuleWithRuleUuidTest() { + TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); + doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + + assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listTungstenPolicyRuleWithAllRuleTest() { + TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); + PolicyRuleType policyRuleType = mock(PolicyRuleType.class); + ActionListType actionListType = mock(ActionListType.class); + AddressType addressType = mock(AddressType.class); + SubnetType subnetType = mock(SubnetType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenPolicyRuleCommand.class), anyLong())).thenReturn(listTungstenPolicyRuleAnswer); + doReturn(networkPolicy).when(listTungstenPolicyRuleAnswer).getApiObjectBase(); + when(networkPolicy.getEntries()).thenReturn(policyEntriesType); + when(policyEntriesType.getPolicyRule()).thenReturn(List.of(policyRuleType)); + when(policyRuleType.getRuleUuid()).thenReturn("8b4637b6-5629-46de-8fb2-d0b0502bfa85"); + when(policyRuleType.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(policyRuleType.getSrcAddresses()).thenReturn(List.of(addressType)); + when(addressType.getSubnet()).thenReturn(subnetType); + when(policyRuleType.getSrcPorts()).thenReturn(List.of(portType)); + when(policyRuleType.getDstAddresses()).thenReturn(List.of(addressType)); + when(policyRuleType.getDstPorts()).thenReturn(List.of(portType)); + + assertNotNull(tungstenService.listTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", null)); + } + + @Test + public void removeTungstenPolicyRuleTest() { + TungstenAnswer removeTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyRuleCommand.class), anyLong())).thenReturn(removeTungstenPolicyRuleAnswer); + when(removeTungstenPolicyRuleAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.removeTungstenPolicyRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void createTungstenTagTest() { + TungstenAnswer createTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagCommand.class), anyLong())).thenReturn(createTungstenTagAnswer); + when(createTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); + doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); + doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); + doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); + + assertNotNull(tungstenService.createTungstenTag(1L, "testTag", "testTagType")); + } + + @Test + public void createTungstenTagTypeTest() { + TungstenAnswer createTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + TagType tagtype = mock(TagType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenTagTypeCommand.class), anyLong())).thenReturn(createTungstenTagTypeAnswer); + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(createTungstenTagTypeAnswer.getApiObjectBase()).thenReturn(tagtype); + + assertNotNull(tungstenService.createTungstenTagType(1L, "testTagType")); + } + + @Test + public void listTungstenTagsTest() { + TungstenAnswer listTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagCommand.class), anyLong())).thenReturn(listTungstenTagAnswer); + when(listTungstenTagAnswer.getTungstenModelList()).thenReturn(List.of(tungstenTag)); + when(tungstenTag.getTag()).thenReturn(tag); + doReturn(List.of(virtualNetwork)).when(tungstenTag).getVirtualNetworkList(); + doReturn(List.of(virtualMachine)).when(tungstenTag).getVirtualMachineList(); + doReturn(List.of(virtualMachineInterface)).when(tungstenTag).getVirtualMachineInterfaceList(); + doReturn(List.of(networkPolicy)).when(tungstenTag).getNetworkPolicyList(); + + assertNotNull(tungstenService.listTungstenTags(1L, "948f421c-edde-4518-a391-09299cc25dc2" + , "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", "a329662e-1805-4a89-9b05-2b818ea35978", + "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); + } + + @Test + public void listTungstenTagTypesTest() { + TungstenAnswer listTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + TagType tagtype = mock(TagType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenTagTypeCommand.class), anyLong())).thenReturn(listTungstenTagTypeAnswer); + doReturn(List.of(tagtype)).when(listTungstenTagTypeAnswer).getApiObjectBaseList(); + + assertNotNull(tungstenService.listTungstenTagTypes(1L, "testTagType")); + } + + @Test + public void deleteTungstenTagTest() { + TungstenAnswer deleteTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); + + assertTrue(tungstenService.deleteTungstenTag(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenTagTypeTest() { + TungstenAnswer deleteTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); + + assertTrue(tungstenService.deleteTungstenTagType(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void applyTungstenPolicyTest() { + TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(applyTungstenPolicyAnswer); + when(applyTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.applyTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85", 1, 1)); + } + + @Test + public void applyTungstenTagTest() { + TungstenAnswer applyTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ApplyTungstenTagCommand.class), anyLong())).thenReturn(applyTungstenTagAnswer); + when(applyTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); + when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); + when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); + + assertNotNull(tungstenService.applyTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85") + , List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb" + , "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652")); + } + + @Test + public void removeTungstenPolicyTest() { + TungstenAnswer removeTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenPolicyCommand.class), anyLong())).thenReturn(removeTungstenPolicyAnswer); + when(removeTungstenPolicyAnswer.getTungstenModel()).thenReturn(tungstenNetworkPolicy); + when(tungstenNetworkPolicy.getNetworkPolicy()).thenReturn(networkPolicy); + when(tungstenNetworkPolicy.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.removeTungstenPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void removeTungstenTagTest() { + TungstenAnswer removeTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenTag tungstenTag = mock(TungstenTag.class); + Tag tag = mock(Tag.class); + NetworkPolicy networkPolicy = mock(NetworkPolicy.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + VirtualMachine virtualMachine = mock(VirtualMachine.class); + VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenTagCommand.class), anyLong())).thenReturn(removeTungstenTagAnswer); + when(removeTungstenTagAnswer.getTungstenModel()).thenReturn(tungstenTag); + when(tungstenTag.getTag()).thenReturn(tag); + when(tungstenTag.getNetworkPolicyList()).thenReturn(List.of(networkPolicy)); + when(tungstenTag.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + when(tungstenTag.getVirtualMachineList()).thenReturn(List.of(virtualMachine)); + when(tungstenTag.getVirtualMachineInterfaceList()).thenReturn(List.of(virtualMachineInterface)); + + assertNotNull(tungstenService.removeTungstenTag(1L, List.of("948f421c-edde-4518-a391-09299cc25dc2"), + List.of("8b4637b6-5629-46de-8fb2-d0b0502bfa85"), + List.of("8d097a79-a38d-4db4-8a41-16f15d9c5afa"), "a329662e-1805-4a89-9b05-2b818ea35978", null, + "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb")); + } + + @Test + public void createTungstenAddressGroupTest() { + TungstenAnswer createTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); + AddressGroup addressGroup = mock(AddressGroup.class); + SubnetListType subnetListType = mock(SubnetListType.class); + SubnetType subnetType = mock(SubnetType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenAddressGroupCommand.class), anyLong())).thenReturn(createTungstenAddressGroupAnswer); + when(createTungstenAddressGroupAnswer.getApiObjectBase()).thenReturn(addressGroup); + when(addressGroup.getPrefix()).thenReturn(subnetListType); + when(subnetListType.getSubnet()).thenReturn(List.of(subnetType)); + + assertNotNull(tungstenService.createTungstenAddressGroup(1L, "test", "192.168.100.0", 24)); + } + + @Test + public void createTungstenServiceGroupTest() { + TungstenAnswer createTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); + ServiceGroup serviceGroup = mock(ServiceGroup.class); + FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); + FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenServiceGroupCommand.class), anyLong())).thenReturn(createTungstenServiceGroupAnswer); + when(createTungstenServiceGroupAnswer.getApiObjectBase()).thenReturn(serviceGroup); + when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); + when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); + when(firewallServiceType.getDstPorts()).thenReturn(portType); + + assertNotNull(tungstenService.createTungstenServiceGroup(1L, "test", "tcp", 80, 80)); + } + + @Test + public void createTungstenFirewallRuleTest() { + TungstenAnswer createTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); + net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); + ActionListType actionListType = mock(ActionListType.class); + ObjectReference serviceGroup = mock(ObjectReference.class); + FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); + FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); + FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallRuleCommand.class), anyLong())).thenReturn(createTungstenFirewallRuleAnswer); + when(createTungstenFirewallRuleAnswer.getApiObjectBase()).thenReturn(firewallRule); + when(firewallRule.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); + when(serviceGroup.getReferredName()).thenReturn(List.of("service")); + when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); + when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); + when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); + when(firewallRuleEndpointType2.getTags()).thenReturn(null); + when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); + when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); + + assertNotNull(tungstenService.createTungstenFirewallRule(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652", "test", "pass", "948f421c-edde-4518-a391-09299cc25dc2", + "8b4637b6-5629-46de-8fb2-d0b0502bfa85", "8d097a79-a38d-4db4-8a41-16f15d9c5afa", null, "<>", "a329662e-1805-4a89-9b05-2b818ea35978" + , "d5e3f5c5-97ed-41b6-9b6f-7f696b9eddeb", null, "df8e4490-2a40-4d63-a6f3-1f829ffe4fc6", 1)); + } + + @Test + public void createTungstenFirewallPolicyTest() { + TungstenAnswer createTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(createTungstenFirewallPolicyAnswer); + when(createTungstenFirewallPolicyAnswer.getApiObjectBase()).thenReturn(firewallPolicy); + when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.createTungstenFirewallPolicy(1L, "f5ba12c8-d4c5-4c20-a57d-67a9b6fca652","test", 1)); + } + + @Test + public void createTungstenApplicationPolicySetTest() { + TungstenAnswer createTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + ObjectReference objectReference = mock(ObjectReference.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(createTungstenApplicationPolicySetAnswer); + when(createTungstenApplicationPolicySetAnswer.getApiObjectBase()).thenReturn(applicationPolicySet); + when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); + when(objectReference.getReferredName()).thenReturn(List.of("tag")); + when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.createTungstenApplicationPolicySet(1L, "test")); + } + + @Test + public void listTungstenApplicationPolicySetTest() { + TungstenAnswer listTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); + ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); + ObjectReference objectReference = mock(ObjectReference.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(listTungstenApplicationPolicySetAnswer); + doReturn(List.of(applicationPolicySet)).when(listTungstenApplicationPolicySetAnswer).getApiObjectBaseList(); + when(applicationPolicySet.getTag()).thenReturn(List.of(objectReference)); + when(objectReference.getReferredName()).thenReturn(List.of("tag")); + when(applicationPolicySet.getFirewallPolicy()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.listTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenFirewallPolicyTest() { + TungstenAnswer listTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); + ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(listTungstenFirewallPolicyAnswer); + doReturn(List.of(firewallPolicy)).when(listTungstenFirewallPolicyAnswer).getApiObjectBaseList(); + when(firewallPolicy.getFirewallRule()).thenReturn(List.of(firewallSequenceObjectReference)); + when(firewallSequenceObjectReference.getReferredName()).thenReturn(List.of("firewallrule")); + + assertNotNull(tungstenService.listTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listTungstenFirewallRuleTest() { + TungstenAnswer listTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); + net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); + ActionListType actionListType = mock(ActionListType.class); + ObjectReference serviceGroup = mock(ObjectReference.class); + FirewallRuleEndpointType firewallRuleEndpointType1 = mock(FirewallRuleEndpointType.class); + FirewallRuleEndpointType firewallRuleEndpointType2 = mock(FirewallRuleEndpointType.class); + FirewallRuleMatchTagsType firewallRuleMatchTagsType = mock(FirewallRuleMatchTagsType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenFirewallRuleCommand.class), anyLong())).thenReturn(listTungstenFirewallRuleAnswer); + doReturn(List.of(firewallRule)).when(listTungstenFirewallRuleAnswer).getApiObjectBaseList(); + when(firewallRule.getActionList()).thenReturn(actionListType); + when(actionListType.getSimpleAction()).thenReturn("pass"); + when(firewallRule.getServiceGroup()).thenReturn(List.of(serviceGroup)); + when(serviceGroup.getReferredName()).thenReturn(List.of("service")); + when(firewallRule.getEndpoint1()).thenReturn(firewallRuleEndpointType1); + when(firewallRule.getEndpoint2()).thenReturn(firewallRuleEndpointType2); + when(firewallRuleEndpointType1.getTags()).thenReturn(List.of("tag")); + when(firewallRuleEndpointType2.getTags()).thenReturn(null); + when(firewallRuleEndpointType2.getAddressGroup()).thenReturn("address:group"); + when(firewallRule.getMatchTags()).thenReturn(firewallRuleMatchTagsType); + + assertNotNull(tungstenService.listTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2", + "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listTungstenAddressGroupTest() { + TungstenAnswer listTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); + AddressGroup addressGroup = mock(AddressGroup.class); + SubnetListType subnetListType = mock(SubnetListType.class); + SubnetType subnetType = mock(SubnetType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenAddressGroupCommand.class), anyLong())).thenReturn(listTungstenAddressGroupAnswer); + doReturn(List.of(addressGroup)).when(listTungstenAddressGroupAnswer).getApiObjectBaseList(); + when(addressGroup.getPrefix()).thenReturn(subnetListType); + when(subnetListType.getSubnet()).thenReturn( + List.of(subnetType)); + + assertNotNull(tungstenService.listTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void listTungstenServiceGroupTest() { + TungstenAnswer listTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); + ServiceGroup serviceGroup = mock(ServiceGroup.class); + FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); + FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); + PortType portType = mock(PortType.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenServiceGroupCommand.class), anyLong())).thenReturn(listTungstenServiceGroupAnswer); + doReturn(List.of(serviceGroup)).when(listTungstenServiceGroupAnswer).getApiObjectBaseList(); + when(serviceGroup.getFirewallServiceList()).thenReturn(firewallServiceGroupType); + when(firewallServiceGroupType.getFirewallService()).thenReturn(List.of(firewallServiceType)); + when(firewallServiceType.getDstPorts()).thenReturn(portType); + + assertNotNull(tungstenService.listTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenApplicationPolicySetTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenApplicationPolicySet(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenFirewallPolicyTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenFirewallPolicy(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenFirewallRuleTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenFirewallRule(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenServiceGroupTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenServiceGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void deleteTungstenAddressGroupTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteTungstenAddressGroup(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void createSharedNetworkTest() { + Network network = mock(Network.class); + Vlan vlan = mock(Vlan.class); + AccountVO accountVO = mock(AccountVO.class); + TungstenAnswer createTungstenSharedNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + HostVO hostVO = mock(HostVO.class); + Answer answer = mock(Answer.class); + IPAddressVO ipAddressVO = mock(IPAddressVO.class); + ApiObjectBase apiObjectBase = mock(ApiObjectBase.class); + + when(accountDao.findById(anyLong())).thenReturn(accountVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createTungstenSharedNetworkAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkSubnetCommand.class), anyLong())).thenReturn(addNetworkSubnetAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); + when(network.getMode()).thenReturn(Networks.Mode.Dhcp); + when(network.getCidr()).thenReturn("192.168.100.0/24"); + when(vlan.getIpRange()).thenReturn("192.168.100.100-192.168.100.200"); + when(vlan.getVlanGateway()).thenReturn("192.168.100.1"); + when(vlan.getIp6Gateway()).thenReturn("fd00::1"); + when(networkDetailsDao.persist(any(NetworkDetailVO.class))).thenReturn(networkDetailVO); + when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); + when(hostDao.findByPublicIp(anyString())).thenReturn(hostVO); + when(agentMgr.easySend(anyLong(), any(SetupTungstenVRouterCommand.class))).thenReturn(answer); + when(answer.getResult()).thenReturn(true); + when(vlan.getIp6Cidr()).thenReturn("fd00::1/64"); + when(vlan.getIp6Range()).thenReturn("fd00::100-fd00::200"); + when(getTungstenNetworkDnsAnswer.getDetails()).thenReturn("192.168.1.150"); + when(createTungstenSharedNetworkAnswer.getApiObjectBase()).thenReturn(apiObjectBase); + when(apiObjectBase.getQualifiedName()).thenReturn(List.of("network")); + when(tungstenProviderVO.getGateway()).thenReturn("192.168.100.1"); + + assertTrue(tungstenService.createSharedNetwork(network, vlan)); + } + + @Test + public void addTungstenVmSecurityGroupTest() { + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); + TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); + TungstenAnswer addTungstenVmToSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); + NicVO nicVO = mock(NicVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + when(securityGroupManager.getSecurityGroupsForVm(anyLong())).thenReturn(List.of(securityGroupVO)); + when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); + when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenSecurityGroupCommand.class), anyLong())).thenReturn(getTungstenSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenVmToSecurityGroupCommand.class), anyLong())).thenReturn(addTungstenVmToSecurityGroupAnswer); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenSecurityGroupRuleCommand.class), anyLong())).thenReturn(addTungstenSecurityGroupRuleAnswer); + when(getTungstenSecurityGroupAnswer.getApiObjectBase()).thenReturn(securityGroup); + when(nicDao.findDefaultNicForVM(anyLong())).thenReturn(nicVO); + when(nicVO.getBroadcastUri()).thenReturn(Networks.BroadcastDomainType.TUNGSTEN.toUri("tf")); + when(securityGroupRuleDao.listByAllowedSecurityGroupId(anyLong())).thenReturn(List.of(securityGroupRuleVO)); + when(nicVO.getIPv4Address()).thenReturn("192.168.100.100"); + when(nicVO.getIPv6Address()).thenReturn("fd00::1"); + when(nicVO.getSecondaryIp()).thenReturn(true); + when(nicSecIpDao.getSecondaryIpAddressesForNic(anyLong())).thenReturn(List.of("192.168.100.200")); + when(securityGroupRuleVO.getProtocol()).thenReturn(NetUtils.ALL_PROTO); + when(tungstenSecurityGroupRuleDao.persist(any(TungstenSecurityGroupRuleVO.class))).thenReturn(tungstenSecurityGroupRuleVO); + + assertTrue(tungstenService.addTungstenVmSecurityGroup(vmInstanceVO)); + } + + @Test + public void removeTungstenVmSecurityGroupTest() { + VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); + TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + NicVO nicVO = mock(NicVO.class); + SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); + + assertTrue(tungstenService.removeTungstenVmSecurityGroup(vmInstanceVO)); + } + + @Test + public void createRoutingLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.createRoutingLogicalRouter(1L, "default-domain:default-project", "testLR")); + } + + @Test + public void addNetworkGatewayToLogicalRouterTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findByUuid(anyString())).thenReturn(networkVO); + when(ipAddressManager.acquireLastGuestIpAddress(any(Network.class))).thenReturn("192.168.100.100"); + when(tungstenFabricUtils.sendTungstenCommand(any(AddTungstenNetworkGatewayToLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.addNetworkGatewayToLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void listRoutingLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(tungstenFabricUtils.sendTungstenCommand(any(ListTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModelList()).thenReturn(List.of(tungstenLogicalRouter)); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.listRoutingLogicalRouter(1L, null, "948f421c-edde-4518-a391-09299cc25dc2")); + } + + @Test + public void removeNetworkGatewayFromLogicalRouterTest() { + NetworkVO networkVO = mock(NetworkVO.class); + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); + TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); + LogicalRouter logicalRouter = mock(LogicalRouter.class); + VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); + DataCenterVO dataCenterVO = mock(DataCenterVO.class); + + when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); + when(networkDao.findByUuid(anyString())).thenReturn(networkVO); + when(tungstenGuestNetworkIpAddressDao.findByNetworkAndLogicalRouter(anyLong(), anyString())).thenReturn(tungstenGuestNetworkIpAddressVO); + when(tungstenFabricUtils.sendTungstenCommand(any(RemoveTungstenNetworkGatewayFromLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + when(tungstenAnswer.getTungstenModel()).thenReturn(tungstenLogicalRouter); + when(tungstenLogicalRouter.getLogicalRouter()).thenReturn(logicalRouter); + when(tungstenLogicalRouter.getVirtualNetworkList()).thenReturn(List.of(virtualNetwork)); + + assertNotNull(tungstenService.removeNetworkGatewayFromLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2", "8b4637b6-5629-46de-8fb2-d0b0502bfa85")); + } + + @Test + public void deleteLogicalRouterTest() { + TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + + when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); + + assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); + } +} \ No newline at end of file From 5deb5dd771cac97fe34d4afd9245b26c81a0baf9 Mon Sep 17 00:00:00 2001 From: gzhao9 <74684732+gzhao9@users.noreply.github.com> Date: Thu, 2 Nov 2023 12:27:54 -0400 Subject: [PATCH 12/12] Add static methods to avoid duplicate creation of new --- .../service/MockTungstenAnswerFactory.java | 5 +- .../tungsten/service/TungstenElementTest.java | 64 +++--- .../service/TungstenFabricUtilsTest.java | 6 +- .../service/TungstenServiceImplTest.java | 206 +++++++++--------- 4 files changed, 142 insertions(+), 139 deletions(-) diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java index 0eeaae26e8cd..587a01dabb29 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/MockTungstenAnswerFactory.java @@ -31,5 +31,8 @@ public class MockTungstenAnswerFactory { TungstenAnswer get() { return tungstenAnswer; } - + public static TungstenAnswer get(boolean returnResult){ + TungstenAnswer tungstenAnswers = new MockTungstenAnswerFactory(returnResult).get(); + return tungstenAnswers; + } } diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java index a9603ac1d3f3..58084d3072d1 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenElementTest.java @@ -256,7 +256,7 @@ public void applyStaticNatsAddRuleSuccessTest() { StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer assignFloatingIpAnswer = MockTungstenAnswerFactory.get(true); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); @@ -277,7 +277,7 @@ public void applyStaticNatsAddRuleFailTest() { StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer assignFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); + TungstenAnswer assignFloatingIpAnswer = MockTungstenAnswerFactory.get(false); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); @@ -298,7 +298,7 @@ public void applyStaticNatsRevokeRuleSuccessTest() { StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer releaseFloatingIpAnswer = MockTungstenAnswerFactory.get(true); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); @@ -319,7 +319,7 @@ public void applyStaticNatsRevokeRuleFailTest() { StaticNatImpl staticNat = mock(StaticNatImpl.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); - TungstenAnswer releaseFloatingIpAnswer = new MockTungstenAnswerFactory(false).get(); + TungstenAnswer releaseFloatingIpAnswer = MockTungstenAnswerFactory.get(false); Nic nic = mock(Nic.class); Network publicNetwork = mock(Network.class); List staticNatList = List.of(staticNat); @@ -351,11 +351,11 @@ public void applyLBRulesAddRuleSuccessTest() { TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer updateTungstenLoadBalancerListenerAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer updateTungstenHealthMonitorAnswer = MockTungstenAnswerFactory.get(true); LoadBalancingRule.LbSslCert lbSslCert = mock(LoadBalancingRule.LbSslCert.class); when(lbStickinessPolicy.getMethodName()).thenReturn("AppCookie"); List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); @@ -402,10 +402,10 @@ public void applyLBRulesAddRuleFailTest() { List loadBalancerVOList = List.of(loadBalancerVO); IPAddressVO ipAddressVO = mock(IPAddressVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer createTungstenNetworkLoadbalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenLoadBalancerMemberAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenHealthMonitorAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenNetworkLoadbalancerAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer updateTungstenLoadBalancerPoolAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer updateTungstenLoadBalancerMemberAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer updateTungstenHealthMonitorAnswer = MockTungstenAnswerFactory.get(true); List> pairList = List.of(new Pair<>("cookieName", "cookieValue")); TungstenFabricLBHealthMonitorVO tungstenFabricLBHealthMonitorVO = mock(TungstenFabricLBHealthMonitorVO.class); @@ -445,8 +445,8 @@ public void applyLBRulesRevokeRuleFailTest() { List loadBalancingRuleList1 = List.of(loadBalancingRule1); List loadBalancerVOList1 = List.of(loadBalancerVO1); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer deleteTungstenLoadBalancerCommand = MockTungstenAnswerFactory.get(true); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), any())).thenReturn(publicNetwork); when(loadBalancingRule1.getSourceIp()).thenReturn(ip1); @@ -472,8 +472,8 @@ public void applyLBRulesRevokeRuleSuccessTest() { LoadBalancerVO loadBalancerVO1 = mock(LoadBalancerVO.class); LoadBalancerVO loadBalancerVO2 = mock(LoadBalancerVO.class); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); - TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenLoadBalancerCommand = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenLoadBalancerListenerAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer deleteTungstenLoadBalancerCommand = MockTungstenAnswerFactory.get(true); List loadBalancingRuleList = List.of(loadBalancingRule); List loadBalancerVOList = Arrays.asList(loadBalancerVO1, loadBalancerVO2); @@ -497,7 +497,7 @@ public void applyPFRulesAddRuleSuccessTest() { IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPortForwardingAnswer = MockTungstenAnswerFactory.get(true); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); @@ -518,7 +518,7 @@ public void applyPFRulesAddRuleFailTest() { IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); + TungstenAnswer applyTungstenPortForwardingAnswer = MockTungstenAnswerFactory.get(false); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Add); @@ -539,7 +539,7 @@ public void applyPFRulesRevokeRuleSuccessTest() { IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPortForwardingAnswer = MockTungstenAnswerFactory.get(true); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); @@ -560,7 +560,7 @@ public void applyPFRulesRevokeRuleFailTest() { IPAddressVO ipAddressVO = mock(IPAddressVO.class); UserVm userVm = mock(UserVm.class); Nic nic = mock(Nic.class); - TungstenAnswer applyTungstenPortForwardingAnswer = new MockTungstenAnswerFactory(false).get(); + TungstenAnswer applyTungstenPortForwardingAnswer = MockTungstenAnswerFactory.get(false); List portForwardingRuleList = List.of(portForwardingRule); when(portForwardingRule.getState()).thenReturn(FirewallRule.State.Revoke); @@ -582,9 +582,9 @@ public void preparePublicNetworkTest() throws ConcurrentOperationException { ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenVMAnswer = MockTungstenAnswerFactory.get(true); IPAddressVO ipAddressVO = mock(IPAddressVO.class); - TungstenAnswer createTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenNetworkPolicyAnswer = MockTungstenAnswerFactory.get(true); nicProfile.setIPv4Address("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); @@ -611,7 +611,7 @@ public void prepareManagementNetworkTest() throws ConcurrentOperationException { ReservationContext reservationContext = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO host = mock(HostVO.class); - TungstenAnswer createTungstenVMAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenVMAnswer = MockTungstenAnswerFactory.get(true); nicProfile.setIPv4Address("192.168.100.100"); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Management); @@ -728,8 +728,8 @@ public void destroyTest() throws ConcurrentOperationException, ResourceUnavailab Network network = mock(Network.class); ReservationContext reservationContext = mock(ReservationContext.class); List ipAddressVOList = Arrays.asList(ipAddressVO1, ipAddressVO2); - TungstenAnswer tungstenDeleteFIPAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer tungstenDeleteNPAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenDeleteFIPAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer tungstenDeleteNPAnswer = MockTungstenAnswerFactory.get(true); when(ipAddressDao.listByAssociatedNetwork(anyLong(), anyBoolean())).thenReturn(ipAddressVOList); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(tungstenDeleteFIPAnswer); @@ -875,8 +875,8 @@ public void applyFWRulesWithAddEgressRuleTest() throws ResourceUnavailableExcept Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createNetworkPolicyAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer applyNetworkPolicyAnswer = MockTungstenAnswerFactory.get(true); when(firewallRuleVO.getState()).thenReturn(FirewallRule.State.Add); when(firewallRuleVO.getSourceCidrList()).thenReturn(List.of("192.168.100.0/24")); @@ -895,8 +895,8 @@ public void applyFWRulesWithAddIngressRuleTest() throws ResourceUnavailableExcep Network network = mock(Network.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); Network publicNetwork = mock(Network.class); - TungstenAnswer createNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createNetworkPolicyAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer applyNetworkPolicyAnswer = MockTungstenAnswerFactory.get(true); IPAddressVO ipAddressVO = mock(IPAddressVO.class); Ip ip = mock(Ip.class); @@ -965,7 +965,7 @@ public void prepareMigrationTest() { ReservationContext context = mock(ReservationContext.class); VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); HostVO hostVO = mock(HostVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); when(vm.getType()).thenReturn(VirtualMachine.Type.ConsoleProxy); when(network.getTrafficType()).thenReturn(Networks.TrafficType.Public); @@ -1011,4 +1011,4 @@ public void commitMigration() { tungstenElement.commitMigration(nic, network, vm, src, dest); verify(tungstenFabricUtils, times(1)).sendTungstenCommand(any(DeleteTungstenVRouterPortCommand.class), anyLong()); } -} \ No newline at end of file +} diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java index d8e461fb6ae0..276487227d0c 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenFabricUtilsTest.java @@ -63,7 +63,7 @@ public void tearDown() throws Exception { @Test public void sendTungstenCommandSuccessTest() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); @@ -92,7 +92,7 @@ public void sendTungstenCommandWithNullAnswer() { @Test(expected = InvalidParameterValueException.class) public void sendTungstenCommandWithFalseAnswer() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(false).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(false); TungstenCommand tungstenCommand = mock(TungstenCommand.class); when(tungstenProviderDao.findByZoneId(anyLong())).thenReturn(tungstenProviderVO); @@ -100,4 +100,4 @@ public void sendTungstenCommandWithFalseAnswer() { tungstenFabricUtils.sendTungstenCommand(tungstenCommand, anyLong()); } -} \ No newline at end of file +} diff --git a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java index 3eb61510b09f..38539d8b6c5f 100644 --- a/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java +++ b/plugins/network-elements/tungsten/src/test/java/org/apache/cloudstack/network/tungsten/service/TungstenServiceImplTest.java @@ -320,7 +320,7 @@ public void tearDown() throws Exception { public void createTungstenFloatingIpTest() throws Exception { IPAddressVO ipAddressVO = mock(IPAddressVO.class); NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer createTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenFloatingIpAnswer = MockTungstenAnswerFactory.get(true); Ip ip = mock(Ip.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); @@ -334,7 +334,7 @@ public void createTungstenFloatingIpTest() throws Exception { public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { IPAddressVO ipAddressVO = mock(IPAddressVO.class); NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer deleteTungstenFloatingIpAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenFloatingIpAnswer = MockTungstenAnswerFactory.get(true); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(networkVO); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFloatingIpCommand.class), anyLong())).thenReturn(deleteTungstenFloatingIpAnswer); @@ -346,7 +346,7 @@ public void deleteTungstenFloatingIpWithIpAddressTest() throws Exception { public void deleteTungstenDomainTest() throws Exception { DomainVO domainVO = mock(DomainVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenDomainAnswer = MockTungstenAnswerFactory.get(true); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenDomainCommand.class), anyLong())).thenReturn(deleteTungstenDomainAnswer); @@ -358,7 +358,7 @@ public void deleteTungstenDomainTest() throws Exception { public void deleteTungstenProjectTest() throws Exception { ProjectVO projectVO = mock(ProjectVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenProjectAnswer = MockTungstenAnswerFactory.get(true); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenProjectCommand.class), anyLong())).thenReturn(deleteTungstenProjectAnswer); @@ -369,8 +369,8 @@ public void deleteTungstenProjectTest() throws Exception { @Test public void addTungstenDefaultNetworkPolicyTest() { TungstenRule tungstenRule = mock(TungstenRule.class); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer applyTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(createTungstenPolicyAnswer); @@ -387,12 +387,12 @@ public void createManagementNetworkTest() { VirtualNetwork managementVirtualNetwork = mock(VirtualNetwork.class); VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenNetworkAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer updateTungstenGlobalVrouterConfigAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer getTungstenFabricNetworkAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer createTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer applyTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Management))).thenReturn(managementNetwork); @@ -414,8 +414,8 @@ public void createManagementNetworkTest() { public void addManagementNetworkSubnetTest() { HostPodVO hostPodVO = mock(HostPodVO.class); Network managementNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenNetworkSubnetAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer getTungstenNetworkDnsAnswer = MockTungstenAnswerFactory.get(true); DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); when(hostPodVO.getDescription()).thenReturn("192.168.100.100-192.168.100.200"); @@ -435,10 +435,10 @@ public void addManagementNetworkSubnetTest() { @Test public void deleteManagementNetworkTest() { Network managementNetwork = mock(Network.class); - TungstenAnswer deleteTungstenManagementPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenFabricNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenFabricPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenManagementPolicyAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer getTungstenFabricNetworkAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer deleteTungstenFabricPolicyAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer deleteTungstenNetworkAnswer = MockTungstenAnswerFactory.get(true); VirtualNetwork fabricVirtualNetwork = mock(VirtualNetwork.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), @@ -455,8 +455,8 @@ public void deleteManagementNetworkTest() { public void removeManagementNetworkSubnetTest() { HostPodVO hostPodVO = mock(HostPodVO.class); Network managementNetwork = mock(Network.class); - TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenNetworkSubnetAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer getTungstenNetworkDnsAnswer = MockTungstenAnswerFactory.get(true); DataCenterIpAddressVO dataCenterIpAddressVO = mock(DataCenterIpAddressVO.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), @@ -477,10 +477,10 @@ public void createPublicNetworkTest() { VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer createPublicNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createPublicNetworkAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer createFloatingIpPoolAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer createTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer applyTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(CreateTungstenNetworkCommand.class), anyLong())).thenReturn(createPublicNetworkAnswer); @@ -499,11 +499,11 @@ public void createPublicNetworkTest() { public void addPublicNetworkSubnetTest() { VlanVO vlanVO = mock(VlanVO.class); Network publicNetwork = mock(Network.class); - TungstenAnswer addTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenNetworkSubnetAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer createTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer applyTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = MockTungstenAnswerFactory.get(true); IPAddressVO ipAddressVO = mock(IPAddressVO.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); @@ -526,9 +526,9 @@ public void addPublicNetworkSubnetTest() { @Test public void deletePublicNetworkTest() { Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenFloatingIpPoolAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer deleteTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer deleteTungstenFloatingIpPoolAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer deleteTungstenNetworkAnswer = MockTungstenAnswerFactory.get(true); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenNetworkPolicyCommand.class), anyLong())).thenReturn(deleteTungstenNetworkPolicyAnswer); @@ -542,9 +542,9 @@ public void deletePublicNetworkTest() { public void removePublicNetworkSubnetTest() { VlanVO vlanVO = mock(VlanVO.class); Network publicNetwork = mock(Network.class); - TungstenAnswer deleteTungstenNetworkPolicyAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer removeTungstenNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenNetworkPolicyAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer removeTungstenNetworkSubnetAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer getTungstenNetworkDnsAnswer = MockTungstenAnswerFactory.get(true); IPAddressVO ipAddressVO = mock(IPAddressVO.class); when(networkModel.getSystemNetworkByZoneAndTrafficType(anyLong(), eq(Networks.TrafficType.Public))).thenReturn(publicNetwork); @@ -562,7 +562,7 @@ public void removePublicNetworkSubnetTest() { @Test public void allocateDnsIpAddressTest() { NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = MockTungstenAnswerFactory.get(true); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); @@ -578,7 +578,7 @@ public void allocateDnsIpAddressTest() { @Test public void deallocateDnsIpAddressTest() { NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenNetworkDnsAnswer = MockTungstenAnswerFactory.get(true); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); when(tungstenFabricUtils.sendTungstenCommand(any(GetTungstenNetworkDnsCommand.class), anyLong())).thenReturn(getTungstenNetworkDnsAnswer); @@ -620,10 +620,10 @@ public void syncTungstenDbWithCloudstackProjectsAndDomainsTest() { DomainVO domainVO = mock(DomainVO.class); ProjectVO projectVO = mock(ProjectVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer createTungstenDomainAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenProjectAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer createTungstenDefaultProjectAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenDomainAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer createTungstenProjectAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer createTungstenDefaultProjectAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer updateTungstenDefaultSecurityGroupAnswer = MockTungstenAnswerFactory.get(true); when(domainDao.listAll()).thenReturn(List.of(domainVO)); when(projectDao.listAll()).thenReturn(List.of(projectVO)); @@ -644,8 +644,8 @@ public void updateLoadBalancerTest() { Network publicNetwork = mock(Network.class); IPAddressVO ipAddressVO = mock(IPAddressVO.class); HostVO hostVO = mock(HostVO.class); - TungstenAnswer getTungstenLoadBalancerAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer updateLoadBalancerServiceInstanceAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer getTungstenLoadBalancerAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer updateLoadBalancerServiceInstanceAnswer = MockTungstenAnswerFactory.get(true); Answer updateTungstenLoadbalancerStatsAnswer = mock(Answer.class); Answer updateTungstenLoadbalancerSslAnswer = mock(Answer.class); FirewallRuleVO firewallRuleVO = mock(FirewallRuleVO.class); @@ -687,8 +687,8 @@ public void createTungstenSecurityGroupTest() { TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); DomainVO domainVO = mock(DomainVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer createTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenSecurityGroupAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = MockTungstenAnswerFactory.get(true); when(projectDao.findByProjectAccountId(anyLong())).thenReturn(projectVO); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); @@ -706,7 +706,7 @@ public void createTungstenSecurityGroupTest() { public void deleteTungstenSecurityGroupTest() { SecurityGroup securityGroup = mock(SecurityGroup.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer deleteTungstenSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenSecurityGroupAnswer = MockTungstenAnswerFactory.get(true); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenSecurityGroupCommand.class), anyLong())).thenReturn(deleteTungstenSecurityGroupAnswer); @@ -719,8 +719,8 @@ public void addTungstenSecurityGroupEgressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = MockTungstenAnswerFactory.get(true); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); @@ -753,7 +753,7 @@ public void addTungstenSecurityGroupIngressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = MockTungstenAnswerFactory.get(true); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); @@ -776,8 +776,8 @@ public void removeTungstenSecurityGroupEgressRuleTest() { SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = MockTungstenAnswerFactory.get(true); NicVO nicVO = mock(NicVO.class); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); @@ -805,7 +805,7 @@ public void removeTungstenSecurityGroupIngressRuleTest() { SecurityRule securityRule = mock(SecurityRule.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = MockTungstenAnswerFactory.get(true); when(tungstenProviderDao.findAll()).thenReturn(List.of(tungstenProviderVO)); when(securityGroupDao.findById(anyLong())).thenReturn(securityGroupVO); @@ -826,8 +826,8 @@ public void addTungstenNicSecondaryIpAddressTest() { SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); - TungstenAnswer addTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecondaryIpAddressAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = MockTungstenAnswerFactory.get(true); when(entityMgr.findById(eq(NicSecondaryIp.class), anyLong())).thenReturn(nicSecondaryIp); when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); @@ -852,10 +852,10 @@ public void removeTungstenNicSecondaryIpAddressTest() { NicSecondaryIpVO nicSecondaryIpVO = mock(NicSecondaryIpVO.class); Network network = mock(Network.class); DataCenter dataCenter = mock(DataCenter.class); - TungstenAnswer removeTungstenSecondaryIpAddressAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenSecondaryIpAddressAnswer = MockTungstenAnswerFactory.get(true); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = MockTungstenAnswerFactory.get(true); when(entityMgr.findById(eq(Network.class), anyLong())).thenReturn(network); when(entityMgr.findById(eq(DataCenter.class), anyLong())).thenReturn(dataCenter); @@ -874,7 +874,7 @@ public void removeTungstenNicSecondaryIpAddressTest() { @Test public void createTungstenPolicyTest() { - TungstenAnswer createTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); @@ -889,7 +889,7 @@ public void createTungstenPolicyTest() { @Test public void addTungstenPolicyRuleTest() throws Exception { - TungstenAnswer addTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenPolicyRuleAnswer = MockTungstenAnswerFactory.get(true); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); @@ -928,7 +928,7 @@ public void addTungstenPolicyRuleTest() throws Exception { @Test public void listTungstenPolicyTest() { NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer listTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -947,7 +947,7 @@ public void listTungstenPolicyTest() { @Test public void listTungstenNetworkTest() { - TungstenAnswer listTungstenNetworkAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenNetworkAnswer = MockTungstenAnswerFactory.get(true); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); @@ -961,7 +961,7 @@ public void listTungstenNetworkTest() { @Test public void listTungstenNicTest() { - TungstenAnswer listTungstenNicAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenNicAnswer = MockTungstenAnswerFactory.get(true); VirtualMachineInterface virtualMachineInterface = mock(VirtualMachineInterface.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); @@ -974,7 +974,7 @@ public void listTungstenNicTest() { @Test public void listTungstenVmTest() { - TungstenAnswer listTungstenVmAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenVmAnswer = MockTungstenAnswerFactory.get(true); VirtualMachine virtualMachine = mock(VirtualMachine.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); @@ -987,7 +987,7 @@ public void listTungstenVmTest() { @Test public void deleteTungstenPolicyTest() { - TungstenAnswer deleteTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenPolicyCommand.class), anyLong())).thenReturn(deleteTungstenPolicyAnswer); @@ -996,7 +996,7 @@ public void deleteTungstenPolicyTest() { @Test public void listTungstenPolicyRuleWithRuleUuidTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenPolicyRuleAnswer = MockTungstenAnswerFactory.get(true); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); @@ -1025,7 +1025,7 @@ public void listTungstenPolicyRuleWithRuleUuidTest() { @Test public void listTungstenPolicyRuleWithAllRuleTest() { - TungstenAnswer listTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenPolicyRuleAnswer = MockTungstenAnswerFactory.get(true); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); PolicyEntriesType policyEntriesType = mock(PolicyEntriesType.class); PolicyRuleType policyRuleType = mock(PolicyRuleType.class); @@ -1054,7 +1054,7 @@ public void listTungstenPolicyRuleWithAllRuleTest() { @Test public void removeTungstenPolicyRuleTest() { - TungstenAnswer removeTungstenPolicyRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenPolicyRuleAnswer = MockTungstenAnswerFactory.get(true); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1071,7 +1071,7 @@ public void removeTungstenPolicyRuleTest() { @Test public void createTungstenTagTest() { - TungstenAnswer createTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenTagAnswer = MockTungstenAnswerFactory.get(true); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1094,7 +1094,7 @@ public void createTungstenTagTest() { @Test public void createTungstenTagTypeTest() { - TungstenAnswer createTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenTagTypeAnswer = MockTungstenAnswerFactory.get(true); TagType tagtype = mock(TagType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); @@ -1107,7 +1107,7 @@ public void createTungstenTagTypeTest() { @Test public void listTungstenTagsTest() { - TungstenAnswer listTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenTagAnswer = MockTungstenAnswerFactory.get(true); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1133,7 +1133,7 @@ public void listTungstenTagsTest() { @Test public void listTungstenTagTypesTest() { - TungstenAnswer listTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenTagTypeAnswer = MockTungstenAnswerFactory.get(true); TagType tagtype = mock(TagType.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); @@ -1146,7 +1146,7 @@ public void listTungstenTagTypesTest() { @Test public void deleteTungstenTagTest() { - TungstenAnswer deleteTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenTagAnswer = MockTungstenAnswerFactory.get(true); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagCommand.class), anyLong())).thenReturn(deleteTungstenTagAnswer); @@ -1155,7 +1155,7 @@ public void deleteTungstenTagTest() { @Test public void deleteTungstenTagTypeTest() { - TungstenAnswer deleteTungstenTagTypeAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer deleteTungstenTagTypeAnswer = MockTungstenAnswerFactory.get(true); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenTagTypeCommand.class), anyLong())).thenReturn(deleteTungstenTagTypeAnswer); @@ -1164,7 +1164,7 @@ public void deleteTungstenTagTypeTest() { @Test public void applyTungstenPolicyTest() { - TungstenAnswer applyTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1181,7 +1181,7 @@ public void applyTungstenPolicyTest() { @Test public void applyTungstenTagTest() { - TungstenAnswer applyTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer applyTungstenTagAnswer = MockTungstenAnswerFactory.get(true); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); @@ -1206,7 +1206,7 @@ public void applyTungstenTagTest() { @Test public void removeTungstenPolicyTest() { - TungstenAnswer removeTungstenPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenPolicyAnswer = MockTungstenAnswerFactory.get(true); TungstenNetworkPolicy tungstenNetworkPolicy = mock(TungstenNetworkPolicy.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1223,7 +1223,7 @@ public void removeTungstenPolicyTest() { @Test public void removeTungstenTagTest() { - TungstenAnswer removeTungstenTagAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenTagAnswer = MockTungstenAnswerFactory.get(true); TungstenTag tungstenTag = mock(TungstenTag.class); Tag tag = mock(Tag.class); NetworkPolicy networkPolicy = mock(NetworkPolicy.class); @@ -1249,7 +1249,7 @@ public void removeTungstenTagTest() { @Test public void createTungstenAddressGroupTest() { - TungstenAnswer createTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenAddressGroupAnswer = MockTungstenAnswerFactory.get(true); AddressGroup addressGroup = mock(AddressGroup.class); SubnetListType subnetListType = mock(SubnetListType.class); SubnetType subnetType = mock(SubnetType.class); @@ -1266,7 +1266,7 @@ public void createTungstenAddressGroupTest() { @Test public void createTungstenServiceGroupTest() { - TungstenAnswer createTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenServiceGroupAnswer = MockTungstenAnswerFactory.get(true); ServiceGroup serviceGroup = mock(ServiceGroup.class); FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); @@ -1285,7 +1285,7 @@ public void createTungstenServiceGroupTest() { @Test public void createTungstenFirewallRuleTest() { - TungstenAnswer createTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenFirewallRuleAnswer = MockTungstenAnswerFactory.get(true); net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); ActionListType actionListType = mock(ActionListType.class); ObjectReference serviceGroup = mock(ObjectReference.class); @@ -1315,7 +1315,7 @@ public void createTungstenFirewallRuleTest() { @Test public void createTungstenFirewallPolicyTest() { - TungstenAnswer createTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenFirewallPolicyAnswer = MockTungstenAnswerFactory.get(true); FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); @@ -1331,7 +1331,7 @@ public void createTungstenFirewallPolicyTest() { @Test public void createTungstenApplicationPolicySetTest() { - TungstenAnswer createTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenApplicationPolicySetAnswer = MockTungstenAnswerFactory.get(true); ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); ObjectReference objectReference = mock(ObjectReference.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); @@ -1350,7 +1350,7 @@ public void createTungstenApplicationPolicySetTest() { @Test public void listTungstenApplicationPolicySetTest() { - TungstenAnswer listTungstenApplicationPolicySetAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenApplicationPolicySetAnswer = MockTungstenAnswerFactory.get(true); ApplicationPolicySet applicationPolicySet = mock(ApplicationPolicySet.class); ObjectReference objectReference = mock(ObjectReference.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); @@ -1369,7 +1369,7 @@ public void listTungstenApplicationPolicySetTest() { @Test public void listTungstenFirewallPolicyTest() { - TungstenAnswer listTungstenFirewallPolicyAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenFirewallPolicyAnswer = MockTungstenAnswerFactory.get(true); FirewallPolicy firewallPolicy = mock(FirewallPolicy.class); ObjectReference firewallSequenceObjectReference = mock(ObjectReference.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); @@ -1385,7 +1385,7 @@ public void listTungstenFirewallPolicyTest() { @Test public void listTungstenFirewallRuleTest() { - TungstenAnswer listTungstenFirewallRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenFirewallRuleAnswer = MockTungstenAnswerFactory.get(true); net.juniper.tungsten.api.types.FirewallRule firewallRule = mock(net.juniper.tungsten.api.types.FirewallRule.class); ActionListType actionListType = mock(ActionListType.class); ObjectReference serviceGroup = mock(ObjectReference.class); @@ -1414,7 +1414,7 @@ public void listTungstenFirewallRuleTest() { @Test public void listTungstenAddressGroupTest() { - TungstenAnswer listTungstenAddressGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenAddressGroupAnswer = MockTungstenAnswerFactory.get(true); AddressGroup addressGroup = mock(AddressGroup.class); SubnetListType subnetListType = mock(SubnetListType.class); SubnetType subnetType = mock(SubnetType.class); @@ -1432,7 +1432,7 @@ public void listTungstenAddressGroupTest() { @Test public void listTungstenServiceGroupTest() { - TungstenAnswer listTungstenServiceGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer listTungstenServiceGroupAnswer = MockTungstenAnswerFactory.get(true); ServiceGroup serviceGroup = mock(ServiceGroup.class); FirewallServiceGroupType firewallServiceGroupType = mock(FirewallServiceGroupType.class); FirewallServiceType firewallServiceType = mock(FirewallServiceType.class); @@ -1451,7 +1451,7 @@ public void listTungstenServiceGroupTest() { @Test public void deleteTungstenApplicationPolicySetTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenApplicationPolicySetCommand.class), anyLong())).thenReturn(tungstenAnswer); @@ -1460,7 +1460,7 @@ public void deleteTungstenApplicationPolicySetTest() { @Test public void deleteTungstenFirewallPolicyTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallPolicyCommand.class), anyLong())).thenReturn(tungstenAnswer); @@ -1469,7 +1469,7 @@ public void deleteTungstenFirewallPolicyTest() { @Test public void deleteTungstenFirewallRuleTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenFirewallRuleCommand.class), anyLong())).thenReturn(tungstenAnswer); @@ -1478,7 +1478,7 @@ public void deleteTungstenFirewallRuleTest() { @Test public void deleteTungstenServiceGroupTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenServiceGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); @@ -1487,7 +1487,7 @@ public void deleteTungstenServiceGroupTest() { @Test public void deleteTungstenAddressGroupTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenAddressGroupCommand.class), anyLong())).thenReturn(tungstenAnswer); @@ -1499,9 +1499,9 @@ public void createSharedNetworkTest() { Network network = mock(Network.class); Vlan vlan = mock(Vlan.class); AccountVO accountVO = mock(AccountVO.class); - TungstenAnswer createTungstenSharedNetworkAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer addNetworkSubnetAnswer = new MockTungstenAnswerFactory(true).get(); - TungstenAnswer getTungstenNetworkDnsAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer createTungstenSharedNetworkAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer addNetworkSubnetAnswer = MockTungstenAnswerFactory.get(true); + TungstenAnswer getTungstenNetworkDnsAnswer = MockTungstenAnswerFactory.get(true); NetworkDetailVO networkDetailVO = mock(NetworkDetailVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); HostVO hostVO = mock(HostVO.class); @@ -1540,12 +1540,12 @@ public void addTungstenVmSecurityGroupTest() { SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); TungstenProviderVO tungstenProviderVO = mock(TungstenProviderVO.class); TungstenAnswer getTungstenSecurityGroupAnswer = mock(TungstenAnswer.class); - TungstenAnswer addTungstenVmToSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenVmToSecurityGroupAnswer = MockTungstenAnswerFactory.get(true); net.juniper.tungsten.api.types.SecurityGroup securityGroup = mock(net.juniper.tungsten.api.types.SecurityGroup.class); NicVO nicVO = mock(NicVO.class); SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); - TungstenAnswer addTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer addTungstenSecurityGroupRuleAnswer = MockTungstenAnswerFactory.get(true); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); when(dataCenterVO.isSecurityGroupEnabled()).thenReturn(true); @@ -1573,10 +1573,10 @@ public void removeTungstenVmSecurityGroupTest() { VMInstanceVO vmInstanceVO = mock(VMInstanceVO.class); DataCenterVO dataCenterVO = mock(DataCenterVO.class); SecurityGroupVO securityGroupVO = mock(SecurityGroupVO.class); - TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenVmFromSecurityGroupAnswer = MockTungstenAnswerFactory.get(true); NicVO nicVO = mock(NicVO.class); SecurityGroupRuleVO securityGroupRuleVO = mock(SecurityGroupRuleVO.class); - TungstenAnswer removeTungstenSecurityGroupRuleAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer removeTungstenSecurityGroupRuleAnswer = MockTungstenAnswerFactory.get(true); TungstenSecurityGroupRuleVO tungstenSecurityGroupRuleVO = mock(TungstenSecurityGroupRuleVO.class); when(dataCenterDao.findById(anyLong())).thenReturn(dataCenterVO); @@ -1587,7 +1587,7 @@ public void removeTungstenVmSecurityGroupTest() { @Test public void createRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1605,7 +1605,7 @@ public void createRoutingLogicalRouterTest() { @Test public void addNetworkGatewayToLogicalRouterTest() { NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1624,7 +1624,7 @@ public void addNetworkGatewayToLogicalRouterTest() { @Test public void listRoutingLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); VirtualNetwork virtualNetwork = mock(VirtualNetwork.class); @@ -1642,7 +1642,7 @@ public void listRoutingLogicalRouterTest() { @Test public void removeNetworkGatewayFromLogicalRouterTest() { NetworkVO networkVO = mock(NetworkVO.class); - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); TungstenGuestNetworkIpAddressVO tungstenGuestNetworkIpAddressVO = mock(TungstenGuestNetworkIpAddressVO.class); TungstenLogicalRouter tungstenLogicalRouter = mock(TungstenLogicalRouter.class); LogicalRouter logicalRouter = mock(LogicalRouter.class); @@ -1662,10 +1662,10 @@ public void removeNetworkGatewayFromLogicalRouterTest() { @Test public void deleteLogicalRouterTest() { - TungstenAnswer tungstenAnswer = new MockTungstenAnswerFactory(true).get(); + TungstenAnswer tungstenAnswer = MockTungstenAnswerFactory.get(true); when(tungstenFabricUtils.sendTungstenCommand(any(DeleteTungstenRoutingLogicalRouterCommand.class), anyLong())).thenReturn(tungstenAnswer); assertTrue(tungstenService.deleteLogicalRouter(1L, "948f421c-edde-4518-a391-09299cc25dc2")); } -} \ No newline at end of file +}