/** * 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 * * Unles 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 expres or implied. See the License for the * specific language governing permisions and limitations * under the License. */ package org.jclouds.route53.features; import static com.google.common.net.HttpHeaders.DATE; import static com.google.common.net.HttpHeaders.HOST; import static javax.ws.rs.HttpMethod.GET; import static javax.ws.rs.HttpMethod.POST; import static javax.ws.rs.core.Response.Status.OK; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNull; import org.jclouds.http.HttpRequest; import org.jclouds.http.HttpResponse; import org.jclouds.rest.ResourceNotFoundException; import org.jclouds.route53.Route53Api; import org.jclouds.route53.internal.BaseRoute53ApiExpectTest; import org.jclouds.route53.parse.CreateHostedZoneResponseTest; import org.jclouds.route53.parse.GetChangeResponseTest; import org.jclouds.route53.parse.GetHostedZoneResponseTest; import org.jclouds.route53.parse.ListHostedZonesResponseTest; import org.testng.annotations.Test; import com.google.common.collect.ImmutableSet; /** * @author Adrian Cole */ @Test(groups = "unit", testName = "HostedZoneApiExpectTest") public class HostedZoneApiExpectTest extends BaseRoute53ApiExpectTest { HttpRequest createWithReference = HttpRequest.builder().method(POST) .endpoint("https://route53.amazonaws.com/2012-02-29/hostedzone") .addHeader(HOST, "route53.amazonaws.com") .addHeader(DATE, "Mon, 21 Jan 02013 19:29:03 -0800") .addHeader("X-Amzn-Authorization", authForDate) .payload( payloadFromStringWithContentType( "<CreateHostedZoneRequest xmlns=\"https://route53.amazonaws.com/doc/2012-02-29/\"><Name>jclouds.org.</Name><CallerReference>expect</CallerReference></CreateHostedZoneRequest>", "application/xml")).build(); HttpResponse createResponse = HttpResponse.builder().statusCode(OK.getStatusCode()) .payload(payloadFromResourceWithContentType("/new_zone.xml", "text/xml")).build(); public void testCreateWithReferenceWhenResponseIs2xx() { Route53Api success = requestSendsResponse(createWithReference, createResponse); assertEquals(success.getHostedZoneApi().createWithReference("jclouds.org.", "expect").toString(), new CreateHostedZoneResponseTest().expected().toString()); } HttpRequest createWithReferenceAndComment = HttpRequest.builder().method(POST) .endpoint("https://route53.amazonaws.com/2012-02-29/hostedzone") .addHeader(HOST, "route53.amazonaws.com") .addHeader(DATE, "Mon, 21 Jan 02013 19:29:03 -0800") .addHeader("X-Amzn-Authorization", authForDate) .payload( payloadFromStringWithContentType( "<CreateHostedZoneRequest xmlns=\"https://route53.amazonaws.com/doc/2012-02-29/\"><Name>jclouds.org.</Name><CallerReference>expect</CallerReference><HostedZoneConfig><Comment>comment</Comment></HostedZoneConfig></CreateHostedZoneRequest>", "application/xml")).build(); public void testCreateWithReferenceAndCommentWhenResponseIs2xx() { Route53Api success = requestSendsResponse(createWithReferenceAndComment, createResponse); assertEquals(success.getHostedZoneApi().createWithReferenceAndComment("jclouds.org.", "expect", "comment").toString(), new CreateHostedZoneResponseTest().expected().toString()); } HttpRequest get = HttpRequest.builder().method(GET) .endpoint("https://route53.amazonaws.com/2012-02-29/hostedzone/Z1XTHCPEFRWV1X") .addHeader(HOST, "route53.amazonaws.com") .addHeader(DATE, "Mon, 21 Jan 02013 19:29:03 -0800") .addHeader("X-Amzn-Authorization", authForDate) .build(); HttpResponse getResponse = HttpResponse.builder().statusCode(OK.getStatusCode()) .payload(payloadFromResourceWithContentType("/hosted_zone.xml", "text/xml")).build(); public void testGetWhenResponseIs2xx() { Route53Api success = requestSendsResponse(get, getResponse); assertEquals(success.getHostedZoneApi().get("Z1XTHCPEFRWV1X").toString(), new GetHostedZoneResponseTest().expected() .toString()); } public void testGetWhenResponseIs404() { Route53Api fail = requestSendsResponse(get, notFound); assertNull(fail.getHostedZoneApi().get("Z1XTHCPEFRWV1X")); } HttpRequest list = HttpRequest.builder().method(GET) .endpoint("https://route53.amazonaws.com/2012-02-29/hostedzone") .addHeader(HOST, "route53.amazonaws.com") .addHeader(DATE, "Mon, 21 Jan 02013 19:29:03 -0800") .addHeader("X-Amzn-Authorization", authForDate) .build(); HttpResponse listResponse = HttpResponse.builder().statusCode(OK.getStatusCode()) .payload(payloadFromResourceWithContentType("/hosted_zones.xml", "text/xml")).build(); public void testListWhenResponseIs2xx() { Route53Api success = requestSendsResponse(list, listResponse); assertEquals(success.getHostedZoneApi().list().get(0).toString(), new ListHostedZonesResponseTest().expected() .toString()); } // TODO: this should really be an empty set @Test(expectedExceptions = ResourceNotFoundException.class) public void testListWhenResponseIs404() { Route53Api fail = requestSendsResponse(list, notFound); assertEquals(fail.getHostedZoneApi().list().get(0).toSet(), ImmutableSet.of()); } HttpRequest listAt = HttpRequest.builder().method(GET) .endpoint("https://route53.amazonaws.com/2012-02-29/hostedzone?marker=Z333333YYYYYYY") .addHeader(HOST, "route53.amazonaws.com") .addHeader(DATE, "Mon, 21 Jan 02013 19:29:03 -0800") .addHeader("X-Amzn-Authorization", authForDate) .build(); public void testListAtWhenResponseIs2xx() { Route53Api apiWhenAtExist = requestSendsResponse(listAt, listResponse); assertEquals(apiWhenAtExist.getHostedZoneApi().listAt("Z333333YYYYYYY").toString(), new ListHostedZonesResponseTest().expected().toString()); } public void testList2PagesWhenResponseIs2xx() { HttpResponse noMore = HttpResponse.builder().statusCode(OK.getStatusCode()) .payload(payloadFromStringWithContentType("<ListHostedZonesResponse />", "text/xml")).build(); Route53Api success = requestsSendResponses(list, listResponse, listAt, noMore); assertEquals(success.getHostedZoneApi().list().concat().toString(), new ListHostedZonesResponseTest().expected() .toString()); } HttpRequest delete = HttpRequest.builder().method("DELETE") .endpoint("https://route53.amazonaws.com/2012-02-29/hostedzone/Z1XTHCPEFRWV1X") .addHeader(HOST, "route53.amazonaws.com") .addHeader(DATE, "Mon, 21 Jan 02013 19:29:03 -0800") .addHeader("X-Amzn-Authorization", authForDate) .build(); HttpResponse deleteResponse = HttpResponse.builder().statusCode(OK.getStatusCode()) .payload(payloadFromResourceWithContentType("/change.xml", "text/xml")).build(); public void testDeleteWhenResponseIs2xx() { Route53Api success = requestSendsResponse(delete, deleteResponse); assertEquals(success.getHostedZoneApi().delete("Z1XTHCPEFRWV1X").toString(), new GetChangeResponseTest().expected().toString()); } public void testDeleteWhenResponseIs404() { Route53Api fail = requestSendsResponse(delete, notFound); assertNull(fail.getHostedZoneApi().delete("Z1XTHCPEFRWV1X")); } }