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
@QueryParams(keys = "command", values = "deleteNetwork")
@SelectJson("network")
@SelectJson("jobid")
@Consumes(MediaType.APPLICATION_JSON)
@ExceptionParser(ReturnNullOnNotFoundOr404.class)
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.TrafficType;
import org.jclouds.http.options.BaseHttpRequestOptions;
import com.google.common.collect.ImmutableSet;
@ -32,7 +31,7 @@ import com.google.common.collect.ImmutableSet;
* />
* @author Adrian Cole
*/
public class ListNetworksOptions extends BaseHttpRequestOptions {
public class ListNetworksOptions extends AccountInDomainOptions {
public static final ListNetworksOptions NONE = new ListNetworksOptions();
@ -81,27 +80,6 @@ public class ListNetworksOptions extends BaseHttpRequestOptions {
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
* the Zone ID of the network
@ -121,6 +99,22 @@ public class ListNetworksOptions extends BaseHttpRequestOptions {
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 {
/**
* @see ListNetworksOptions#isDefault
@ -154,22 +148,6 @@ public class ListNetworksOptions extends BaseHttpRequestOptions {
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
*/
@ -193,6 +171,22 @@ public class ListNetworksOptions extends BaseHttpRequestOptions {
ListNetworksOptions options = new ListNetworksOptions();
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
protected void configure() {
bindProperties(binder(), new CloudStackPropertiesBuilder(new Properties()).build());
bindProperties(binder(), CloudStackComputeServiceAdapterLiveTest.this.setupProperties());
bind(CloudStackClient.class).toInstance(context.getApi());
}

View File

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

View File

@ -19,6 +19,10 @@
package org.jclouds.cloudstack.features;
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.assertTrue;
@ -30,14 +34,13 @@ import org.jclouds.cloudstack.domain.GuestIPType;
import org.jclouds.cloudstack.domain.Network;
import org.jclouds.cloudstack.domain.NetworkOffering;
import org.jclouds.cloudstack.domain.Zone;
import org.jclouds.cloudstack.options.ListNetworksOptions;
import org.jclouds.cloudstack.predicates.NetworkOfferingPredicates;
import org.jclouds.cloudstack.predicates.ZonePredicates;
import org.testng.annotations.AfterGroups;
import org.testng.annotations.BeforeGroups;
import org.testng.annotations.Test;
import com.google.common.collect.Iterables;
import com.google.common.base.Predicate;
/**
* Tests behavior of {@code NetworkClientLiveTest}
@ -54,6 +57,9 @@ public class NetworkClientLiveTest extends BaseCloudStackClientLiveTest {
private Network network;
// only delete networks we create
private boolean weCreatedNetwork;
@BeforeGroups(groups = "live")
public void 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
// not admin, let's try to create a guest virtual one
zone = find(client.getZoneClient().listZones(), ZonePredicates.supportsGuestVirtualNetworks());
offering = Iterables.find(client.getOfferingClient().listNetworkOfferings(),
offering = find(client.getOfferingClient().listNetworkOfferings(),
NetworkOfferingPredicates.supportsGuestVirtualNetworks());
networksSupported = true;
} catch (NoSuchElementException e) {
@ -72,34 +78,39 @@ public class NetworkClientLiveTest extends BaseCloudStackClientLiveTest {
public void testCreateNetwork() throws Exception {
if (!networksSupported)
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);
}
@AfterGroups(groups = "live")
protected void tearDown() {
if (network != null) {
Long jobId = client.getNetworkClient().deleteNetwork(network.getId());
if (jobId != null)
jobComplete.apply(jobId);
}
super.tearDown();
}
@Test(dependsOnMethods = "testCreateNetwork")
public void testListNetworks() throws Exception {
if (!networksSupported)
return;
Set<Network> response = client.getNetworkClient().listNetworks();
Set<Network> response = client.getNetworkClient().listNetworks(
accountInDomain(network.getAccount(), network.getDomainId()));
assert null != response;
long networkCount = response.size();
assertTrue(networkCount >= 0);
for (Network network : response) {
Network newDetails = Iterables.getOnlyElement(client.getNetworkClient().listNetworks(
ListNetworksOptions.Builder.id(network.getId())));
Network newDetails = getOnlyElement(client.getNetworkClient().listNetworks(id(network.getId())));
assertEquals(network, newDetails);
assertEquals(network, client.getNetworkClient().getNetwork(network.getId()));
checkNetwork(network);
}
}
@ -142,4 +153,15 @@ public class NetworkClientLiveTest extends BaseCloudStackClientLiveTest {
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;
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.id;
import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.isDefault;
@ -94,13 +94,14 @@ public class ListNetworksOptionsTest {
}
public void testAccountId() {
ListNetworksOptions options = new ListNetworksOptions().account("moo");
assertEquals(ImmutableList.of("moo"), options.buildQueryParameters().get("account"));
ListNetworksOptions options = new ListNetworksOptions().accountInDomain("moo", 1);
assertEquals(ImmutableList.of("1"), options.buildQueryParameters().get("domainid"));
}
public void testAccountIdStatic() {
ListNetworksOptions options = account("moo");
ListNetworksOptions options = accountInDomain("moo", 1l);
assertEquals(ImmutableList.of("moo"), options.buildQueryParameters().get("account"));
assertEquals(ImmutableList.of("1"), options.buildQueryParameters().get("domainid"));
}
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} }