fixes for latest version of cloudstack relating to network parsing

This commit is contained in:
Adrian Cole 2011-11-13 18:05:19 +02:00
parent 83cbebe6de
commit 15657dc3c5
8 changed files with 126 additions and 64 deletions

View File

@ -88,7 +88,7 @@ public interface NetworkAsyncClient {
*/ */
@GET @GET
@QueryParams(keys = "command", values = "deleteNetwork") @QueryParams(keys = "command", values = "deleteNetwork")
@SelectJson("network") @SelectJson("jobid")
@Consumes(MediaType.APPLICATION_JSON) @Consumes(MediaType.APPLICATION_JSON)
@ExceptionParser(ReturnNullOnNotFoundOr404.class) @ExceptionParser(ReturnNullOnNotFoundOr404.class)
ListenableFuture<Long> deleteNetwork(@QueryParam("id") long id); ListenableFuture<Long> deleteNetwork(@QueryParam("id") long id);

View File

@ -20,7 +20,6 @@ package org.jclouds.cloudstack.options;
import org.jclouds.cloudstack.domain.NetworkType; import org.jclouds.cloudstack.domain.NetworkType;
import org.jclouds.cloudstack.domain.TrafficType; import org.jclouds.cloudstack.domain.TrafficType;
import org.jclouds.http.options.BaseHttpRequestOptions;
import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSet;
@ -32,7 +31,7 @@ import com.google.common.collect.ImmutableSet;
* /> * />
* @author Adrian Cole * @author Adrian Cole
*/ */
public class ListNetworksOptions extends BaseHttpRequestOptions { public class ListNetworksOptions extends AccountInDomainOptions {
public static final ListNetworksOptions NONE = new ListNetworksOptions(); public static final ListNetworksOptions NONE = new ListNetworksOptions();
@ -81,27 +80,6 @@ public class ListNetworksOptions extends BaseHttpRequestOptions {
return this; return this;
} }
/**
*
* @param account
* account who will own the VLAN. If VLAN is Zone wide, this
* parameter should be ommited
*/
public ListNetworksOptions account(String account) {
this.queryParameters.replaceValues("account", ImmutableSet.of(account));
return this;
}
/**
* @param domainId
* domain ID of the account owning a VLAN
*/
public ListNetworksOptions domainId(long domainId) {
this.queryParameters.replaceValues("domainid", ImmutableSet.of(domainId + ""));
return this;
}
/** /**
* @param zoneId * @param zoneId
* the Zone ID of the network * the Zone ID of the network
@ -121,6 +99,22 @@ public class ListNetworksOptions extends BaseHttpRequestOptions {
return this; return this;
} }
/**
* {@inheritDoc}
*/
@Override
public ListNetworksOptions accountInDomain(String account, long domain) {
return ListNetworksOptions.class.cast(super.accountInDomain(account, domain));
}
/**
* {@inheritDoc}
*/
@Override
public ListNetworksOptions domainId(long domainId) {
return ListNetworksOptions.class.cast(super.domainId(domainId));
}
public static class Builder { public static class Builder {
/** /**
* @see ListNetworksOptions#isDefault * @see ListNetworksOptions#isDefault
@ -154,22 +148,6 @@ public class ListNetworksOptions extends BaseHttpRequestOptions {
return options.type(type); return options.type(type);
} }
/**
* @see ListNetworksOptions#domainId
*/
public static ListNetworksOptions domainId(long id) {
ListNetworksOptions options = new ListNetworksOptions();
return options.domainId(id);
}
/**
* @see ListNetworksOptions#account
*/
public static ListNetworksOptions account(String account) {
ListNetworksOptions options = new ListNetworksOptions();
return options.account(account);
}
/** /**
* @see ListNetworksOptions#id * @see ListNetworksOptions#id
*/ */
@ -193,6 +171,22 @@ public class ListNetworksOptions extends BaseHttpRequestOptions {
ListNetworksOptions options = new ListNetworksOptions(); ListNetworksOptions options = new ListNetworksOptions();
return options.trafficType(trafficType); return options.trafficType(trafficType);
} }
/**
* @see ListNetworksOptions#accountInDomain
*/
public static ListNetworksOptions accountInDomain(String account, long domain) {
ListNetworksOptions options = new ListNetworksOptions();
return options.accountInDomain(account, domain);
}
/**
* @see ListNetworksOptions#domainId
*/
public static ListNetworksOptions domainId(long domainId) {
ListNetworksOptions options = new ListNetworksOptions();
return options.domainId(domainId);
}
} }
} }

View File

