diff --git a/providers/hpcloud-compute/pom.xml b/providers/hpcloud-compute/pom.xml index 98bd011f18..4237ff38b9 100644 --- a/providers/hpcloud-compute/pom.xml +++ b/providers/hpcloud-compute/pom.xml @@ -76,6 +76,13 @@ test-jar test + + org.jclouds.api + openstack-keystone + ${project.version} + test-jar + test + org.jclouds.driver jclouds-slf4j diff --git a/providers/hpcloud-compute/src/main/java/org/jclouds/hpcloud/compute/HPCloudComputeProviderMetadata.java b/providers/hpcloud-compute/src/main/java/org/jclouds/hpcloud/compute/HPCloudComputeProviderMetadata.java index 796269d83f..c7a547043e 100644 --- a/providers/hpcloud-compute/src/main/java/org/jclouds/hpcloud/compute/HPCloudComputeProviderMetadata.java +++ b/providers/hpcloud-compute/src/main/java/org/jclouds/hpcloud/compute/HPCloudComputeProviderMetadata.java @@ -31,6 +31,7 @@ import org.jclouds.hpcloud.compute.config.HPCloudComputeServiceContextModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.ZoneModule; import org.jclouds.openstack.nova.v2_0.NovaApiMetadata; +import org.jclouds.openstack.nova.v2_0.config.NovaParserModule; import org.jclouds.openstack.nova.v2_0.config.NovaRestClientModule; import org.jclouds.providers.ProviderMetadata; import org.jclouds.providers.internal.BaseProviderMetadata; @@ -88,6 +89,7 @@ public class HPCloudComputeProviderMetadata extends BaseProviderMetadata { .defaultModules(ImmutableSet.>builder() .add(KeystoneAuthenticationModule.class) .add(ZoneModule.class) + .add(NovaParserModule.class) .add(NovaRestClientModule.class) .add(HPCloudComputeServiceContextModule.class).build()) .build()) diff --git a/providers/hpcloud-compute/src/test/java/org/jclouds/hpcloud/compute/HPCloudComputeProviderMetadataExpectTest.java b/providers/hpcloud-compute/src/test/java/org/jclouds/hpcloud/compute/HPCloudComputeProviderMetadataExpectTest.java new file mode 100644 index 0000000000..3391e0d5f6 --- /dev/null +++ b/providers/hpcloud-compute/src/test/java/org/jclouds/hpcloud/compute/HPCloudComputeProviderMetadataExpectTest.java @@ -0,0 +1,64 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.jclouds.hpcloud.compute; + +import static org.testng.Assert.assertEquals; + +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.testng.annotations.Test; + +import com.google.common.collect.ImmutableSet; + +/** + * This test ensures that the wiring in {@link HPCloudComputeProviderMetadata} is correct. + * + * @author Adrian Cole + */ +@Test(groups = "unit", testName = "HPCloudComputeProviderMetadataExpectTest") +public class HPCloudComputeProviderMetadataExpectTest extends BaseNovaApiExpectTest { + + public HPCloudComputeProviderMetadataExpectTest() { + this.provider = "hpcloud-compute"; + this.identity = "tenant:username"; + this.credential = "password"; + } + + public void testCanGetConfiguredZones() { + + HttpRequest authenticate = HttpRequest.builder().method("POST") + .endpoint("https://region-a.geo-1.identity.hpcloudsvc.com:35357/v2.0/tokens") + .addHeader("Accept", "application/json") + .payload(payloadFromStringWithContentType( + "{\"auth\":{\"passwordCredentials\":{\"username\":\"username\",\"password\":\"password\"},\"tenantName\":\"tenant\"}}" + , "application/json")).build(); + + + HttpResponse authenticationResponse = HttpResponse.builder().statusCode(200) + .payload(payloadFromResourceWithContentType("/access_hpcloud.json", "application/json")).build(); + + NovaApi whenNovaRegionExists = requestSendsResponse(authenticate, authenticationResponse); + + assertEquals(whenNovaRegionExists.getConfiguredZones(), ImmutableSet.of("az-3.region-a.geo-1", "az-2.region-a.geo-1", "az-1.region-a.geo-1")); + + } + +} diff --git a/providers/hpcloud-compute/src/test/resources/access_hpcloud.json b/providers/hpcloud-compute/src/test/resources/access_hpcloud.json new file mode 100644 index 0000000000..d444d93a31 --- /dev/null +++ b/providers/hpcloud-compute/src/test/resources/access_hpcloud.json @@ -0,0 +1,225 @@ +{"access": { + "token": { + "expires": "2012-09-30T12:56:12.481Z", + "id": "HPAuth_e2b86593f73366704ed4f9e4441a2467f1a67568d5363e561a72f36a96da3b4a", + "tenant": { + "id": "37936628937291", + "name": "adrian@jclouds.org" + } + }, + "user": { + "id": "54297837463082", + "name": "adrian@jclouds.org", + "roles": [ + { + "id": "00000000004016", + "serviceId": "120", + "name": "netadmin", + "tenantId": "37936628937291" + }, + { + "id": "00000000004025", + "serviceId": "120", + "name": "sysadmin", + "tenantId": "37936628937291" + }, + { + "id": "00000000004014", + "serviceId": "150", + "name": "cdn-admin", + "tenantId": "37936628937291" + }, + { + "id": "00000000004013", + "serviceId": "130", + "name": "block-admin", + "tenantId": "37936628937291" + }, + { + "id": "00000000004022", + "serviceId": "110", + "name": "Admin", + "tenantId": "37936628937291" + }, + { + "id": "00000000004016", + "serviceId": "120", + "name": "netadmin", + "tenantId": "37936628937291" + }, + { + "id": "00000000004024", + "serviceId": "140", + "name": "user", + "tenantId": "37936628937291" + }, + { + "id": "00000000004013", + "serviceId": "130", + "name": "block-admin", + "tenantId": "37936628937291" + }, + { + "id": "00000000004003", + "serviceId": "100", + "name": "domainadmin" + }, + { + "id": "00000000004025", + "serviceId": "120", + "name": "sysadmin", + "tenantId": "37936628937291" + }, + { + "id": "00000000004024", + "serviceId": "140", + "name": "user", + "tenantId": "37936628937291" + }, + { + "id": "00000000004004", + "serviceId": "100", + "name": "domainuser" + } + ] + }, + "serviceCatalog": [ + { + "name": "CDN", + "type": "hpext:cdn", + "endpoints": [{ + "tenantId": "37936628937291", + "publicURL": "https:\/\/region-a.geo-1.cdnmgmt.hpcloudsvc.com\/v1.0\/AUTH_651c939f-04f0-4fbf-bd50-27f114ccaa15", + "region": "region-a.geo-1", + "versionId": "1.0", + "versionInfo": "https:\/\/region-a.geo-1.cdnmgmt.hpcloudsvc.com\/v1.0\/", + "versionList": "https:\/\/region-a.geo-1.cdnmgmt.hpcloudsvc.com\/" + }] + }, + { + "name": "Object Storage", + "type": "object-store", + "endpoints": [{ + "tenantId": "37936628937291", + "publicURL": "https:\/\/region-a.geo-1.objects.hpcloudsvc.com\/v1.0\/AUTH_651c939f-04f0-4fbf-bd50-27f114ccaa15", + "region": "region-a.geo-1", + "versionId": "1.0", + "versionInfo": "https:\/\/region-a.geo-1.objects.hpcloudsvc.com\/v1.0\/", + "versionList": "https:\/\/region-a.geo-1.objects.hpcloudsvc.com" + }] + }, + { + "name": "Identity", + "type": "identity", + "endpoints": [ + { + "publicURL": "https:\/\/region-b.geo-1.identity.hpcloudsvc.com:35357\/v2.0\/", + "region": "region-b.geo-1", + "versionId": "2.0", + "versionInfo": "https:\/\/region-b.geo-1.identity.hpcloudsvc.com:35357\/v2.0\/", + "versionList": "https:\/\/region-b.geo-1.identity.hpcloudsvc.com:35357" + }, + { + "publicURL": "https:\/\/region-a.geo-1.identity.hpcloudsvc.com:35357\/v2.0\/", + "region": "region-a.geo-1", + "versionId": "2.0", + "versionInfo": "https:\/\/region-a.geo-1.identity.hpcloudsvc.com:35357\/v2.0\/", + "versionList": "https:\/\/region-a.geo-1.identity.hpcloudsvc.com:35357" + } + ] + }, + { + "name": "Image Management", + "type": "image", + "endpoints": [ + { + "tenantId": "37936628937291", + "publicURL": "https:\/\/glance2.uswest.hpcloud.net:9292\/v1.0", + "region": "az-2.region-a.geo-1", + "versionId": "1.0", + "versionInfo": "https:\/\/glance2.uswest.hpcloud.net:9292\/v1.0\/", + "versionList": "https:\/\/glance2.uswest.hpcloud.net:9292" + }, + { + "tenantId": "37936628937291", + "publicURL": "https:\/\/glance3.uswest.hpcloud.net:9292\/v1.0", + "region": "az-3.region-a.geo-1", + "versionId": "1.0", + "versionInfo": "https:\/\/glance3.uswest.hpcloud.net:9292\/v1.0\/", + "versionList": "https:\/\/glance3.uswest.hpcloud.net:9292" + }, + { + "tenantId": "37936628937291", + "publicURL": "https:\/\/glance1.uswest.hpcloud.net:9292\/v1.0", + "region": "az-1.region-a.geo-1", + "versionId": "1.0", + "versionInfo": "https:\/\/glance1.uswest.hpcloud.net:9292\/v1.0\/", + "versionList": "https:\/\/glance1.uswest.hpcloud.net:9292" + } + ] + }, + { + "name": "Block Storage", + "type": "volume", + "endpoints": [ + { + "tenantId": "37936628937291", + "publicURL": "https:\/\/az-1.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/37936628937291", + "region": "az-1.region-a.geo-1", + "versionId": "1.1", + "versionInfo": "https:\/\/az-1.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/", + "versionList": "https:\/\/az-1.region-a.geo-1.compute.hpcloudsvc.com" + }, + { + "tenantId": "37936628937291", + "publicURL": "https:\/\/az-3.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/37936628937291", + "region": "az-3.region-a.geo-1", + "versionId": "1.1", + "versionInfo": "https:\/\/az-3.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/", + "versionList": "https:\/\/az-3.region-a.geo-1.compute.hpcloudsvc.com" + }, + { + "tenantId": "37936628937291", + "publicURL": "https:\/\/az-2.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/37936628937291", + "region": "az-2.region-a.geo-1", + "versionId": "1.1", + "versionInfo": "https:\/\/az-2.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/", + "versionList": "https:\/\/az-2.region-a.geo-1.compute.hpcloudsvc.com" + } + ] + }, + { + "name": "Compute", + "type": "compute", + "endpoints": [ + { + "tenantId": "37936628937291", + "publicURL": "https:\/\/az-3.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/37936628937291", + "publicURL2": "https:\/\/az-3.region-a.geo-1.ec2-compute.hpcloudsvc.com\/services\/Cloud", + "region": "az-3.region-a.geo-1", + "versionId": "1.1", + "versionInfo": "https:\/\/az-3.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/", + "versionList": "https:\/\/az-3.region-a.geo-1.compute.hpcloudsvc.com" + }, + { + "tenantId": "37936628937291", + "publicURL": "https:\/\/az-2.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/37936628937291", + "publicURL2": "https:\/\/az-2.region-a.geo-1.ec2-compute.hpcloudsvc.com\/services\/Cloud", + "region": "az-2.region-a.geo-1", + "versionId": "1.1", + "versionInfo": "https:\/\/az-2.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/", + "versionList": "https:\/\/az-2.region-a.geo-1.compute.hpcloudsvc.com" + }, + { + "tenantId": "37936628937291", + "publicURL": "https:\/\/az-1.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/37936628937291", + "publicURL2": "https:\/\/az-1.region-a.geo-1.ec2-compute.hpcloudsvc.com\/services\/Cloud", + "region": "az-1.region-a.geo-1", + "versionId": "1.1", + "versionInfo": "https:\/\/az-1.region-a.geo-1.compute.hpcloudsvc.com\/v1.1\/", + "versionList": "https:\/\/az-1.region-a.geo-1.compute.hpcloudsvc.com" + } + ] + } + ] +}} diff --git a/providers/rackspace-cloudservers-uk/pom.xml b/providers/rackspace-cloudservers-uk/pom.xml index f3b75d7b70..41293785e8 100644 --- a/providers/rackspace-cloudservers-uk/pom.xml +++ b/providers/rackspace-cloudservers-uk/pom.xml @@ -88,6 +88,13 @@ test-jar test + + org.jclouds.api + openstack-keystone + ${project.version} + test-jar + test + org.jclouds.driver jclouds-slf4j diff --git a/providers/rackspace-cloudservers-uk/src/main/java/org/jclouds/rackspace/cloudservers/uk/CloudServersUKProviderMetadata.java b/providers/rackspace-cloudservers-uk/src/main/java/org/jclouds/rackspace/cloudservers/uk/CloudServersUKProviderMetadata.java index 59696f916b..d84effa2b3 100644 --- a/providers/rackspace-cloudservers-uk/src/main/java/org/jclouds/rackspace/cloudservers/uk/CloudServersUKProviderMetadata.java +++ b/providers/rackspace-cloudservers-uk/src/main/java/org/jclouds/rackspace/cloudservers/uk/CloudServersUKProviderMetadata.java @@ -28,6 +28,7 @@ import java.util.Properties; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.ZoneModule; import org.jclouds.openstack.nova.v2_0.NovaApiMetadata; +import org.jclouds.openstack.nova.v2_0.config.NovaParserModule; import org.jclouds.openstack.nova.v2_0.config.NovaRestClientModule; import org.jclouds.providers.ProviderMetadata; import org.jclouds.providers.internal.BaseProviderMetadata; @@ -88,6 +89,7 @@ public class CloudServersUKProviderMetadata extends BaseProviderMetadata { .defaultModules(ImmutableSet.>builder() .add(CloudIdentityAuthenticationModule.class) .add(ZoneModule.class) + .add(NovaParserModule.class) .add(NovaRestClientModule.class) .add(CloudServersUKComputeServiceContextModule.class).build()) .build()) diff --git a/providers/rackspace-cloudservers-uk/src/test/java/org/jclouds/rackspace/cloudservers/uk/CloudServersUKProviderMetadataExpectTest.java b/providers/rackspace-cloudservers-uk/src/test/java/org/jclouds/rackspace/cloudservers/uk/CloudServersUKProviderMetadataExpectTest.java new file mode 100644 index 0000000000..ef6abe25f2 --- /dev/null +++ b/providers/rackspace-cloudservers-uk/src/test/java/org/jclouds/rackspace/cloudservers/uk/CloudServersUKProviderMetadataExpectTest.java @@ -0,0 +1,64 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not uke 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.rackspace.cloudservers.uk; + +import static org.testng.Assert.assertEquals; + +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.testng.annotations.Test; + +import com.google.common.collect.ImmutableSet; + +/** + * This test ensures that the wiring in {@link CloudServersUKProviderMetadata} is correct. + * + * @author Adrian Cole + */ +@Test(groups = "unit", testName = "CloudServersUKProviderMetadataExpectTest") +public class CloudServersUKProviderMetadataExpectTest extends BaseNovaApiExpectTest { + + public CloudServersUKProviderMetadataExpectTest() { + this.provider = "rackspace-cloudservers-uk"; + this.identity = "myUsername"; + this.credential = "myApiKey"; + } + + public void testCanGetConfiguredZones() { + + HttpRequest authenticate = HttpRequest.builder().method("POST") + .endpoint("https://lon.identity.api.rackspacecloud.com/v2.0/tokens") + .addHeader("Accept", "application/json") + .payload(payloadFromStringWithContentType( + "{\"auth\":{\"RAX-KSKEY:apiKeyCredentials\":{\"username\":\"myUsername\",\"apiKey\":\"myApiKey\"}}}" + , "application/json")).build(); + + + HttpResponse authenticationResponse = HttpResponse.builder().statusCode(200) + .payload(payloadFromResourceWithContentType("/access_rax_uk.json", "application/json")).build(); + + NovaApi whenNovaRegionExists = requestSendsResponse(authenticate, authenticationResponse); + + assertEquals(whenNovaRegionExists.getConfiguredZones(), ImmutableSet.of("LON")); + + } + +} diff --git a/providers/rackspace-cloudservers-uk/src/test/resources/access_rax_uk.json b/providers/rackspace-cloudservers-uk/src/test/resources/access_rax_uk.json new file mode 100644 index 0000000000..b8bd64494e --- /dev/null +++ b/providers/rackspace-cloudservers-uk/src/test/resources/access_rax_uk.json @@ -0,0 +1 @@ +{"access":{"token":{"id":"bdd18214-e266-4ad3-b985-d9bfb22c8da8","expires":"2012-10-01T02:11:16.000+01:00","tenant":{"id":"10001786","name":"10001786"}},"serviceCatalog":[{"endpoints":[{"region":"LON","tenantId":"MossoCloudFS_83a9d536-2e25-4166-bd3b-a503a934f953","publicURL":"https:\/\/storage101.lon3.clouddrive.com\/v1\/MossoCloudFS_83a9d536-2e25-4166-bd3b-a503a934f953","internalURL":"https:\/\/snet-storage101.lon3.clouddrive.com\/v1\/MossoCloudFS_83a9d536-2e25-4166-bd3b-a503a934f953"}],"name":"cloudFiles","type":"object-store"},{"endpoints":[{"region":"LON","tenantId":"MossoCloudFS_83a9d536-2e25-4166-bd3b-a503a934f953","publicURL":"https:\/\/cdn3.clouddrive.com\/v1\/MossoCloudFS_83a9d536-2e25-4166-bd3b-a503a934f953"}],"name":"cloudFilesCDN","type":"rax:object-cdn"},{"endpoints":[{"tenantId":"10001786","publicURL":"https:\/\/lon.servers.api.rackspacecloud.com\/v1.0\/10001786","versionInfo":"https:\/\/lon.servers.api.rackspacecloud.com\/v1.0","versionList":"https:\/\/lon.servers.api.rackspacecloud.com\/","versionId":"1.0"}],"name":"cloudServers","type":"compute"},{"endpoints":[{"tenantId":"10001786","publicURL":"https:\/\/lon.dns.api.rackspacecloud.com\/v1.0\/10001786"}],"name":"cloudDNS","type":"rax:dns"},{"endpoints":[{"region":"LON","tenantId":"10001786","publicURL":"https:\/\/lon.loadbalancers.api.rackspacecloud.com\/v1.0\/10001786"}],"name":"cloudLoadBalancers","type":"rax:load-balancer"},{"endpoints":[{"tenantId":"10001786","publicURL":"https:\/\/monitoring.api.rackspacecloud.com\/v1.0\/10001786"}],"name":"cloudMonitoring","type":"rax:monitor"},{"endpoints":[{"region":"LON","tenantId":"10001786","publicURL":"https:\/\/lon.databases.api.rackspacecloud.com\/v1.0\/10001786"}],"name":"cloudDatabases","type":"rax:database"},{"endpoints":[{"region":"LON","tenantId":"10001786","publicURL":"https:\/\/lon.servers.api.rackspacecloud.com\/v2\/10001786","versionInfo":"https:\/\/lon.servers.api.rackspacecloud.com\/v2","versionList":"https:\/\/lon.servers.api.rackspacecloud.com\/","versionId":"2"}],"name":"cloudServersOpenStack","type":"compute"}],"user":{"id":"378","roles":[{"id":"3","description":"User Admin Role.","name":"identity:user-admin"}],"name":"jclouds","RAX-AUTH:defaultRegion":""}}} \ No newline at end of file diff --git a/providers/rackspace-cloudservers-us/pom.xml b/providers/rackspace-cloudservers-us/pom.xml index 33875b9e5e..e312a7a33e 100644 --- a/providers/rackspace-cloudservers-us/pom.xml +++ b/providers/rackspace-cloudservers-us/pom.xml @@ -88,6 +88,13 @@ test-jar test + + org.jclouds.api + openstack-keystone + ${project.version} + test-jar + test + org.jclouds.driver jclouds-slf4j diff --git a/providers/rackspace-cloudservers-us/src/main/java/org/jclouds/rackspace/cloudservers/us/CloudServersUSProviderMetadata.java b/providers/rackspace-cloudservers-us/src/main/java/org/jclouds/rackspace/cloudservers/us/CloudServersUSProviderMetadata.java index 2758535e3b..845b3d2650 100644 --- a/providers/rackspace-cloudservers-us/src/main/java/org/jclouds/rackspace/cloudservers/us/CloudServersUSProviderMetadata.java +++ b/providers/rackspace-cloudservers-us/src/main/java/org/jclouds/rackspace/cloudservers/us/CloudServersUSProviderMetadata.java @@ -28,6 +28,7 @@ import java.util.Properties; import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.ZoneModule; import org.jclouds.openstack.nova.v2_0.NovaApiMetadata; +import org.jclouds.openstack.nova.v2_0.config.NovaParserModule; import org.jclouds.openstack.nova.v2_0.config.NovaRestClientModule; import org.jclouds.providers.ProviderMetadata; import org.jclouds.providers.internal.BaseProviderMetadata; @@ -89,6 +90,7 @@ public class CloudServersUSProviderMetadata extends BaseProviderMetadata { .defaultModules(ImmutableSet.>builder() .add(CloudIdentityAuthenticationModule.class) .add(ZoneModule.class) + .add(NovaParserModule.class) .add(NovaRestClientModule.class) .add(CloudServersUSComputeServiceContextModule.class).build()) .build()) diff --git a/providers/rackspace-cloudservers-us/src/test/java/org/jclouds/rackspace/cloudservers/us/CloudServersUSProviderMetadataExpectTest.java b/providers/rackspace-cloudservers-us/src/test/java/org/jclouds/rackspace/cloudservers/us/CloudServersUSProviderMetadataExpectTest.java new file mode 100644 index 0000000000..e3d5df400f --- /dev/null +++ b/providers/rackspace-cloudservers-us/src/test/java/org/jclouds/rackspace/cloudservers/us/CloudServersUSProviderMetadataExpectTest.java @@ -0,0 +1,64 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.jclouds.rackspace.cloudservers.us; + +import static org.testng.Assert.assertEquals; + +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.testng.annotations.Test; + +import com.google.common.collect.ImmutableSet; + +/** + * This test ensures that the wiring in {@link CloudServersUSProviderMetadata} is correct. + * + * @author Adrian Cole + */ +@Test(groups = "unit", testName = "CloudServersUSProviderMetadataExpectTest") +public class CloudServersUSProviderMetadataExpectTest extends BaseNovaApiExpectTest { + + public CloudServersUSProviderMetadataExpectTest() { + this.provider = "rackspace-cloudservers-us"; + this.identity = "myUsername"; + this.credential = "myApiKey"; + } + + public void testCanGetConfiguredZones() { + + HttpRequest authenticate = HttpRequest.builder().method("POST") + .endpoint("https://identity.api.rackspacecloud.com/v2.0/tokens") + .addHeader("Accept", "application/json") + .payload(payloadFromStringWithContentType( + "{\"auth\":{\"RAX-KSKEY:apiKeyCredentials\":{\"username\":\"myUsername\",\"apiKey\":\"myApiKey\"}}}" + , "application/json")).build(); + + + HttpResponse authenticationResponse = HttpResponse.builder().statusCode(200) + .payload(payloadFromResourceWithContentType("/access_rax_us.json", "application/json")).build(); + + NovaApi whenNovaRegionExists = requestSendsResponse(authenticate, authenticationResponse); + + assertEquals(whenNovaRegionExists.getConfiguredZones(), ImmutableSet.of("ORD", "DFW")); + + } + +} diff --git a/providers/rackspace-cloudservers-us/src/test/resources/access_rax_us.json b/providers/rackspace-cloudservers-us/src/test/resources/access_rax_us.json new file mode 100644 index 0000000000..a8399465c6 --- /dev/null +++ b/providers/rackspace-cloudservers-us/src/test/resources/access_rax_us.json @@ -0,0 +1 @@ +{"access":{"token":{"id":"myToken","expires":"2012-09-30T17:15:32.000-05:00","tenant":{"id":"717071","name":"717071"}},"serviceCatalog":[{"endpoints":[{"tenantId":"717071","publicURL":"https:\/\/dns.api.rackspacecloud.com\/v1.0\/717071"}],"name":"cloudDNS","type":"rax:dns"},{"endpoints":[{"tenantId":"717071","publicURL":"https:\/\/monitoring.api.rackspacecloud.com\/v1.0\/717071"}],"name":"cloudMonitoring","type":"rax:monitor"},{"endpoints":[{"region":"DFW","tenantId":"717071","publicURL":"https:\/\/dfw.servers.api.rackspacecloud.com\/v2\/717071","versionInfo":"https:\/\/dfw.servers.api.rackspacecloud.com\/v2","versionList":"https:\/\/dfw.servers.api.rackspacecloud.com\/","versionId":"2"},{"region":"ORD","tenantId":"717071","publicURL":"https:\/\/ord.servers.api.rackspacecloud.com\/v2\/717071","versionInfo":"https:\/\/ord.servers.api.rackspacecloud.com\/v2","versionList":"https:\/\/ord.servers.api.rackspacecloud.com\/","versionId":"2"}],"name":"cloudServersOpenStack","type":"compute"},{"endpoints":[{"region":"ORD","tenantId":"717071","publicURL":"https:\/\/ord.loadbalancers.api.rackspacecloud.com\/v1.0\/717071"},{"region":"DFW","tenantId":"717071","publicURL":"https:\/\/dfw.loadbalancers.api.rackspacecloud.com\/v1.0\/717071"}],"name":"cloudLoadBalancers","type":"rax:load-balancer"},{"endpoints":[{"region":"DFW","tenantId":"717071","publicURL":"https:\/\/dfw.databases.api.rackspacecloud.com\/v1.0\/717071"},{"region":"ORD","tenantId":"717071","publicURL":"https:\/\/ord.databases.api.rackspacecloud.com\/v1.0\/717071"}],"name":"cloudDatabases","type":"rax:database"},{"endpoints":[{"region":"DFW","tenantId":"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9","publicURL":"https:\/\/storage101.dfw1.clouddrive.com\/v1\/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9","internalURL":"https:\/\/snet-storage101.dfw1.clouddrive.com\/v1\/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9"},{"region":"ORD","tenantId":"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9","publicURL":"https:\/\/storage101.ord1.clouddrive.com\/v1\/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9","internalURL":"https:\/\/snet-storage101.ord1.clouddrive.com\/v1\/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9"}],"name":"cloudFiles","type":"object-store"},{"endpoints":[{"region":"DFW","tenantId":"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9","publicURL":"https:\/\/cdn1.clouddrive.com\/v1\/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9"},{"region":"ORD","tenantId":"MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9","publicURL":"https:\/\/cdn2.clouddrive.com\/v1\/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9"}],"name":"cloudFilesCDN","type":"rax:object-cdn"},{"endpoints":[{"tenantId":"717071","publicURL":"https:\/\/servers.api.rackspacecloud.com\/v1.0\/717071","versionInfo":"https:\/\/servers.api.rackspacecloud.com\/v1.0","versionList":"https:\/\/servers.api.rackspacecloud.com\/","versionId":"1.0"}],"name":"cloudServers","type":"compute"},{"endpoints":[{"region":"DFW","tenantId":"717071","publicURL":"https:\/\/dfw.blockstorage.api.rackspacecloud.com\/v1\/717071"}],"name":"cloudBlockStorage","type":"volume"}],"user":{"id":"224085","roles":[{"id":"3","description":"User Admin Role.","name":"identity:user-admin"}],"name":"myUsername","RAX-AUTH:defaultRegion":"DFW"}}} \ No newline at end of file diff --git a/providers/trystack-nova/pom.xml b/providers/trystack-nova/pom.xml index 8d01cdbb27..27206c4945 100644 --- a/providers/trystack-nova/pom.xml +++ b/providers/trystack-nova/pom.xml @@ -76,6 +76,13 @@ test-jar test + + org.jclouds.api + openstack-keystone + ${project.version} + test-jar + test + org.jclouds.driver jclouds-slf4j diff --git a/providers/trystack-nova/src/main/java/org/jclouds/trystack/nova/TryStackNovaProviderMetadata.java b/providers/trystack-nova/src/main/java/org/jclouds/trystack/nova/TryStackNovaProviderMetadata.java index fa58662f01..206f1d2697 100644 --- a/providers/trystack-nova/src/main/java/org/jclouds/trystack/nova/TryStackNovaProviderMetadata.java +++ b/providers/trystack-nova/src/main/java/org/jclouds/trystack/nova/TryStackNovaProviderMetadata.java @@ -24,7 +24,10 @@ import static org.jclouds.openstack.nova.v2_0.config.NovaProperties.AUTO_GENERAT import java.net.URI; import java.util.Properties; +import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule; +import org.jclouds.openstack.keystone.v2_0.config.KeystoneAuthenticationModule.ZoneModule; import org.jclouds.openstack.nova.v2_0.NovaApiMetadata; +import org.jclouds.openstack.nova.v2_0.config.NovaParserModule; import org.jclouds.openstack.nova.v2_0.config.NovaRestClientModule; import org.jclouds.providers.ProviderMetadata; import org.jclouds.providers.internal.BaseProviderMetadata; @@ -74,7 +77,12 @@ public class TryStackNovaProviderMetadata extends BaseProviderMetadata { .name("TryStack.org (Nova)") .apiMetadata( new NovaApiMetadata().toBuilder() - .defaultModules(ImmutableSet.>of(NovaRestClientModule.class, TryStackNovaServiceContextModule.class)) + .defaultModules(ImmutableSet.>builder() + .add(KeystoneAuthenticationModule.class) + .add(ZoneModule.class) + .add(NovaParserModule.class) + .add(NovaRestClientModule.class) + .add(TryStackNovaServiceContextModule.class).build()) .build()) .homepage(URI.create("https://trystack.org")) .console(URI.create("https://trystack.org/dash")) diff --git a/providers/trystack-nova/src/test/java/org/jclouds/trystack/nova/TryStackNovaProviderMetadataExpectTest.java b/providers/trystack-nova/src/test/java/org/jclouds/trystack/nova/TryStackNovaProviderMetadataExpectTest.java new file mode 100644 index 0000000000..83a356b470 --- /dev/null +++ b/providers/trystack-nova/src/test/java/org/jclouds/trystack/nova/TryStackNovaProviderMetadataExpectTest.java @@ -0,0 +1,64 @@ +/** + * Licensed to jclouds, Inc. (jclouds) under one or more + * contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. jclouds licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.jclouds.trystack.nova; + +import static org.testng.Assert.assertEquals; + +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.testng.annotations.Test; + +import com.google.common.collect.ImmutableSet; + +/** + * This test ensures that the wiring in {@link TryStackNovaProviderMetadata} is correct. + * + * @author Adrian Cole + */ +@Test(groups = "unit", testName = "TryStackNovaProviderMetadataExpectTest") +public class TryStackNovaProviderMetadataExpectTest extends BaseNovaApiExpectTest { + + public TryStackNovaProviderMetadataExpectTest() { + this.provider = "trystack-nova"; + this.identity = "demo:demo"; + this.credential = "password"; + } + + public void testCanGetConfiguredZones() { + + HttpRequest authenticate = HttpRequest.builder().method("POST") + .endpoint("https://nova-api.trystack.org:5443/v2.0/tokens") + .addHeader("Accept", "application/json") + .payload(payloadFromStringWithContentType( + "{\"auth\":{\"passwordCredentials\":{\"username\":\"demo\",\"password\":\"password\"},\"tenantName\":\"demo\"}}" + , "application/json")).build(); + + + HttpResponse authenticationResponse = HttpResponse.builder().statusCode(200) + .payload(payloadFromResourceWithContentType("/access_trystack.json", "application/json")).build(); + + NovaApi whenNovaRegionExists = requestSendsResponse(authenticate, authenticationResponse); + + assertEquals(whenNovaRegionExists.getConfiguredZones(), ImmutableSet.of("RegionOne")); + + } + +} diff --git a/providers/trystack-nova/src/test/resources/access_trystack.json b/providers/trystack-nova/src/test/resources/access_trystack.json new file mode 100644 index 0000000000..27844f2fd8 --- /dev/null +++ b/providers/trystack-nova/src/test/resources/access_trystack.json @@ -0,0 +1,49 @@ +{ + "access": { + "token": { + "expires": "2012-03-23T21:44:09", + "id": "Auth_4f173437e4b013bee56d1007", + "tenant": { + "id": "3456", + "name": "508151008" + } + }, + "serviceCatalog": [{ + "endpoints": [{ + "adminURL": "https://nova-api.trystack.org:9774/v1.1/3456", + "region": "RegionOne", + "internalURL": "https://nova-api.trystack.org:9774/v1.1/3456", + "publicURL": "https://nova-api.trystack.org:9774/v1.1/3456" + }], + "type": "compute", + "name": "nova" + }, { + "endpoints": [{ + "adminURL": "https://GLANCE_API_IS_NOT_DISCLOSED/v1.1/3456", + "region": "RegionOne", + "internalURL": "https://GLANCE_API_IS_NOT_DISCLOSED/v1.1/3456", + "publicURL": "https://GLANCE_API_IS_NOT_DISCLOSED/v1.1/3456" + }], + "type": "image", + "name": "glance" + }, { + "endpoints": [{ + "adminURL": "https://nova-api.trystack.org:5443/v2.0", + "region": "RegionOne", + "internalURL": "https://keystone.thefreecloud.org:5000/v2.0", + "publicURL": "https://keystone.thefreecloud.org:5000/v2.0" + }], + "type": "identity", + "name": "keystone" + }], + "user": { + "id": "43", + "roles": [{ + "tenantId": "3456", + "id": "2", + "name": "Member" + }], + "name": "508151008" + } + } +} \ No newline at end of file