blob: bb96efe8db3081ac9ae989450202e87739d423f5 [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.rackspace.cloudloadbalancers.features;
import static org.testng.Assert.assertEquals;
import java.net.URI;
import java.util.Set;
import javax.ws.rs.core.MediaType;
import org.jclouds.http.HttpResponse;
import org.jclouds.rackspace.cloudloadbalancers.CloudLoadBalancersApi;
import org.jclouds.rackspace.cloudloadbalancers.domain.Node;
import org.jclouds.rackspace.cloudloadbalancers.domain.NodeAttributes;
import org.jclouds.rackspace.cloudloadbalancers.domain.NodeRequest;
import org.jclouds.rackspace.cloudloadbalancers.features.NodeApi;
import org.jclouds.rackspace.cloudloadbalancers.internal.BaseCloudLoadBalancerApiExpectTest;
import org.testng.annotations.Test;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.ImmutableSortedSet;
/**
* @author Everett Toews
*/
@Test(groups = "unit")
public class NodeApiExpectTest extends BaseCloudLoadBalancerApiExpectTest<CloudLoadBalancersApi> {
public void testListNodes() {
URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes");
NodeApi api = requestsSendResponses(
rackspaceAuthWithUsernameAndApiKey,
responseWithAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/nodes-list.json")).build()
).getNodeApiForZoneAndLoadBalancer("DFW", 2000);
Set<Node> nodes = api.list().concat().toImmutableSet();
assertEquals(nodes, testNodes());
}
public void testGetNodeInLoadBalancer() {
URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes/410");
NodeApi api = requestsSendResponses(
rackspaceAuthWithUsernameAndApiKey,
responseWithAccess,
authenticatedGET().endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/node-get.json")).build()
).getNodeApiForZoneAndLoadBalancer("DFW", 2000);
Node node = api.get(410);
assertEquals(node, testNode());
}
public void testAddNodesInLoadBalancer() {
URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes");
NodeApi api = requestsSendResponses(
rackspaceAuthWithUsernameAndApiKey,
responseWithAccess,
authenticatedGET()
.method("POST")
.payload(payloadFromResourceWithContentType("/nodes-add.json", MediaType.APPLICATION_JSON))
.endpoint(endpoint)
.build(),
HttpResponse.builder().statusCode(200).payload(payloadFromResource("/nodes-list.json")).build()
).getNodeApiForZoneAndLoadBalancer("DFW", 2000);
NodeRequest nodeRequest1 = NodeRequest.builder()
.address("10.1.1.1")
.condition(NodeRequest.Condition.ENABLED)
.port(80)
.weight(3)
.build();
NodeRequest nodeRequest2 = NodeRequest.builder()
.address("10.1.1.2")
.condition(NodeRequest.Condition.ENABLED)
.port(80)
.weight(8)
.build();
NodeRequest nodeRequest3 = NodeRequest.builder()
.address("10.1.1.3")
.condition(NodeRequest.Condition.DISABLED)
.port(80)
.weight(12)
.build();
Set<NodeRequest> nodeRequests = ImmutableSortedSet.<NodeRequest> of(nodeRequest1, nodeRequest2, nodeRequest3);
Set<Node> nodes = api.add(nodeRequests);
assertEquals(nodes, testNodes());
}
public void testUpdateAttributesForNodeInLoadBalancer() {
URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes/410");
NodeApi api = requestsSendResponses(
rackspaceAuthWithUsernameAndApiKey,
responseWithAccess,
authenticatedGET().method("PUT").payload(payloadFromResource("/node-update.json")).endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).build()
).getNodeApiForZoneAndLoadBalancer("DFW", 2000);
NodeAttributes nodeAttributes = NodeAttributes.Builder
.condition(NodeRequest.Condition.DISABLED)
.weight(20);
api.update(410, nodeAttributes);
}
public void testRemoveNodeFromLoadBalancer() {
URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes/410");
NodeApi api = requestsSendResponses(
rackspaceAuthWithUsernameAndApiKey,
responseWithAccess,
authenticatedGET().method("DELETE").replaceHeader("Accept", MediaType.WILDCARD).endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).build()
).getNodeApiForZoneAndLoadBalancer("DFW", 2000);
api.remove(410);
}
public void testRemoveNodesFromLoadBalancer() {
URI endpoint = URI.create("https://dfw.loadbalancers.api.rackspacecloud.com/v1.0/123123/loadbalancers/2000/nodes?id=%5B410%2C%20411%5D");
NodeApi api = requestsSendResponses(
rackspaceAuthWithUsernameAndApiKey,
responseWithAccess,
authenticatedGET().method("DELETE").replaceHeader("Accept", MediaType.WILDCARD).endpoint(endpoint).build(),
HttpResponse.builder().statusCode(200).build()
).getNodeApiForZoneAndLoadBalancer("DFW", 2000);
Set<Integer> nodeIds = ImmutableSortedSet.<Integer> of(410, 411);
api.remove(nodeIds);
}
private Set<Node> testNodes() {
Node node1 = Node.builder()
.id(410)
.address("10.1.1.1")
.port(80)
.condition(Node.Condition.ENABLED)
.status(Node.Status.ONLINE)
.weight(3)
.build();
Node node2 = Node.builder()
.id(411)
.address("10.1.1.2")
.port(80)
.condition(Node.Condition.ENABLED)
.status(Node.Status.ONLINE)
.weight(8)
.build();
Node node3 = Node.builder()
.id(412)
.address("10.1.1.3")
.port(80)
.condition(Node.Condition.DISABLED)
.status(Node.Status.ONLINE)
.weight(12)
.build();
return ImmutableSet.<Node> of(node1, node2, node3);
}
private Node testNode() {
return Node.builder()
.id(410)
.address("10.1.1.1")
.port(80)
.condition(Node.Condition.ENABLED)
.status(Node.Status.ONLINE)
.weight(12)
.build();
}
}