Updated Branches: refs/heads/master 40a05b9e5 -> de633a65d
Move TroveUtils out of tests and into the utils package Removes the requirement to use a test maven dependency for TroveUtils Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/commit/de633a65 Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/tree/de633a65 Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/diff/de633a65 Branch: refs/heads/master Commit: de633a65d0772e09477a1f01407270fc60b63a3c Parents: 40a05b9 Author: zack-shoylev <[email protected]> Authored: Fri Jul 19 11:53:40 2013 -0500 Committer: Everett Toews <[email protected]> Committed: Fri Jul 19 15:57:55 2013 -0500 ---------------------------------------------------------------------- .../openstack/trove/v1/utils/TroveUtils.java | 102 +++++++++++++++++++ .../trove/v1/features/DatabaseApiLiveTest.java | 2 +- .../trove/v1/features/InstanceApiLiveTest.java | 2 +- .../trove/v1/features/UserApiLiveTest.java | 2 +- .../openstack/trove/v1/internal/TroveUtils.java | 102 ------------------- .../trove/v1/internal/TroveUtilsExpectTest.java | 66 ------------ .../trove/v1/utils/TroveUtilsExpectTest.java | 67 ++++++++++++ 7 files changed, 172 insertions(+), 171 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/de633a65/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/utils/TroveUtils.java ---------------------------------------------------------------------- diff --git a/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/utils/TroveUtils.java b/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/utils/TroveUtils.java new file mode 100644 index 0000000..df674d8 --- /dev/null +++ b/openstack-trove/src/main/java/org/jclouds/openstack/trove/v1/utils/TroveUtils.java @@ -0,0 +1,102 @@ +/* + * 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.trove.v1.utils; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import javax.annotation.Resource; + +import org.jclouds.openstack.trove.v1.TroveApi; +import org.jclouds.openstack.trove.v1.domain.Instance; +import org.jclouds.openstack.trove.v1.features.InstanceApi; +import org.jclouds.openstack.trove.v1.predicates.InstancePredicates; +import org.jclouds.logging.Logger; + +import com.google.common.util.concurrent.Uninterruptibles; + +/** + * @author Zack Shoylev + * + * Helper methods for dealing with instances that get created with + * errors + */ +public class TroveUtils { + private final TroveApi api; + @Resource + protected Logger logger = Logger.NULL; + + public TroveUtils(TroveApi api) { + this.api = api; + } + + /** + * Create an ACTIVE operational instance + * + * @see InstanceApi#create(String, int, String) + * + * @param zone + * The instance zone or region + * @param name + * Instance name + * @param flavorId + * Id of the flavor to be used when creating the instance + * @param size + * Size of the instance + * @return Instance object in active state or NULL + */ + public Instance getWorkingInstance(String zone, String name, String flavorId, int size) { + InstanceApi instanceApi = api.getInstanceApiForZone(zone); + for (int retries = 0; retries < 10; retries++) { + Instance instance = null; + try { + instance = instanceApi.create(flavorId, size, name); + } catch (Exception e) { + + Uninterruptibles.sleepUninterruptibly(15, TimeUnit.SECONDS); + + logger.error(e.getStackTrace().toString()); + continue; + } + + Instance updatedInstance = awaitAvailable(instance, instanceApi); + if (updatedInstance != null) { + return updatedInstance; + } + instanceApi.delete(instance.getId()); + InstancePredicates.awaitDeleted(instanceApi).apply(instance); + + } + return null; + } + + public Instance getWorkingInstance(String zone) { + return getWorkingInstance(zone, UUID.randomUUID().toString(), "1", 1); + } + + private Instance awaitAvailable(Instance instance, InstanceApi iapi) { + for (int n = 0; n < 100; n = n + 1) { + Instance updatedInstance = iapi.get(instance.getId()); + if (updatedInstance.getStatus() == Instance.Status.ACTIVE) + return updatedInstance; + if (updatedInstance.getStatus() == Instance.Status.UNRECOGNIZED) + return null; // fast fail + Uninterruptibles.sleepUninterruptibly(15, TimeUnit.SECONDS); + } + return null; + } +} http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/de633a65/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/DatabaseApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/DatabaseApiLiveTest.java b/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/DatabaseApiLiveTest.java index 0bcd6a4..09d7829 100644 --- a/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/DatabaseApiLiveTest.java +++ b/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/DatabaseApiLiveTest.java @@ -24,7 +24,7 @@ import java.util.Map; import org.jclouds.openstack.trove.v1.domain.Instance; import org.jclouds.openstack.trove.v1.internal.BaseTroveApiLiveTest; -import org.jclouds.openstack.trove.v1.internal.TroveUtils; +import org.jclouds.openstack.trove.v1.utils.TroveUtils; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/de633a65/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/InstanceApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/InstanceApiLiveTest.java b/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/InstanceApiLiveTest.java index d092dd7..7f671e3 100644 --- a/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/InstanceApiLiveTest.java +++ b/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/InstanceApiLiveTest.java @@ -29,7 +29,7 @@ import java.util.Map; import org.jclouds.openstack.trove.v1.domain.Instance; import org.jclouds.openstack.trove.v1.internal.BaseTroveApiLiveTest; -import org.jclouds.openstack.trove.v1.internal.TroveUtils; +import org.jclouds.openstack.trove.v1.utils.TroveUtils; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/de633a65/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/UserApiLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/UserApiLiveTest.java b/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/UserApiLiveTest.java index ae92f55..0ad444b 100644 --- a/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/UserApiLiveTest.java +++ b/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/features/UserApiLiveTest.java @@ -31,7 +31,7 @@ import java.util.UUID; import org.jclouds.openstack.trove.v1.domain.Instance; import org.jclouds.openstack.trove.v1.domain.User; import org.jclouds.openstack.trove.v1.internal.BaseTroveApiLiveTest; -import org.jclouds.openstack.trove.v1.internal.TroveUtils; +import org.jclouds.openstack.trove.v1.utils.TroveUtils; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/de633a65/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/internal/TroveUtils.java ---------------------------------------------------------------------- diff --git a/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/internal/TroveUtils.java b/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/internal/TroveUtils.java deleted file mode 100644 index 0a77c72..0000000 --- a/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/internal/TroveUtils.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - * 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.trove.v1.internal; - -import java.util.UUID; -import java.util.concurrent.TimeUnit; - -import javax.annotation.Resource; - -import org.jclouds.openstack.trove.v1.TroveApi; -import org.jclouds.openstack.trove.v1.domain.Instance; -import org.jclouds.openstack.trove.v1.features.InstanceApi; -import org.jclouds.openstack.trove.v1.predicates.InstancePredicates; -import org.jclouds.logging.Logger; - -import com.google.common.util.concurrent.Uninterruptibles; - -/** - * @author Zack Shoylev - * - * Helper methods for dealing with instances that get created with - * errors - */ -public class TroveUtils { - private final TroveApi api; - @Resource - protected Logger logger = Logger.NULL; - - public TroveUtils(TroveApi api) { - this.api = api; - } - - /** - * Create an ACTIVE operational instance - * - * @see InstanceApi#create(String, int, String) - * - * @param zone - * The instance zone or region - * @param name - * Instance name - * @param flavorId - * Id of the flavor to be used when creating the instance - * @param size - * Size of the instance - * @return Instance object in active state or NULL - */ - public Instance getWorkingInstance(String zone, String name, String flavorId, int size) { - InstanceApi instanceApi = api.getInstanceApiForZone(zone); - for (int retries = 0; retries < 10; retries++) { - Instance instance = null; - try { - instance = instanceApi.create(flavorId, size, name); - } catch (Exception e) { - - Uninterruptibles.sleepUninterruptibly(15, TimeUnit.SECONDS); - - logger.error(e.getStackTrace().toString()); - continue; - } - - Instance updatedInstance = awaitAvailable(instance, instanceApi); - if (updatedInstance != null) { - return updatedInstance; - } - instanceApi.delete(instance.getId()); - InstancePredicates.awaitDeleted(instanceApi).apply(instance); - - } - return null; - } - - public Instance getWorkingInstance(String zone) { - return getWorkingInstance(zone, UUID.randomUUID().toString(), "1", 1); - } - - private Instance awaitAvailable(Instance instance, InstanceApi iapi) { - for (int n = 0; n < 100; n = n + 1) { - Instance updatedInstance = iapi.get(instance.getId()); - if (updatedInstance.getStatus() == Instance.Status.ACTIVE) - return updatedInstance; - if (updatedInstance.getStatus() == Instance.Status.UNRECOGNIZED) - return null; // fast fail - Uninterruptibles.sleepUninterruptibly(15, TimeUnit.SECONDS); - } - return null; - } -} http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/de633a65/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/internal/TroveUtilsExpectTest.java ---------------------------------------------------------------------- diff --git a/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/internal/TroveUtilsExpectTest.java b/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/internal/TroveUtilsExpectTest.java deleted file mode 100644 index 9ebda6f..0000000 --- a/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/internal/TroveUtilsExpectTest.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - * 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.trove.v1.internal; - -import static org.testng.Assert.assertEquals; - -import java.net.URI; -import java.util.List; - -import javax.ws.rs.core.MediaType; - -import org.jclouds.http.HttpRequest; -import org.jclouds.http.HttpResponse; -import org.jclouds.openstack.trove.v1.TroveApi; -import org.jclouds.openstack.trove.v1.domain.Instance; -import org.testng.annotations.Test; - -import com.google.common.collect.ImmutableList; - -/** - * Tests TroveUtils - * - * @author Zack Shoylev - */ -@Test(groups = "unit", testName = "InstanceApiExpectTest") -public class TroveUtilsExpectTest extends BaseTroveApiExpectTest { - - public void testHelperCreateInstance() { - HttpRequest createInstance = authenticatedGET().endpoint(URI.create("http://172.16.0.1:8776/v1/3456/instances")) - .method("POST") - .payload(payloadFromResourceWithContentType("/instance_create_request.json", MediaType.APPLICATION_JSON)) - .build(); - HttpResponse createInstanceSuccess = HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_create.json")).build(); - HttpResponse createInstanceFail = HttpResponse.builder().statusCode(404).payload(payloadFromResource("/instance_create.json")).build(); - HttpRequest getInstance = authenticatedGET().endpoint(URI.create("http://172.16.0.1:8776/v1/3456/instances/44b277eb-39be-4921-be31-3d61b43651d7")).build(); - HttpResponse badStatus = HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_get_bad_instance.json")).build(); - HttpResponse goodStatus = HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_get.json")).build(); - HttpResponse deletedStatus = HttpResponse.builder().statusCode(404).payload(payloadFromResource("/instance_get.json")).build(); - HttpRequest deleteInstance = authenticatedGET().endpoint(URI.create("http://172.16.0.1:8776/v1/3456/instances/44b277eb-39be-4921-be31-3d61b43651d7")).method("DELETE").build(); - HttpResponse deleteInstanceResponse = HttpResponse.builder().statusCode(202).build(); - - List<HttpRequest> requests = ImmutableList.of( keystoneAuthWithUsernameAndPasswordAndTenantName, createInstance, createInstance, createInstance, getInstance, deleteInstance, getInstance, createInstance, createInstance, getInstance); - List<HttpResponse> responses = ImmutableList.of(responseWithKeystoneAccess, createInstanceFail, createInstanceFail, createInstanceSuccess, badStatus, deleteInstanceResponse, deletedStatus, createInstanceFail, createInstanceSuccess, goodStatus); - - TroveApi api = orderedRequestsSendResponses(requests, responses); - - TroveUtils utils = new TroveUtils(api); - Instance instance = utils.getWorkingInstance("RegionOne", "json_rack_instance", "1", 2); - assertEquals(instance.getSize(),2); - assertEquals(instance.getName(), "json_rack_instance"); - } -} http://git-wip-us.apache.org/repos/asf/incubator-jclouds-labs-openstack/blob/de633a65/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/utils/TroveUtilsExpectTest.java ---------------------------------------------------------------------- diff --git a/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/utils/TroveUtilsExpectTest.java b/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/utils/TroveUtilsExpectTest.java new file mode 100644 index 0000000..2f41d09 --- /dev/null +++ b/openstack-trove/src/test/java/org/jclouds/openstack/trove/v1/utils/TroveUtilsExpectTest.java @@ -0,0 +1,67 @@ +/* + * 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.trove.v1.utils; + +import static org.testng.Assert.assertEquals; + +import java.net.URI; +import java.util.List; + +import javax.ws.rs.core.MediaType; + +import org.jclouds.http.HttpRequest; +import org.jclouds.http.HttpResponse; +import org.jclouds.openstack.trove.v1.TroveApi; +import org.jclouds.openstack.trove.v1.domain.Instance; +import org.jclouds.openstack.trove.v1.internal.BaseTroveApiExpectTest; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableList; + +/** + * Tests TroveUtils + * + * @author Zack Shoylev + */ +@Test(groups = "unit", testName = "InstanceApiExpectTest") +public class TroveUtilsExpectTest extends BaseTroveApiExpectTest { + + public void testHelperCreateInstance() { + HttpRequest createInstance = authenticatedGET().endpoint(URI.create("http://172.16.0.1:8776/v1/3456/instances")) + .method("POST") + .payload(payloadFromResourceWithContentType("/instance_create_request.json", MediaType.APPLICATION_JSON)) + .build(); + HttpResponse createInstanceSuccess = HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_create.json")).build(); + HttpResponse createInstanceFail = HttpResponse.builder().statusCode(404).payload(payloadFromResource("/instance_create.json")).build(); + HttpRequest getInstance = authenticatedGET().endpoint(URI.create("http://172.16.0.1:8776/v1/3456/instances/44b277eb-39be-4921-be31-3d61b43651d7")).build(); + HttpResponse badStatus = HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_get_bad_instance.json")).build(); + HttpResponse goodStatus = HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_get.json")).build(); + HttpResponse deletedStatus = HttpResponse.builder().statusCode(404).payload(payloadFromResource("/instance_get.json")).build(); + HttpRequest deleteInstance = authenticatedGET().endpoint(URI.create("http://172.16.0.1:8776/v1/3456/instances/44b277eb-39be-4921-be31-3d61b43651d7")).method("DELETE").build(); + HttpResponse deleteInstanceResponse = HttpResponse.builder().statusCode(202).build(); + + List<HttpRequest> requests = ImmutableList.of( keystoneAuthWithUsernameAndPasswordAndTenantName, createInstance, createInstance, createInstance, getInstance, deleteInstance, getInstance, createInstance, createInstance, getInstance); + List<HttpResponse> responses = ImmutableList.of(responseWithKeystoneAccess, createInstanceFail, createInstanceFail, createInstanceSuccess, badStatus, deleteInstanceResponse, deletedStatus, createInstanceFail, createInstanceSuccess, goodStatus); + + TroveApi api = orderedRequestsSendResponses(requests, responses); + + TroveUtils utils = new TroveUtils(api); + Instance instance = utils.getWorkingInstance("RegionOne", "json_rack_instance", "1", 2); + assertEquals(instance.getSize(),2); + assertEquals(instance.getName(), "json_rack_instance"); + } +}