@ -78,7 +78,7 @@ public class CloudStackComputeServiceAdapterLiveTest extends BaseCloudStackClien
@Override @Override
protected void configure() { protected void configure() {
bindProperties(binder(), new CloudStackPropertiesBuilder(new Properties()).build()); bindProperties(binder(), CloudStackComputeServiceAdapterLiveTest.this.setupProperties());
bind(CloudStackClient.class).toInstance(context.getApi()); bind(CloudStackClient.class).toInstance(context.getApi());
} }

View File

@ -74,6 +74,7 @@ public class BaseCloudStackClientLiveTest extends BaseVersionedServiceLiveTest {
protected RetryablePredicate<VirtualMachine> virtualMachineRunning; protected RetryablePredicate<VirtualMachine> virtualMachineRunning;
protected RetryablePredicate<VirtualMachine> virtualMachineDestroyed; protected RetryablePredicate<VirtualMachine> virtualMachineDestroyed;
protected SshClient.Factory sshFactory; protected SshClient.Factory sshFactory;
protected User currentUser;
protected String password = "password"; protected String password = "password";
protected Injector injector; protected Injector injector;
@ -82,6 +83,7 @@ public class BaseCloudStackClientLiveTest extends BaseVersionedServiceLiveTest {
protected ComputeServiceContext computeContext; protected ComputeServiceContext computeContext;
protected void checkSSH(IPSocket socket) { protected void checkSSH(IPSocket socket) {
socketTester.apply(socket); socketTester.apply(socket);
SshClient client = sshFactory.create(socket, new Credentials("root", password)); SshClient client = sshFactory.create(socket, new Credentials("root", password));
@ -108,7 +110,6 @@ public class BaseCloudStackClientLiveTest extends BaseVersionedServiceLiveTest {
client = context.getApi(); client = context.getApi();
// check access // check access
Iterable<User> users = Iterables.concat(client.getAccountClient().listAccounts()); Iterable<User> users = Iterables.concat(client.getAccountClient().listAccounts());
User currentUser;
Predicate<User> apiKeyMatches = UserPredicates.apiKeyEquals(identity); Predicate<User> apiKeyMatches = UserPredicates.apiKeyEquals(identity);
try { try {
currentUser = Iterables.find(users, apiKeyMatches); currentUser = Iterables.find(users, apiKeyMatches);

View File

@ -19,6 +19,10 @@
package org.jclouds.cloudstack.features; package org.jclouds.cloudstack.features;
import static com.google.common.collect.Iterables.find; import static com.google.common.collect.Iterables.find;
import static com.google.common.collect.Iterables.getOnlyElement;
import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.accountInDomain;
import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.id;
import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.zoneId;
import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
@ -30,14 +34,13 @@ import org.jclouds.cloudstack.domain.GuestIPType;
import org.jclouds.cloudstack.domain.Network; import org.jclouds.cloudstack.domain.Network;
import org.jclouds.cloudstack.domain.NetworkOffering; import org.jclouds.cloudstack.domain.NetworkOffering;
import org.jclouds.cloudstack.domain.Zone; import org.jclouds.cloudstack.domain.Zone;
import org.jclouds.cloudstack.options.ListNetworksOptions;
import org.jclouds.cloudstack.predicates.NetworkOfferingPredicates; import org.jclouds.cloudstack.predicates.NetworkOfferingPredicates;
import org.jclouds.cloudstack.predicates.ZonePredicates; import org.jclouds.cloudstack.predicates.ZonePredicates;
import org.testng.annotations.AfterGroups; import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups; import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test; import org.testng.annotations.Test;
import com.google.common.collect.Iterables; import com.google.common.base.Predicate;
/** /**
* Tests behavior of {@code NetworkClientLiveTest} * Tests behavior of {@code NetworkClientLiveTest}
@ -54,6 +57,9 @@ public class NetworkClientLiveTest extends BaseCloudStackClientLiveTest {
private Network network; private Network network;
// only delete networks we create
private boolean weCreatedNetwork;
@BeforeGroups(groups = "live") @BeforeGroups(groups = "live")
public void setupClient() { public void setupClient() {
super.setupClient(); super.setupClient();
@ -62,7 +68,7 @@ public class NetworkClientLiveTest extends BaseCloudStackClientLiveTest {
// you can create guest direct network by Admin user, but since we are // you can create guest direct network by Admin user, but since we are
// not admin, let's try to create a guest virtual one // not admin, let's try to create a guest virtual one
zone = find(client.getZoneClient().listZones(), ZonePredicates.supportsGuestVirtualNetworks()); zone = find(client.getZoneClient().listZones(), ZonePredicates.supportsGuestVirtualNetworks());
offering = Iterables.find(client.getOfferingClient().listNetworkOfferings(), offering = find(client.getOfferingClient().listNetworkOfferings(),
NetworkOfferingPredicates.supportsGuestVirtualNetworks()); NetworkOfferingPredicates.supportsGuestVirtualNetworks());
networksSupported = true; networksSupported = true;
} catch (NoSuchElementException e) { } catch (NoSuchElementException e) {
@ -72,34 +78,39 @@ public class NetworkClientLiveTest extends BaseCloudStackClientLiveTest {
public void testCreateNetwork() throws Exception { public void testCreateNetwork() throws Exception {
if (!networksSupported) if (!networksSupported)
return; return;
network = client.getNetworkClient().createNetworkInZone(zone.getId(), offering.getId(), prefix, prefix); try {
network = client.getNetworkClient().createNetworkInZone(zone.getId(), offering.getId(), prefix, prefix);
weCreatedNetwork = true;
} catch (IllegalStateException e) {
network = find(
client.getNetworkClient().listNetworks(
zoneId(zone.getId()).accountInDomain(currentUser.getAccount(), currentUser.getDomainId())),
new Predicate<Network>() {
@Override
public boolean apply(Network arg0) {
return arg0.getNetworkOfferingId() == offering.getId();
}
});
}
checkNetwork(network); checkNetwork(network);
} }
@AfterGroups(groups = "live") @Test(dependsOnMethods = "testCreateNetwork")
protected void tearDown() {
if (network != null) {
Long jobId = client.getNetworkClient().deleteNetwork(network.getId());
if (jobId != null)
jobComplete.apply(jobId);
}
super.tearDown();
}
public void testListNetworks() throws Exception { public void testListNetworks() throws Exception {
if (!networksSupported) if (!networksSupported)
return; return;
Set<Network> response = client.getNetworkClient().listNetworks(); Set<Network> response = client.getNetworkClient().listNetworks(
accountInDomain(network.getAccount(), network.getDomainId()));
assert null != response; assert null != response;
long networkCount = response.size(); long networkCount = response.size();
assertTrue(networkCount >= 0); assertTrue(networkCount >= 0);
for (Network network : response) { for (Network network : response) {
Network newDetails = Iterables.getOnlyElement(client.getNetworkClient().listNetworks( Network newDetails = getOnlyElement(client.getNetworkClient().listNetworks(id(network.getId())));
ListNetworksOptions.Builder.id(network.getId())));
assertEquals(network, newDetails); assertEquals(network, newDetails);
assertEquals(network, client.getNetworkClient().getNetwork(network.getId())); assertEquals(network, client.getNetworkClient().getNetwork(network.getId()));
checkNetwork(network); checkNetwork(network);
} }
} }
@ -142,4 +153,15 @@ public class NetworkClientLiveTest extends BaseCloudStackClientLiveTest {
break; break;
} }
} }
@AfterGroups(groups = "live")
protected void tearDown() {
if (network != null && weCreatedNetwork) {
Long jobId = client.getNetworkClient().deleteNetwork(network.getId());
if (jobId != null)
jobComplete.apply(jobId);
}
super.tearDown();
}
} }

View File

@ -18,7 +18,7 @@
*/ */
package org.jclouds.cloudstack.options; package org.jclouds.cloudstack.options;
import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.account; import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.accountInDomain;
import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.domainId; import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.domainId;
import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.id; import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.id;
import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.isDefault; import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.isDefault;
@ -94,13 +94,14 @@ public class ListNetworksOptionsTest {
} }
public void testAccountId() { public void testAccountId() {
ListNetworksOptions options = new ListNetworksOptions().account("moo"); ListNetworksOptions options = new ListNetworksOptions().accountInDomain("moo", 1);
assertEquals(ImmutableList.of("moo"), options.buildQueryParameters().get("account")); assertEquals(ImmutableList.of("1"), options.buildQueryParameters().get("domainid"));
} }
public void testAccountIdStatic() { public void testAccountIdStatic() {
ListNetworksOptions options = account("moo"); ListNetworksOptions options = accountInDomain("moo", 1l);
assertEquals(ImmutableList.of("moo"), options.buildQueryParameters().get("account")); assertEquals(ImmutableList.of("moo"), options.buildQueryParameters().get("account"));
assertEquals(ImmutableList.of("1"), options.buildQueryParameters().get("domainid"));
} }
public void testTrafficType() { public void testTrafficType() {

View File

@ -0,0 +1,43 @@
/**
* Licensed to jclouds, Inc. (jclouds) under one or more
* contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. jclouds 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.jclouds.cloudstack.parse;
import org.jclouds.json.BaseItemParserTest;
import org.jclouds.rest.annotations.SelectJson;
import org.testng.annotations.Test;
/**
*
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "DeleteNetworkResponseTest")
public class DeleteNetworkResponseTest extends BaseItemParserTest<Long> {
@Override
public String resource() {
return "/deletenetworkresponse.json";
}
@Override
@SelectJson("jobid")
public Long expected() {
return 45612l;
}
}

View File

@ -0,0 +1 @@
{ "deletenetworkresponse" : {"jobid":45612} }