public void testReuseWorks() throws SecurityException, NoSuchMethodException { // create mocks CloudStackClient client = createMock(CloudStackClient.class); BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult = createMock(BlockUntilJobCompletesAndReturnResult.class); AddressClient addressClient = createMock(AddressClient.class); expect(client.getAddressClient()).andReturn(addressClient).atLeastOnce(); // an address is available expect(addressClient.listPublicIPAddresses(allocatedOnly(true).networkId(networkId))).andReturn( ImmutableSet.<PublicIPAddress> of(address)); replay(client); replay(blockUntilJobCompletesAndReturnResult); replay(addressClient); assertEquals( new ReuseOrAssociateNewPublicIPAddress(client, blockUntilJobCompletesAndReturnResult).apply(Network .builder().id(networkId).zoneId(zoneId).build()), address); verify(client); verify(blockUntilJobCompletesAndReturnResult); verify(addressClient); }
@Override public PublicIPAddress apply(Network input) { try { logger.debug(">> looking for existing address in network(%s)", input.getId()); PublicIPAddress returnVal = findAvailableAndAssociatedWithNetwork(input.getId(), client.getAddressClient()); logger.debug("<< reused address(%s)", returnVal.getId()); return returnVal; } catch (NoSuchElementException e) { logger.debug(">> associating new address in network(%s)", input.getId()); PublicIPAddress returnVal = associateIPAddressInNetwork(input, client, blockUntilJobCompletesAndReturnResult); logger.debug("<< associated address(%s)", returnVal.getId()); return returnVal; } } }
public PublicIPAddress apply(VirtualMachine vm) { PublicIPAddress ip; for (ip = reuseOrAssociate.apply(network); !ip.isStaticNAT() || !Objects.equal(ip.getVirtualMachineId(), vm.getId()); ip = reuseOrAssociate .apply(network)) { // check to see if someone already grabbed this ip if (ip.getVirtualMachineId() != null && !ip.getVirtualMachineId().equals(vm.getId())) continue; try { logger.debug(">> static NATing IPAddress(%s) to virtualMachine(%s)", ip.getId(), vm.getId()); client.getNATApi().enableStaticNATForVirtualMachine(vm.getId(), ip.getId()); ip = client.getAddressApi().getPublicIPAddress(ip.getId()); if (ip.isStaticNAT() && ip.getVirtualMachineId().equals(vm.getId())) break; } catch (IllegalStateException e) { // very likely an ip conflict, so retry; } return ip; } return ip; } }
adminVirtualMachineDestroyed = retry(new VirtualMachineDestroyed(adminClient), 600, 5, 5, SECONDS); injector.injectMembers(adminVirtualMachineDestroyed); reuseOrAssociate = new ReuseOrAssociateNewPublicIPAddress(client, new BlockUntilJobCompletesAndReturnResult( client, jobComplete)); injector.injectMembers(reuseOrAssociate);
public PublicIPAddress apply(VirtualMachine vm) { PublicIPAddress ip; for (ip = reuseOrAssociate.apply(network); !ip.isStaticNAT() || ip.getVirtualMachineId() != vm.getId(); ip = reuseOrAssociate .apply(network)) { // check to see if someone already grabbed this ip if (ip.getVirtualMachineId() != null && ip.getVirtualMachineId() != vm.getId()) continue; try { logger.debug(">> static NATing IPAddress(%s) to virtualMachine(%s)", ip.getId(), vm.getId()); client.getNATClient().enableStaticNATForVirtualMachine(vm.getId(), ip.getId()); ip = client.getAddressClient().getPublicIPAddress(ip.getId()); if (ip.isStaticNAT() && ip.getVirtualMachineId().equals(vm.getId())) break; } catch (IllegalStateException e) { // very likely an ip conflict, so retry; } return ip; } return ip; } }
adminVirtualMachineDestroyed = retry(new VirtualMachineDestroyed(adminClient), 600, 5, 5, SECONDS); injector.injectMembers(adminVirtualMachineDestroyed); reuseOrAssociate = new ReuseOrAssociateNewPublicIPAddress(client, new BlockUntilJobCompletesAndReturnResult( client, jobComplete)); injector.injectMembers(reuseOrAssociate);
public void testReuseWorks() throws SecurityException, NoSuchMethodException { // create mocks CloudStackApi client = createMock(CloudStackApi.class); BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult = createMock(BlockUntilJobCompletesAndReturnResult.class); AddressApi addressClient = createMock(AddressApi.class); expect(client.getAddressApi()).andReturn(addressClient).atLeastOnce(); // an address is available expect(addressClient.listPublicIPAddresses(allocatedOnly(true).networkId(networkId))).andReturn( ImmutableSet.<PublicIPAddress> of(address)); replay(client); replay(blockUntilJobCompletesAndReturnResult); replay(addressClient); assertEquals( new ReuseOrAssociateNewPublicIPAddress(client, blockUntilJobCompletesAndReturnResult).apply(Network .builder().id(networkId).zoneId(zoneId).build()), address); verify(client); verify(blockUntilJobCompletesAndReturnResult); verify(addressClient); }
public PublicIPAddress apply(VirtualMachine vm) { PublicIPAddress ip; for (ip = reuseOrAssociate.apply(network); !ip.isStaticNAT() || ip.getVirtualMachineId() != vm.getId(); ip = reuseOrAssociate .apply(network)) { // check to see if someone already grabbed this ip if (ip.getVirtualMachineId() != null && ip.getVirtualMachineId() != vm.getId()) continue; try { logger.debug(">> static NATing IPAddress(%s) to virtualMachine(%s)", ip.getId(), vm.getId()); client.getNATClient().enableStaticNATForVirtualMachine(vm.getId(), ip.getId()); ip = client.getAddressClient().getPublicIPAddress(ip.getId()); if (ip.isStaticNAT() && ip.getVirtualMachineId().equals(vm.getId())) break; } catch (IllegalStateException e) { // very likely an ip conflict, so retry; } return ip; } return ip; } }
@Override public PublicIPAddress apply(Network input) { try { logger.debug(">> looking for existing address in network(%s)", input.getId()); PublicIPAddress returnVal = findAvailableAndAssociatedWithNetwork(input.getId(), client.getAddressClient()); logger.debug("<< reused address(%s)", returnVal.getId()); return returnVal; } catch (NoSuchElementException e) { logger.debug(">> associating new address in network(%s)", input.getId()); PublicIPAddress returnVal = associateIPAddressInNetwork(input, client, blockUntilJobCompletesAndReturnResult); logger.debug("<< associated address(%s)", returnVal.getId()); return returnVal; } } }
public void testAssociateWorks() throws SecurityException, NoSuchMethodException { // create mocks CloudStackClient client = createMock(CloudStackClient.class); BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult = createMock(BlockUntilJobCompletesAndReturnResult.class); AddressClient addressClient = createMock(AddressClient.class); expect(client.getAddressClient()).andReturn(addressClient).atLeastOnce(); // no ip addresses available expect(addressClient.listPublicIPAddresses(allocatedOnly(true).networkId(networkId))).andReturn( ImmutableSet.<PublicIPAddress> of()); AsyncCreateResponse job = AsyncCreateResponse.builder().id("1").jobId("2").build(); // make sure we created the job relating to a new ip expect(addressClient.associateIPAddressInZone(zoneId, networkId(networkId))).andReturn(job); expect(blockUntilJobCompletesAndReturnResult.apply(job)).andReturn(address); replay(client); replay(addressClient); replay(blockUntilJobCompletesAndReturnResult); assertEquals( new ReuseOrAssociateNewPublicIPAddress(client, blockUntilJobCompletesAndReturnResult).apply(Network .builder().id(networkId).zoneId(zoneId).build()), address); verify(client); verify(addressClient); verify(blockUntilJobCompletesAndReturnResult); }
@Test(dependsOnMethods = "testCreateVm") public void testCreateLoadBalancerRule() throws Exception { if (networksDisabled) return; int attempts = 0; while (rule == null && attempts < 10) { ip = reuseOrAssociate.apply(network); try { String jobId = client.getLoadBalancerClient().createLoadBalancerRuleForPublicIP(ip.getId(), Algorithm.LEASTCONN, prefix, 22, 22); assertTrue(jobComplete.apply(jobId)); AsyncJob<LoadBalancerRule> asyncJob = client.getAsyncJobClient().getAsyncJob(jobId); LoadBalancerRule result = asyncJob.getResult(); rule = result; } catch (IllegalStateException e) { // very likely an ip conflict, so retry; attempts++; } } assertNotNull(rule, "Failed to get a load balancer rule after " + attempts + " attempts"); assert (rule.getPublicIPId() == ip.getId()) : rule; assertEquals(rule.getPublicPort(), 22); assertEquals(rule.getPrivatePort(), 22); assertEquals(rule.getAlgorithm(), Algorithm.LEASTCONN); assertEquals(rule.getName(), prefix); assertEquals(rule.getState(), State.ADD); assertEquals(client.getLoadBalancerClient().listVirtualMachinesAssignedToLoadBalancerRule(rule.getId()).size(), 0); checkRule(rule); }
@Override public PublicIPAddress apply(Network input) { try { logger.debug(">> looking for existing address in network(%s)", input.getId()); PublicIPAddress returnVal = findAvailableAndAssociatedWithNetwork(input.getId(), client.getAddressApi()); logger.debug("<< reused address(%s)", returnVal.getId()); return returnVal; } catch (NoSuchElementException e) { logger.debug(">> associating new address in network(%s)", input.getId()); PublicIPAddress returnVal = associateIPAddressInNetwork(input, client, blockUntilJobCompletesAndReturnResult); logger.debug("<< associated address(%s)", returnVal.getId()); return returnVal; } } }
public void testAssociateWorks() throws SecurityException, NoSuchMethodException { // create mocks CloudStackApi client = createMock(CloudStackApi.class); BlockUntilJobCompletesAndReturnResult blockUntilJobCompletesAndReturnResult = createMock(BlockUntilJobCompletesAndReturnResult.class); AddressApi addressClient = createMock(AddressApi.class); expect(client.getAddressApi()).andReturn(addressClient).atLeastOnce(); // no ip addresses available expect(addressClient.listPublicIPAddresses(allocatedOnly(true).networkId(networkId))).andReturn( ImmutableSet.<PublicIPAddress> of()); AsyncCreateResponse job = AsyncCreateResponse.builder().id("1").jobId("2").build(); // make sure we created the job relating to a new ip expect(addressClient.associateIPAddressInZone(zoneId, networkId(networkId))).andReturn(job); expect(blockUntilJobCompletesAndReturnResult.apply(job)).andReturn(address); replay(client); replay(addressClient); replay(blockUntilJobCompletesAndReturnResult); assertEquals( new ReuseOrAssociateNewPublicIPAddress(client, blockUntilJobCompletesAndReturnResult).apply(Network .builder().id(networkId).zoneId(zoneId).build()), address); verify(client); verify(addressClient); verify(blockUntilJobCompletesAndReturnResult); }
@Test(dependsOnMethods = "testCreateVm") public void testCreateLoadBalancerRule() throws Exception { if (networksDisabled) return; int attempts = 0; while (rule == null && attempts < 10) { ip = reuseOrAssociate.apply(network); try { String jobId = client.getLoadBalancerApi().createLoadBalancerRuleForPublicIP(ip.getId(), Algorithm.LEASTCONN, prefix, 22, 22); assertTrue(jobComplete.apply(jobId)); AsyncJob<LoadBalancerRule> asyncJob = client.getAsyncJobApi().getAsyncJob(jobId); LoadBalancerRule result = asyncJob.getResult(); rule = result; } catch (IllegalStateException e) { // very likely an ip conflict, so retry; attempts++; } } assertNotNull(rule, "Failed to get a load balancer rule after " + attempts + " attempts"); assertEquals(rule.getPublicIPId(), ip.getId()); assertEquals(rule.getPublicPort(), 22); assertEquals(rule.getPrivatePort(), 22); assertEquals(rule.getAlgorithm(), Algorithm.LEASTCONN); assertEquals(rule.getName(), prefix); assertEquals(rule.getState(), State.ADD); assertEquals(client.getLoadBalancerApi().listVirtualMachinesAssignedToLoadBalancerRule(rule.getId()).size(), 0); checkRule(rule); }
public void testCreatePortForwardingRule() throws Exception { if (networksDisabled) return; while (portForwardingRule == null) { ip = reuseOrAssociate.apply(network); try { AsyncCreateResponse job = client.getFirewallClient() .createPortForwardingRuleForVirtualMachine(ip.getId(), PortForwardingRule.Protocol.TCP, 22, vm.getId(), 22); assertTrue(jobComplete.apply(job.getJobId())); portForwardingRule = client.getFirewallClient().getPortForwardingRule(job.getId()); } catch (IllegalStateException e) { Logger.CONSOLE.error("Failed while trying to allocate ip: " + e); // very likely an ip conflict, so retry; } } assertEquals(portForwardingRule.getIPAddressId(), ip.getId()); assertEquals(portForwardingRule.getVirtualMachineId(), vm.getId()); assertEquals(portForwardingRule.getPublicPort(), 22); assertEquals(portForwardingRule.getProtocol(), PortForwardingRule.Protocol.TCP); checkPortForwardingRule(portForwardingRule); checkSSH(HostAndPort.fromParts(ip.getIPAddress(), 22)); }
public void testCreatePortForwardingRule() throws Exception { if (networksDisabled) return; while (portForwardingRule == null) { ip = reuseOrAssociate.apply(network); try { AsyncCreateResponse job = client.getFirewallApi() .createPortForwardingRuleForVirtualMachine(ip.getId(), PortForwardingRule.Protocol.TCP, 22, vm.getId(), 22); assertTrue(jobComplete.apply(job.getJobId())); portForwardingRule = client.getFirewallApi().getPortForwardingRule(job.getId()); } catch (IllegalStateException e) { Logger.CONSOLE.error("Failed while trying to allocate ip: " + e); // very likely an ip conflict, so retry; } } assertEquals(portForwardingRule.getIPAddressId(), ip.getId()); assertEquals(portForwardingRule.getVirtualMachineId(), vm.getId()); assertEquals(portForwardingRule.getPublicPort(), 22); assertEquals(portForwardingRule.getProtocol(), PortForwardingRule.Protocol.TCP); checkPortForwardingRule(portForwardingRule); checkSSH(HostAndPort.fromParts(ip.getIPAddress(), 22)); }