diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/CloudServersExpectTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/CloudServersExpectTest.java new file mode 100644 index 0000000000..accb1ef519 --- /dev/null +++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/CloudServersExpectTest.java @@ -0,0 +1,82 @@ +/** + * 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.cloudservers; + +import java.net.URI; + +import org.jclouds.cloudservers.internal.BaseCloudServersRestClientExpectTest; +import org.jclouds.http.HttpRequest; +import org.jclouds.http.HttpResponse; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableMultimap; + +/** + * + * @author Adrian Cole + */ +@Test(groups = "unit", testName = "CloudServersExpectTest") +public class CloudServersExpectTest extends BaseCloudServersRestClientExpectTest { + + public void deleteImageReturnsTrueOn200AndFalseOn404() { + + HttpRequest initialAuth = HttpRequest.builder().method("GET").endpoint(URI.create("https://auth/v1.0")) + .headers( + ImmutableMultimap. builder() + .put("X-Auth-User", "identity") + .put("X-Auth-Key", "credential") + .put("Accept", "*/*").build()).build(); + + String authToken = "d6245d35-22a0-47c0-9770-2c5097da25fc"; + + HttpResponse responseWithUrls = HttpResponse.builder().statusCode(204).message("HTTP/1.1 204 No Content") + .headers(ImmutableMultimap.builder() + .put("Server", "Apache/2.2.3 (Red Hat)") + .put("vary", "X-Auth-Token,X-Auth-Key,X-Storage-User,X-Storage-Pass") + .put("X-Storage-Url", "https://storage101.dfw1.clouddrive.com/v1/MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22") + .put("Cache-Control", "s-maxage=86399") + .put("Content-Type", "text/xml") + .put("Date", "Tue, 10 Jan 2012 22:08:47 GMT") + .put("X-Auth-Token", authToken) + .put("X-Server-Management-Url","https://servers.api.rackspacecloud.com/v1.0/413274") + .put("X-Storage-Token", authToken) + .put("Connection", "Keep-Alive") + .put("X-CDN-Management-Url", "https://cdn1.clouddrive.com/v1/MossoCloudFS_dc1f419c-5059-4c87-a389-3f2e33a77b22") + .put("Content-Length", "0") + .build()).build(); + + + HttpRequest deleteImage11 = HttpRequest.builder().method("DELETE").endpoint( + URI.create("https://servers.api.rackspacecloud.com/v1.0/413274/images/11?now=1257695648897")).headers( + ImmutableMultimap. builder() + .put("X-Auth-Token", authToken).build()).build(); + + HttpResponse imageDeleted = HttpResponse.builder().statusCode(204).message("HTTP/1.1 204 No Content").build(); + + CloudServersClient clientWhenImageExists = requestsSendResponses(initialAuth, responseWithUrls, deleteImage11, imageDeleted); + assert clientWhenImageExists.deleteImage(11); + + HttpResponse imageNotFound = HttpResponse.builder().statusCode(404).message("HTTP/1.1 404 Not Found").build(); + + CloudServersClient clientWhenImageDoesntExist = requestsSendResponses(initialAuth, responseWithUrls, deleteImage11, imageNotFound); + assert !clientWhenImageDoesntExist.deleteImage(11); + + } + +} \ No newline at end of file diff --git a/apis/cloudservers/src/test/java/org/jclouds/cloudservers/internal/BaseCloudServersRestClientExpectTest.java b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/internal/BaseCloudServersRestClientExpectTest.java new file mode 100644 index 0000000000..94050b8790 --- /dev/null +++ b/apis/cloudservers/src/test/java/org/jclouds/cloudservers/internal/BaseCloudServersRestClientExpectTest.java @@ -0,0 +1,96 @@ +/** + * 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.cloudservers.internal; + +import static org.jclouds.location.reference.LocationConstants.PROPERTY_REGIONS; + +import java.util.Date; +import java.util.Properties; + +import org.jclouds.cloudservers.CloudServersClient; +import org.jclouds.cloudservers.CloudServersContextBuilder; +import org.jclouds.cloudservers.CloudServersPropertiesBuilder; +import org.jclouds.cloudservers.config.CloudServersRestClientModule; +import org.jclouds.date.internal.SimpleDateFormatDateService; +import org.jclouds.http.RequiresHttp; +import org.jclouds.openstack.config.OpenStackAuthenticationModule; +import org.jclouds.openstack.filters.AddTimestampQuery; +import org.jclouds.rest.BaseRestClientExpectTest; +import org.jclouds.rest.ConfiguresRestClient; + +import com.google.common.base.Supplier; +import com.google.inject.Module; + +/** + * Base class for writing CloudServers Rest Client Expect tests + * + * @author Adrian Cole + */ +public class BaseCloudServersRestClientExpectTest extends BaseRestClientExpectTest { + + public BaseCloudServersRestClientExpectTest() { + provider = "cloudservers"; + } + + @Override + protected Properties setupRestProperties() { + Properties overrides = new Properties(); + overrides.setProperty(PROPERTY_REGIONS, "US"); + overrides.setProperty(provider + ".endpoint", "https://auth"); + overrides.setProperty(provider + ".contextbuilder", CloudServersContextBuilder.class.getName()); + overrides.setProperty(provider + ".propertiesbuilder", CloudServersPropertiesBuilder.class.getName()); + return overrides; + } + + protected static final String CONSTANT_DATE = "2009-11-08T15:54:08.897Z"; + + /** + * override so that we can control the timestamp used in {@link AddTimestampQuery} + */ + static class TestOpenStackAuthenticationModule extends OpenStackAuthenticationModule { + @Override + protected void configure() { + super.configure(); + } + + @Override + public Supplier provideCacheBusterDate() { + return new Supplier() { + public Date get() { + return new SimpleDateFormatDateService().iso8601DateParse(CONSTANT_DATE); + } + }; + } + + } + + @Override + protected Module createModule() { + return new TestCloudServersRestClientModule(); + } + + @ConfiguresRestClient + @RequiresHttp + protected static class TestCloudServersRestClientModule extends CloudServersRestClientModule { + private TestCloudServersRestClientModule() { + super(new TestOpenStackAuthenticationModule()); + } + + } +}