You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by ad...@apache.org on 2013/05/15 22:36:48 UTC
[2/2] git commit: [JCLOUDS-43] add TransactionApi and tests to
ultradns-ws provider
[JCLOUDS-43] add TransactionApi and tests to ultradns-ws provider
Project: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/commit/d3486342
Tree: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/tree/d3486342
Diff: http://git-wip-us.apache.org/repos/asf/incubator-jclouds/diff/d3486342
Branch: refs/heads/1.6.x
Commit: d3486342e0ace65862fcdd79a20402093c9b10f4
Parents: 97fdc26
Author: adriancole <ad...@gmail.com>
Authored: Wed May 15 10:16:43 2013 -0700
Committer: adriancole <ad...@gmail.com>
Committed: Wed May 15 13:33:50 2013 -0700
----------------------------------------------------------------------
.../org/jclouds/ultradns/ws/UltraDNSWSApi.java | 7 +
.../jclouds/ultradns/ws/UltraDNSWSExceptions.java | 13 ++
.../ultradns/ws/features/TransactionApi.java | 85 +++++++++++++
.../ws/handlers/UltraDNSWSErrorHandler.java | 12 ++
.../ultradns/ws/xml/ElementTextHandler.java | 6 +
.../ws/features/TransactionApiExpectTest.java | 99 +++++++++++++++
.../ws/features/TransactionApiLiveTest.java | 78 ++++++++++++
.../ws/handlers/UltraDNSWSErrorHandlerTest.java | 49 +++++++
.../ultradns-ws/src/test/resources/commit_tx.xml | 1 +
.../ultradns-ws/src/test/resources/rollback_tx.xml | 1 +
.../ultradns-ws/src/test/resources/start_tx.xml | 1 +
.../src/test/resources/tx_committed.xml | 8 ++
.../src/test/resources/tx_doesnt_exist.xml | 16 +++
.../src/test/resources/tx_rolledback.xml | 8 ++
.../ultradns-ws/src/test/resources/tx_started.xml | 8 ++
.../ultradns-ws/src/test/resources/tx_toomany.xml | 16 +++
16 files changed, 408 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/UltraDNSWSApi.java
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/UltraDNSWSApi.java b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/UltraDNSWSApi.java
index 7753a7b..647acd8 100644
--- a/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/UltraDNSWSApi.java
+++ b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/UltraDNSWSApi.java
@@ -36,6 +36,7 @@ import org.jclouds.ultradns.ws.features.ResourceRecordApi;
import org.jclouds.ultradns.ws.features.RoundRobinPoolApi;
import org.jclouds.ultradns.ws.features.TaskApi;
import org.jclouds.ultradns.ws.features.TrafficControllerPoolApi;
+import org.jclouds.ultradns.ws.features.TransactionApi;
import org.jclouds.ultradns.ws.features.ZoneApi;
import org.jclouds.ultradns.ws.filters.SOAPWrapWithPasswordAuth;
import org.jclouds.ultradns.ws.xml.AccountHandler;
@@ -127,4 +128,10 @@ public interface UltraDNSWSApi extends Closeable {
*/
@Delegate
TaskApi getTaskApi();
+
+ /**
+ * Provides access to Transaction features.
+ */
+ @Delegate
+ TransactionApi getTransactionApi();
}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/UltraDNSWSExceptions.java
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/UltraDNSWSExceptions.java b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/UltraDNSWSExceptions.java
index 72afc86..08d7f79 100644
--- a/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/UltraDNSWSExceptions.java
+++ b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/UltraDNSWSExceptions.java
@@ -18,6 +18,8 @@
*/
package org.jclouds.ultradns.ws;
+import org.jclouds.rest.InsufficientResourcesException;
+
/**
* Exceptions likely to be encountered when using {@link UltraDNSWSApi}
*
@@ -46,4 +48,15 @@ public interface UltraDNSWSExceptions {
super(message, cause);
}
}
+
+ /**
+ * Error 9010: Ultra API only allows 3 concurrent transactions per user
+ */
+ public static class TooManyTransactionsException extends InsufficientResourcesException {
+ private static final long serialVersionUID = 1L;
+
+ public TooManyTransactionsException(String message, Throwable cause) {
+ super(message, cause);
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/features/TransactionApi.java
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/features/TransactionApi.java b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/features/TransactionApi.java
new file mode 100644
index 0000000..0a555ea
--- /dev/null
+++ b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/features/TransactionApi.java
@@ -0,0 +1,85 @@
+/**
+ * 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.ultradns.ws.features;
+
+import javax.inject.Named;
+import javax.ws.rs.POST;
+
+import org.jclouds.Fallbacks.VoidOnNotFoundOr404;
+import org.jclouds.rest.ResourceNotFoundException;
+import org.jclouds.rest.annotations.Fallback;
+import org.jclouds.rest.annotations.Payload;
+import org.jclouds.rest.annotations.PayloadParam;
+import org.jclouds.rest.annotations.RequestFilters;
+import org.jclouds.rest.annotations.VirtualHost;
+import org.jclouds.rest.annotations.XMLResponseParser;
+import org.jclouds.ultradns.ws.UltraDNSWSExceptions.TooManyTransactionsException;
+import org.jclouds.ultradns.ws.filters.SOAPWrapWithPasswordAuth;
+import org.jclouds.ultradns.ws.xml.ElementTextHandler;
+
+/**
+ *
+ * @see <a href="https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01?wsdl" />
+ * @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
+ * @author Adrian Cole
+ */
+@RequestFilters(SOAPWrapWithPasswordAuth.class)
+@VirtualHost
+public interface TransactionApi {
+ /**
+ * Starts a transaction, if possible. Note that 3 simultaneous ones are
+ * allowed per account, and they have a 1 hr timeout. All write commands will
+ * use this transaction until delete is called.
+ *
+ * @return id of the transaction created
+ * @throws TooManyTransactionsException
+ * if the maximum concurrent exception limit was hit.
+ */
+ @Named("startTransaction")
+ @POST
+ @XMLResponseParser(ElementTextHandler.TransactionID.class)
+ @Payload("<v01:startTransaction/>")
+ String start() throws TooManyTransactionsException;
+
+ /**
+ * This request commits all of a transaction’s requests and writes them to
+ * the Neustar Ultra Services
+ *
+ * @param transactionID
+ * transaction id to commit.
+ * @throws ResourceNotFoundException
+ * if the transaction has already been committed or never existed.
+ */
+ @Named("commitTransaction")
+ @POST
+ @Payload("<v01:commitTransaction><transactionID>{transactionID}</transactionID></v01:commitTransaction>")
+ void commit(@PayloadParam("transactionID") String transactionID) throws ResourceNotFoundException;
+
+ /**
+ * This request rolls back any changes included in a transaction. This will
+ * not error, if the transaction has timed out or does not exist.
+ *
+ * @param transactionID
+ * transaction id to rollback.
+ */
+ @Named("rollbackTransaction")
+ @POST
+ @Payload("<v01:rollbackTransaction><transactionID>{transactionID}</transactionID></v01:rollbackTransaction>")
+ @Fallback(VoidOnNotFoundOr404.class)
+ void rollback(@PayloadParam("transactionID") String transactionID);
+}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/handlers/UltraDNSWSErrorHandler.java
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/handlers/UltraDNSWSErrorHandler.java b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/handlers/UltraDNSWSErrorHandler.java
index 647db52..7aa7e49 100644
--- a/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/handlers/UltraDNSWSErrorHandler.java
+++ b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/handlers/UltraDNSWSErrorHandler.java
@@ -33,6 +33,7 @@ import org.jclouds.rest.ResourceNotFoundException;
import org.jclouds.ultradns.ws.UltraDNSWSError;
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.DirectionalGroupOverlapException;
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
+import org.jclouds.ultradns.ws.UltraDNSWSExceptions.TooManyTransactionsException;
import org.jclouds.ultradns.ws.UltraDNSWSResponseException;
import org.jclouds.ultradns.ws.xml.UltraWSExceptionHandler;
@@ -80,6 +81,10 @@ public class UltraDNSWSErrorHandler implements HttpErrorHandler {
static final class ErrorCodes {
static final int UNKNOWN = 0;
/**
+ * No transaction with Id Y found for the user Y
+ */
+ static final int TX_NOT_FOUND = 1602;
+ /**
* Zone does not exist in the system.
*/
static final int ZONE_NOT_FOUND = 1801;
@@ -131,6 +136,10 @@ public class UltraDNSWSErrorHandler implements HttpErrorHandler {
* Geolocation/Source IP overlap(s) found
*/
static final int DIRECTIONALPOOL_OVERLAP = 7021;
+ /**
+ * Ultra API only allows 3 concurrent transactions per user
+ */
+ static final int EXCEEDED_TX_LIMIT = 9010;
}
private Exception refineException(UltraDNSWSResponseException exception) {
@@ -141,6 +150,7 @@ public class UltraDNSWSErrorHandler implements HttpErrorHandler {
return exception;
if (exception.getError().getDescription().get().indexOf("Cannot find") == -1)
return exception;
+ case ErrorCodes.TX_NOT_FOUND:
case ErrorCodes.ZONE_NOT_FOUND:
case ErrorCodes.RESOURCE_RECORD_NOT_FOUND:
case ErrorCodes.ACCOUNT_NOT_FOUND:
@@ -157,6 +167,8 @@ public class UltraDNSWSErrorHandler implements HttpErrorHandler {
return new ResourceAlreadyExistsException(message, exception);
case ErrorCodes.DIRECTIONALPOOL_OVERLAP:
return new DirectionalGroupOverlapException(message, exception);
+ case ErrorCodes.EXCEEDED_TX_LIMIT:
+ return new TooManyTransactionsException(message, exception);
}
return exception;
}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/xml/ElementTextHandler.java
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/xml/ElementTextHandler.java b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/xml/ElementTextHandler.java
index 66fc90c..392d3b9 100644
--- a/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/xml/ElementTextHandler.java
+++ b/providers/ultradns-ws/src/main/java/org/jclouds/ultradns/ws/xml/ElementTextHandler.java
@@ -66,6 +66,12 @@ public abstract class ElementTextHandler extends ParseSax.HandlerForGeneratedReq
}
}
+ public static class TransactionID extends ElementTextHandler {
+ public TransactionID() {
+ super("transactionId");
+ }
+ }
+
private final String textElement;
private StringBuilder currentText = new StringBuilder();
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/TransactionApiExpectTest.java
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/TransactionApiExpectTest.java b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/TransactionApiExpectTest.java
new file mode 100644
index 0000000..5901967
--- /dev/null
+++ b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/TransactionApiExpectTest.java
@@ -0,0 +1,99 @@
+/**
+ * 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.ultradns.ws.features;
+import static com.google.common.net.HttpHeaders.HOST;
+import static javax.ws.rs.HttpMethod.POST;
+import static javax.ws.rs.core.Response.Status.INTERNAL_SERVER_ERROR;
+import static javax.ws.rs.core.Response.Status.OK;
+import static org.testng.Assert.assertEquals;
+
+import org.jclouds.http.HttpRequest;
+import org.jclouds.http.HttpResponse;
+import org.jclouds.rest.ResourceNotFoundException;
+import org.jclouds.ultradns.ws.UltraDNSWSApi;
+import org.jclouds.ultradns.ws.UltraDNSWSExceptions.TooManyTransactionsException;
+import org.jclouds.ultradns.ws.internal.BaseUltraDNSWSApiExpectTest;
+import org.testng.annotations.Test;
+/**
+ * @author Adrian Cole
+ */
+@Test(groups = "unit", testName = "TransactionApiExpectTest")
+public class TransactionApiExpectTest extends BaseUltraDNSWSApiExpectTest {
+ HttpRequest start = HttpRequest.builder().method(POST)
+ .endpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
+ .addHeader(HOST, "ultra-api.ultradns.com:8443")
+ .payload(payloadFromResourceWithContentType("/start_tx.xml", "application/xml")).build();
+
+ HttpResponse startResponse = HttpResponse.builder().statusCode(OK.getStatusCode())
+ .payload(payloadFromResourceWithContentType("/tx_started.xml", "application/xml")).build();
+
+ public void testStartWhenResponseIs2xx() {
+ UltraDNSWSApi success = requestSendsResponse(start, startResponse);
+
+ assertEquals(success.getTransactionApi().start().toString(), "jclouds-37562");
+ }
+
+ HttpResponse tooManyResponse = HttpResponse.builder().message("Server Error").statusCode(INTERNAL_SERVER_ERROR.getStatusCode())
+ .payload(payloadFromResource("/tx_toomany.xml")).build();
+
+ @Test(expectedExceptions = TooManyTransactionsException.class, expectedExceptionsMessageRegExp = "Ultra API only allows 3 concurrent transactions per user")
+ public void testStartWhenResponseError9010() {
+ UltraDNSWSApi tooMany = requestSendsResponse(start, tooManyResponse);
+ tooMany.getTransactionApi().start();
+ }
+
+ HttpRequest commit = HttpRequest.builder().method(POST)
+ .endpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
+ .addHeader(HOST, "ultra-api.ultradns.com:8443")
+ .payload(payloadFromResourceWithContentType("/commit_tx.xml", "application/xml")).build();
+
+ HttpResponse commitResponse = HttpResponse.builder().statusCode(OK.getStatusCode())
+ .payload(payloadFromResourceWithContentType("/tx_committed.xml", "application/xml")).build();
+
+ public void testCommitWhenResponseIs2xx() {
+ UltraDNSWSApi success = requestSendsResponse(commit, commitResponse);
+ success.getTransactionApi().commit("jclouds-37562");
+ }
+
+ HttpResponse txDoesntExist = HttpResponse.builder().message("Server Error").statusCode(INTERNAL_SERVER_ERROR.getStatusCode())
+ .payload(payloadFromResource("/tx_doesnt_exist.xml")).build();
+
+ @Test(expectedExceptions = ResourceNotFoundException.class, expectedExceptionsMessageRegExp = "No transaction with Id AAAAAAAAAAAAAAAA found for the user .*")
+ public void testCommitWhenResponseError1602() {
+ UltraDNSWSApi notFound = requestSendsResponse(commit, txDoesntExist);
+ notFound.getTransactionApi().commit("jclouds-37562");
+ }
+
+ HttpRequest rollback = HttpRequest.builder().method(POST)
+ .endpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
+ .addHeader(HOST, "ultra-api.ultradns.com:8443")
+ .payload(payloadFromResourceWithContentType("/rollback_tx.xml", "application/xml")).build();
+
+ HttpResponse rollbackResponse = HttpResponse.builder().statusCode(OK.getStatusCode())
+ .payload(payloadFromResourceWithContentType("/tx_rolledback.xml", "application/xml")).build();
+
+ public void testRollbackWhenResponseIs2xx() {
+ UltraDNSWSApi success = requestSendsResponse(rollback, rollbackResponse);
+ success.getTransactionApi().rollback("jclouds-37562");
+ }
+
+ public void testRollbackWhenResponseError1602IsOK() {
+ UltraDNSWSApi notFound = requestSendsResponse(rollback, txDoesntExist);
+ notFound.getTransactionApi().rollback("jclouds-37562");
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/TransactionApiLiveTest.java
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/TransactionApiLiveTest.java b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/TransactionApiLiveTest.java
new file mode 100644
index 0000000..74d8973
--- /dev/null
+++ b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/features/TransactionApiLiveTest.java
@@ -0,0 +1,78 @@
+/**
+ * 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.ultradns.ws.features;
+
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.assertNotNull;
+
+import java.util.List;
+
+import org.jclouds.rest.ResourceNotFoundException;
+import org.jclouds.ultradns.ws.UltraDNSWSExceptions.TooManyTransactionsException;
+import org.jclouds.ultradns.ws.internal.BaseUltraDNSWSApiLiveTest;
+import org.testng.annotations.Test;
+
+import com.google.common.collect.Lists;
+
+/**
+ * @author Adrian Cole
+ */
+@Test(groups = "live", singleThreaded = true, testName = "TransactionApiLiveTest")
+public class TransactionApiLiveTest extends BaseUltraDNSWSApiLiveTest {
+
+ @Test
+ public void commitTransaction() {
+ String tx = api().start();
+ assertNotNull(tx);
+ api().commit(tx);
+ }
+
+ @Test
+ public void rollbackTransaction() {
+ String tx = api().start();
+ assertNotNull(tx);
+ api().rollback(tx);
+ }
+
+ @Test(expectedExceptions = TooManyTransactionsException.class, expectedExceptionsMessageRegExp = "Ultra API only allows 3 concurrent transactions per user")
+ public void only3Transactions() {
+ List<String> txIds = Lists.newArrayList();
+ try {
+ while (true)
+ txIds.add(api().start());
+ } finally {
+ for (String tx : txIds)
+ api().rollback(tx);
+ assertEquals(txIds.size(), 3);
+ }
+ }
+
+ @Test(expectedExceptions = ResourceNotFoundException.class, expectedExceptionsMessageRegExp = "No transaction with Id AAAAAAAAAAAAAAAA found for the user .*")
+ public void commitTransactionWhenNotFound() {
+ api().commit("AAAAAAAAAAAAAAAA");
+ }
+
+ @Test
+ public void testRollbackTransactionWhenNotFound() {
+ api().rollback("AAAAAAAAAAAAAAAA");
+ }
+
+ protected TransactionApi api() {
+ return api.getTransactionApi();
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/handlers/UltraDNSWSErrorHandlerTest.java
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/handlers/UltraDNSWSErrorHandlerTest.java b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/handlers/UltraDNSWSErrorHandlerTest.java
index 91d3c94..dc544da 100644
--- a/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/handlers/UltraDNSWSErrorHandlerTest.java
+++ b/providers/ultradns-ws/src/test/java/org/jclouds/ultradns/ws/handlers/UltraDNSWSErrorHandlerTest.java
@@ -35,6 +35,7 @@ import org.jclouds.io.Payload;
import org.jclouds.rest.ResourceNotFoundException;
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.DirectionalGroupOverlapException;
import org.jclouds.ultradns.ws.UltraDNSWSExceptions.ResourceAlreadyExistsException;
+import org.jclouds.ultradns.ws.UltraDNSWSExceptions.TooManyTransactionsException;
import org.jclouds.ultradns.ws.UltraDNSWSResponseException;
import org.testng.annotations.Test;
@@ -365,6 +366,54 @@ public class UltraDNSWSErrorHandlerTest {
}
@Test
+ public void testCode1602SetsResourceNotFoundException() throws IOException {
+ HttpRequest request = HttpRequest.builder().method(POST)
+ .endpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
+ .addHeader(HOST, "ultra-api.ultradns.com:8443")
+ .payload(payloadFromResource("/delete_directionalrecord.xml")).build();
+ HttpCommand command = new HttpCommand(request);
+ HttpResponse response = HttpResponse.builder()
+ .message(INTERNAL_SERVER_ERROR.getReasonPhrase())
+ .statusCode(INTERNAL_SERVER_ERROR.getStatusCode())
+ .payload(payloadFromResource("/tx_doesnt_exist.xml")).build();
+
+ function.handleError(command, response);
+
+ assertEquals(command.getException().getClass(), ResourceNotFoundException.class);
+ assertEquals(command.getException().getMessage(), "No transaction with Id AAAAAAAAAAAAAAAA found for the user jclouds");
+
+ UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
+
+ assertEquals(exception.getMessage(), "Error 1602: No transaction with Id AAAAAAAAAAAAAAAA found for the user jclouds");
+ assertEquals(exception.getError().getDescription().get(), "No transaction with Id AAAAAAAAAAAAAAAA found for the user jclouds");
+ assertEquals(exception.getError().getCode(), 1602);
+ }
+
+ @Test
+ public void testCode9010SetsTooManyTransactionsException() throws IOException {
+ HttpRequest request = HttpRequest.builder().method(POST)
+ .endpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
+ .addHeader(HOST, "ultra-api.ultradns.com:8443")
+ .payload(payloadFromResource("/create_directionalrecord_newgroup.xml")).build();
+ HttpCommand command = new HttpCommand(request);
+ HttpResponse response = HttpResponse.builder()
+ .message(INTERNAL_SERVER_ERROR.getReasonPhrase())
+ .statusCode(INTERNAL_SERVER_ERROR.getStatusCode())
+ .payload(payloadFromResource("/tx_toomany.xml")).build();
+
+ function.handleError(command, response);
+
+ assertEquals(command.getException().getClass(), TooManyTransactionsException.class);
+ assertEquals(command.getException().getMessage(), "Ultra API only allows 3 concurrent transactions per user");
+
+ UltraDNSWSResponseException exception = UltraDNSWSResponseException.class.cast(command.getException().getCause());
+
+ assertEquals(exception.getMessage(), "Error 9010: Ultra API only allows 3 concurrent transactions per user");
+ assertEquals(exception.getError().getDescription().get(), "Ultra API only allows 3 concurrent transactions per user");
+ assertEquals(exception.getError().getCode(), 9010);
+ }
+
+ @Test
public void testCode7021SetsDirectionalGroupOverlapException() throws IOException {
HttpRequest request = HttpRequest.builder().method(POST)
.endpoint("https://ultra-api.ultradns.com:8443/UltraDNS_WS/v01")
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/test/resources/commit_tx.xml
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/test/resources/commit_tx.xml b/providers/ultradns-ws/src/test/resources/commit_tx.xml
new file mode 100644
index 0000000..3db768c
--- /dev/null
+++ b/providers/ultradns-ws/src/test/resources/commit_tx.xml
@@ -0,0 +1 @@
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v01="http://webservice.api.ultra.neustar.com/v01/"><soapenv:Header><wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsse:UsernameToken><wsse:Username>identity</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">credential</wsse:Password></wsse:UsernameToken></wsse:Security></soapenv:Header><soapenv:Body><v01:commitTransaction><transactionID>jclouds-37562</transactionID></v01:commitTransaction></soapenv:Body></soapenv:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/test/resources/rollback_tx.xml
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/test/resources/rollback_tx.xml b/providers/ultradns-ws/src/test/resources/rollback_tx.xml
new file mode 100644
index 0000000..188f37b
--- /dev/null
+++ b/providers/ultradns-ws/src/test/resources/rollback_tx.xml
@@ -0,0 +1 @@
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v01="http://webservice.api.ultra.neustar.com/v01/"><soapenv:Header><wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsse:UsernameToken><wsse:Username>identity</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">credential</wsse:Password></wsse:UsernameToken></wsse:Security></soapenv:Header><soapenv:Body><v01:rollbackTransaction><transactionID>jclouds-37562</transactionID></v01:rollbackTransaction></soapenv:Body></soapenv:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/test/resources/start_tx.xml
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/test/resources/start_tx.xml b/providers/ultradns-ws/src/test/resources/start_tx.xml
new file mode 100644
index 0000000..58929f3
--- /dev/null
+++ b/providers/ultradns-ws/src/test/resources/start_tx.xml
@@ -0,0 +1 @@
+<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v01="http://webservice.api.ultra.neustar.com/v01/"><soapenv:Header><wsse:Security soapenv:mustUnderstand="1" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><wsse:UsernameToken><wsse:Username>identity</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">credential</wsse:Password></wsse:UsernameToken></wsse:Security></soapenv:Header><soapenv:Body><v01:startTransaction/></soapenv:Body></soapenv:Envelope>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/test/resources/tx_committed.xml
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/test/resources/tx_committed.xml b/providers/ultradns-ws/src/test/resources/tx_committed.xml
new file mode 100644
index 0000000..d5e5196
--- /dev/null
+++ b/providers/ultradns-ws/src/test/resources/tx_committed.xml
@@ -0,0 +1,8 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+ <soap:Body>
+ <ns1:commitTransactionResponse
+ xmlns:ns1="http://webservice.api.ultra.neustar.com/v01/">
+ <result xmlns:ns2="http://schema.ultraservice.neustar.com/v01/">Successful</result>
+ </ns1:commitTransactionResponse>
+ </soap:Body>
+</soap:Envelope>
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/test/resources/tx_doesnt_exist.xml
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/test/resources/tx_doesnt_exist.xml b/providers/ultradns-ws/src/test/resources/tx_doesnt_exist.xml
new file mode 100644
index 0000000..4f52669
--- /dev/null
+++ b/providers/ultradns-ws/src/test/resources/tx_doesnt_exist.xml
@@ -0,0 +1,16 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+ <soap:Body>
+ <soap:Fault>
+ <faultcode>soap:Server</faultcode>
+ <faultstring>Fault occurred while processing.</faultstring>
+ <detail>
+ <ns1:UltraWSException xmlns:ns1="http://webservice.api.ultra.neustar.com/v01/">
+ <errorCode xmlns:ns2="http://schema.ultraservice.neustar.com/v01/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:type="xs:int">1602</errorCode>
+ <errorDescription xmlns:ns2="http://schema.ultraservice.neustar.com/v01/">No transaction with Id AAAAAAAAAAAAAAAA found for the user jclouds</errorDescription>
+ </ns1:UltraWSException>
+ </detail>
+ </soap:Fault>
+ </soap:Body>
+</soap:Envelope>
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/test/resources/tx_rolledback.xml
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/test/resources/tx_rolledback.xml b/providers/ultradns-ws/src/test/resources/tx_rolledback.xml
new file mode 100644
index 0000000..7fd4515
--- /dev/null
+++ b/providers/ultradns-ws/src/test/resources/tx_rolledback.xml
@@ -0,0 +1,8 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+ <soap:Body>
+ <ns1:rollbackTransactionResponse
+ xmlns:ns1="http://webservice.api.ultra.neustar.com/v01/">
+ <result xmlns:ns2="http://schema.ultraservice.neustar.com/v01/">Successful</result>
+ </ns1:rollbackTransactionResponse>
+ </soap:Body>
+</soap:Envelope>
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/test/resources/tx_started.xml
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/test/resources/tx_started.xml b/providers/ultradns-ws/src/test/resources/tx_started.xml
new file mode 100644
index 0000000..375ac0e
--- /dev/null
+++ b/providers/ultradns-ws/src/test/resources/tx_started.xml
@@ -0,0 +1,8 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+ <soap:Body>
+ <ns1:startTransactionResponse
+ xmlns:ns1="http://webservice.api.ultra.neustar.com/v01/">
+ <transactionId xmlns:ns2="http://schema.ultraservice.neustar.com/v01/">jclouds-37562</transactionId>
+ </ns1:startTransactionResponse>
+ </soap:Body>
+</soap:Envelope>
http://git-wip-us.apache.org/repos/asf/incubator-jclouds/blob/d3486342/providers/ultradns-ws/src/test/resources/tx_toomany.xml
----------------------------------------------------------------------
diff --git a/providers/ultradns-ws/src/test/resources/tx_toomany.xml b/providers/ultradns-ws/src/test/resources/tx_toomany.xml
new file mode 100644
index 0000000..229e181
--- /dev/null
+++ b/providers/ultradns-ws/src/test/resources/tx_toomany.xml
@@ -0,0 +1,16 @@
+<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
+ <soap:Body>
+ <soap:Fault>
+ <faultcode>soap:Server</faultcode>
+ <faultstring>Fault occurred while processing.</faultstring>
+ <detail>
+ <ns1:UltraWSException xmlns:ns1="http://webservice.api.ultra.neustar.com/v01/">
+ <errorCode xmlns:ns2="http://schema.ultraservice.neustar.com/v01/"
+ xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:type="xs:int">9010</errorCode>
+ <errorDescription xmlns:ns2="http://schema.ultraservice.neustar.com/v01/">Ultra API only allows 3 concurrent transactions per user</errorDescription>
+ </ns1:UltraWSException>
+ </detail>
+ </soap:Fault>
+ </soap:Body>
+</soap:Envelope>