From 263da4c78cb1e62e8f5eb7bcaa06249bbf6db59e Mon Sep 17 00:00:00 2001 From: SadiJr Date: Tue, 25 Jan 2022 10:27:10 -0300 Subject: [PATCH 1/5] Allow users to view reserved system VM IPs, if this IPs are already allocated to any user VM --- .../cloud/network/IpAddressManagerImpl.java | 2 +- .../cloud/server/ManagementServerImpl.java | 7 +- .../server/ManagementServerImplTest.java | 66 +++++++++++++++++++ 3 files changed, 72 insertions(+), 3 deletions(-) diff --git a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java index 97ef0503b690..a1e5eec4caf9 100644 --- a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java +++ b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java @@ -304,7 +304,7 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage static Boolean rulesContinueOnErrFlag = true; - private static final ConfigKey SystemVmPublicIpReservationModeStrictness = new ConfigKey("Advanced", + public static ConfigKey SystemVmPublicIpReservationModeStrictness = new ConfigKey("Advanced", Boolean.class, "system.vm.public.ip.reservation.mode.strictness", "false", "If enabled, the use of System VMs public IP reservation is strict, preferred if not.", false, ConfigKey.Scope.Global); diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 790a5709b0f0..0cef4d357a65 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -655,6 +655,7 @@ import com.cloud.info.ConsoleProxyInfo; import com.cloud.network.IpAddress; import com.cloud.network.IpAddressManager; +import com.cloud.network.IpAddressManagerImpl; import com.cloud.network.Network; import com.cloud.network.NetworkModel; import com.cloud.network.dao.IPAddressDao; @@ -2318,7 +2319,7 @@ private void buildParameters(final SearchBuilder sb, final ListPubl } } - private void setParameters(SearchCriteria sc, final ListPublicIpAddressesCmd cmd, VlanType vlanType) { + protected void setParameters(SearchCriteria sc, final ListPublicIpAddressesCmd cmd, VlanType vlanType) { final Object keyword = cmd.getKeyword(); final Long physicalNetworkId = cmd.getPhysicalNetworkId(); final Long sourceNetworkId = cmd.getNetworkId(); @@ -2388,7 +2389,9 @@ private void setParameters(SearchCriteria sc, final ListPublicIpAdd sc.setParameters("state", state); } - sc.setParameters( "forsystemvms", false); + if (sourceNetworkId == null && IpAddressManagerImpl.SystemVmPublicIpReservationModeStrictness.value()) { + sc.setParameters("forsystemvms", false); + } } @Override diff --git a/server/src/test/java/com/cloud/server/ManagementServerImplTest.java b/server/src/test/java/com/cloud/server/ManagementServerImplTest.java index 488c5f5717a0..e9c140577c5a 100644 --- a/server/src/test/java/com/cloud/server/ManagementServerImplTest.java +++ b/server/src/test/java/com/cloud/server/ManagementServerImplTest.java @@ -21,7 +21,10 @@ import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.when; +import org.apache.cloudstack.api.command.user.address.ListPublicIpAddressesCmd; import org.apache.cloudstack.api.command.user.ssh.RegisterSSHKeyPairCmd; +import org.apache.cloudstack.framework.config.ConfigKey; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; @@ -29,15 +32,22 @@ import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; +import com.cloud.dc.Vlan.VlanType; import com.cloud.exception.InvalidParameterValueException; +import com.cloud.network.IpAddressManagerImpl; +import com.cloud.network.dao.IPAddressVO; import com.cloud.user.Account; import com.cloud.user.SSHKeyPair; import com.cloud.user.SSHKeyPairVO; import com.cloud.user.dao.SSHKeyPairDao; +import com.cloud.utils.db.SearchCriteria; @RunWith(MockitoJUnitRunner.class) public class ManagementServerImplTest { + @Mock + SearchCriteria sc; + @Mock RegisterSSHKeyPairCmd regCmd; @@ -54,9 +64,20 @@ public class ManagementServerImplTest { @Mock SSHKeyPair sshKeyPair; + @Mock + IpAddressManagerImpl ipAddressManagerImpl; + @Spy ManagementServerImpl spy; + ConfigKey mockConfig; + + @Before + public void setup() { + mockConfig = Mockito.mock(ConfigKey.class); + ipAddressManagerImpl.SystemVmPublicIpReservationModeStrictness = mockConfig; + } + @Test(expected = InvalidParameterValueException.class) public void testDuplicateRegistraitons(){ String accountName = "account"; @@ -107,4 +128,49 @@ public void testSuccess(){ spy.registerSSHKeyPair(regCmd); Mockito.verify(spy, Mockito.times(3)).getPublicKeyFromKeyKeyMaterial(anyString()); } + + @Test + public void setParametersTestWhenSourceNetworkIdIsNullAndSystemVmPublicIsTrue() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { + Mockito.when(mockConfig.value()).thenReturn(Boolean.TRUE); + + ListPublicIpAddressesCmd cmd = new ListPublicIpAddressesCmd(); + spy.setParameters(sc, cmd, VlanType.VirtualNetwork); + + Mockito.verify(sc, Mockito.times(1)).setJoinParameters("vlanSearch", "vlanType", VlanType.VirtualNetwork); + Mockito.verify(sc, Mockito.times(1)).setParameters("display", true); + Mockito.verify(sc, Mockito.times(1)).setParameters("forsystemvms", false); + } + + @Test + public void setParametersTestWhenSourceNetworkIdIsNullAndSystemVmPublicIsFalse() { + Mockito.when(mockConfig.value()).thenReturn(Boolean.FALSE); + ListPublicIpAddressesCmd cmd = new ListPublicIpAddressesCmd(); + spy.setParameters(sc, cmd, VlanType.VirtualNetwork); + + Mockito.verify(sc, Mockito.times(1)).setJoinParameters("vlanSearch", "vlanType", VlanType.VirtualNetwork); + Mockito.verify(sc, Mockito.times(1)).setParameters("display", true); + Mockito.verify(sc, Mockito.never()).setParameters("forsystemvms", false); + } + + @Test + public void setParametersTestWhenSourceNetworkIdIsNotNull() { + ListPublicIpAddressesCmd cmd = Mockito.mock(ListPublicIpAddressesCmd.class); + Mockito.when(cmd.getNetworkId()).thenReturn(10L); + Mockito.when(cmd.getZoneId()).thenReturn(null); + Mockito.when(cmd.getIpAddress()).thenReturn(null); + Mockito.when(cmd.getPhysicalNetworkId()).thenReturn(null); + Mockito.when(cmd.getVlanId()).thenReturn(null); + Mockito.when(cmd.getId()).thenReturn(null); + Mockito.when(cmd.isSourceNat()).thenReturn(null); + Mockito.when(cmd.isStaticNat()).thenReturn(null); + Mockito.when(cmd.getState()).thenReturn(null); + Mockito.when(cmd.getTags()).thenReturn(null); + spy.setParameters(sc, cmd, VlanType.VirtualNetwork); + + Mockito.verify(sc, Mockito.times(1)).setJoinParameters("vlanSearch", "vlanType", VlanType.VirtualNetwork); + Mockito.verify(sc, Mockito.times(1)).setParameters("display", false); + Mockito.verify(sc, Mockito.times(1)).setParameters("sourceNetworkId", 10L); + Mockito.verify(sc, Mockito.never()).setParameters("forsystemvms", false); + Mockito.verify(mockConfig, Mockito.never()).value(); + } } From 71fb8170d4ae859154337e8d4e382b88e9dbb51a Mon Sep 17 00:00:00 2001 From: SadiJr Date: Wed, 26 Jan 2022 12:28:20 -0300 Subject: [PATCH 2/5] Fix checkstyle --- server/src/main/java/com/cloud/server/ManagementServerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 0cef4d357a65..bfcab395f6fa 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -2391,7 +2391,7 @@ protected void setParameters(SearchCriteria sc, final ListPublicIpA if (sourceNetworkId == null && IpAddressManagerImpl.SystemVmPublicIpReservationModeStrictness.value()) { sc.setParameters("forsystemvms", false); - } + } } @Override From 5fac1d18ab82c90e8d5c4224b47da00b7c741e36 Mon Sep 17 00:00:00 2001 From: SadiJr Date: Tue, 8 Feb 2022 14:06:00 -0300 Subject: [PATCH 3/5] Address reviews --- .../src/main/java/com/cloud/network/IpAddressManagerImpl.java | 2 +- .../test/java/com/cloud/server/ManagementServerImplTest.java | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java index a1e5eec4caf9..3122facf2fda 100644 --- a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java +++ b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java @@ -304,7 +304,7 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage static Boolean rulesContinueOnErrFlag = true; - public static ConfigKey SystemVmPublicIpReservationModeStrictness = new ConfigKey("Advanced", + public static final ConfigKey SystemVmPublicIpReservationModeStrictness = new ConfigKey("Advanced", Boolean.class, "system.vm.public.ip.reservation.mode.strictness", "false", "If enabled, the use of System VMs public IP reservation is strict, preferred if not.", false, ConfigKey.Scope.Global); diff --git a/server/src/test/java/com/cloud/server/ManagementServerImplTest.java b/server/src/test/java/com/cloud/server/ManagementServerImplTest.java index e9c140577c5a..97be98d04311 100644 --- a/server/src/test/java/com/cloud/server/ManagementServerImplTest.java +++ b/server/src/test/java/com/cloud/server/ManagementServerImplTest.java @@ -31,6 +31,7 @@ import org.mockito.Mockito; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; +import org.powermock.reflect.Whitebox; import com.cloud.dc.Vlan.VlanType; import com.cloud.exception.InvalidParameterValueException; @@ -75,7 +76,7 @@ public class ManagementServerImplTest { @Before public void setup() { mockConfig = Mockito.mock(ConfigKey.class); - ipAddressManagerImpl.SystemVmPublicIpReservationModeStrictness = mockConfig; + Whitebox.setInternalState(ipAddressManagerImpl.getClass(), "SystemVmPublicIpReservationModeStrictness", mockConfig); } @Test(expected = InvalidParameterValueException.class) From c5a9d52d40caa50cd97eb64e394a0dfc0c750b5e Mon Sep 17 00:00:00 2001 From: SadiJr Date: Wed, 13 Apr 2022 17:47:27 -0300 Subject: [PATCH 4/5] Address reviews --- .../cloud/network/IpAddressManagerImpl.java | 6 ++- .../cloud/server/ManagementServerImpl.java | 4 +- .../server/ManagementServerImplTest.java | 38 +++++++++++++++---- 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java index bb6c82ae2d44..925f500548b7 100644 --- a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java +++ b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java @@ -304,7 +304,7 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage static Boolean rulesContinueOnErrFlag = true; - public static final ConfigKey SystemVmPublicIpReservationModeStrictness = new ConfigKey("Advanced", + private static final ConfigKey SystemVmPublicIpReservationModeStrictness = new ConfigKey("Advanced", Boolean.class, "system.vm.public.ip.reservation.mode.strictness", "false", "If enabled, the use of System VMs public IP reservation is strict, preferred if not.", false, ConfigKey.Scope.Global); @@ -2306,4 +2306,8 @@ public boolean isUsageHidden(IPAddressVO ip) { NetworkDetailVO networkDetail = _networkDetailsDao.findDetail(networkId, Network.hideIpAddressUsage); return networkDetail != null && "true".equals(networkDetail.getValue()); } + + public static ConfigKey getSystemvmpublicipreservationmodestrictness() { + return SystemVmPublicIpReservationModeStrictness; + } } diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 56edf7343be7..9fbda9fabbba 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -2383,7 +2383,7 @@ private void buildParameters(final SearchBuilder sb, final ListPubl } } - private void setParameters(SearchCriteria sc, final ListPublicIpAddressesCmd cmd, VlanType vlanType, Boolean isAllocated) { + protected void setParameters(SearchCriteria sc, final ListPublicIpAddressesCmd cmd, VlanType vlanType, Boolean isAllocated) { final Object keyword = cmd.getKeyword(); final Long physicalNetworkId = cmd.getPhysicalNetworkId(); final Long sourceNetworkId = cmd.getNetworkId(); @@ -2455,7 +2455,7 @@ private void setParameters(SearchCriteria sc, final ListPublicIpAdd sc.setParameters("state", IpAddress.State.Allocated); } - if (sourceNetworkId == null && IpAddressManagerImpl.SystemVmPublicIpReservationModeStrictness.value()) { + if (IpAddressManagerImpl.getSystemvmpublicipreservationmodestrictness().value() || isAllocated) { sc.setParameters("forsystemvms", false); } } diff --git a/server/src/test/java/com/cloud/server/ManagementServerImplTest.java b/server/src/test/java/com/cloud/server/ManagementServerImplTest.java index 97be98d04311..3514d52c9e25 100644 --- a/server/src/test/java/com/cloud/server/ManagementServerImplTest.java +++ b/server/src/test/java/com/cloud/server/ManagementServerImplTest.java @@ -131,11 +131,11 @@ public void testSuccess(){ } @Test - public void setParametersTestWhenSourceNetworkIdIsNullAndSystemVmPublicIsTrue() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { + public void setParametersTestWhenIsAllocatedIsFalselAndSystemVmPublicIsTrue() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { Mockito.when(mockConfig.value()).thenReturn(Boolean.TRUE); ListPublicIpAddressesCmd cmd = new ListPublicIpAddressesCmd(); - spy.setParameters(sc, cmd, VlanType.VirtualNetwork); + spy.setParameters(sc, cmd, VlanType.VirtualNetwork, Boolean.FALSE); Mockito.verify(sc, Mockito.times(1)).setJoinParameters("vlanSearch", "vlanType", VlanType.VirtualNetwork); Mockito.verify(sc, Mockito.times(1)).setParameters("display", true); @@ -143,10 +143,10 @@ public void setParametersTestWhenSourceNetworkIdIsNullAndSystemVmPublicIsTrue() } @Test - public void setParametersTestWhenSourceNetworkIdIsNullAndSystemVmPublicIsFalse() { + public void setParametersTestWhenIsAllocatedIsFalseAndSystemVmPublicIsFalse() { Mockito.when(mockConfig.value()).thenReturn(Boolean.FALSE); ListPublicIpAddressesCmd cmd = new ListPublicIpAddressesCmd(); - spy.setParameters(sc, cmd, VlanType.VirtualNetwork); + spy.setParameters(sc, cmd, VlanType.VirtualNetwork, Boolean.FALSE); Mockito.verify(sc, Mockito.times(1)).setJoinParameters("vlanSearch", "vlanType", VlanType.VirtualNetwork); Mockito.verify(sc, Mockito.times(1)).setParameters("display", true); @@ -154,7 +154,8 @@ public void setParametersTestWhenSourceNetworkIdIsNullAndSystemVmPublicIsFalse() } @Test - public void setParametersTestWhenSourceNetworkIdIsNotNull() { + public void setParametersTestWhenIsAllocatedIsTrueAndSystemVmPublicIsFalse() { + Mockito.when(mockConfig.value()).thenReturn(Boolean.FALSE); ListPublicIpAddressesCmd cmd = Mockito.mock(ListPublicIpAddressesCmd.class); Mockito.when(cmd.getNetworkId()).thenReturn(10L); Mockito.when(cmd.getZoneId()).thenReturn(null); @@ -166,12 +167,33 @@ public void setParametersTestWhenSourceNetworkIdIsNotNull() { Mockito.when(cmd.isStaticNat()).thenReturn(null); Mockito.when(cmd.getState()).thenReturn(null); Mockito.when(cmd.getTags()).thenReturn(null); - spy.setParameters(sc, cmd, VlanType.VirtualNetwork); + spy.setParameters(sc, cmd, VlanType.VirtualNetwork, Boolean.TRUE); Mockito.verify(sc, Mockito.times(1)).setJoinParameters("vlanSearch", "vlanType", VlanType.VirtualNetwork); Mockito.verify(sc, Mockito.times(1)).setParameters("display", false); Mockito.verify(sc, Mockito.times(1)).setParameters("sourceNetworkId", 10L); - Mockito.verify(sc, Mockito.never()).setParameters("forsystemvms", false); - Mockito.verify(mockConfig, Mockito.never()).value(); + Mockito.verify(sc, Mockito.times(1)).setParameters("forsystemvms", false); + } + + @Test + public void setParametersTestWhenIsAllocatedIsTrueAndSystemVmPublicIsTrue() { + Mockito.when(mockConfig.value()).thenReturn(Boolean.TRUE); + ListPublicIpAddressesCmd cmd = Mockito.mock(ListPublicIpAddressesCmd.class); + Mockito.when(cmd.getNetworkId()).thenReturn(10L); + Mockito.when(cmd.getZoneId()).thenReturn(null); + Mockito.when(cmd.getIpAddress()).thenReturn(null); + Mockito.when(cmd.getPhysicalNetworkId()).thenReturn(null); + Mockito.when(cmd.getVlanId()).thenReturn(null); + Mockito.when(cmd.getId()).thenReturn(null); + Mockito.when(cmd.isSourceNat()).thenReturn(null); + Mockito.when(cmd.isStaticNat()).thenReturn(null); + Mockito.when(cmd.getState()).thenReturn(null); + Mockito.when(cmd.getTags()).thenReturn(null); + spy.setParameters(sc, cmd, VlanType.VirtualNetwork, Boolean.TRUE); + + Mockito.verify(sc, Mockito.times(1)).setJoinParameters("vlanSearch", "vlanType", VlanType.VirtualNetwork); + Mockito.verify(sc, Mockito.times(1)).setParameters("display", false); + Mockito.verify(sc, Mockito.times(1)).setParameters("sourceNetworkId", 10L); + Mockito.verify(sc, Mockito.times(1)).setParameters("forsystemvms", false); } } From cf2cdee29bfc94bae4578b04ad972267abf2725c Mon Sep 17 00:00:00 2001 From: SadiJr <17a0db2854@firemailbox.club> Date: Mon, 18 Apr 2022 14:45:28 -0300 Subject: [PATCH 5/5] Apply @weizhouapache changes Credits to @weizhouapache, and my sincere thanks for the help. --- .../cloud/network/IpAddressManagerImpl.java | 2 +- .../cloud/server/ManagementServerImpl.java | 2 +- .../server/ManagementServerImplTest.java | 45 ++++++++++++++----- 3 files changed, 37 insertions(+), 12 deletions(-) diff --git a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java index 925f500548b7..dcd89fa56980 100644 --- a/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java +++ b/server/src/main/java/com/cloud/network/IpAddressManagerImpl.java @@ -306,7 +306,7 @@ public class IpAddressManagerImpl extends ManagerBase implements IpAddressManage private static final ConfigKey SystemVmPublicIpReservationModeStrictness = new ConfigKey("Advanced", Boolean.class, "system.vm.public.ip.reservation.mode.strictness", "false", - "If enabled, the use of System VMs public IP reservation is strict, preferred if not.", false, ConfigKey.Scope.Global); + "If enabled, the use of System VMs public IP reservation is strict, preferred if not.", true, ConfigKey.Scope.Global); private Random rand = new Random(System.currentTimeMillis()); diff --git a/server/src/main/java/com/cloud/server/ManagementServerImpl.java b/server/src/main/java/com/cloud/server/ManagementServerImpl.java index 9fbda9fabbba..dc19f5a421b2 100644 --- a/server/src/main/java/com/cloud/server/ManagementServerImpl.java +++ b/server/src/main/java/com/cloud/server/ManagementServerImpl.java @@ -2455,7 +2455,7 @@ protected void setParameters(SearchCriteria sc, final ListPublicIpA sc.setParameters("state", IpAddress.State.Allocated); } - if (IpAddressManagerImpl.getSystemvmpublicipreservationmodestrictness().value() || isAllocated) { + if (IpAddressManagerImpl.getSystemvmpublicipreservationmodestrictness().value() && IpAddress.State.Free.name().equalsIgnoreCase(state)) { sc.setParameters("forsystemvms", false); } } diff --git a/server/src/test/java/com/cloud/server/ManagementServerImplTest.java b/server/src/test/java/com/cloud/server/ManagementServerImplTest.java index 3514d52c9e25..2d6969fe966f 100644 --- a/server/src/test/java/com/cloud/server/ManagementServerImplTest.java +++ b/server/src/test/java/com/cloud/server/ManagementServerImplTest.java @@ -35,6 +35,7 @@ import com.cloud.dc.Vlan.VlanType; import com.cloud.exception.InvalidParameterValueException; +import com.cloud.network.IpAddress; import com.cloud.network.IpAddressManagerImpl; import com.cloud.network.dao.IPAddressVO; import com.cloud.user.Account; @@ -131,30 +132,54 @@ public void testSuccess(){ } @Test - public void setParametersTestWhenIsAllocatedIsFalselAndSystemVmPublicIsTrue() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { + public void setParametersTestWhenStateIsFreeAndSystemVmPublicIsTrue() throws IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { Mockito.when(mockConfig.value()).thenReturn(Boolean.TRUE); - ListPublicIpAddressesCmd cmd = new ListPublicIpAddressesCmd(); + ListPublicIpAddressesCmd cmd = Mockito.mock(ListPublicIpAddressesCmd.class); + Mockito.when(cmd.getNetworkId()).thenReturn(10L); + Mockito.when(cmd.getZoneId()).thenReturn(null); + Mockito.when(cmd.getIpAddress()).thenReturn(null); + Mockito.when(cmd.getPhysicalNetworkId()).thenReturn(null); + Mockito.when(cmd.getVlanId()).thenReturn(null); + Mockito.when(cmd.getId()).thenReturn(null); + Mockito.when(cmd.isSourceNat()).thenReturn(null); + Mockito.when(cmd.isStaticNat()).thenReturn(null); + Mockito.when(cmd.getState()).thenReturn(IpAddress.State.Free.name()); + Mockito.when(cmd.getTags()).thenReturn(null); spy.setParameters(sc, cmd, VlanType.VirtualNetwork, Boolean.FALSE); Mockito.verify(sc, Mockito.times(1)).setJoinParameters("vlanSearch", "vlanType", VlanType.VirtualNetwork); - Mockito.verify(sc, Mockito.times(1)).setParameters("display", true); + Mockito.verify(sc, Mockito.times(1)).setParameters("display", false); + Mockito.verify(sc, Mockito.times(1)).setParameters("sourceNetworkId", 10L); + Mockito.verify(sc, Mockito.times(1)).setParameters("state", "Free"); Mockito.verify(sc, Mockito.times(1)).setParameters("forsystemvms", false); } @Test - public void setParametersTestWhenIsAllocatedIsFalseAndSystemVmPublicIsFalse() { + public void setParametersTestWhenStateIsFreeAndSystemVmPublicIsFalse() { Mockito.when(mockConfig.value()).thenReturn(Boolean.FALSE); - ListPublicIpAddressesCmd cmd = new ListPublicIpAddressesCmd(); + ListPublicIpAddressesCmd cmd = Mockito.mock(ListPublicIpAddressesCmd.class); + Mockito.when(cmd.getNetworkId()).thenReturn(10L); + Mockito.when(cmd.getZoneId()).thenReturn(null); + Mockito.when(cmd.getIpAddress()).thenReturn(null); + Mockito.when(cmd.getPhysicalNetworkId()).thenReturn(null); + Mockito.when(cmd.getVlanId()).thenReturn(null); + Mockito.when(cmd.getId()).thenReturn(null); + Mockito.when(cmd.isSourceNat()).thenReturn(null); + Mockito.when(cmd.isStaticNat()).thenReturn(null); + Mockito.when(cmd.getState()).thenReturn(IpAddress.State.Free.name()); + Mockito.when(cmd.getTags()).thenReturn(null); spy.setParameters(sc, cmd, VlanType.VirtualNetwork, Boolean.FALSE); Mockito.verify(sc, Mockito.times(1)).setJoinParameters("vlanSearch", "vlanType", VlanType.VirtualNetwork); - Mockito.verify(sc, Mockito.times(1)).setParameters("display", true); + Mockito.verify(sc, Mockito.times(1)).setParameters("display", false); + Mockito.verify(sc, Mockito.times(1)).setParameters("sourceNetworkId", 10L); + Mockito.verify(sc, Mockito.times(1)).setParameters("state", "Free"); Mockito.verify(sc, Mockito.never()).setParameters("forsystemvms", false); } @Test - public void setParametersTestWhenIsAllocatedIsTrueAndSystemVmPublicIsFalse() { + public void setParametersTestWhenStateIsNullAndSystemVmPublicIsFalse() { Mockito.when(mockConfig.value()).thenReturn(Boolean.FALSE); ListPublicIpAddressesCmd cmd = Mockito.mock(ListPublicIpAddressesCmd.class); Mockito.when(cmd.getNetworkId()).thenReturn(10L); @@ -172,11 +197,11 @@ public void setParametersTestWhenIsAllocatedIsTrueAndSystemVmPublicIsFalse() { Mockito.verify(sc, Mockito.times(1)).setJoinParameters("vlanSearch", "vlanType", VlanType.VirtualNetwork); Mockito.verify(sc, Mockito.times(1)).setParameters("display", false); Mockito.verify(sc, Mockito.times(1)).setParameters("sourceNetworkId", 10L); - Mockito.verify(sc, Mockito.times(1)).setParameters("forsystemvms", false); + Mockito.verify(sc, Mockito.never()).setParameters("forsystemvms", false); } @Test - public void setParametersTestWhenIsAllocatedIsTrueAndSystemVmPublicIsTrue() { + public void setParametersTestWhenStateIsNullAndSystemVmPublicIsTrue() { Mockito.when(mockConfig.value()).thenReturn(Boolean.TRUE); ListPublicIpAddressesCmd cmd = Mockito.mock(ListPublicIpAddressesCmd.class); Mockito.when(cmd.getNetworkId()).thenReturn(10L); @@ -194,6 +219,6 @@ public void setParametersTestWhenIsAllocatedIsTrueAndSystemVmPublicIsTrue() { Mockito.verify(sc, Mockito.times(1)).setJoinParameters("vlanSearch", "vlanType", VlanType.VirtualNetwork); Mockito.verify(sc, Mockito.times(1)).setParameters("display", false); Mockito.verify(sc, Mockito.times(1)).setParameters("sourceNetworkId", 10L); - Mockito.verify(sc, Mockito.times(1)).setParameters("forsystemvms", false); + Mockito.verify(sc, Mockito.never()).setParameters("forsystemvms", false); } }