mirror of https://github.com/apache/jclouds.git
Issue 112: cache bug fix; added deleteImage
git-svn-id: http://jclouds.googlecode.com/svn/trunk@2460 3d8758e0-26b5-11de-8745-db77d3ebf521
This commit is contained in:
parent
4280bd1f14
commit
31321cade6
|
@ -73,6 +73,7 @@ import org.jclouds.rackspace.cloudservers.options.CreateServerOptions;
|
||||||
import org.jclouds.rackspace.cloudservers.options.CreateSharedIpGroupOptions;
|
import org.jclouds.rackspace.cloudservers.options.CreateSharedIpGroupOptions;
|
||||||
import org.jclouds.rackspace.cloudservers.options.ListOptions;
|
import org.jclouds.rackspace.cloudservers.options.ListOptions;
|
||||||
import org.jclouds.rackspace.cloudservers.options.RebuildServerOptions;
|
import org.jclouds.rackspace.cloudservers.options.RebuildServerOptions;
|
||||||
|
import org.jclouds.rackspace.filters.AddTimestampQuery;
|
||||||
import org.jclouds.rackspace.filters.AuthenticateRequest;
|
import org.jclouds.rackspace.filters.AuthenticateRequest;
|
||||||
import org.jclouds.rest.annotations.BinderParam;
|
import org.jclouds.rest.annotations.BinderParam;
|
||||||
import org.jclouds.rest.annotations.Endpoint;
|
import org.jclouds.rest.annotations.Endpoint;
|
||||||
|
@ -95,8 +96,8 @@ import org.jclouds.rest.annotations.SkipEncoding;
|
||||||
* @see <a href="http://docs.rackspacecloud.com/servers/api/cs-devguide-latest.pdf" />
|
* @see <a href="http://docs.rackspacecloud.com/servers/api/cs-devguide-latest.pdf" />
|
||||||
* @author Adrian Cole
|
* @author Adrian Cole
|
||||||
*/
|
*/
|
||||||
@SkipEncoding('/')
|
@SkipEncoding( { '/', '=' })
|
||||||
@RequestFilters(AuthenticateRequest.class)
|
@RequestFilters( { AuthenticateRequest.class, AddTimestampQuery.class })
|
||||||
@Endpoint(CloudServers.class)
|
@Endpoint(CloudServers.class)
|
||||||
public interface CloudServersAsyncClient {
|
public interface CloudServersAsyncClient {
|
||||||
|
|
||||||
|
@ -268,6 +269,14 @@ public interface CloudServersAsyncClient {
|
||||||
@Path("/images/{id}")
|
@Path("/images/{id}")
|
||||||
Future<Image> getImage(@PathParam("id") int id);
|
Future<Image> getImage(@PathParam("id") int id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @see CloudServersClient#deleteImage
|
||||||
|
*/
|
||||||
|
@DELETE
|
||||||
|
@ExceptionParser(ReturnFalseOn404.class)
|
||||||
|
@Path("/images/{id}")
|
||||||
|
Future<Boolean> deleteImage(@PathParam("id") int id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @see CloudServersClient#createImageFromServer
|
* @see CloudServersClient#createImageFromServer
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -266,6 +266,18 @@ public interface CloudServersClient {
|
||||||
*/
|
*/
|
||||||
Image getImage(int id);
|
Image getImage(int id);
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* This operation deletes an image from the system.
|
||||||
|
* <p/>
|
||||||
|
* Note: Images are immediately removed. Currently, there are no state transitions to track the
|
||||||
|
* delete operation.
|
||||||
|
*
|
||||||
|
* @return false if the image is not found
|
||||||
|
* @see Image
|
||||||
|
*/
|
||||||
|
boolean deleteImage(int id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* This operation creates a new image for the given server ID. Once complete, a new image will be
|
* This operation creates a new image for the given server ID. Once complete, a new image will be
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rackspace.filters;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
import javax.inject.Provider;
|
||||||
|
import javax.inject.Singleton;
|
||||||
|
|
||||||
|
import org.jclouds.http.HttpException;
|
||||||
|
import org.jclouds.http.HttpRequest;
|
||||||
|
import org.jclouds.http.HttpRequestFilter;
|
||||||
|
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds a timestamp to the query line so that cache is invalidated.
|
||||||
|
*
|
||||||
|
* @author Mike Mayo
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
public class AddTimestampQuery implements HttpRequestFilter {
|
||||||
|
private final Provider<Date> dateProvider;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
public AddTimestampQuery(Provider<Date> dateProvider) {
|
||||||
|
this.dateProvider = dateProvider;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void filter(HttpRequest in) throws HttpException {
|
||||||
|
GeneratedHttpRequest<?> request = (GeneratedHttpRequest<?>) in;
|
||||||
|
request.addQueryParam("now", dateProvider.get().getTime() + "");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -46,11 +46,17 @@ import org.jclouds.logging.log4j.config.Log4JLoggingModule;
|
||||||
import org.jclouds.predicates.RetryablePredicate;
|
import org.jclouds.predicates.RetryablePredicate;
|
||||||
import org.jclouds.predicates.SocketOpen;
|
import org.jclouds.predicates.SocketOpen;
|
||||||
import org.jclouds.rackspace.RackspacePropertiesBuilder;
|
import org.jclouds.rackspace.RackspacePropertiesBuilder;
|
||||||
|
import org.jclouds.rackspace.cloudservers.domain.BackupSchedule;
|
||||||
|
import org.jclouds.rackspace.cloudservers.domain.DailyBackup;
|
||||||
import org.jclouds.rackspace.cloudservers.domain.Flavor;
|
import org.jclouds.rackspace.cloudservers.domain.Flavor;
|
||||||
import org.jclouds.rackspace.cloudservers.domain.Image;
|
import org.jclouds.rackspace.cloudservers.domain.Image;
|
||||||
|
import org.jclouds.rackspace.cloudservers.domain.ImageStatus;
|
||||||
|
import org.jclouds.rackspace.cloudservers.domain.RebootType;
|
||||||
import org.jclouds.rackspace.cloudservers.domain.Server;
|
import org.jclouds.rackspace.cloudservers.domain.Server;
|
||||||
import org.jclouds.rackspace.cloudservers.domain.ServerStatus;
|
import org.jclouds.rackspace.cloudservers.domain.ServerStatus;
|
||||||
import org.jclouds.rackspace.cloudservers.domain.SharedIpGroup;
|
import org.jclouds.rackspace.cloudservers.domain.SharedIpGroup;
|
||||||
|
import org.jclouds.rackspace.cloudservers.domain.WeeklyBackup;
|
||||||
|
import org.jclouds.rackspace.cloudservers.options.RebuildServerOptions;
|
||||||
import org.jclouds.ssh.ExecResponse;
|
import org.jclouds.ssh.ExecResponse;
|
||||||
import org.jclouds.ssh.SshClient;
|
import org.jclouds.ssh.SshClient;
|
||||||
import org.jclouds.ssh.SshException;
|
import org.jclouds.ssh.SshException;
|
||||||
|
@ -126,30 +132,34 @@ public class CloudServersClientLiveTest {
|
||||||
for (Image image : response) {
|
for (Image image : response) {
|
||||||
assertTrue(image.getId() >= 1);
|
assertTrue(image.getId() >= 1);
|
||||||
assert null != image.getName() : image;
|
assert null != image.getName() : image;
|
||||||
// bug in image id: 14362 assert null != image.getCreated() : image;
|
assert null != image.getStatus() : image;
|
||||||
// bug in image id: 14362 assert null != image.getUpdated() : image;
|
|
||||||
// bug in image id: 14362 assert null != image.getStatus() : image;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rackspace Web Hosting issue #118856
|
|
||||||
public void testGetImagesDetail() throws Exception {
|
public void testGetImagesDetail() throws Exception {
|
||||||
List<Image> response = client.listImages(withDetails());
|
List<Image> response = client.listImages(withDetails());
|
||||||
assert null != response;
|
assert null != response;
|
||||||
long imageCount = response.size();
|
long imageCount = response.size();
|
||||||
assertTrue(imageCount >= 0);
|
assertTrue(imageCount >= 0);
|
||||||
for (Image image : response) {
|
for (Image image : response) {
|
||||||
Image newDetails = client.getImage(image.getId());
|
try {
|
||||||
assertEquals(image.getId(), newDetails.getId());
|
Image newDetails = client.getImage(image.getId());
|
||||||
assertEquals(image.getName(), newDetails.getName());
|
assertEquals(image, newDetails);
|
||||||
// don't check created,serverId, status or last updated! these can change during testing
|
} catch (HttpResponseException e) {// Ticket #9867
|
||||||
|
if (e.getResponse().getStatusCode() != 400)
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Rackspace Web Hosting issue #118856
|
|
||||||
public void testGetImageDetailsNotFound() throws Exception {
|
public void testGetImageDetailsNotFound() throws Exception {
|
||||||
Image newDetails = client.getImage(12312987);
|
try {
|
||||||
assertEquals(Image.NOT_FOUND, newDetails);
|
Image newDetails = client.getImage(12312987);
|
||||||
|
assertEquals(Image.NOT_FOUND, newDetails);
|
||||||
|
} catch (HttpResponseException e) {// Ticket #9867
|
||||||
|
if (e.getResponse().getStatusCode() != 400)
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testGetServerDetailsNotFound() throws Exception {
|
public void testGetServerDetailsNotFound() throws Exception {
|
||||||
|
@ -162,6 +172,10 @@ public class CloudServersClientLiveTest {
|
||||||
assert null != response;
|
assert null != response;
|
||||||
long serverCount = response.size();
|
long serverCount = response.size();
|
||||||
assertTrue(serverCount >= 0);
|
assertTrue(serverCount >= 0);
|
||||||
|
for (Server server : response) {
|
||||||
|
Server newDetails = client.getServer(server.getId());
|
||||||
|
assertEquals(server, newDetails);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testListFlavors() throws Exception {
|
public void testListFlavors() throws Exception {
|
||||||
|
@ -245,7 +259,7 @@ public class CloudServersClientLiveTest {
|
||||||
assertEquals(SharedIpGroup.NOT_FOUND, newDetails);
|
assertEquals(SharedIpGroup.NOT_FOUND, newDetails);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = "testServerDetails")
|
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = "testCreateServer")
|
||||||
public void testCreateSharedIpGroup() throws Exception {
|
public void testCreateSharedIpGroup() throws Exception {
|
||||||
SharedIpGroup sharedIpGroup = null;
|
SharedIpGroup sharedIpGroup = null;
|
||||||
while (sharedIpGroup == null) {
|
while (sharedIpGroup == null) {
|
||||||
|
@ -275,15 +289,15 @@ public class CloudServersClientLiveTest {
|
||||||
private InetAddress ip;
|
private InetAddress ip;
|
||||||
private int serverId2;
|
private int serverId2;
|
||||||
private String adminPass2;
|
private String adminPass2;
|
||||||
|
private int imageId;
|
||||||
|
|
||||||
public void testCreateServer() throws Exception {
|
public void testCreateServer() throws Exception {
|
||||||
int imageId = 2;
|
int imageId = 14362;
|
||||||
int flavorId = 1;
|
int flavorId = 1;
|
||||||
Server server = null;
|
Server server = null;
|
||||||
while (server == null) {
|
while (server == null) {
|
||||||
String serverName = serverPrefix + "createserver" + new SecureRandom().nextInt();
|
String serverName = serverPrefix + "createserver" + new SecureRandom().nextInt();
|
||||||
try {
|
try {
|
||||||
System.out.printf("%d: running instance%n", System.currentTimeMillis());
|
|
||||||
server = client.createServer(serverName, imageId, flavorId, withFile(
|
server = client.createServer(serverName, imageId, flavorId, withFile(
|
||||||
"/etc/jclouds.txt", "rackspace".getBytes()).withMetadata(metadata));
|
"/etc/jclouds.txt", "rackspace".getBytes()).withMetadata(metadata));
|
||||||
} catch (UndeclaredThrowableException e) {
|
} catch (UndeclaredThrowableException e) {
|
||||||
|
@ -306,14 +320,26 @@ public class CloudServersClientLiveTest {
|
||||||
for (currentDetails = client.getServer(serverId); currentDetails.getStatus() != ServerStatus.ACTIVE; currentDetails = client
|
for (currentDetails = client.getServer(serverId); currentDetails.getStatus() != ServerStatus.ACTIVE; currentDetails = client
|
||||||
.getServer(serverId)) {
|
.getServer(serverId)) {
|
||||||
System.out.printf("blocking on status active%n%s%n", currentDetails);
|
System.out.printf("blocking on status active%n%s%n", currentDetails);
|
||||||
Thread.sleep(1 * 1000);
|
Thread.sleep(5 * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void blockUntilServerVerifyResize(int serverId) throws InterruptedException {
|
||||||
|
Server currentDetails = null;
|
||||||
|
for (currentDetails = client.getServer(serverId); currentDetails.getStatus() != ServerStatus.VERIFY_RESIZE; currentDetails = client
|
||||||
|
.getServer(serverId)) {
|
||||||
|
System.out.printf("blocking on status verify resize%n%s%n", currentDetails);
|
||||||
|
Thread.sleep(5 * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void blockUntilImageActive(int imageId) throws InterruptedException {
|
||||||
|
Image currentDetails = null;
|
||||||
|
for (currentDetails = client.getImage(imageId); currentDetails.getStatus() != ImageStatus.ACTIVE; currentDetails = client
|
||||||
|
.getImage(imageId)) {
|
||||||
|
System.out.printf("blocking on status active%n%s%n", currentDetails);
|
||||||
|
Thread.sleep(5 * 1000);
|
||||||
}
|
}
|
||||||
System.out.printf("%d: %s awaiting ssh service to start%n", System.currentTimeMillis(),
|
|
||||||
currentDetails.getAddresses().getPublicAddresses().first());
|
|
||||||
assert socketTester.apply(new InetSocketAddress(currentDetails.getAddresses()
|
|
||||||
.getPublicAddresses().first(), 22));
|
|
||||||
System.out.printf("%d: %s ssh service started%n", System.currentTimeMillis(), currentDetails
|
|
||||||
.getAddresses().getPublicAddresses().first());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = "testCreateServer")
|
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = "testCreateServer")
|
||||||
|
@ -323,7 +349,7 @@ public class CloudServersClientLiveTest {
|
||||||
assertNotNull(server.getHostId());
|
assertNotNull(server.getHostId());
|
||||||
assertEquals(server.getStatus(), ServerStatus.ACTIVE);
|
assertEquals(server.getStatus(), ServerStatus.ACTIVE);
|
||||||
assert server.getProgress() >= 0 : "newDetails.getProgress()" + server.getProgress();
|
assert server.getProgress() >= 0 : "newDetails.getProgress()" + server.getProgress();
|
||||||
assertEquals(new Integer(2), server.getImageId());
|
assertEquals(new Integer(14362), server.getImageId());
|
||||||
assertEquals(new Integer(1), server.getFlavorId());
|
assertEquals(new Integer(1), server.getFlavorId());
|
||||||
assertNotNull(server.getAddresses());
|
assertNotNull(server.getAddresses());
|
||||||
// listAddresses tests..
|
// listAddresses tests..
|
||||||
|
@ -356,34 +382,56 @@ public class CloudServersClientLiveTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void doCheckPass(Server newDetails, String pass) throws IOException {
|
private void doCheckPass(Server newDetails, String pass) throws IOException {
|
||||||
SshClient connection = sshFactory.create(new InetSocketAddress(newDetails.getAddresses()
|
InetSocketAddress socket = new InetSocketAddress(newDetails.getAddresses()
|
||||||
.getPublicAddresses().first(), 22), "root", pass);
|
.getPublicAddresses().first(), 22);
|
||||||
|
socketTester.apply(socket);
|
||||||
|
|
||||||
|
SshClient client = sshFactory.create(socket, "root", pass);
|
||||||
try {
|
try {
|
||||||
connection.connect();
|
client.connect();
|
||||||
InputStream etcPasswd = connection.get("/etc/jclouds.txt");
|
InputStream etcPasswd = client.get("/etc/jclouds.txt");
|
||||||
String etcPasswdContents = Utils.toStringAndClose(etcPasswd);
|
String etcPasswdContents = Utils.toStringAndClose(etcPasswd);
|
||||||
assertEquals("rackspace", etcPasswdContents.trim());
|
assertEquals("rackspace", etcPasswdContents.trim());
|
||||||
} finally {
|
} finally {
|
||||||
if (connection != null)
|
if (client != null)
|
||||||
connection.disconnect();
|
client.disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private ExecResponse exec(Server details, String pass, String command) throws IOException {
|
private ExecResponse exec(Server details, String pass, String command) throws IOException {
|
||||||
SshClient connection = sshFactory.create(new InetSocketAddress(details.getAddresses()
|
InetSocketAddress socket = new InetSocketAddress(details.getAddresses().getPublicAddresses()
|
||||||
.getPublicAddresses().first(), 22), "root", pass);
|
.first(), 22);
|
||||||
|
socketTester.apply(socket);
|
||||||
|
SshClient client = sshFactory.create(socket, "root", pass);
|
||||||
try {
|
try {
|
||||||
connection.connect();
|
client.connect();
|
||||||
return connection.exec(command);
|
return client.exec(command);
|
||||||
} finally {
|
} finally {
|
||||||
if (connection != null)
|
if (client != null)
|
||||||
connection.disconnect();
|
client.disconnect();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = "testCreateServer")
|
||||||
|
public void testRenameServer() throws Exception {
|
||||||
|
Server server = client.getServer(serverId);
|
||||||
|
String oldName = server.getName();
|
||||||
|
assertTrue(client.renameServer(serverId, oldName + "new"));
|
||||||
|
blockUntilServerActive(serverId);
|
||||||
|
assertEquals(oldName + "new", client.getServer(serverId).getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = "testCreateServer")
|
||||||
|
public void testChangePassword() throws Exception {
|
||||||
|
assertTrue(client.changeAdminPass(serverId, "elmo"));
|
||||||
|
blockUntilServerActive(serverId);
|
||||||
|
checkPassOk(client.getServer(serverId), "elmo");
|
||||||
|
this.adminPass = "elmo";
|
||||||
|
}
|
||||||
|
|
||||||
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = "testCreateSharedIpGroup")
|
@Test(timeOut = 5 * 60 * 1000, dependsOnMethods = "testCreateSharedIpGroup")
|
||||||
public void testCreateServerIp() throws Exception {
|
public void testCreateServerIp() throws Exception {
|
||||||
int imageId = 2;
|
int imageId = 14362;
|
||||||
int flavorId = 1;
|
int flavorId = 1;
|
||||||
Server server = null;
|
Server server = null;
|
||||||
while (server == null) {
|
while (server == null) {
|
||||||
|
@ -421,6 +469,15 @@ public class CloudServersClientLiveTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testCreateServerIp")
|
||||||
|
public void testUnshare() throws Exception {
|
||||||
|
client.unshareIp(ip, serverId2);
|
||||||
|
blockUntilServerActive(serverId2);
|
||||||
|
Server server = client.getServer(serverId2);
|
||||||
|
assert !server.getAddresses().getPublicAddresses().contains(ip) : server.getAddresses();
|
||||||
|
assertIpNotConfigured(server, adminPass2);
|
||||||
|
}
|
||||||
|
|
||||||
private void assertIpNotConfigured(Server server, String password) {
|
private void assertIpNotConfigured(Server server, String password) {
|
||||||
try {
|
try {
|
||||||
ExecResponse response = exec(server, password, "ifconfig -a");
|
ExecResponse response = exec(server, password, "ifconfig -a");
|
||||||
|
@ -433,36 +490,125 @@ public class CloudServersClientLiveTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(enabled = false, timeOut = 10 * 60 * 1000, dependsOnMethods = "testUnshare")
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testUnshare")
|
||||||
public void testShareConfig() throws Exception {
|
public void testShareConfig() throws Exception {
|
||||||
client.shareIp(ip, serverId2, sharedIpGroupId, true);
|
client.shareIp(ip, serverId2, sharedIpGroupId, true);
|
||||||
blockUntilServerActive(serverId2);
|
blockUntilServerActive(serverId2);
|
||||||
Server server = client.getServer(serverId2);
|
Server server = client.getServer(serverId2);
|
||||||
assert server.getAddresses().getPublicAddresses().contains(ip) : server.getAddresses();
|
assert server.getAddresses().getPublicAddresses().contains(ip) : server.getAddresses();
|
||||||
assertIpConfigured(server, adminPass2);
|
assertIpConfigured(server, adminPass2);
|
||||||
unshare();
|
testUnshare();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test(enabled = false, timeOut = 10 * 60 * 1000, dependsOnMethods = "testShareConfig")
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testShareConfig")
|
||||||
public void testShareNoConfig() throws Exception {
|
public void testShareNoConfig() throws Exception {
|
||||||
client.shareIp(ip, serverId2, sharedIpGroupId, false);
|
client.shareIp(ip, serverId2, sharedIpGroupId, false);
|
||||||
blockUntilServerActive(serverId2);
|
blockUntilServerActive(serverId2);
|
||||||
Server server = client.getServer(serverId2);
|
Server server = client.getServer(serverId2);
|
||||||
assert server.getAddresses().getPublicAddresses().contains(ip) : server.getAddresses();
|
assert server.getAddresses().getPublicAddresses().contains(ip) : server.getAddresses();
|
||||||
assertIpNotConfigured(server, adminPass2);
|
assertIpNotConfigured(server, adminPass2);
|
||||||
unshare();
|
testUnshare();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void unshare() throws Exception {
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testShareNoConfig")
|
||||||
client.unshareIp(ip, serverId2);
|
public void testBackup() throws Exception {
|
||||||
|
assertEquals(new BackupSchedule(), client.listBackupSchedule(serverId));
|
||||||
|
BackupSchedule dailyWeekly = new BackupSchedule();
|
||||||
|
dailyWeekly.setEnabled(true);
|
||||||
|
dailyWeekly.setWeekly(WeeklyBackup.FRIDAY);
|
||||||
|
dailyWeekly.setDaily(DailyBackup.H_0400_0600);
|
||||||
|
assertEquals(true, client.replaceBackupSchedule(serverId, dailyWeekly));
|
||||||
|
client.deleteBackupSchedule(serverId);
|
||||||
|
// disables, doesn't delete: Web Hosting #119571
|
||||||
|
assertEquals(client.listBackupSchedule(serverId).isEnabled(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testBackup")
|
||||||
|
public void testCreateImage() throws Exception {
|
||||||
|
Image image = client.createImageFromServer("hoofie", serverId);
|
||||||
|
assertEquals("hoofie", image.getName());
|
||||||
|
assertEquals(new Integer(serverId), image.getServerId());
|
||||||
|
imageId = image.getId();
|
||||||
|
blockUntilImageActive(imageId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testCreateImage")
|
||||||
|
public void testRebuildServer() throws Exception {
|
||||||
|
assertTrue(client.rebuildServer(serverId, new RebuildServerOptions().withImage(imageId)));
|
||||||
|
blockUntilServerActive(serverId);
|
||||||
|
// issue Web Hosting #119580 imageId comes back incorrect after rebuild
|
||||||
|
// assertEquals(new Integer(imageId), client.getServer(serverId).getImageId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebuildServer")
|
||||||
|
public void testRebootHard() throws Exception {
|
||||||
|
assertTrue(client.rebootServer(serverId, RebootType.HARD));
|
||||||
|
blockUntilServerActive(serverId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebootHard")
|
||||||
|
public void testRebootSoft() throws Exception {
|
||||||
|
assertTrue(client.rebootServer(serverId, RebootType.SOFT));
|
||||||
|
blockUntilServerActive(serverId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebootSoft")
|
||||||
|
public void testRevertResize() throws Exception {
|
||||||
|
assertTrue(client.resizeServer(serverId, 2));
|
||||||
|
blockUntilServerVerifyResize(serverId);
|
||||||
|
assertTrue(client.revertResizeServer(serverId));
|
||||||
|
blockUntilServerActive(serverId);
|
||||||
|
assertEquals(new Integer(1), client.getServer(serverId).getFlavorId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testRebootSoft")
|
||||||
|
public void testConfirmResize() throws Exception {
|
||||||
|
assertTrue(client.resizeServer(serverId2, 2));
|
||||||
|
blockUntilServerVerifyResize(serverId2);
|
||||||
|
assertTrue(client.confirmResizeServer(serverId2));
|
||||||
blockUntilServerActive(serverId2);
|
blockUntilServerActive(serverId2);
|
||||||
Server server = client.getServer(serverId2);
|
assertEquals(new Integer(2), client.getServer(serverId2).getFlavorId());
|
||||||
assert !server.getAddresses().getPublicAddresses().contains(ip) : server.getAddresses();
|
}
|
||||||
assertIpNotConfigured(server, adminPass2);
|
|
||||||
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = { "testRebootSoft", "testRevertResize",
|
||||||
|
"testConfirmResize" })
|
||||||
|
void deleteServer2() {
|
||||||
|
if (serverId2 > 0) {
|
||||||
|
client.deleteServer(serverId2);
|
||||||
|
Server server = client.getServer(serverId2);
|
||||||
|
assertEquals(server, Server.NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "deleteServer2")
|
||||||
|
void testDeleteImage() {
|
||||||
|
if (imageId > 0) {
|
||||||
|
client.deleteImage(imageId);
|
||||||
|
Image image = client.getImage(imageId);
|
||||||
|
assertEquals(image, Image.NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = "testDeleteImage")
|
||||||
|
void deleteServer1() {
|
||||||
|
if (serverId > 0) {
|
||||||
|
client.deleteServer(serverId);
|
||||||
|
Server server = client.getServer(serverId);
|
||||||
|
assertEquals(server, Server.NOT_FOUND);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test(timeOut = 10 * 60 * 1000, dependsOnMethods = { "deleteServer1" })
|
||||||
|
void testDeleteSharedIpGroup() {
|
||||||
|
if (sharedIpGroupId > 0) {
|
||||||
|
client.deleteSharedIpGroup(sharedIpGroupId);
|
||||||
|
SharedIpGroup server = client.getSharedIpGroup(sharedIpGroupId);
|
||||||
|
assertEquals(server, SharedIpGroup.NOT_FOUND);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@AfterTest
|
@AfterTest
|
||||||
void deleteServers() {
|
void deleteServersOnEnd() {
|
||||||
if (serverId > 0) {
|
if (serverId > 0) {
|
||||||
client.deleteServer(serverId);
|
client.deleteServer(serverId);
|
||||||
}
|
}
|
||||||
|
|
|
@ -187,6 +187,21 @@ public class CloudServersClientTest {
|
||||||
new CreateServerOptions[] { CreateServerOptions.Builder.withSharedIpGroup(1) } }));
|
new CreateServerOptions[] { CreateServerOptions.Builder.withSharedIpGroup(1) } }));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testDeleteImage() throws SecurityException, NoSuchMethodException {
|
||||||
|
Method method = CloudServersAsyncClient.class.getMethod("deleteImage", int.class);
|
||||||
|
|
||||||
|
GeneratedHttpRequest<CloudServersAsyncClient> httpMethod = processor.createRequest(method,
|
||||||
|
new Object[] { 2 });
|
||||||
|
assertEquals(httpMethod.getEndpoint().getHost(), "localhost");
|
||||||
|
assertEquals(httpMethod.getEndpoint().getPath(), "/images/2");
|
||||||
|
assertEquals(httpMethod.getMethod(), HttpMethod.DELETE);
|
||||||
|
assertEquals(httpMethod.getHeaders().size(), 0);
|
||||||
|
assertEquals(processor.createExceptionParserOrNullIfNotFound(method).getClass(),
|
||||||
|
ReturnFalseOn404.class);
|
||||||
|
assertEquals(processor.createResponseParser(method, httpMethod).getClass(),
|
||||||
|
ReturnTrueIf2xx.class);
|
||||||
|
}
|
||||||
|
|
||||||
public void testListServers() throws SecurityException, NoSuchMethodException {
|
public void testListServers() throws SecurityException, NoSuchMethodException {
|
||||||
Method method = CloudServersAsyncClient.class.getMethod("listServers",
|
Method method = CloudServersAsyncClient.class.getMethod("listServers",
|
||||||
listOptionsVarargsClass);
|
listOptionsVarargsClass);
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* Copyright (C) 2009 Cloud Conscious, LLC. <info@cloudconscious.com>
|
||||||
|
*
|
||||||
|
* ====================================================================
|
||||||
|
* 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.rackspace.filters;
|
||||||
|
|
||||||
|
import static org.easymock.classextension.EasyMock.createMock;
|
||||||
|
import static org.easymock.classextension.EasyMock.replay;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
import javax.inject.Provider;
|
||||||
|
|
||||||
|
import org.jclouds.rest.internal.GeneratedHttpRequest;
|
||||||
|
import org.testng.annotations.Test;
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @author Adrian Cole
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Test(groups = "unit", testName = "rackspace.AddTimestampQueryTest")
|
||||||
|
public class AddTimestampQueryTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testApplySetsKey() {
|
||||||
|
final Date date = new Date();
|
||||||
|
Provider<Date> dateProvider = new Provider<Date>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Date get() {
|
||||||
|
return date;
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
||||||
|
GeneratedHttpRequest<?> request = createMock(GeneratedHttpRequest.class);
|
||||||
|
request.addQueryParam("now", date.getTime() + "");
|
||||||
|
replay(request);
|
||||||
|
|
||||||
|
AddTimestampQuery filter = new AddTimestampQuery(dateProvider);
|
||||||
|
filter.filter(request);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue