You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by la...@apache.org on 2014/03/31 09:13:49 UTC
[36/52] [partial] Moving jclouds dependencies to accurate parent
directories
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/19c8cdaf/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiExpectTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiExpectTest.java b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiExpectTest.java
new file mode 100644
index 0000000..4c91ec2
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiExpectTest.java
@@ -0,0 +1,115 @@
+/*
+ * 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.openstack.nova.v2_0.features;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.openstack.nova.v2_0.NovaApi;
+import org.jclouds.openstack.nova.v2_0.internal.BaseNovaApiExpectTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseExtensionListTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseExtensionTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Tests annotation parsing of {@code ExtensionAsyncApi}
+ *
+ * @author Adrian Cole
+ */
+@Test(groups = "unit", testName = "ExtensionApiExpectTest")
+public class ExtensionApiExpectTest extends BaseNovaApiExpectTest {
+
+ public void testListExtensionsWhenResponseIs2xx() throws Exception {
+ HttpRequest listExtensions = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/extensions")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse listExtensionsResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/extension_list.json")).build();
+
+ NovaApi apiWhenExtensionsExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, listExtensions, listExtensionsResponse);
+
+ assertEquals(apiWhenExtensionsExist.getConfiguredZones(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
+
+ assertEquals(apiWhenExtensionsExist.getExtensionApiForZone("az-1.region-a.geo-1").list().toString(),
+ new ParseExtensionListTest().expected().toString());
+ }
+
+ public void testListExtensionsWhenReponseIs404IsEmpty() throws Exception {
+ HttpRequest listExtensions = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/extensions")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse listExtensionsResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenNoServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, listExtensions, listExtensionsResponse);
+
+ assertTrue(apiWhenNoServersExist.getExtensionApiForZone("az-1.region-a.geo-1").list().isEmpty());
+ }
+
+ // TODO: gson deserializer for Multimap
+ public void testGetExtensionByAliasWhenResponseIs2xx() throws Exception {
+
+ HttpRequest getExtension = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/extensions/RS-PIE")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse getExtensionResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/extension_details.json")).build();
+
+ NovaApi apiWhenExtensionsExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getExtension, getExtensionResponse);
+
+ assertEquals(apiWhenExtensionsExist.getExtensionApiForZone("az-1.region-a.geo-1").get("RS-PIE")
+ .toString(), new ParseExtensionTest().expected().toString());
+ }
+
+ public void testGetExtensionByAliasWhenResponseIs404() throws Exception {
+ HttpRequest getExtension = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/extensions/RS-PIE")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse getExtensionResponse = HttpResponse.builder().statusCode(404)
+ .payload(payloadFromResource("/extension_details.json")).build();
+
+ NovaApi apiWhenNoExtensionsExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getExtension, getExtensionResponse);
+
+ assertNull(apiWhenNoExtensionsExist.getExtensionApiForZone("az-1.region-a.geo-1").get("RS-PIE"));
+
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/19c8cdaf/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiLiveTest.java b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiLiveTest.java
new file mode 100644
index 0000000..b81a761
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ExtensionApiLiveTest.java
@@ -0,0 +1,84 @@
+/*
+ * 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.openstack.nova.v2_0.features;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotNull;
+
+import java.util.Set;
+
+import org.jclouds.openstack.nova.v2_0.internal.BaseNovaApiLiveTest;
+import org.jclouds.openstack.v2_0.domain.Extension;
+import org.jclouds.openstack.v2_0.features.ExtensionApi;
+import org.testng.annotations.Test;
+
+/**
+ * Tests behavior of {@link ExtensionApi}
+ *
+ * @author Adrian Cole
+ */
+@Test(groups = "live", testName = "ExtensionApiLiveTest")
+public class ExtensionApiLiveTest extends BaseNovaApiLiveTest {
+
+ /**
+ * Tests the listing of Extensions.
+ *
+ * @throws Exception
+ */
+ @Test(description = "GET /v${apiVersion}/{tenantId}/extensions")
+ public void testListExtensions() throws Exception {
+ for (String zoneId : zones) {
+ ExtensionApi extensionApi = api.getExtensionApiForZone(zoneId);
+ Set<? extends Extension> response = extensionApi.list();
+ assertNotNull(response);
+ assertFalse(response.isEmpty());
+ for (Extension extension : response) {
+ assertNotNull(extension.getId());
+ assertNotNull(extension.getName());
+ assertNotNull(extension.getDescription());
+ assertNotNull(extension.getNamespace());
+ assertNotNull(extension.getUpdated());
+ assertNotNull(extension.getLinks());
+ }
+ }
+ }
+
+ /**
+ * Tests retrieval of Extensions using their alias.
+ *
+ * @throws Exception
+ */
+ @Test(description = "GET /v${apiVersion}/{tenantId}/extensions/{alias}", dependsOnMethods = { "testListExtensions" })
+ public void testGetExtensionByAlias() throws Exception {
+ for (String zoneId : zones) {
+ ExtensionApi extensionApi = api.getExtensionApiForZone(zoneId);
+ Set<? extends Extension> response = extensionApi.list();
+ for (Extension extension : response) {
+ Extension details = extensionApi.get(extension.getId());
+ assertNotNull(details);
+ assertEquals(details.getId(), extension.getId());
+ assertEquals(details.getName(), extension.getName());
+ assertEquals(details.getDescription(), extension.getDescription());
+ assertEquals(details.getNamespace(), extension.getNamespace());
+ assertEquals(details.getUpdated(), extension.getUpdated());
+ assertEquals(details.getLinks(), extension.getLinks());
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/19c8cdaf/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiExpectTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiExpectTest.java b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiExpectTest.java
new file mode 100644
index 0000000..22af220
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiExpectTest.java
@@ -0,0 +1,164 @@
+/*
+ * 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.openstack.nova.v2_0.features;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+
+import javax.ws.rs.HttpMethod;
+import javax.ws.rs.core.HttpHeaders;
+import javax.ws.rs.core.MediaType;
+
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.openstack.nova.v2_0.NovaApi;
+import org.jclouds.openstack.nova.v2_0.domain.Flavor;
+import org.jclouds.openstack.nova.v2_0.internal.BaseNovaApiExpectTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseCreateFlavorTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseFlavorListTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseFlavorTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Tests annotation parsing of {@code FlavorAsyncApi}
+ *
+ * @author Jeremy Daggett, Ilja Bobkevic
+ */
+@Test(groups = "unit", testName = "FlavorApiExpectTest")
+public class FlavorApiExpectTest extends BaseNovaApiExpectTest {
+
+ public void testListFlavorsWhenResponseIs2xx() throws Exception {
+ HttpRequest listFlavors = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/flavors")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse listFlavorsResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/flavor_list.json")).build();
+
+ NovaApi apiWhenFlavorsExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, listFlavors, listFlavorsResponse);
+
+ assertEquals(apiWhenFlavorsExist.getConfiguredZones(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
+
+ assertEquals(apiWhenFlavorsExist.getFlavorApiForZone("az-1.region-a.geo-1").list().concat().toString(),
+ new ParseFlavorListTest().expected().toString());
+ }
+
+ public void testListFlavorsWhenReponseIs404IsEmpty() throws Exception {
+ HttpRequest listFlavors = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/flavors")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse listFlavorsResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenNoServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, listFlavors, listFlavorsResponse);
+
+ assertTrue(apiWhenNoServersExist.getFlavorApiForZone("az-1.region-a.geo-1").list().concat().isEmpty());
+ }
+
+ // TODO: gson deserializer for Multimap
+ public void testGetFlavorWhenResponseIs2xx() throws Exception {
+
+ HttpRequest getFlavor = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/flavors/52415800-8b69-11e0-9b19-734f1195ff37")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse getFlavorResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/flavor_details.json")).build();
+
+ NovaApi apiWhenFlavorsExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getFlavor, getFlavorResponse);
+
+ assertEquals(
+ apiWhenFlavorsExist.getFlavorApiForZone("az-1.region-a.geo-1").get("52415800-8b69-11e0-9b19-734f1195ff37")
+ .toString(), new ParseFlavorTest().expected().toString());
+ }
+
+ public void testGetFlavorWhenResponseIs404() throws Exception {
+ HttpRequest getFlavor = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/flavors/123")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse getFlavorResponse = HttpResponse.builder().statusCode(404)
+ .payload(payloadFromResource("/flavor_details.json")).build();
+
+ NovaApi apiWhenNoFlavorsExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getFlavor, getFlavorResponse);
+
+ assertNull(apiWhenNoFlavorsExist.getFlavorApiForZone("az-1.region-a.geo-1").get("123"));
+
+ }
+
+ public void testCreateFlavor200() throws Exception {
+ ParseCreateFlavorTest parser = new ParseCreateFlavorTest();
+ HttpRequest listFlavors = HttpRequest
+ .builder()
+ .method(HttpMethod.POST)
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/flavors")
+ .addHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON)
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromResource(parser.resource())).build();
+
+ HttpResponse listFlavorsResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource(parser.resource())).build();
+
+ NovaApi api = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, listFlavors, listFlavorsResponse);
+
+ assertEquals(
+ api.getFlavorApiForZone("az-1.region-a.geo-1").create(Flavor.builder()
+ .id("1cb47a44-9b84-4da4-bf81-c1976e8414ab")
+ .name("128 MB Server").ram(128).vcpus(1)
+ .disk(10).build())
+ .toString(), parser.expected().toString());
+ }
+
+ public void testDeleteFlavor202() throws Exception {
+ String flavorId = "1cb47a44-9b84-4da4-bf81-c1976e8414ab";
+
+ HttpRequest updateMetadata = HttpRequest
+ .builder()
+ .method(HttpMethod.DELETE)
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/flavors/" + flavorId)
+ .addHeader(HttpHeaders.ACCEPT, MediaType.WILDCARD)
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+ HttpResponse updateMetadataResponse = HttpResponse.builder().statusCode(204).build();
+
+ NovaApi api = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, updateMetadata, updateMetadataResponse);
+
+ api.getFlavorApiForZone("az-1.region-a.geo-1").delete(flavorId);
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/19c8cdaf/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiLiveTest.java b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiLiveTest.java
new file mode 100644
index 0000000..2af0d54
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/FlavorApiLiveTest.java
@@ -0,0 +1,105 @@
+/*
+ * 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.openstack.nova.v2_0.features;
+
+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.openstack.nova.v2_0.domain.Flavor;
+import org.jclouds.openstack.nova.v2_0.internal.BaseNovaApiLiveTest;
+import org.jclouds.openstack.v2_0.domain.Resource;
+import org.testng.annotations.Test;
+
+/**
+ * Tests behavior of {@link FlavorApi}
+ *
+ * @author Jeremy Daggett
+ */
+@Test(groups = "live", testName = "FlavorApiLiveTest")
+public class FlavorApiLiveTest extends BaseNovaApiLiveTest {
+
+ /**
+ * Tests the listing of Flavors.
+ *
+ * @throws Exception
+ */
+ @Test(description = "GET /v${apiVersion}/{tenantId}/flavors")
+ public void testListFlavors() throws Exception {
+ for (String zoneId : zones) {
+ FlavorApi flavorApi = api.getFlavorApiForZone(zoneId);
+ Set<? extends Resource> response = flavorApi.list().concat().toSet();
+ assertNotNull(response);
+ assertFalse(response.isEmpty());
+ for (Resource flavor : response) {
+ assertNotNull(flavor.getId());
+ assertNotNull(flavor.getName());
+ assertNotNull(flavor.getLinks());
+ }
+ }
+ }
+
+ /**
+ * Tests the listing of Flavors in detail.
+ *
+ * @throws Exception
+ */
+ @Test(description = "GET /v${apiVersion}/{tenantId}/flavors/detail")
+ public void testListFlavorsInDetail() throws Exception {
+ for (String zoneId : zones) {
+ FlavorApi flavorApi = api.getFlavorApiForZone(zoneId);
+ Set<? extends Flavor> response = flavorApi.listInDetail().concat().toSet();
+ assertNotNull(response);
+ assertFalse(response.isEmpty());
+ for (Flavor flavor : response) {
+ assertNotNull(flavor.getId());
+ assertNotNull(flavor.getName());
+ assertNotNull(flavor.getLinks());
+ assertTrue(flavor.getRam() > 0);
+ assertTrue(flavor.getDisk() > 0);
+ assertTrue(flavor.getVcpus() > 0);
+ }
+ }
+ }
+
+ /**
+ * Tests getting Flavors by id.
+ *
+ * @throws Exception
+ */
+ @Test(description = "GET /v${apiVersion}/{tenantId}/flavors/{id}", dependsOnMethods = { "testListFlavorsInDetail" })
+ public void testGetFlavorById() throws Exception {
+ for (String zoneId : zones) {
+ FlavorApi flavorApi = api.getFlavorApiForZone(zoneId);
+ Set<? extends Flavor> response = flavorApi.listInDetail().concat().toSet();
+ for (Flavor flavor : response) {
+ Flavor details = flavorApi.get(flavor.getId());
+ assertNotNull(details);
+ assertEquals(details.getId(), flavor.getId());
+ assertEquals(details.getName(), flavor.getName());
+ assertEquals(details.getLinks(), flavor.getLinks());
+ assertEquals(details.getRam(), flavor.getRam());
+ assertEquals(details.getDisk(), flavor.getDisk());
+ assertEquals(details.getVcpus(), flavor.getVcpus());
+ }
+ }
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/19c8cdaf/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiExpectTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiExpectTest.java b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiExpectTest.java
new file mode 100644
index 0000000..85407d1
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiExpectTest.java
@@ -0,0 +1,377 @@
+/*
+ * 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.openstack.nova.v2_0.features;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNull;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.openstack.nova.v2_0.NovaApi;
+import org.jclouds.openstack.nova.v2_0.internal.BaseNovaApiExpectTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseImageListTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseImageTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseMetadataListTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseMetadataUpdateTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+
+/**
+ * Tests annotation parsing of {@code ImageAsyncApi}
+ *
+ * @author Michael Arnold
+ */
+@Test(groups = "unit", testName = "ImageAsyncApiTest")
+public class ImageApiExpectTest extends BaseNovaApiExpectTest {
+ public void testListImagesWhenResponseIs2xx() throws Exception {
+ HttpRequest list = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse listResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/image_list.json")).build();
+
+ NovaApi apiWhenImagesExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, list, listResponse);
+
+ assertEquals(apiWhenImagesExist.getConfiguredZones(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
+
+ assertEquals(apiWhenImagesExist.getImageApiForZone("az-1.region-a.geo-1").list().concat().toString(),
+ new ParseImageListTest().expected().toString());
+ }
+
+ public void testListImagesWhenReponseIs404IsEmpty() throws Exception {
+ HttpRequest list = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse listResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenNoServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, list, listResponse);
+
+ assertTrue(apiWhenNoServersExist.getImageApiForZone("az-1.region-a.geo-1").list().concat().isEmpty());
+ }
+
+ public void testGetImageWhenResponseIs2xx() throws Exception {
+
+ HttpRequest getImage = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/52415800-8b69-11e0-9b19-734f5736d2a2")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse getImageResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/image_details.json")).build();
+
+ NovaApi apiWhenImagesExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getImage, getImageResponse);
+
+ assertEquals(
+ apiWhenImagesExist.getImageApiForZone("az-1.region-a.geo-1").get("52415800-8b69-11e0-9b19-734f5736d2a2")
+ .toString(), new ParseImageTest().expected().toString());
+ }
+
+ public void testGetImageWhenResponseIs404() throws Exception {
+ HttpRequest getImage = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/52415800-8b69-11e0-9b19-734f5736d2a2")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse getImageResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenNoImagesExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getImage, getImageResponse);
+
+ assertNull(apiWhenNoImagesExist.getImageApiForZone("az-1.region-a.geo-1").get(
+ "52415800-8b69-11e0-9b19-734f5736d2a2"));
+
+ }
+
+ public void testListMetadataWhenResponseIs2xx() throws Exception {
+ String imageId = "52415800-8b69-11e0-9b19-734f5736d2a2";
+ HttpRequest getMetadata = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/" + imageId + "/metadata")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse getMetadataResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/metadata_list.json")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getMetadata, getMetadataResponse);
+
+ assertEquals(apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").getMetadata(imageId).toString(),
+ new ParseMetadataListTest().expected().toString());
+ }
+
+ public void testListMetadataWhenResponseIs404() throws Exception {
+ String imageId = "52415800-8b69-11e0-9b19-734f5736d2a2";
+ HttpRequest getMetadata = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/" + imageId + "/metadata")
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+ HttpResponse getMetadataResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getMetadata, getMetadataResponse);
+
+ try {
+ apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").getMetadata(imageId);
+ fail("Expected an exception.");
+ } catch (Exception e) {
+ // expected
+ }
+ }
+
+ public void testSetMetadataWhenResponseIs2xx() throws Exception {
+ String imageId = "52415800-8b69-11e0-9b19-734f5736d2a2";
+ ImmutableMap<String, String> metadata = new ImmutableMap.Builder<String, String>()
+ .put("Server Label", "Web Head 1")
+ .put("Image Version", "2.1")
+ .build();
+
+ HttpRequest setMetadata = HttpRequest
+ .builder()
+ .method("PUT")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/" + imageId + "/metadata")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Server Label\":\"Web Head 1\",\"Image Version\":\"2.1\"}}","application/json"))
+ .build();
+
+ HttpResponse setMetadataResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/metadata_list.json")).build();
+
+ NovaApi apiWhenImageExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, setMetadata, setMetadataResponse);
+
+ assertEquals(apiWhenImageExists.getImageApiForZone("az-1.region-a.geo-1").setMetadata(imageId, metadata).toString(),
+ new ParseMetadataListTest().expected().toString());
+ }
+
+ public void testSetMetadataWhenResponseIs404() throws Exception {
+ String imageId = "52415800-8b69-11e0-9b19-734f5736d2a2";
+ ImmutableMap<String, String> metadata = new ImmutableMap.Builder<String, String>()
+ .put("Server Label", "Web Head 1")
+ .put("Image Version", "2.1")
+ .build();
+
+ HttpRequest setMetadata = HttpRequest
+ .builder()
+ .method("PUT")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/" +imageId + "/metadata")
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Server Label\":\"Web Head 1\",\"Image Version\":\"2.1\"}}","application/json"))
+ .build();
+
+ HttpResponse setMetadataResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, setMetadata, setMetadataResponse);
+
+ try {
+ apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").setMetadata(imageId, metadata);
+ fail("Expected an exception.");
+ } catch (Exception e) {
+ // expected
+ }
+ }
+
+ public void testUpdateMetadataWhenResponseIs2xx() throws Exception {
+ String imageId = "52415800-8b69-11e0-9b19-734f5736d2a2";
+ ImmutableMap<String, String> metadata = new ImmutableMap.Builder<String, String>()
+ .put("Server Label", "Web Head 2")
+ .put("Server Description", "Simple Server")
+ .build();
+
+ HttpRequest setMetadata = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/" + imageId + "/metadata")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Server Label\":\"Web Head 2\",\"Server Description\":\"Simple Server\"}}","application/json"))
+ .build();
+
+ HttpResponse setMetadataResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/metadata_updated.json")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, setMetadata, setMetadataResponse);
+
+ assertEquals(apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").updateMetadata(imageId, metadata).toString(),
+ new ParseMetadataUpdateTest().expected().toString());
+ }
+
+ public void testUpdateMetadataWhenResponseIs404() throws Exception {
+ String imageId = "52415800-8b69-11e0-9b19-734f5736d2a2";
+ ImmutableMap<String, String> metadata = new ImmutableMap.Builder<String, String>()
+ .put("Server Label", "Web Head 2")
+ .put("Server Description", "Simple Server")
+ .build();
+
+ HttpRequest setMetadata = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + imageId + "/metadata")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Server Label\":\"Web Head 2\",\"Server Description\":\"Simple Server\"}}","application/json"))
+ .build();
+
+ HttpResponse setMetadataResponse = HttpResponse.builder().statusCode(404)
+ .payload(payloadFromResource("/metadata_updated.json")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, setMetadata, setMetadataResponse);
+
+ try {
+ apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").setMetadata(imageId, metadata);
+ fail("Expected an exception.");
+ } catch (Exception e) {
+ // expected
+ }
+ }
+
+ public void testGetMetadataItemWhenResponseIs2xx() throws Exception {
+ String imageId = "52415800-8b69-11e0-9b19-734f5736d2a2";
+ String key = "Image%20Version";
+
+ HttpRequest getMetadata = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/" + imageId + "/metadata/" + key)
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+ HttpResponse getMetadataResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromString("{\"metadata\":{\"Image Version\":\"2.5\"}}")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getMetadata, getMetadataResponse);
+
+ assertEquals(apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").getMetadata(imageId, "Image Version").toString(),
+ "2.5");
+ }
+
+ public void testGetMetadataItemWhenResponseIs404() throws Exception {
+ String imageId = "52415800-8b69-11e0-9b19-734f5736d2a2";
+ String key = "Image%20Version";
+
+ HttpRequest getMetadata = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/" + imageId + "/metadata/" + key)
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+ HttpResponse getMetadataResponse = HttpResponse.builder().statusCode(404)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Image Version\":\"2.5\"}}", "application/json")).build();
+
+ NovaApi apiWhenImageExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getMetadata, getMetadataResponse);
+
+ assertNull(apiWhenImageExists.getImageApiForZone("az-1.region-a.geo-1").getMetadata(imageId, key));
+ }
+
+ public void testSetMetadataItemWhenResponseIs2xx() throws Exception {
+ String imageId = "52415800-8b69-11e0-9b19-734f5736d2a2";
+ String key = "Image Version";
+
+ HttpRequest updateMetadata = HttpRequest
+ .builder()
+ .method("PUT")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/" + imageId + "/metadata/" + "Image%20Version")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Image Version\":\"2.5\"}}", "application/json"))
+ .build();
+
+ HttpResponse updateMetadataResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Image Version\":\"2.5\"}}", "application/json")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, updateMetadata, updateMetadataResponse);
+
+ assertEquals(apiWhenServerExists.getImageApiForZone("az-1.region-a.geo-1").updateMetadata(imageId, key, "2.5").toString(),
+ "2.5");
+ }
+
+ public void testDeleteMetadataItemWhenResponseIs2xx() throws Exception {
+ String imageId = "52415800-8b69-11e0-9b19-734f5736d2a2";
+ String key = "Image%20Version";
+
+ HttpRequest deleteMetadata = HttpRequest
+ .builder()
+ .method("DELETE")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/" + imageId + "/metadata/" + key)
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+ HttpResponse deleteMetadataResponse = HttpResponse.builder().statusCode(204).build();
+
+ NovaApi apiWhenImageExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, deleteMetadata, deleteMetadataResponse);
+
+ apiWhenImageExists.getImageApiForZone("az-1.region-a.geo-1").deleteMetadata(imageId, key);
+ }
+
+ public void testDeleteMetadataItemWhenResponseIs404() throws Exception {
+ String imageId = "52415800-8b69-11e0-9b19-734f5736d2a2";
+ String key = "Image%20Version";
+
+ HttpRequest deleteMetadata = HttpRequest
+ .builder()
+ .method("DELETE")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/" + imageId + "/metadata/" + key)
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+ HttpResponse deleteMetadataResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenImageExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, deleteMetadata, deleteMetadataResponse);
+
+ apiWhenImageExists.getImageApiForZone("az-1.region-a.geo-1").deleteMetadata(imageId, key);
+
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/19c8cdaf/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiLiveTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiLiveTest.java b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiLiveTest.java
new file mode 100644
index 0000000..83d0b62
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ImageApiLiveTest.java
@@ -0,0 +1,101 @@
+/*
+ * 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.openstack.nova.v2_0.features;
+
+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.openstack.nova.v2_0.domain.Image;
+import org.jclouds.openstack.nova.v2_0.internal.BaseNovaApiLiveTest;
+import org.jclouds.openstack.v2_0.domain.Resource;
+import org.testng.annotations.Test;
+
+/**
+ * Tests behavior of {@link ImageApi}
+ *
+ * @author Michael Arnold
+ */
+@Test(groups = "live", testName = "ImageApiLiveTest")
+public class ImageApiLiveTest extends BaseNovaApiLiveTest {
+
+ @Test(description = "GET /v${apiVersion}/{tenantId}/images")
+ public void testListImages() throws Exception {
+ for (String zoneId : zones) {
+ ImageApi imageApi = api.getImageApiForZone(zoneId);
+ Set<? extends Resource> response = imageApi.list().concat().toSet();
+ assertNotNull(response);
+ assertFalse(response.isEmpty());
+ for (Resource image : response) {
+ assertNotNull(image.getId());
+ assertNotNull(image.getName());
+ assertNotNull(image.getLinks());
+ }
+ }
+ }
+
+ @Test(description = "GET /v${apiVersion}/{tenantId}/images/detail")
+ public void testListImagesInDetail() throws Exception {
+ for (String zoneId : api.getConfiguredZones()) {
+ ImageApi imageApi = api.getImageApiForZone(zoneId);
+ Set<? extends Image> response = imageApi.listInDetail().concat().toSet();
+ assertNotNull(response);
+ assertFalse(response.isEmpty());
+ for (Image image : response) {
+ assertNotNull(image.getId());
+ assertNotNull(image.getName());
+ assertNotNull(image.getLinks());
+ assertNotNull(image.getCreated());
+ // image.getMinDisk() can be zero
+ // image.getMinRam() can be zero
+ assertTrue(image.getProgress() >= 0 && image.getProgress() <= 100);
+ assertNotNull(image.getStatus());
+ // image.getServer() can be null
+ // image.getTenantId() can be null
+ // image.getUpdated() can be null
+ // image.getUserId() can be null
+ }
+ }
+ }
+
+ @Test(description = "GET /v${apiVersion}/{tenantId}/images/{id}", dependsOnMethods = { "testListImagesInDetail" })
+ public void testGetImageById() throws Exception {
+ for (String zoneId : api.getConfiguredZones()) {
+ ImageApi imageApi = api.getImageApiForZone(zoneId);
+ Set<? extends Image> response = imageApi.listInDetail().concat().toSet();
+ for (Image image : response) {
+ Image details = imageApi.get(image.getId());
+ assertNotNull(details);
+ assertEquals(details.getId(), image.getId());
+ assertEquals(details.getName(), image.getName());
+ assertEquals(details.getLinks(), image.getLinks());
+ assertEquals(details.getCreated(), image.getCreated());
+ assertEquals(details.getMinDisk(), image.getMinDisk());
+ assertEquals(details.getMinRam(), image.getMinRam());
+ assertEquals(details.getProgress(), image.getProgress());
+ assertEquals(details.getStatus(), image.getStatus());
+ assertEquals(details.getServer(), image.getServer());
+ assertEquals(details.getTenantId(), image.getTenantId());
+ assertEquals(details.getUpdated(), image.getUpdated());
+ assertEquals(details.getUserId(), image.getUserId());
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-stratos/blob/19c8cdaf/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java
----------------------------------------------------------------------
diff --git a/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java
new file mode 100644
index 0000000..070dcf6
--- /dev/null
+++ b/dependencies/jclouds/apis/openstack-nova/1.7.1-stratos/src/test/java/org/jclouds/openstack/nova/v2_0/features/ServerApiExpectTest.java
@@ -0,0 +1,746 @@
+/*
+ * 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.openstack.nova.v2_0.features;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertTrue;
+import static org.testng.Assert.fail;
+
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.openstack.nova.v2_0.NovaApi;
+import org.jclouds.openstack.nova.v2_0.domain.Server;
+import org.jclouds.openstack.nova.v2_0.internal.BaseNovaApiExpectTest;
+import org.jclouds.openstack.nova.v2_0.options.CreateServerOptions;
+import org.jclouds.openstack.nova.v2_0.options.RebuildServerOptions;
+import org.jclouds.openstack.nova.v2_0.parse.ParseCreatedServerTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseMetadataListTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseMetadataUpdateTest;
+import org.jclouds.openstack.nova.v2_0.parse.ParseServerListTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableMultimap;
+import com.google.common.collect.ImmutableSet;
+import org.jclouds.openstack.nova.v2_0.parse.ParseServerDiagnostics;
+
+/**
+ * Tests annotation parsing of {@code ServerAsyncApi}
+ *
+ * @author Adrian Cole
+ */
+@Test(groups = "unit", testName = "ServerAsyncApiTest")
+public class ServerApiExpectTest extends BaseNovaApiExpectTest {
+
+ public void testListServersWhenResponseIs2xx() throws Exception {
+ HttpRequest listServers = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse listServersResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/server_list.json")).build();
+
+ NovaApi apiWhenServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, listServers, listServersResponse);
+
+ assertEquals(apiWhenServersExist.getConfiguredZones(), ImmutableSet.of("az-1.region-a.geo-1", "az-2.region-a.geo-1", "az-3.region-a.geo-1"));
+
+ assertEquals(apiWhenServersExist.getServerApiForZone("az-1.region-a.geo-1").list().concat().toString(),
+ new ParseServerListTest().expected().toString());
+ }
+
+ public void testListServersWhenReponseIs404IsEmpty() throws Exception {
+ HttpRequest listServers = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse listServersResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenNoServersExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, listServers, listServersResponse);
+
+ assertTrue(apiWhenNoServersExist.getServerApiForZone("az-1.region-a.geo-1").list().concat().isEmpty());
+ }
+
+ public void testCreateServerWhenResponseIs202() throws Exception {
+ HttpRequest createServer = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType(
+ "{\"server\":{\"name\":\"test-e92\",\"imageRef\":\"1241\",\"flavorRef\":\"100\"}}","application/json"))
+ .build();
+
+
+ HttpResponse createServerResponse = HttpResponse.builder().statusCode(202).message("HTTP/1.1 202 Accepted")
+ .payload(payloadFromResourceWithContentType("/new_server.json","application/json; charset=UTF-8")).build();
+
+ NovaApi apiWithNewServer = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, createServer, createServerResponse);
+
+ assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241", "100").toString(),
+ new ParseCreatedServerTest().expected().toString());
+ }
+
+ public void testCreateServerInAvailabilityZoneWhenResponseIs202() throws Exception {
+ HttpRequest createServer = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType(
+ "{\"server\":{\"name\":\"test-e92\",\"imageRef\":\"1241\",\"flavorRef\":\"100\",\"availability_zone\":\"nova\"}}","application/json"))
+ .build();
+
+
+ HttpResponse createServerResponse = HttpResponse.builder().statusCode(202).message("HTTP/1.1 202 Accepted")
+ .payload(payloadFromResourceWithContentType("/new_server_in_zone.json","application/json; charset=UTF-8")).build();
+
+ NovaApi apiWithNewServer = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, createServer, createServerResponse);
+
+ CreateServerOptions options = new CreateServerOptions().availabilityZone("nova");
+
+ assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241", "100", options).toString(),
+ new ParseCreatedServerTest().expected().toString());
+ }
+
+ public void testCreateServerWithSecurityGroupsWhenResponseIs202() throws Exception {
+
+ HttpRequest createServer = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType(
+ "{\"server\":{\"name\":\"test-e92\",\"imageRef\":\"1241\",\"flavorRef\":\"100\",\"security_groups\":[{\"name\":\"group1\"},{\"name\":\"group2\"}]}}","application/json"))
+ .build();
+
+
+ HttpResponse createServerResponse = HttpResponse.builder().statusCode(202).message("HTTP/1.1 202 Accepted")
+ .payload(payloadFromResourceWithContentType("/new_server.json","application/json; charset=UTF-8")).build();
+
+
+ NovaApi apiWithNewServer = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, createServer, createServerResponse);
+
+ assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241",
+ "100", new CreateServerOptions().securityGroupNames("group1", "group2")).toString(),
+ new ParseCreatedServerTest().expected().toString());
+ }
+
+ public void testCreateServerWithNetworksWhenResponseIs202() throws Exception {
+
+ HttpRequest createServer = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType(
+ "{\"server\":{\"name\":\"test-e92\",\"imageRef\":\"1241\",\"flavorRef\":\"100\",\"networks\":[{\"uuid\":\"b3856ac0-f481-11e2-b778-0800200c9a66\"},{\"uuid\":\"bf0f0f90-f481-11e2-b778-0800200c9a66\"}]}}","application/json"))
+ .build();
+
+
+ HttpResponse createServerResponse = HttpResponse.builder().statusCode(202).message("HTTP/1.1 202 Accepted")
+ .payload(payloadFromResourceWithContentType("/new_server.json","application/json; charset=UTF-8")).build();
+
+
+ NovaApi apiWithNewServer = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, createServer, createServerResponse);
+
+ assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241",
+ "100", new CreateServerOptions().networks("b3856ac0-f481-11e2-b778-0800200c9a66", "bf0f0f90-f481-11e2-b778-0800200c9a66")).toString(),
+ new ParseCreatedServerTest().expected().toString());
+ }
+
+ public void testCreateServerWithDiskConfigAuto() throws Exception {
+
+ HttpRequest createServer = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType(
+ "{\"server\":{\"name\":\"test-e92\",\"imageRef\":\"1241\",\"flavorRef\":\"100\",\"OS-DCF:diskConfig\":\"AUTO\"}}","application/json"))
+ .build();
+
+
+ HttpResponse createServerResponse = HttpResponse.builder().statusCode(202).message("HTTP/1.1 202 Accepted")
+ .payload(payloadFromResourceWithContentType("/new_server_disk_config_auto.json","application/json; charset=UTF-8")).build();
+
+
+ NovaApi apiWithNewServer = requestsSendResponses(
+ keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
+ createServer, createServerResponse);
+
+ assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241",
+ "100", new CreateServerOptions().diskConfig(Server.DISK_CONFIG_AUTO)).toString(),
+ new ParseCreatedServerTest().expectedWithDiskConfig(Server.DISK_CONFIG_AUTO).toString());
+ }
+
+ public void testCreateServerWithDiskConfigManual() throws Exception {
+
+ HttpRequest createServer = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType(
+ "{\"server\":{\"name\":\"test-e92\",\"imageRef\":\"1241\",\"flavorRef\":\"100\",\"OS-DCF:diskConfig\":\"MANUAL\"}}","application/json"))
+ .build();
+
+
+ HttpResponse createServerResponse = HttpResponse.builder().statusCode(202).message("HTTP/1.1 202 Accepted")
+ .payload(payloadFromResourceWithContentType("/new_server_disk_config_manual.json","application/json; charset=UTF-8")).build();
+
+
+ NovaApi apiWithNewServer = requestsSendResponses(
+ keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess,
+ createServer, createServerResponse);
+
+ assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").create("test-e92", "1241",
+ "100", new CreateServerOptions().diskConfig(Server.DISK_CONFIG_MANUAL)).toString(),
+ new ParseCreatedServerTest().expectedWithDiskConfig(Server.DISK_CONFIG_MANUAL).toString());
+ }
+
+ public void testRebuildServerWhenResponseIs202() throws Exception {
+ String serverId = "52415800-8b69-11e0-9b19-734f565bc83b";
+ HttpRequest rebuildServer = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId +"/action")
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType(
+ "{\"rebuild\":{\"adminPass\":\"password\",\"imageRef\":\"1234\",\"name\":\"newName\",\"accessIPv4\":\"1.1.1.1\",\"accessIPv6\":\"fe80::100\"}}","application/json"))
+ .build();
+
+ HttpResponse rebuildServerResponse = HttpResponse.builder().statusCode(202).build();
+
+ NovaApi apiRebuildServer = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, rebuildServer, rebuildServerResponse);
+
+ RebuildServerOptions options = new RebuildServerOptions().withImage("1234").name("newName").adminPass("password").ipv4Address("1.1.1.1").ipv6Address("fe80::100");
+
+ apiRebuildServer.getServerApiForZone("az-1.region-a.geo-1").rebuild(serverId, options);
+ }
+
+ public void testCreateImageWhenResponseIs2xx() throws Exception {
+ String serverId = "123";
+ String imageId = "456";
+ String imageName = "foo";
+
+ HttpRequest createImage = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/action")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType(
+ "{\"createImage\":{\"name\":\"" + imageName + "\", \"metadata\": {}}}", "application/json"))
+ .build();
+
+ HttpResponse createImageResponse = HttpResponse.builder()
+ .statusCode(200)
+ .headers(
+ ImmutableMultimap.<String, String> builder()
+ .put("Location", "https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/images/" + imageId).build()).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, createImage, createImageResponse);
+
+ assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").createImageFromServer(imageName, serverId),
+ imageId);
+ }
+
+ public void testCreateImageWhenResponseIs404IsEmpty() throws Exception {
+ String serverId = "123";
+ String imageName = "foo";
+
+ HttpRequest createImage = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/action")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType(
+ "{\"createImage\":{\"name\":\"" + imageName + "\", \"metadata\": {}}}", "application/json"))
+ .build();
+
+ HttpResponse createImageResponse = HttpResponse.builder().statusCode(404).build();
+ NovaApi apiWhenServerDoesNotExist = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, createImage, createImageResponse);
+
+ try {
+ apiWhenServerDoesNotExist.getServerApiForZone("az-1.region-a.geo-1").createImageFromServer(imageName, serverId);
+ fail("Expected an exception.");
+ } catch (Exception e) {
+ // expected
+ }
+ }
+
+ public void testStopServerWhenResponseIs2xx() throws Exception {
+ String serverId = "123";
+ HttpRequest stopServer = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/action")
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType(
+ "{\"os-stop\":null}", "application/json"))
+ .build();
+
+ HttpResponse stopServerResponse = HttpResponse.builder().statusCode(202).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, stopServer, stopServerResponse);
+
+ apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").stop(serverId);
+ }
+
+ public void testStopServerWhenResponseIs404() throws Exception {
+ String serverId = "123";
+ HttpRequest stopServer = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/action")
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+
+ .payload(payloadFromStringWithContentType(
+ "{\"os-stop\":null}", "application/json"))
+ .build();
+
+ HttpResponse stopServerResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, stopServer, stopServerResponse);
+
+ try {
+ apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").stop(serverId);
+ fail("Expected an exception.");
+ } catch (Exception e) {
+ // expected
+ }
+ }
+
+ public void testStartServerWhenResponseIs2xx() throws Exception {
+ String serverId = "123";
+ HttpRequest startServer = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/action")
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+
+ .payload(payloadFromStringWithContentType(
+ "{\"os-start\":null}", "application/json"))
+ .build();
+
+ HttpResponse startServerResponse = HttpResponse.builder().statusCode(202).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, startServer, startServerResponse);
+
+ apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").start(serverId);
+ }
+
+ public void testStartServerWhenResponseIs404() throws Exception {
+ String serverId = "123";
+ HttpRequest startServer = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/action")
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType(
+ "{\"os-startp\":null}", "application/json"))
+ .build();
+
+ HttpResponse startServerResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, startServer, startServerResponse);
+
+ try {
+ apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").start(serverId);
+ fail("Expected an exception.");
+ } catch (Exception e) {
+ // expected
+ }
+ }
+
+ public void testListMetadataWhenResponseIs2xx() throws Exception {
+ String serverId = "123";
+
+ HttpRequest getMetadata = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken).build();
+
+ HttpResponse getMetadataResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/metadata_list.json")).build();
+
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getMetadata, getMetadataResponse);
+
+ assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").getMetadata(serverId).toString(),
+ new ParseMetadataListTest().expected().toString());
+ }
+
+ public void testListMetadataWhenResponseIs404() throws Exception {
+ String serverId = "123";
+ HttpRequest getMetadata = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata")
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+ HttpResponse getMetadataResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getMetadata, getMetadataResponse);
+
+ try {
+ apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").getMetadata(serverId);
+ fail("Expected an exception.");
+ } catch (Exception e) {
+ // expected
+ }
+ }
+
+ public void testSetMetadataWhenResponseIs2xx() throws Exception {
+ String serverId = "123";
+ ImmutableMap<String, String> metadata = new ImmutableMap.Builder<String, String>()
+ .put("Server Label", "Web Head 1")
+ .put("Image Version", "2.1")
+ .build();
+
+ HttpRequest setMetadata = HttpRequest
+ .builder()
+ .method("PUT")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Server Label\":\"Web Head 1\",\"Image Version\":\"2.1\"}}","application/json"))
+ .build();
+
+ HttpResponse setMetadataResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/metadata_list.json")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, setMetadata, setMetadataResponse);
+
+ assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").setMetadata(serverId, metadata).toString(),
+ new ParseMetadataListTest().expected().toString());
+ }
+
+ public void testSetMetadataWhenResponseIs404() throws Exception {
+ String serverId = "123";
+ ImmutableMap<String, String> metadata = new ImmutableMap.Builder<String, String>()
+ .put("Server Label", "Web Head 1")
+ .put("Image Version", "2.1")
+ .build();
+
+ HttpRequest setMetadata = HttpRequest
+ .builder()
+ .method("PUT")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata")
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Server Label\":\"Web Head 1\",\"Image Version\":\"2.1\"}}","application/json"))
+ .build();
+
+ HttpResponse setMetadataResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, setMetadata, setMetadataResponse);
+
+ try {
+ apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").setMetadata(serverId, metadata);
+ fail("Expected an exception.");
+ } catch (Exception e) {
+ // expected
+ }
+ }
+
+ public void testUpdateMetadataWhenResponseIs2xx() throws Exception {
+ String serverId = "123";
+ ImmutableMap<String, String> metadata = new ImmutableMap.Builder<String, String>()
+ .put("Server Label", "Web Head 2")
+ .put("Server Description", "Simple Server")
+ .build();
+
+ HttpRequest setMetadata = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Server Label\":\"Web Head 2\",\"Server Description\":\"Simple Server\"}}","application/json"))
+ .build();
+
+ HttpResponse setMetadataResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/metadata_updated.json")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, setMetadata, setMetadataResponse);
+
+ assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").updateMetadata(serverId, metadata).toString(),
+ new ParseMetadataUpdateTest().expected().toString());
+ }
+
+ public void testUpdateMetadataWhenResponseIs404() throws Exception {
+ String serverId = "123";
+ ImmutableMap<String, String> metadata = new ImmutableMap.Builder<String, String>()
+ .put("Server Label", "Web Head 2")
+ .put("Server Description", "Simple Server")
+ .build();
+
+ HttpRequest setMetadata = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Server Label\":\"Web Head 2\",\"Server Description\":\"Simple Server\"}}","application/json"))
+ .build();
+
+ HttpResponse setMetadataResponse = HttpResponse.builder().statusCode(404)
+ .payload(payloadFromResource("/metadata_updated.json")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, setMetadata, setMetadataResponse);
+
+ try {
+ apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").setMetadata(serverId, metadata);
+ fail("Expected an exception.");
+ } catch (Exception e) {
+ // expected
+ }
+ }
+
+ public void testGetMetadataItemWhenResponseIs2xx() throws Exception {
+ String serverId = "123";
+ String key = "Server Label";
+
+ HttpRequest getMetadata = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata/" + "Server%20Label")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+ HttpResponse getMetadataResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/metadata_item.json")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getMetadata, getMetadataResponse);
+
+ assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").getMetadata(serverId, key).toString(),
+ "Web Head 1");
+ }
+
+ public void testGetMetadataItemWhenResponseIs404() throws Exception {
+ String serverId = "123";
+ ImmutableMap<String, String> metadata = new ImmutableMap.Builder<String, String>()
+ .put("Server Label", "Web Head 1")
+ .build();
+
+ HttpRequest setMetadata = HttpRequest
+ .builder()
+ .method("GET")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Server Label\":\"Web Head 2\",\"Server Description\":\"Simple Server\"}}","application/json"))
+ .build();
+
+ HttpResponse setMetadataResponse = HttpResponse.builder().statusCode(404)
+ .payload(payloadFromResource("/metadata_updated.json")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, setMetadata, setMetadataResponse);
+
+ try {
+ apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").setMetadata(serverId, metadata);
+ fail("Expected an exception.");
+ } catch (Exception e) {
+ // expected
+ }
+ }
+
+ public void testSetMetadataItemWhenResponseIs2xx() throws Exception {
+ String serverId = "123";
+ ImmutableMap<String, String> metadata = new ImmutableMap.Builder<String, String>()
+ .put("Server Label", "Web Head 2")
+ .put("Server Description", "Simple Server")
+ .build();
+
+ HttpRequest setMetadata = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Server Label\":\"Web Head 2\",\"Server Description\":\"Simple Server\"}}","application/json"))
+ .build();
+
+ HttpResponse setMetadataResponse = HttpResponse.builder().statusCode(200)
+ .payload(payloadFromResource("/metadata_updated.json")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, setMetadata, setMetadataResponse);
+
+ assertEquals(apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").updateMetadata(serverId, metadata).toString(),
+ new ParseMetadataUpdateTest().expected().toString());
+ }
+
+ public void testSetMetadataItemWhenResponseIs404() throws Exception {
+ String serverId = "123";
+ ImmutableMap<String, String> metadata = new ImmutableMap.Builder<String, String>()
+ .put("Server Label", "Web Head 2")
+ .put("Server Description", "Simple Server")
+ .build();
+
+ HttpRequest setMetadata = HttpRequest
+ .builder()
+ .method("POST")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata")
+ .addHeader("Accept", "application/json")
+ .addHeader("X-Auth-Token", authToken)
+ .payload(payloadFromStringWithContentType("{\"metadata\":{\"Server Label\":\"Web Head 2\",\"Server Description\":\"Simple Server\"}}","application/json"))
+ .build();
+
+ HttpResponse setMetadataResponse = HttpResponse.builder().statusCode(404)
+ .payload(payloadFromResource("/metadata_updated.json")).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, setMetadata, setMetadataResponse);
+
+ try {
+ apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").setMetadata(serverId, metadata);
+ fail("Expected an exception.");
+ } catch (Exception e) {
+ // expected
+ }
+ }
+
+ public void testDeleteMetadataItemWhenResponseIs2xx() throws Exception {
+ String serverId = "123";
+ String key = "Server%20Label";
+
+ HttpRequest updateMetadata = HttpRequest
+ .builder()
+ .method("DELETE")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata/" + key)
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+ HttpResponse updateMetadataResponse = HttpResponse.builder().statusCode(204).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, updateMetadata, updateMetadataResponse);
+
+ apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").deleteMetadata(serverId, key);
+
+ }
+
+ public void testDeleteMetadataItemWhenResponseIs404() throws Exception {
+ String serverId = "123";
+ String key = "Server%20Label";
+
+ HttpRequest deleteMetadata = HttpRequest
+ .builder()
+ .method("DELETE")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/" + serverId + "/metadata/" + key)
+ .addHeader("Accept", "*/*")
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+ HttpResponse deleteMetadataResponse = HttpResponse.builder().statusCode(404).build();
+
+ NovaApi apiWhenServerExists = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, deleteMetadata, deleteMetadataResponse);
+
+ apiWhenServerExists.getServerApiForZone("az-1.region-a.geo-1").deleteMetadata(serverId, key);
+
+ }
+
+ public void testGetDiagnosticsWhenResponseIs200() throws Exception {
+
+ String serverId = "123";
+ HttpRequest getDiagnostics = HttpRequest
+ .builder()
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/"+ serverId + "/diagnostics")
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+
+ HttpResponse serverDiagnosticsResponse = HttpResponse.builder().statusCode(202).message("HTTP/1.1 202 Accepted")
+ .payload(payloadFromResourceWithContentType("/server_diagnostics.json","application/json; charset=UTF-8")).build();
+
+ NovaApi apiWithNewServer = requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName,
+ responseWithKeystoneAccess, getDiagnostics, serverDiagnosticsResponse);
+ assertEquals(apiWithNewServer.getServerApiForZone("az-1.region-a.geo-1").getDiagnostics(serverId),
+ new ParseServerDiagnostics().expected());
+ }
+
+
+ public void testGetDiagnosticsWhenResponseIs403Or404Or500() throws Exception {
+
+ String serverId = "123";
+ HttpRequest getDiagnostics = HttpRequest
+ .builder()
+ .method("GET")
+ .addHeader("Accept", "application/json")
+ .endpoint("https://az-1.region-a.geo-1.compute.hpcloudsvc.com/v1.1/3456/servers/"+ serverId + "/diagnostics")
+ .addHeader("X-Auth-Token", authToken)
+ .build();
+
+ for (int statusCode : ImmutableSet.of(403, 404, 500)) {
+ assertTrue(!requestsSendResponses(keystoneAuthWithUsernameAndPasswordAndTenantName, responseWithKeystoneAccess, getDiagnostics,
+ HttpResponse.builder().statusCode(statusCode).build()).getServerApiForZone("az-1.region-a.geo-1").getDiagnostics(serverId).isPresent());
+ }
+ }
+
+
+
+}