You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2014/11/27 07:46:02 UTC
[53/79] stratos git commit: adding cloudstack dependancy
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalUserApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalUserApiLiveTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalUserApiLiveTest.java
new file mode 100644
index 0000000..cccfa62
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalUserApiLiveTest.java
@@ -0,0 +1,104 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static com.google.common.base.Charsets.UTF_8;
+import static com.google.common.base.Preconditions.checkNotNull;
+import static com.google.common.hash.Hashing.md5;
+import static com.google.common.io.BaseEncoding.base16;
+import static org.jclouds.cloudstack.features.GlobalAccountApiLiveTest.createTestAccount;
+import static org.jclouds.cloudstack.options.UpdateUserOptions.Builder.userName;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import java.util.Properties;
+import java.util.Set;
+
+import org.jclouds.cloudstack.CloudStackApi;
+import org.jclouds.cloudstack.CloudStackContext;
+import org.jclouds.cloudstack.CloudStackGlobalApi;
+import org.jclouds.cloudstack.domain.Account;
+import org.jclouds.cloudstack.domain.ApiKeyPair;
+import org.jclouds.cloudstack.domain.User;
+import org.jclouds.cloudstack.internal.BaseCloudStackApiLiveTest;
+import org.testng.annotations.Test;
+
+/**
+ * Tests behavior of {@code GlobaUserClient}
+ */
+@Test(groups = "live", singleThreaded = true, testName = "GlobalUserApiLiveTest")
+public class GlobalUserApiLiveTest extends BaseCloudStackApiLiveTest {
+
+ public static User createTestUser(CloudStackGlobalApi client, Account account, String prefix) {
+ return client.getUserClient().createUser(prefix + "-user", account.getName(), "dummy2@example.com",
+ base16().lowerCase().encode(md5().hashString("password", UTF_8).asBytes()), "First", "Last");
+ }
+
+ @Test
+ public void testCreateUser() {
+ skipIfNotGlobalAdmin();
+
+ Account testAccount = createTestAccount(globalAdminClient, prefix);
+ User testUser = null;
+ try {
+ testUser = createTestUser(globalAdminClient, testAccount, prefix);
+
+ assertNotNull(testUser);
+ assertEquals(testUser.getName(), prefix + "-user");
+ assertEquals(testUser.getAccount(), prefix + "-account");
+
+ User updatedUser = globalAdminClient.getUserClient()
+ .updateUser(testUser.getId(), userName(prefix + "-user-2"));
+
+ assertNotNull(updatedUser);
+ assertEquals(updatedUser.getName(), prefix + "-user-2");
+
+ ApiKeyPair apiKeys = globalAdminClient.getUserClient()
+ .registerUserKeys(updatedUser.getId());
+
+ assertNotNull(apiKeys.getApiKey());
+ assertNotNull(apiKeys.getSecretKey());
+
+ checkAuthAsUser(apiKeys);
+
+ } finally {
+ if (testUser != null) {
+ globalAdminClient.getUserClient().deleteUser(testUser.getId());
+ }
+ globalAdminClient.getAccountApi().deleteAccount(testAccount.getId());
+ }
+ }
+
+ private void checkAuthAsUser(ApiKeyPair keyPair) {
+ CloudStackContext context = createView(credentialsAsProperties(keyPair), setupModules());
+
+ CloudStackApi client = context.getApi();
+ Set<Account> accounts = client.getAccountApi().listAccounts();
+
+ assert !accounts.isEmpty();
+
+ context.close();
+ }
+
+ private Properties credentialsAsProperties(ApiKeyPair keyPair) {
+ Properties overrides = setupProperties();
+ overrides.put(provider + ".identity", checkNotNull(keyPair.getApiKey()));
+ overrides.put(provider + ".credential", checkNotNull(keyPair.getSecretKey()));
+ return overrides;
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalUserApiTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalUserApiTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalUserApiTest.java
new file mode 100644
index 0000000..4c8f76a
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalUserApiTest.java
@@ -0,0 +1,98 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static org.jclouds.reflect.Reflection2.method;
+
+import org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import org.jclouds.cloudstack.internal.BaseCloudStackApiTest;
+import org.jclouds.cloudstack.options.CreateUserOptions;
+import org.jclouds.cloudstack.options.UpdateUserOptions;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.functions.ParseFirstJsonValueNamed;
+import org.jclouds.http.functions.ReleasePayloadAndReturn;
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.reflect.Invokable;
+/**
+ * Tests behavior of {@code GlobalUserApi}
+ */
+@Test(groups = "unit", testName = "GlobalUserApiTest")
+public class GlobalUserApiTest extends BaseCloudStackApiTest<GlobalUserApi> {
+
+ HttpRequest createUser = HttpRequest.builder().method("GET")
+ .endpoint("http://localhost:8080/client/api")
+ .addQueryParam("response", "json")
+ .addQueryParam("command", "createUser")
+ .addQueryParam("username", "user")
+ .addQueryParam("account", "account")
+ .addQueryParam("email", "email%40example.com")
+ .addQueryParam("password", "hashed-password")
+ .addQueryParam("firstname", "FirstName")
+ .addQueryParam("lastname", "LastName").build();
+
+ public void testCreateAccount() throws Exception {
+ Invokable<?, ?> method = method(GlobalUserApi.class, "createUser", String.class, String.class,
+ String.class, String.class, String.class, String.class, CreateUserOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of("user", "account", "email@example.com",
+ "hashed-password", "FirstName", "LastName"));
+
+ assertRequestLineEquals(httpRequest, createUser.getRequestLine());
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, NullOnNotFoundOr404.class);
+
+ checkFilters(httpRequest);
+ }
+
+ public void testUpdateUser() throws Exception {
+ Invokable<?, ?> method = method(GlobalUserApi.class, "updateUser", String.class, UpdateUserOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(42L));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=updateUser&id=42 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, NullOnNotFoundOr404.class);
+
+ checkFilters(httpRequest);
+ }
+
+ public void testDeleteUser() throws Exception {
+ Invokable<?, ?> method = method(GlobalUserApi.class, "deleteUser", String.class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(42L));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=deleteUser&id=42 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ReleasePayloadAndReturn.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, NullOnNotFoundOr404.class);
+
+ checkFilters(httpRequest);
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalVlanApiExpectTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalVlanApiExpectTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalVlanApiExpectTest.java
new file mode 100644
index 0000000..6b9a2c7
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalVlanApiExpectTest.java
@@ -0,0 +1,169 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static org.testng.Assert.assertEquals;
+
+import java.net.URI;
+
+import org.jclouds.cloudstack.CloudStackContext;
+import org.jclouds.cloudstack.domain.VlanIPRange;
+import org.jclouds.cloudstack.internal.BaseCloudStackExpectTest;
+import org.jclouds.cloudstack.options.CreateVlanIPRangeOptions;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Test the CloudStack VlanClient
+ */
+@Test(groups = "unit", testName = "GlobalVlanApiExpectTest")
+public class GlobalVlanApiExpectTest extends BaseCloudStackExpectTest<GlobalVlanApi> {
+
+ public void testListVlanIpRangesWhenResponseIs2xx() {
+ GlobalVlanApi client = requestSendsResponse(
+ HttpRequest.builder()
+ .method("GET")
+ .endpoint(
+ URI.create("http://localhost:8080/client/api?response=json&" +
+ "command=listVlanIpRanges&listAll=true&apiKey=identity&signature=xPwCeAcMp9kDGbD5oPgztLtSdnU%3D"))
+ .addHeader("Accept", "application/json")
+ .build(),
+ HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResource("/listvlaniprangesresponse.json"))
+ .build());
+
+ VlanIPRange range1 = VlanIPRange.builder()
+ .id("1")
+ .forVirtualNetwork(true)
+ .zoneId("1")
+ .vlan("127")
+ .account("system")
+ .domainId("1")
+ .domain("ROOT")
+ .gateway("10.27.27.254")
+ .netmask("255.255.255.0")
+ .startIP("10.27.27.50")
+ .endIP("10.27.27.100")
+ .networkId("200")
+ .build();
+
+ VlanIPRange range2 = VlanIPRange.builder()
+ .id("2")
+ .forVirtualNetwork(false)
+ .zoneId("2")
+ .vlan("untagged")
+ .account("system")
+ .domainId("1")
+ .domain("ROOT")
+ .podId("2")
+ .podName("Dev Pod 2")
+ .gateway("10.22.22.254")
+ .netmask("255.255.255.0")
+ .startIP("10.22.22.51")
+ .endIP("10.22.22.100")
+ .networkId("209")
+ .build();
+
+ assertEquals(client.listVlanIPRanges(), ImmutableSet.of(range1, range2));
+ }
+
+ public void testListVlanIpRangesWhenResponseIs404() {
+ GlobalVlanApi client = requestSendsResponse(
+ HttpRequest.builder()
+ .method("GET")
+ .endpoint(
+ URI.create("http://localhost:8080/client/api?response=json&" +
+ "command=listVlanIpRanges&listAll=true&apiKey=identity&signature=xPwCeAcMp9kDGbD5oPgztLtSdnU%3D"))
+ .addHeader("Accept", "application/json")
+ .build(),
+ HttpResponse.builder()
+ .statusCode(404)
+ .build());
+
+ assertEquals(client.listVlanIPRanges(), ImmutableSet.of());
+ }
+
+ public void testCreateVlanIpRangeWhenResponseIs2xx() {
+ GlobalVlanApi client = requestSendsResponse(
+ HttpRequest.builder()
+ .method("GET")
+ .endpoint(
+ URI.create("http://localhost:8080/client/api?response=json&" +
+ "command=createVlanIpRange&startip=10.22.22.51&endip=10.22.22.100&forvirtualnetwork=false&zoneid=2&vlan=untagged&account=system&domainid=1&podid=2&gateway=10.22.22.254&netmask=255.255.255.0&networkid=209&apiKey=identity&signature=XgDjPYAQNLMVCuSMGRA6QjV8mOY%3D"))
+ .addHeader("Accept", "application/json")
+ .build(),
+ HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResource("/createvlaniprangeresponse.json"))
+ .build());
+
+ VlanIPRange actual = client.createVlanIPRange("10.22.22.51", "10.22.22.100", new CreateVlanIPRangeOptions()
+ .forVirtualNetwork(false)
+ .zoneId("2")
+ .vlan("untagged")
+ .accountInDomain("system", "1")
+ .podId("2")
+ .gateway("10.22.22.254")
+ .netmask("255.255.255.0")
+ .networkId("209"));
+
+ VlanIPRange expected = VlanIPRange.builder()
+ .id("2")
+ .forVirtualNetwork(false)
+ .zoneId("2")
+ .vlan("untagged")
+ .account("system")
+ .domainId("1")
+ .domain("ROOT")
+ .podId("2")
+ .podName("Dev Pod 2")
+ .gateway("10.22.22.254")
+ .netmask("255.255.255.0")
+ .startIP("10.22.22.51")
+ .endIP("10.22.22.100")
+ .networkId("209")
+ .build();
+
+ assertEquals(actual, expected);
+ }
+
+ public void testDeleteVlanIpRangeWhenResponseIs2xx() {
+ GlobalVlanApi client = requestSendsResponse(
+ HttpRequest.builder()
+ .method("GET")
+ .endpoint(
+ URI.create("http://localhost:8080/client/api?response=json&" +
+ "command=deleteVlanIpRange&id=1&apiKey=identity&signature=tTBbpdCndgHXdR397fbbJaN1RZU%3D"))
+ .addHeader("Accept", "application/json")
+ .build(),
+ HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResource("/createvlaniprangeresponse.json"))
+ .build());
+
+ client.deleteVlanIPRange("1");
+ }
+
+ @Override
+ protected GlobalVlanApi clientFrom(CloudStackContext context) {
+ return context.getGlobalApi().getVlanClient();
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalVlanApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalVlanApiLiveTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalVlanApiLiveTest.java
new file mode 100644
index 0000000..34fe5be
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalVlanApiLiveTest.java
@@ -0,0 +1,135 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static org.jclouds.cloudstack.options.ListNetworksOptions.Builder.zoneId;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Set;
+
+import org.jclouds.cloudstack.domain.Network;
+import org.jclouds.cloudstack.domain.NetworkOffering;
+import org.jclouds.cloudstack.domain.TrafficType;
+import org.jclouds.cloudstack.domain.VlanIPRange;
+import org.jclouds.cloudstack.domain.Zone;
+import org.jclouds.cloudstack.internal.BaseCloudStackApiLiveTest;
+import org.jclouds.cloudstack.options.CreateVlanIPRangeOptions;
+import org.jclouds.cloudstack.options.ListVlanIPRangesOptions;
+import org.jclouds.cloudstack.predicates.NetworkOfferingPredicates;
+import org.jclouds.cloudstack.predicates.ZonePredicates;
+import org.testng.annotations.AfterGroups;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Predicate;
+import com.google.common.base.Strings;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Sets;
+
+/**
+ * Tests behavior of {@code GlobalVlanApi}
+ */
+@Test(groups = "live", singleThreaded = true, testName = "GlobalVlanApiLiveTest")
+public class GlobalVlanApiLiveTest extends BaseCloudStackApiLiveTest {
+
+ private Network network;
+ private boolean usingExistingNetwork;
+
+ private VlanIPRange range;
+
+ @Test
+ public void testListVlanIPRanges() throws Exception {
+ skipIfNotGlobalAdmin();
+
+ Set<VlanIPRange> response = globalAdminClient.getVlanClient().listVlanIPRanges();
+ assert null != response;
+ long rangeCount = response.size();
+ assertTrue(rangeCount >= 0);
+
+ for (VlanIPRange range : response) {
+ VlanIPRange newDetails = Iterables.getOnlyElement(globalAdminClient.getVlanClient().listVlanIPRanges(
+ ListVlanIPRangesOptions.Builder.id(range.getId())));
+ assertEquals(range, newDetails);
+ assertEquals(range, globalAdminClient.getVlanClient().getVlanIPRange(range.getId()));
+ assertNull(range.getId());
+ assertNull(range.getZoneId());
+ assertFalse(Strings.isNullOrEmpty(range.getVlan()));
+ assertFalse(Strings.isNullOrEmpty(range.getAccount()));
+ assertNull(range.getDomainId());
+ assertFalse(Strings.isNullOrEmpty(range.getDomain()));
+ assertFalse(Strings.isNullOrEmpty(range.getGateway()));
+ assertFalse(Strings.isNullOrEmpty(range.getNetmask()));
+ assertFalse(Strings.isNullOrEmpty(range.getStartIP()));
+ assertFalse(Strings.isNullOrEmpty(range.getEndIP()));
+ assertNull(range.getNetworkId());
+ }
+ }
+
+ @Test
+ public void testCreateVlanIPRange() {
+ skipIfNotGlobalAdmin();
+
+ final Zone zone = Iterables.find(client.getZoneApi().listZones(), ZonePredicates.supportsAdvancedNetworks());
+ final NetworkOffering offering = Iterables.tryFind(client.getOfferingApi().listNetworkOfferings(),
+ NetworkOfferingPredicates.supportsGuestVirtualNetworks()).orNull();
+
+ if (offering != null) {
+ Set<Network> suitableNetworks = Sets.filter(client.getNetworkApi().listNetworks(
+ zoneId(zone.getId()).isSystem(false).trafficType(TrafficType.GUEST)),
+ new Predicate<Network>() {
+ @Override
+ public boolean apply(Network network) {
+ return network.getNetworkOfferingId().equals(offering.getId());
+ }
+ });
+
+ if (!suitableNetworks.isEmpty()) {
+ network = Iterables.get(suitableNetworks, 0);
+ usingExistingNetwork = true;
+
+ } else if (network == null) {
+ network = client.getNetworkApi().createNetworkInZone(zone.getId(),
+ offering.getId(), "net-" + prefix, "jclouds test " + prefix);
+ usingExistingNetwork = false;
+ }
+
+ range = globalAdminClient.getVlanClient().createVlanIPRange("172.19.1.1", "172.19.1.199", CreateVlanIPRangeOptions.Builder
+ .accountInDomain(user.getAccount(), user.getDomainId())
+ .forVirtualNetwork(true)
+ .vlan(1001)
+ .networkId(network.getId())
+ );
+ }
+ }
+
+ @AfterGroups(groups = "live")
+ @Override
+ protected void tearDownContext() {
+ if (range != null) {
+ globalAdminClient.getVlanClient().deleteVlanIPRange(range.getId());
+ range = null;
+ }
+ if (network != null && !usingExistingNetwork) {
+ client.getNetworkApi().deleteNetwork(network.getId());
+ network = null;
+ }
+ super.tearDownContext();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalZoneApiExpectTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalZoneApiExpectTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalZoneApiExpectTest.java
new file mode 100644
index 0000000..80364d5
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalZoneApiExpectTest.java
@@ -0,0 +1,133 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static org.jclouds.cloudstack.options.UpdateZoneOptions.Builder.name;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+
+import java.net.URI;
+
+import org.jclouds.cloudstack.CloudStackContext;
+import org.jclouds.cloudstack.domain.AllocationState;
+import org.jclouds.cloudstack.domain.NetworkType;
+import org.jclouds.cloudstack.domain.Zone;
+import org.jclouds.cloudstack.internal.BaseCloudStackExpectTest;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMultimap;
+
+/**
+ * Test the CloudStack GlobalZoneApi
+ */
+@Test(groups = "unit", testName = "GlobalZoneApiExpectTest")
+public class GlobalZoneApiExpectTest extends BaseCloudStackExpectTest<GlobalZoneApi> {
+
+ HttpRequest createZone = HttpRequest.builder().method("GET")
+ .endpoint("http://localhost:8080/client/api")
+ .addQueryParam("response", "json")
+ .addQueryParam("command", "createZone")
+ .addQueryParam("name", "test-zone")
+ .addQueryParam("networktype", "Basic")
+ .addQueryParam("dns1", "8.8.8.8")
+ .addQueryParam("internaldns1", "10.10.10.10")
+ .addQueryParam("apiKey", "identity")
+ .addQueryParam("signature", "hWNmM2%2BTsfb5DelQa/GJLN5DVWE=")
+ .addHeader("Accept", "application/json").build();
+
+ public void testCreateZoneWhenResponseIs2xxAnd404() {
+ GlobalZoneApi client = requestSendsResponse(createZone,
+ HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResource("/createzoneresponse.json"))
+ .build());
+
+ assertEquals(client.createZone("test-zone", NetworkType.BASIC, "8.8.8.8", "10.10.10.10"),
+ Zone.builder()
+ .id("6")
+ .name("test-zone")
+ .DNS(ImmutableList.of("8.8.8.8"))
+ .internalDNS(ImmutableList.of("10.10.10.10"))
+ .networkType(NetworkType.BASIC)
+ .securityGroupsEnabled(true)
+ .allocationState(AllocationState.ENABLED)
+ .zoneToken("7b6e27df-30a6-3024-9d8b-7971a3127f64")
+ .dhcpProvider("DhcpServer").build());
+
+ client = requestSendsResponse(createZone, HttpResponse.builder().statusCode(404).build());
+ assertNull(client.createZone("test-zone", NetworkType.BASIC, "8.8.8.8", "10.10.10.10"));
+ }
+
+ public void testUpdateZoneWhenResponseIs2xxAnd404() {
+ HttpRequest request = HttpRequest.builder()
+ .method("GET")
+ .endpoint(
+ URI.create("http://localhost:8080/client/api?response=json&command=updateZone&" +
+ "id=6&name=test-zone&dns1=8.8.8.8&apiKey=identity&signature=v19FdHKHztdT0IRloYFFn0eNbWM%3D"))
+ .headers(
+ ImmutableMultimap.<String, String>builder()
+ .put("Accept", "application/json")
+ .build())
+ .build();
+
+ GlobalZoneApi client = requestSendsResponse(request,
+ HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResource("/updatezoneresponse.json"))
+ .build());
+
+ assertEquals(client.updateZone("6", name("test-zone").externalDns(ImmutableList.of("8.8.8.8"))),
+ Zone.builder()
+ .id("6")
+ .name("test-zone")
+ .DNS(ImmutableList.of("8.8.8.8"))
+ .internalDNS(ImmutableList.of("10.10.10.10"))
+ .networkType(NetworkType.BASIC)
+ .securityGroupsEnabled(true)
+ .allocationState(AllocationState.ENABLED)
+ .zoneToken("7b6e27df-30a6-3024-9d8b-7971a3127f64")
+ .dhcpProvider("DhcpServer").build());
+
+ client = requestSendsResponse(request, HttpResponse.builder().statusCode(404).build());
+ assertNull(client.updateZone("6", name("test-zone").externalDns(ImmutableList.of("8.8.8.8"))));
+ }
+
+ public void testDeleteZone() {
+ GlobalZoneApi client = requestSendsResponse(
+ HttpRequest.builder()
+ .method("GET")
+ .endpoint(
+ URI.create("http://localhost:8080/client/api?response=json&" +
+ "command=deleteZone&id=6&apiKey=identity&signature=TfkzSIK8kzGJnIYo3DofECyuOII%3D"))
+ .addHeader("Accept", "application/json")
+ .build(),
+ HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResource("/deletezoneresponse.json"))
+ .build());
+
+ client.deleteZone("6");
+ }
+
+ @Override
+ protected GlobalZoneApi clientFrom(CloudStackContext context) {
+ return context.getGlobalApi().getZoneApi();
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalZoneApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalZoneApiLiveTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalZoneApiLiveTest.java
new file mode 100644
index 0000000..8e83343
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GlobalZoneApiLiveTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static org.jclouds.cloudstack.options.UpdateZoneOptions.Builder.name;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import org.jclouds.cloudstack.domain.NetworkType;
+import org.jclouds.cloudstack.domain.Zone;
+import org.jclouds.cloudstack.internal.BaseCloudStackApiLiveTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+
+/**
+ * Tests behavior of {@code GlobalZoneApi}
+ */
+@Test(groups = "live", singleThreaded = true, testName = "GlobalZoneApiLiveTest")
+public class GlobalZoneApiLiveTest extends BaseCloudStackApiLiveTest {
+
+ @Test
+ public void testCreateUpdateDeleteZone() {
+ skipIfNotGlobalAdmin();
+
+ Zone zone = null;
+ String zoneName = prefix + "-zone";
+ try {
+ zone = globalAdminClient.getZoneApi().createZone(zoneName,
+ NetworkType.BASIC, "8.8.8.8", "10.10.10.10");
+
+ assertNotNull(zone);
+ assertEquals(zone, globalAdminClient.getZoneApi().getZone(zone.getId()));
+ assertEquals(zone.getNetworkType(), NetworkType.BASIC);
+ assertEquals(zone.getDNS(), ImmutableList.of("8.8.8.8"));
+ assertEquals(zone.getInternalDNS(), ImmutableList.of("10.10.10.10"));
+
+ Zone updated = globalAdminClient.getZoneApi().updateZone(zone.getId(),
+ name(zoneName + "-2").externalDns(ImmutableList.of("8.8.4.4")));
+ assertEquals(updated.getId(), zone.getId());
+ assertEquals(updated.getDNS(), ImmutableList.of("8.8.4.4"));
+
+ } finally {
+ if (zone != null) {
+ globalAdminClient.getZoneApi().deleteZone(zone.getId());
+ }
+ }
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GuestOSApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GuestOSApiLiveTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GuestOSApiLiveTest.java
new file mode 100644
index 0000000..43c0d3a
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GuestOSApiLiveTest.java
@@ -0,0 +1,73 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static com.google.common.collect.Iterables.getOnlyElement;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.jclouds.cloudstack.domain.OSType;
+import org.jclouds.cloudstack.internal.BaseCloudStackApiLiveTest;
+import org.jclouds.cloudstack.options.ListOSTypesOptions;
+import org.testng.annotations.Test;
+
+/**
+ * Tests behavior of {@code GuestOSApiLiveTest}
+ */
+@Test(groups = "live", singleThreaded = true, testName = "GuestOSApiLiveTest")
+public class GuestOSApiLiveTest extends BaseCloudStackApiLiveTest {
+
+ public void testListOSTypes() throws Exception {
+ Set<OSType> response = client.getGuestOSApi().listOSTypes();
+ assert null != response;
+ assertTrue(response.size() >= 0);
+ for (OSType type : response) {
+ OSType newDetails = getOnlyElement(client.getGuestOSApi().listOSTypes(
+ ListOSTypesOptions.Builder.id(type.getId())));
+ assertEquals(type.getId(), newDetails.getId());
+ checkOSType(type);
+ }
+ }
+
+ public void testListOSCategories() throws Exception {
+ Map<String, String> response = client.getGuestOSApi().listOSCategories();
+ assert null != response;
+ assertTrue(response.size() >= 0);
+ for (Entry<String, String> category : response.entrySet()) {
+ checkOSCategory(category);
+ }
+ }
+
+ protected void checkOSCategory(Entry<String, String> category) {
+ assertEquals(category, client.getGuestOSApi().getOSCategory(category.getKey()));
+ assert category.getKey() != null : category;
+ assert category.getValue() != null : category;
+ }
+
+ protected void checkOSType(OSType type) {
+ assertEquals(type.getId(), client.getGuestOSApi().getOSType(type.getId()).getId());
+ assert type.getId() != null : type;
+ assert type.getOSCategoryId() != null : type;
+ assert type.getDescription() != null : type;
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GuestOSApiTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GuestOSApiTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GuestOSApiTest.java
new file mode 100644
index 0000000..5f3e657
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/GuestOSApiTest.java
@@ -0,0 +1,130 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static org.jclouds.reflect.Reflection2.method;
+
+import java.io.IOException;
+
+import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404;
+import org.jclouds.Fallbacks.NullOnNotFoundOr404;
+import org.jclouds.cloudstack.functions.ParseIdToNameEntryFromHttpResponse;
+import org.jclouds.cloudstack.functions.ParseIdToNameFromHttpResponse;
+import org.jclouds.cloudstack.internal.BaseCloudStackApiTest;
+import org.jclouds.cloudstack.options.ListOSTypesOptions;
+import org.jclouds.functions.IdentityFunction;
+import org.jclouds.http.functions.ParseFirstJsonValueNamed;
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Functions;
+import com.google.common.collect.ImmutableList;
+import com.google.common.reflect.Invokable;
+/**
+ * Tests behavior of {@code GuestOSApi}
+ */
+// NOTE:without testName, this will not call @Before* and fail w/NPE during
+// surefire
+@Test(groups = "unit", testName = "GuestOSApiTest")
+public class GuestOSApiTest extends BaseCloudStackApiTest<GuestOSApi> {
+
+ public void testGetOSCategory() throws SecurityException, NoSuchMethodException, IOException {
+ Invokable<?, ?> method = method(GuestOSApi.class, "getOSCategory", String.class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(11l));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=listOsCategories&listAll=true&id=11 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ParseIdToNameEntryFromHttpResponse.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, NullOnNotFoundOr404.class);
+
+ checkFilters(httpRequest);
+
+ }
+
+ public void testListOSCategories() throws SecurityException, NoSuchMethodException, IOException {
+ Invokable<?, ?> method = method(GuestOSApi.class, "listOSCategories");
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.of());
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=listOsCategories&listAll=true HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ParseIdToNameFromHttpResponse.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, EmptySetOnNotFoundOr404.class);
+
+ checkFilters(httpRequest);
+
+ }
+
+ public void testGetOSType() throws SecurityException, NoSuchMethodException, IOException {
+ Invokable<?, ?> method = method(GuestOSApi.class, "getOSType", String.class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(11l));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=listOsTypes&listAll=true&id=11 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest,
+ Functions.compose(IdentityFunction.INSTANCE, IdentityFunction.INSTANCE).getClass());
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, NullOnNotFoundOr404.class);
+
+ checkFilters(httpRequest);
+
+ }
+
+ public void testListOSTypes() throws SecurityException, NoSuchMethodException, IOException {
+ Invokable<?, ?> method = method(GuestOSApi.class, "listOSTypes", ListOSTypesOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.of());
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=listOsTypes&listAll=true HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, EmptySetOnNotFoundOr404.class);
+
+ checkFilters(httpRequest);
+
+ }
+
+ public void testListOSTypesOptions() throws SecurityException, NoSuchMethodException, IOException {
+ Invokable<?, ?> method = method(GuestOSApi.class, "listOSTypes", ListOSTypesOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(ListOSTypesOptions.Builder.OSCategoryId("11")));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=listOsTypes&listAll=true&oscategoryid=11 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, EmptySetOnNotFoundOr404.class);
+
+ checkFilters(httpRequest);
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/HypervisorApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/HypervisorApiLiveTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/HypervisorApiLiveTest.java
new file mode 100644
index 0000000..13400fe
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/HypervisorApiLiveTest.java
@@ -0,0 +1,43 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static org.testng.Assert.assertTrue;
+
+import java.util.Set;
+
+import org.jclouds.cloudstack.domain.Zone;
+import org.jclouds.cloudstack.internal.BaseCloudStackApiLiveTest;
+import org.testng.annotations.Test;
+
+/**
+ * Tests behavior of {@code HypervisorApiLiveTest}
+ */
+@Test(groups = "live", singleThreaded = true, testName = "HypervisorApiLiveTest")
+public class HypervisorApiLiveTest extends BaseCloudStackApiLiveTest {
+
+ public void testListHypervisors() throws Exception {
+ Set<String> response = client.getHypervisorApi().listHypervisors();
+ assert null != response;
+ assertTrue(response.size() >= 0);
+ for (Zone zone : client.getZoneApi().listZones()) {
+ Set<String> zoneHype = client.getHypervisorApi().listHypervisorsInZone(zone.getId());
+ assert response.containsAll(zoneHype);
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/HypervisorApiTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/HypervisorApiTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/HypervisorApiTest.java
new file mode 100644
index 0000000..0cc1303
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/HypervisorApiTest.java
@@ -0,0 +1,72 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static org.jclouds.reflect.Reflection2.method;
+
+import java.io.IOException;
+
+import org.jclouds.Fallbacks.EmptySetOnNotFoundOr404;
+import org.jclouds.cloudstack.functions.ParseNamesFromHttpResponse;
+import org.jclouds.cloudstack.internal.BaseCloudStackApiTest;
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.reflect.Invokable;
+/**
+ * Tests behavior of {@code HypervisorApi}
+ */
+// NOTE:without testName, this will not call @Before* and fail w/NPE during
+// surefire
+@Test(groups = "unit", testName = "HypervisorApiTest")
+public class HypervisorApiTest extends BaseCloudStackApiTest<HypervisorApi> {
+
+ public void testListHypervisors() throws SecurityException, NoSuchMethodException, IOException {
+ Invokable<?, ?> method = method(HypervisorApi.class, "listHypervisors");
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.of());
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=listHypervisors&listAll=true HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ParseNamesFromHttpResponse.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, EmptySetOnNotFoundOr404.class);
+
+ checkFilters(httpRequest);
+
+ }
+
+ public void testListHypervisorsInZon() throws SecurityException, NoSuchMethodException, IOException {
+ Invokable<?, ?> method = method(HypervisorApi.class, "listHypervisorsInZone", String.class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(11));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=listHypervisors&listAll=true&zoneid=11 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ParseNamesFromHttpResponse.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, EmptySetOnNotFoundOr404.class);
+
+ checkFilters(httpRequest);
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiExpectTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiExpectTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiExpectTest.java
new file mode 100644
index 0000000..ce564a1
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiExpectTest.java
@@ -0,0 +1,221 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static org.jclouds.cloudstack.options.ListISOsOptions.Builder.accountInDomain;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+
+import org.jclouds.cloudstack.CloudStackContext;
+import org.jclouds.cloudstack.domain.ISO;
+import org.jclouds.cloudstack.internal.BaseCloudStackExpectTest;
+import org.jclouds.cloudstack.options.RegisterISOOptions;
+import org.jclouds.date.internal.SimpleDateFormatDateService;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.rest.ResourceNotFoundException;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Test the CloudStack ISOApi
+ */
+@Test(groups = "unit", testName = "ISOApiExpectTest")
+public class ISOApiExpectTest extends BaseCloudStackExpectTest<ISOApi> {
+
+ private static final ISO iso1 = ISO.builder()
+ .id("018e0928-8205-4d8e-9329-f731a9ccd488")
+ .name("xs-tools.iso")
+ .displayText("xen-pv-drv-iso")
+ .isPublic(true)
+ .created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2012-08-21T15:45:01+0530"))
+ .isReady(true)
+ .passwordEnabled(false)
+ .bootable(false)
+ .isFeatured(true)
+ .crossZones(false)
+ .account("system")
+ .domain("ROOT")
+ .domainid("9d189ea2-097e-4b2b-9bae-d885f5430d69")
+ .isExtractable(false).build();
+
+ private static final ISO iso2 = ISO.builder()
+ .id("1e29244b-9cf0-4ff2-9978-677eb83f6bfb")
+ .name("vmware-tools.iso")
+ .displayText("VMware Tools Installer ISO")
+ .isPublic(true)
+ .created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2012-08-21T15:45:01+0530"))
+ .isReady(true)
+ .passwordEnabled(false)
+ .bootable(false)
+ .isFeatured(true)
+ .crossZones(false)
+ .account("system")
+ .domain("ROOT")
+ .domainid("9d189ea2-097e-4b2b-9bae-d885f5430d69")
+ .isExtractable(false).build();
+
+ HttpRequest listIsos = HttpRequest.builder().method("GET")
+ .endpoint("http://localhost:8080/client/api")
+ .addQueryParam("response", "json")
+ .addQueryParam("command", "listIsos")
+ .addQueryParam("listAll", "true")
+ .addQueryParam("apiKey", "identity")
+ .addQueryParam("signature", "qUUF6hCDc57Bc/nHriS9umbZBKA%3D")
+ .addHeader("Accept", "application/json")
+ .build();
+
+ public void testListISOsWhenResponseIs2xx() {
+ ISOApi client = requestSendsResponse(listIsos,
+ HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResource("/listisosresponse.json"))
+ .build());
+
+ assertEquals(client.listISOs().toString(), ImmutableSet.of(iso1, iso2).toString());
+ }
+
+ public void testListISOsWhenResponseIs404() {
+ ISOApi client = requestSendsResponse(listIsos,
+ HttpResponse.builder()
+ .statusCode(404)
+ .build());
+
+ assertEquals(client.listISOs(), ImmutableSet.of());
+ }
+
+ HttpRequest listIsosOptions = HttpRequest.builder().method("GET")
+ .endpoint("http://localhost:8080/client/api")
+ .addQueryParam("response", "json")
+ .addQueryParam("command", "listIsos")
+ .addQueryParam("listAll", "true")
+ .addQueryParam("account", "fred")
+ .addQueryParam("domainid", "5")
+ .addQueryParam("bootable", "true")
+ .addQueryParam("hypervisor", "xen")
+ .addQueryParam("id", "3")
+ .addQueryParam("isofilter", "featured")
+ .addQueryParam("ispublic", "true")
+ .addQueryParam("isready", "true")
+ .addQueryParam("keyword", "bob")
+ .addQueryParam("name", "bob%27s%20iso")
+ .addQueryParam("zoneid", "7")
+ .addQueryParam("apiKey", "identity")
+ .addQueryParam("signature", "4S5ustbaBErEnpymWLSj1rEJ/nk%3D")
+ .addHeader("Accept", "application/json")
+ .build();
+
+ public void testListISOsOptionsWhenResponseIs2xx() {
+ ISOApi client = requestSendsResponse(listIsosOptions,
+ HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResource("/listisosresponse.json"))
+ .build());
+
+ assertEquals(client.listISOs(accountInDomain("fred", "5").bootable().hypervisor("xen").id("3").isoFilter(ISO.ISOFilter.featured).isPublic().isReady().keyword("bob").name("bob's iso").zoneId("7")).toString(), ImmutableSet.of(iso1, iso2).toString());
+ }
+
+ HttpRequest getIso = HttpRequest.builder().method("GET")
+ .endpoint("http://localhost:8080/client/api")
+ .addQueryParam("response", "json")
+ .addQueryParam("command", "listIsos")
+ .addQueryParam("listAll", "true")
+ .addQueryParam("id", "018e0928-8205-4d8e-9329-f731a9ccd488")
+ .addQueryParam("apiKey", "identity")
+ .addQueryParam("signature", "uZyPUJt6ThMDcQSDa%2BEv5LMs%2B2U%3D")
+ .addHeader("Accept", "application/json")
+ .build();
+
+ public void testGetISOWhenResponseIs2xx() {
+ ISOApi client = requestSendsResponse(getIso,
+ HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResource("/getisoresponse.json"))
+ .build());
+
+ assertEquals(client.getISO("018e0928-8205-4d8e-9329-f731a9ccd488").toString(), iso1.toString());
+ }
+
+ public void testGetISOWhenResponseIs404() {
+ ISOApi client = requestSendsResponse(getIso,
+ HttpResponse.builder()
+ .statusCode(404)
+ .build());
+
+ assertNull(client.getISO("018e0928-8205-4d8e-9329-f731a9ccd488"));
+ }
+
+ HttpRequest registerIso = HttpRequest.builder().method("GET")
+ .endpoint("http://localhost:8080/client/api")
+ .addQueryParam("response", "json")
+ .addQueryParam("command", "registerIso")
+ .addQueryParam("name", "ubuntu10.10")
+ .addQueryParam("displaytext", "ubuntu 10.10 (32 bit)")
+ .addQueryParam("url", "http://ubuntu/ubuntu-10.10.iso")
+ .addQueryParam("zoneid", "1e0335d9-b6cc-4805-bddf-0828e66a0d01")
+ .addQueryParam("account", "root")
+ .addQueryParam("domainid", "99f4159b-c698-4bd9-b8c5-5ac462f101eb")
+ .addQueryParam("bootable", "true")
+ .addQueryParam("isextractable", "true")
+ .addQueryParam("isfeatured", "true")
+ .addQueryParam("ispublic", "true")
+ .addQueryParam("ostypeid", "1234-abcd")
+ .addQueryParam("apiKey", "identity")
+ .addQueryParam("signature", "YpFMYUUu0daLgwxNFubVfkV0Nw8%3D")
+ .addHeader("Accept", "application/json")
+ .build();
+
+ RegisterISOOptions registerISOOptions = RegisterISOOptions.Builder
+ .accountInDomain("root", "99f4159b-c698-4bd9-b8c5-5ac462f101eb")
+ .bootable(true).isExtractable(true).isFeatured(true).isPublic(true).osTypeId("1234-abcd");
+
+ @Test
+ public void testRegisterISOsWhenResponseIs2xx() {
+ ISOApi client = requestSendsResponse(
+ registerIso,
+ HttpResponse.builder()
+ .statusCode(200)
+ .payload(payloadFromResource("/registerisoresponse.json"))
+ .build());
+
+ assertEquals(client.registerISO("ubuntu10.10", "ubuntu 10.10 (32 bit)", "http://ubuntu/ubuntu-10.10.iso", "1e0335d9-b6cc-4805-bddf-0828e66a0d01",
+ registerISOOptions),
+ ISO.builder().id("b52c509d-c6e2-452c-b6ec-aa00720ed6cd").name("ubuntu10.10").displayText("ubuntu 10.10 (32 bit)").isPublic(true)
+ .isReady(false).bootable(true).isFeatured(false).crossZones(false).osTypeId("0e0335d9-b6cc-4808-bddf-0828e66a0d03")
+ .created(new SimpleDateFormatDateService().iso8601SecondsDateParse("2012-08-21T15:45:01+0530"))
+ .osTypeName("Ubuntu 10.10 (32-bit)").account("root").domain("ROOT").domainid("99f4159b-c698-4bd9-b8c5-5ac462f101eb").status("")
+ .account("admin").zoneId("6f9a2921-b22a-4149-8b71-6ffc275a2177").zoneName("Basic1")
+ .isExtractable(false).build());
+ }
+
+ @Test(expectedExceptions = ResourceNotFoundException.class)
+ public void testRegisterISOWhenResponseIs404() {
+ ISOApi client = requestSendsResponse(registerIso,
+ HttpResponse.builder()
+ .statusCode(404)
+ .build());
+
+ assertNull(client.registerISO("ubuntu10.10", "ubuntu 10.10 (32 bit)", "http://ubuntu/ubuntu-10.10.iso", "1e0335d9-b6cc-4805-bddf-0828e66a0d01",
+ registerISOOptions));
+ }
+
+ @Override
+ protected ISOApi clientFrom(CloudStackContext context) {
+ return context.getApi().getISOApi();
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiLiveTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiLiveTest.java
new file mode 100644
index 0000000..93e6c01
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiLiveTest.java
@@ -0,0 +1,108 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import static org.jclouds.cloudstack.options.ListZonesOptions.Builder.available;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertTrue;
+
+import java.util.Set;
+
+import org.jclouds.cloudstack.domain.ISO;
+import org.jclouds.cloudstack.domain.ISOPermissions;
+import org.jclouds.cloudstack.domain.OSType;
+import org.jclouds.cloudstack.domain.Zone;
+import org.jclouds.cloudstack.internal.BaseCloudStackApiLiveTest;
+import org.jclouds.cloudstack.options.DeleteISOOptions;
+import org.jclouds.cloudstack.options.ListISOsOptions;
+import org.jclouds.cloudstack.options.RegisterISOOptions;
+import org.testng.SkipException;
+import org.testng.annotations.AfterClass;
+import org.testng.annotations.Test;
+
+import com.google.common.base.Optional;
+import com.google.common.base.Predicates;
+import com.google.common.collect.Iterables;
+
+/**
+ * Tests behavior of {@link ISOApi} and {@link ISOApi}
+ */
+@Test(groups = "live", singleThreaded = true, testName = "ISOApiLiveTest")
+public class ISOApiLiveTest extends BaseCloudStackApiLiveTest {
+
+ private static final String isoName = "jcloudsTestISO";
+ private static final String url = System.getProperty("test.cloudstack.iso-url", "http://archive.ubuntu.com/ubuntu/dists/maverick/main/installer-i386/current/images/netboot/mini.iso");
+
+ public void testListPublicISOs() throws Exception {
+ Set<ISO> response = client.getISOApi().listISOs(ListISOsOptions.Builder.isPublic());
+ assertNotNull(response);
+ assertFalse(response.isEmpty());
+ long isoCount = response.size();
+ assertTrue(isoCount >= 0);
+
+ for (ISO iso : response) {
+ ISO query = client.getISOApi().getISO(iso.getId());
+ assertEquals(query.getId(), iso.getId());
+ }
+ }
+
+ public void testListISOPermissions() throws Exception {
+ Set<ISO> response = client.getISOApi().listISOs(ListISOsOptions.Builder.isPublic());
+ assertNotNull(response);
+ assertFalse(response.isEmpty());
+ long isoCount = response.size();
+ assertTrue(isoCount >= 0);
+
+ for (ISO iso : response) {
+ ISOPermissions perms = client.getISOApi().listISOPermissions(iso.getId());
+ assertNotNull(perms);
+ }
+ }
+
+ public void testRegisterISO() throws Exception {
+ Optional<OSType> guestOSTypeOptional = Iterables.tryFind(client.getGuestOSApi().listOSTypes(), Predicates.notNull());
+ Optional<Zone> zoneOptional = Iterables.tryFind(client.getZoneApi().listZones(available(true)), Predicates.notNull());
+ if (guestOSTypeOptional.isPresent() && zoneOptional.isPresent()) {
+ String osTypeId = guestOSTypeOptional.get().getId();
+ String zoneId = zoneOptional.get().getId();
+ ISO iso = client.getISOApi().registerISO(isoName, "", url, zoneId, RegisterISOOptions.Builder.isPublic(true).osTypeId(osTypeId));
+ assertNotNull(iso);
+ assertNotNull(iso.getId());
+ assertEquals(iso.getName(), isoName);
+ } else {
+ String skipMessage = String.format("Cannot register the iso with url: %s", url);
+ if (zoneOptional.isPresent())
+ skipMessage += " without a valid zone";
+ else
+ skipMessage += " without a valid guest OS type";
+ throw new SkipException(skipMessage);
+ }
+ }
+
+ @AfterClass
+ @Override
+ protected void tearDownContext() {
+ Set<ISO> isos = client.getISOApi().listISOs(ListISOsOptions.Builder.name(isoName));
+ for (ISO iso : isos) {
+ client.getISOApi().deleteISO(iso.getId(), DeleteISOOptions.NONE);
+ }
+ super.tearDownContext();
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiTest.java
new file mode 100644
index 0000000..ef5cf8c
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/ISOApiTest.java
@@ -0,0 +1,279 @@
+/*
+ * 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.jclouds.cloudstack.features;
+import static org.jclouds.reflect.Reflection2.method;
+
+import org.jclouds.cloudstack.domain.ExtractMode;
+import org.jclouds.cloudstack.domain.PermissionOperation;
+import org.jclouds.cloudstack.internal.BaseCloudStackApiTest;
+import org.jclouds.cloudstack.options.AccountInDomainOptions;
+import org.jclouds.cloudstack.options.DeleteISOOptions;
+import org.jclouds.cloudstack.options.ExtractISOOptions;
+import org.jclouds.cloudstack.options.UpdateISOOptions;
+import org.jclouds.cloudstack.options.UpdateISOPermissionsOptions;
+import org.jclouds.fallbacks.MapHttp4xxCodesToExceptions;
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.functions.ParseFirstJsonValueNamed;
+import org.jclouds.http.functions.ReleasePayloadAndReturn;
+import org.jclouds.http.functions.UnwrapOnlyJsonValue;
+import org.jclouds.rest.internal.GeneratedHttpRequest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.reflect.Invokable;
+/**
+ * Tests the behaviour of ISOApi.
+ *
+ * @see ISOApi
+ */
+// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire
+@Test(groups = "unit", testName = "ISOApiTest")
+public class ISOApiTest extends BaseCloudStackApiTest<ISOApi> {
+
+ public void testAttachISO() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "attachISO", String.class, String.class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of("3", "5"));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=attachIso&id=3&virtualmachineid=5 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, UnwrapOnlyJsonValue.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ public void testDetachISO() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "detachISO", String.class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=detachIso&virtualmachineid=3 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, UnwrapOnlyJsonValue.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ public void testUpdateISO() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "updateISO", String.class, UpdateISOOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=updateIso&id=3 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, UnwrapOnlyJsonValue.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ public void testUpdateISOOptions() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "updateISO", String.class, UpdateISOOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3, UpdateISOOptions.Builder.bootable(true).displayText("robert").format("format").name("bob").osTypeId("9").passwordEnabled(true)));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=updateIso&id=3&bootable=true&displaytext=robert&format=format&name=bob&ostypeid=9&passwordenabled=true HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, UnwrapOnlyJsonValue.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ public void testDeleteISO() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "deleteISO", String.class, DeleteISOOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=deleteIso&id=3 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, UnwrapOnlyJsonValue.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ public void testDeleteISOOptions() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "deleteISO", String.class, DeleteISOOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3, DeleteISOOptions.Builder.zoneId("5")));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=deleteIso&id=3&zoneid=5 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, UnwrapOnlyJsonValue.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ HttpRequest copyIso = HttpRequest.builder().method("GET")
+ .endpoint("http://localhost:8080/client/api")
+ .addQueryParam("response", "json")
+ .addQueryParam("command", "copyIso")
+ .addQueryParam("id", "3")
+ .addQueryParam("sourcezoneid", "5")
+ .addQueryParam("destzoneid", "7")
+ .build();
+
+ public void testCopyISO() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "copyISO", String.class, String.class, String.class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3, 5, 7));
+
+ assertRequestLineEquals(httpRequest, copyIso.getRequestLine());
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, UnwrapOnlyJsonValue.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ public void testUpdateISOPermissions() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "updateISOPermissions", String.class, UpdateISOPermissionsOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=updateIsoPermissions&id=3 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ReleasePayloadAndReturn.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ public void testUpdateISOPermissionsOptions() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "updateISOPermissions", String.class, UpdateISOPermissionsOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3, UpdateISOPermissionsOptions.Builder.accounts(ImmutableSet.<String>of("fred", "bob")).isExtractable(true).isFeatured(true).isPublic(true).operation(PermissionOperation.add)));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=updateIsoPermissions&id=3&accounts=fred,bob&isextractable=true&isfeatured=true&ispublic=true&op=add HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ReleasePayloadAndReturn.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ public void testListISOPermissions() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "listISOPermissions", String.class, AccountInDomainOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=listIsoPermissions&listAll=true&id=3 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ public void testListISOPermissionsOptions() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "listISOPermissions", String.class, AccountInDomainOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3, AccountInDomainOptions.Builder.accountInDomain("fred", "5")));
+
+ assertRequestLineEquals(httpRequest,
+ "GET http://localhost:8080/client/api?response=json&command=listIsoPermissions&listAll=true&id=3&account=fred&domainid=5 HTTP/1.1");
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, ParseFirstJsonValueNamed.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ HttpRequest extractIso = HttpRequest.builder().method("GET")
+ .endpoint("http://localhost:8080/client/api")
+ .addQueryParam("response", "json")
+ .addQueryParam("command", "extractIso")
+ .addQueryParam("id", "3")
+ .addQueryParam("mode", "HTTP_DOWNLOAD")
+ .addQueryParam("zoneid", "5")
+ .build();
+
+ public void testExtractISO() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "extractISO", String.class, ExtractMode.class, String.class, ExtractISOOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3, ExtractMode.HTTP_DOWNLOAD, 5));
+
+ assertRequestLineEquals(httpRequest, extractIso.getRequestLine());
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, UnwrapOnlyJsonValue.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+
+ HttpRequest extractIsoOptions = HttpRequest.builder().method("GET")
+ .endpoint("http://localhost:8080/client/api")
+ .addQueryParam("response", "json")
+ .addQueryParam("command", "extractIso")
+ .addQueryParam("id", "3")
+ .addQueryParam("mode", "HTTP_DOWNLOAD")
+ .addQueryParam("zoneid", "5")
+ .addQueryParam("url", "http://example.com/")
+ .build();
+
+ public void testExtractISOOptions() throws NoSuchMethodException {
+ Invokable<?, ?> method = method(ISOApi.class, "extractISO", String.class, ExtractMode.class, String.class, ExtractISOOptions[].class);
+ GeneratedHttpRequest httpRequest = processor.createRequest(method, ImmutableList.<Object> of(3, ExtractMode.HTTP_DOWNLOAD, 5, ExtractISOOptions.Builder.url("http://example.com/")));
+
+ assertRequestLineEquals(httpRequest, extractIsoOptions.getRequestLine());
+ assertNonPayloadHeadersEqual(httpRequest, "Accept: application/json\n");
+ assertPayloadEquals(httpRequest, null, null, false);
+
+ assertResponseParserClassEquals(method, httpRequest, UnwrapOnlyJsonValue.class);
+ assertSaxResponseParserClassEquals(method, null);
+ assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);
+
+ checkFilters(httpRequest);
+ }
+}
http://git-wip-us.apache.org/repos/asf/stratos/blob/86fd5cf2/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/LimitApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/LimitApiLiveTest.java b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/LimitApiLiveTest.java
new file mode 100644
index 0000000..06749cc
--- /dev/null
+++ b/dependencies/jclouds/apis/cloudstack/1.8.0-stratos/src/test/java/org/jclouds/cloudstack/features/LimitApiLiveTest.java
@@ -0,0 +1,44 @@
+/*
+ * 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.jclouds.cloudstack.features;
+
+import java.util.Set;
+
+import org.jclouds.cloudstack.domain.ResourceLimit;
+import org.jclouds.cloudstack.internal.BaseCloudStackApiLiveTest;
+import org.testng.annotations.Test;
+
+/**
+ * Tests behavior of {@code LimitApi}
+ */
+@Test(groups = "live", singleThreaded = true, testName = "LimitApiLiveTest")
+public class LimitApiLiveTest extends BaseCloudStackApiLiveTest {
+
+ public void testListResourceLimits() {
+ final Set<ResourceLimit> resourceLimits = client.getLimitApi().listResourceLimits();
+
+ for (ResourceLimit resourceLimit : resourceLimits) {
+ checkResourceLimit(resourceLimit);
+ }
+ }
+
+ private void checkResourceLimit(ResourceLimit resourceLimit) {
+ assert resourceLimit.getAccount() != null : resourceLimit;
+ assert resourceLimit.getDomain() != null : resourceLimit;
+ assert resourceLimit.getResourceType() != ResourceLimit.ResourceType.UNRECOGNIZED : resourceLimit;
+ }
+}