blob: 53eeddbb7e60aac8f850844d299d48bb52bbdb6d [file] [log] [blame]
/**
* 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.openstack.reddwarf.v1.features;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import java.net.URI;
import java.util.Set;
import javax.ws.rs.core.MediaType;
import org.jclouds.http.HttpResponse;
import org.jclouds.openstack.reddwarf.v1.domain.Instance;
import org.jclouds.openstack.reddwarf.v1.internal.BaseRedDwarfApiExpectTest;
import org.jclouds.rest.ResourceNotFoundException;
import org.testng.annotations.Test;
/**
* Tests InstanceApi Guice wiring and parsing
*
* @author Zack Shoylev
*/
@Test(groups = "unit", testName = "InstanceApiExpectTest")
public class InstanceApiExpectTest extends BaseRedDwarfApiExpectTest {
public void testCreateInstance() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint) // bad naming convention, you should not be able to change the method to POST
.method("POST")
.payload(payloadFromResourceWithContentType("/instance_create_request.json", MediaType.APPLICATION_JSON))
.build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_create.json")).build() // response
).getInstanceApiForZone("RegionOne");
Instance instance = api.create("1", 2, "json_rack_instance");
assertEquals(instance.getSize(),2);
assertEquals(instance.getName(), "json_rack_instance");
}
public void testCreateInstanceWithNoName() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint) // bad naming convention, you should not be able to change the method to POST
.method("POST")
.payload(payloadFromResourceWithContentType("/instance_noname_create_request.json", MediaType.APPLICATION_JSON))
.build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_create.json")).build() // response
).getInstanceApiForZone("RegionOne");
Instance instance = api.create("1", 2);
assertEquals(instance.getSize(),2);
assertEquals(instance.getName(), "json_rack_instance");
}
@Test(expectedExceptions = ResourceNotFoundException.class)
public void testCreateInstanceFail() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint) // bad naming convention, you should not be able to change the method to POST
.method("POST")
.payload(payloadFromResourceWithContentType("/instance_create_request.json", MediaType.APPLICATION_JSON))
.build(),
HttpResponse.builder().statusCode(404).payload(payloadFromResource("/instance_create.json")).build() // response
).getInstanceApiForZone("RegionOne");
api.create("1", 2, "json_rack_instance");
}
@Test(expectedExceptions = ResourceNotFoundException.class)
public void testCreateInstanceWithNoNameFail() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint) // bad naming convention, you should not be able to change the method to POST
.method("POST")
.payload(payloadFromResourceWithContentType("/instance_noname_create_request.json", MediaType.APPLICATION_JSON))
.build(),
HttpResponse.builder().statusCode(404).payload(payloadFromResource("/instance_create.json")).build() // response
).getInstanceApiForZone("RegionOne");
api.create("1", 2);
}
public void testDeleteInstance() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/098653ba-218b-47ce-936a-e0b749101f81");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).method("DELETE").build(),
HttpResponse.builder().statusCode(202).build() // response
).getInstanceApiForZone("RegionOne");
assertTrue( api.delete("098653ba-218b-47ce-936a-e0b749101f81") );
}
public void testDeleteInstanceFail() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/098653ba-218b-47ce-936a-e0b749101f81");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).method("DELETE").build(),
HttpResponse.builder().statusCode(404).build() // response
).getInstanceApiForZone("RegionOne");
assertTrue( !api.delete("098653ba-218b-47ce-936a-e0b749101f81") );
}
public void testListInstances() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_list.json")).build()
).getInstanceApiForZone("RegionOne");
Set<? extends Instance> instances = api.list().toSet();
assertEquals(instances.size(),2);
assertEquals(instances.iterator().next().getSize(), 2);
}
public void testListInstancesFail() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(404).build()
).getInstanceApiForZone("RegionOne");
Set<? extends Instance> instances = api.list().toSet();
assertTrue(instances.isEmpty());
}
public void testGetInstance() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/44b277eb-39be-4921-be31-3d61b43651d7");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_get.json")).build()
).getInstanceApiForZone("RegionOne");
Instance instance = api.get("44b277eb-39be-4921-be31-3d61b43651d7");
assertEquals(instance.getName(), "json_rack_instance");
assertEquals(instance.getId(), "44b277eb-39be-4921-be31-3d61b43651d7");
assertEquals(instance.getLinks().size(), 2);
}
public void testGetInstanceFail() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/12312");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(404).build()
).getInstanceApiForZone("RegionOne");
assertNull(api.get("12312"));
}
public void testEnableRootOnInstance() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/44b277eb-39be-4921-be31-3d61b43651d7/root");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().method("POST").endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_root.json")).build()
).getInstanceApiForZone("RegionOne");
String password = api.enableRoot("44b277eb-39be-4921-be31-3d61b43651d7");
assertEquals(password, "12345");
}
public void testEnableRootOnInstanceFail() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/44b277eb-39be-4921-be31-3d61b43651d7/root");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().method("POST").endpoint(endpoint).build(),
HttpResponse.builder().statusCode(404).payload(payloadFromResource("/instance_root.json")).build()
).getInstanceApiForZone("RegionOne");
String password = api.enableRoot("44b277eb-39be-4921-be31-3d61b43651d7");
assertEquals(password, null);
}
public void testIsRootInstance() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/44b277eb-39be-4921-be31-3d61b43651d7/root");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_is_rooted.json")).build()
).getInstanceApiForZone("RegionOne");
boolean rooted = api.isRooted("44b277eb-39be-4921-be31-3d61b43651d7");
assertEquals(rooted, true);
}
public void testIsRootInstanceFalse() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/44b277eb-39be-4921-be31-3d61b43651d7/root");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/instance_is_rooted_false.json")).build()
).getInstanceApiForZone("RegionOne");
Boolean rooted = api.isRooted("44b277eb-39be-4921-be31-3d61b43651d7");
assertEquals(rooted.booleanValue(), false);
}
@Test(expectedExceptions = ResourceNotFoundException.class)
public void testIsRootInstanceFail() {
URI endpoint = URI.create("http://172.16.0.1:8776/v1/3456/instances/44b277eb-39be-4921-be31-3d61b43651d7/root");
InstanceApi api = requestsSendResponses(
keystoneAuthWithUsernameAndPasswordAndTenantName,
responseWithKeystoneAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(404).payload(payloadFromResource("/instance_is_rooted.json")).build()
).getInstanceApiForZone("RegionOne");
Boolean rooted = api.isRooted("44b277eb-39be-4921-be31-3d61b43651d7");
assertNull(rooted);
}
}