Merge pull request #1248 from jclouds/ultradns-first

Added skeleton for UltraDNS WS provider
This commit is contained in:
Adrian Cole 2013-01-26 14:58:14 -08:00
commit e18ef518fb
21 changed files with 943 additions and 0 deletions

View File

@ -66,5 +66,6 @@
<module>route53</module>
<module>dynect</module>
<module>aws-route53</module>
<module>ultradns-ws</module>
</modules>
</project>

107
labs/ultradns-ws/pom.xml Normal file
View File

@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
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.
-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-project</artifactId>
<version>1.6.0-SNAPSHOT</version>
<relativePath>../../project/pom.xml</relativePath>
</parent>
<groupId>org.jclouds.labs</groupId>
<artifactId>ultradns-ws</artifactId>
<name>jcloud ultradns-ws provider</name>
<description>jclouds components to access UltraDNS Web Services API</description>
<packaging>bundle</packaging>
<properties>
<test.ultradns-ws.endpoint>http://ultra-api.ultradns.com:8008/UltraDNS_WS/v01</test.ultradns-ws.endpoint>
<test.ultradns-ws.api-version>v01</test.ultradns-ws.api-version>
<test.ultradns-ws.build-version></test.ultradns-ws.build-version>
<test.ultradns-ws.identity></test.ultradns-ws.identity>
<test.ultradns-ws.credential></test.ultradns-ws.credential>
<jclouds.osgi.export>org.jclouds.ultradns.ws*;version="${project.version}"</jclouds.osgi.export>
<jclouds.osgi.import>org.jclouds*;version="${project.version}",*</jclouds.osgi.import>
</properties>
<dependencies>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-core</artifactId>
<version>${project.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.jclouds</groupId>
<artifactId>jclouds-core</artifactId>
<version>${project.version}</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jclouds.driver</groupId>
<artifactId>jclouds-slf4j</artifactId>
<version>${project.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<profiles>
<profile>
<id>live</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>integration</id>
<phase>integration-test</phase>
<goals>
<goal>test</goal>
</goals>
<configuration>
<systemPropertyVariables>
<test.ultradns-ws.endpoint>${test.ultradns-ws.endpoint}</test.ultradns-ws.endpoint>
<test.ultradns-ws.api-version>${test.ultradns-ws.api-version}</test.ultradns-ws.api-version>
<test.ultradns-ws.build-version>${test.ultradns-ws.build-version}</test.ultradns-ws.build-version>
<test.ultradns-ws.identity>${test.ultradns-ws.identity}</test.ultradns-ws.identity>
<test.ultradns-ws.credential>${test.ultradns-ws.credential}</test.ultradns-ws.credential>
</systemPropertyVariables>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
</project>

View File

@ -0,0 +1,37 @@
/**
* 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.ultradns.ws;
import org.jclouds.ultradns.ws.domain.Account;
/**
* Provides access to Neustar UltraDNS via the SOAP API
* <p/>
*
* @see UltraDNSWSAsyncApi
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
* @author Adrian Cole
*/
public interface UltraDNSWSApi {
/**
* Returns the account of the current user.
*/
Account getCurrentAccount();
}

View File

@ -0,0 +1,85 @@
/**
* 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.ultradns.ws;
import java.net.URI;
import java.util.Properties;
import org.jclouds.apis.ApiMetadata;
import org.jclouds.rest.RestContext;
import org.jclouds.rest.internal.BaseRestApiMetadata;
import org.jclouds.ultradns.ws.config.UltraDNSWSRestClientModule;
import com.google.common.reflect.TypeToken;
/**
* Implementation of {@link ApiMetadata} for Neustar's UltraDNSWS api.
*
* @author Adrian Cole
*/
public class UltraDNSWSApiMetadata extends BaseRestApiMetadata {
public static final TypeToken<RestContext<UltraDNSWSApi, UltraDNSWSAsyncApi>> CONTEXT_TOKEN = new TypeToken<RestContext<UltraDNSWSApi, UltraDNSWSAsyncApi>>() {
private static final long serialVersionUID = 1L;
};
@Override
public Builder toBuilder() {
return new Builder(getApi(), getAsyncApi()).fromApiMetadata(this);
}
public UltraDNSWSApiMetadata() {
this(new Builder(UltraDNSWSApi.class, UltraDNSWSAsyncApi.class));
}
protected UltraDNSWSApiMetadata(Builder builder) {
super(Builder.class.cast(builder));
}
public static Properties defaultProperties() {
Properties properties = BaseRestApiMetadata.defaultProperties();
return properties;
}
public static class Builder extends BaseRestApiMetadata.Builder<Builder> {
protected Builder(Class<?> api, Class<?> asyncApi) {
super(api, asyncApi);
id("ultradns-ws")
.name("Neustar UltraDNS WS Api")
.identityName("Username")
.credentialName("Password")
.version("v01")
.documentation(URI.create("https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf"))
.defaultEndpoint("http://ultra-api.ultradns.com:8008/UltraDNS_WS/v01")
.defaultProperties(UltraDNSWSApiMetadata.defaultProperties())
.defaultModule(UltraDNSWSRestClientModule.class);
}
@Override
public UltraDNSWSApiMetadata build() {
return new UltraDNSWSApiMetadata(this);
}
@Override
protected Builder self() {
return this;
}
}
}

View File

@ -0,0 +1,56 @@
/**
* 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.ultradns.ws;
import javax.inject.Named;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import org.jclouds.rest.annotations.Payload;
import org.jclouds.rest.annotations.RequestFilters;
import org.jclouds.rest.annotations.VirtualHost;
import org.jclouds.rest.annotations.XMLResponseParser;
import org.jclouds.ultradns.ws.domain.Account;
import org.jclouds.ultradns.ws.filters.SOAPWrapWithPasswordAuth;
import org.jclouds.ultradns.ws.xml.AccountHandler;
import com.google.common.util.concurrent.ListenableFuture;
/**
* Provides access to Neustar UltraDNS via the SOAP API
* <p/>
*
* @see <a href="https://www.ultradns.net/api/NUS_API_XML_SOAP.pdf" />
* @author Adrian Cole
*/
@RequestFilters(SOAPWrapWithPasswordAuth.class)
@VirtualHost
public interface UltraDNSWSAsyncApi {
/**
* @see UltraDNSWSApi#getCurrentAccount()
*/
@Named("getAccountsListOfUser")
@POST
@Path("/")
@XMLResponseParser(AccountHandler.class)
@Payload("<getAccountsListOfUser/>")
ListenableFuture<Account> getCurrentAccount();
}

View File

@ -0,0 +1,82 @@
/**
* 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.ultradns.ws;
import java.net.URI;
import java.util.Properties;
import org.jclouds.providers.ProviderMetadata;
import org.jclouds.providers.internal.BaseProviderMetadata;
/**
* Implementation of {@link org.jclouds.types.ProviderMetadata} for Neustar
* UltraDNS.
*
* @author Adrian Cole
*/
public class UltraDNSWSProviderMetadata extends BaseProviderMetadata {
public static Builder builder() {
return new Builder();
}
@Override
public Builder toBuilder() {
return builder().fromProviderMetadata(this);
}
public UltraDNSWSProviderMetadata() {
super(builder());
}
public UltraDNSWSProviderMetadata(Builder builder) {
super(builder);
}
public static Properties defaultProperties() {
Properties properties = new Properties();
return properties;
}
public static class Builder extends BaseProviderMetadata.Builder {
protected Builder() {
id("ultradns-ws")
.name("Neustar UltraDNS WS")
.apiMetadata(new UltraDNSWSApiMetadata())
.homepage(URI.create("http://www.neustar.biz/enterprise/dns-services/what-is-external-dns"))
.console(URI.create("https://www.ultradns.net"))
.iso3166Codes("US-CA", "US-VA") // TODO
.endpoint("http://ultra-api.ultradns.com:8008/UltraDNS_WS/v01")
.defaultProperties(UltraDNSWSProviderMetadata.defaultProperties());
}
@Override
public UltraDNSWSProviderMetadata build() {
return new UltraDNSWSProviderMetadata(this);
}
@Override
public Builder fromProviderMetadata(ProviderMetadata in) {
super.fromProviderMetadata(in);
return this;
}
}
}

View File

@ -0,0 +1,44 @@
/**
* 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.ultradns.ws.config;
import java.util.Map;
import org.jclouds.rest.ConfiguresRestClient;
import org.jclouds.rest.config.RestClientModule;
import org.jclouds.ultradns.ws.UltraDNSWSApi;
import org.jclouds.ultradns.ws.UltraDNSWSAsyncApi;
import com.google.common.collect.ImmutableMap;
/**
* Configures the UltraDNSWS connection.
*
* @author Adrian Cole
*/
@ConfiguresRestClient
public class UltraDNSWSRestClientModule extends RestClientModule<UltraDNSWSApi, UltraDNSWSAsyncApi> {
public static final Map<Class<?>, Class<?>> DELEGATE_MAP = ImmutableMap.<Class<?>, Class<?>>builder()
.build();
public UltraDNSWSRestClientModule() {
super(DELEGATE_MAP);
}
}

View File

@ -0,0 +1,71 @@
/**
* 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.ultradns.ws.domain;
import static com.google.common.base.Preconditions.checkNotNull;
import com.google.common.base.Objects;
/**
* @author Adrian Cole
*/
public final class Account {
public static Account fromIdAndName(String id, String name) {
return new Account(id, name);
}
private final String id;
private final String name;
private Account(String id, String name) {
this.id = checkNotNull(id, "id");
this.name = checkNotNull(name, "name for %s", id);
}
/**
* The id of the account. ex {@code 01233CB945FAC523}
*/
public String getId() {
return id;
}
/**
* The name of the account. ex {@code jclouds}
*/
public String getName() {
return name;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Account that = Account.class.cast(obj);
return Objects.equal(this.id, that.id) && Objects.equal(this.name, that.name);
}
@Override
public String toString() {
return Objects.toStringHelper(this).add("id", id).add("name", name).toString();
}
}

View File

@ -0,0 +1,65 @@
/**
* 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.ultradns.ws.filters;
import static com.google.common.base.Preconditions.checkNotNull;
import static java.lang.String.format;
import javax.inject.Inject;
import org.jclouds.domain.Credentials;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpRequestFilter;
import org.jclouds.io.Payload;
import org.jclouds.io.Payloads;
import org.jclouds.location.Provider;
import com.google.common.base.Supplier;
/**
* @author Adrian Cole
*/
public class SOAPWrapWithPasswordAuth implements HttpRequestFilter {
static final String WSSE_NS = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
static final String SOAP_PREFIX = new StringBuilder()
.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" ")
.append("xmlns=\"http://webservice.api.ultra.neustar.com/v01/\"><soapenv:Header>")
.append("<wsse:Security xmlns:wsse=\"").append(WSSE_NS).append("\"><wsse:UsernameToken>")
.append("<wsse:Username>%s</wsse:Username><wsse:Password>%s</wsse:Password>")
.append("</wsse:UsernameToken></wsse:Security></soapenv:Header><soapenv:Body>").toString();
static final String SOAP_SUFFIX = "</soapenv:Body></soapenv:Envelope>";
private final Supplier<Credentials> creds;
@Inject
public SOAPWrapWithPasswordAuth(@Provider Supplier<Credentials> creds) {
this.creds = creds;
}
public HttpRequest filter(HttpRequest request) {
checkNotNull(request.getPayload(), "request is not ready to wrap; payload not present");
Credentials current = creds.get();
String body = request.getPayload().getRawContent().toString();
Payload wrappedPayload = Payloads.newStringPayload(new StringBuilder()
.append(format(SOAP_PREFIX, current.identity, current.credential)).append(body).append(SOAP_SUFFIX)
.toString());
wrappedPayload.getContentMetadata().setContentType("application/xml");
return request.toBuilder().payload(wrappedPayload).build();
}
}

View File

@ -0,0 +1,54 @@
/**
* 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.ultradns.ws.xml;
import static org.jclouds.util.SaxUtils.cleanseAttributes;
import static org.jclouds.util.SaxUtils.equalsOrSuffix;
import java.util.Map;
import org.jclouds.http.functions.ParseSax;
import org.jclouds.ultradns.ws.domain.Account;
import org.xml.sax.Attributes;
/**
*
* @author Adrian Cole
*/
public class AccountHandler extends ParseSax.HandlerForGeneratedRequestWithResult<Account> {
private Account account;
@Override
public Account getResult() {
try {
return account;
} finally {
account = null;
}
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attrs) {
Map<String, String> attributes = cleanseAttributes(attrs);
if (equalsOrSuffix(qName, "AccountDetailsData")) {
account = Account.fromIdAndName(attributes.get("accountID"), attributes.get("accountName"));
}
}
}

View File

@ -0,0 +1 @@
org.jclouds.ultradns.ws.UltraDNSWSProviderMetadata

View File

@ -0,0 +1,51 @@
/**
* 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.ultradns.ws;
import static org.testng.Assert.assertEquals;
import org.jclouds.http.HttpRequest;
import org.jclouds.http.HttpResponse;
import org.jclouds.ultradns.ws.internal.BaseUltraDNSWSApiExpectTest;
import org.jclouds.ultradns.ws.parse.GetAccountsListOfUserResponseTest;
import org.testng.annotations.Test;
/**
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "UltraDNSWSApiExpectTest")
public class UltraDNSWSApiExpectTest extends BaseUltraDNSWSApiExpectTest {
HttpRequest getCurrentAccount = HttpRequest.builder().method("POST")
.endpoint("http://ultra-api.ultradns.com:8008/UltraDNS_WS/v01/")
.addHeader("Host", "ultra-api.ultradns.com:8008")
.payload(payloadFromResourceWithContentType("/get_current_account.xml", "application/xml")).build();
HttpResponse getCurrentAccountResponse = HttpResponse.builder().statusCode(200)
.payload(payloadFromResourceWithContentType("/account.xml", "application/xml")).build();
public void testGetCurrentAccountWhenResponseIs2xx() {
UltraDNSWSApi apiWhenWithOptionsExist = requestSendsResponse(getCurrentAccount, getCurrentAccountResponse);
assertEquals(
apiWhenWithOptionsExist.getCurrentAccount().toString(),
new GetAccountsListOfUserResponseTest().expected().toString());
}
}

View File

@ -0,0 +1,47 @@
/**
* 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.ultradns.ws;
import static com.google.common.base.Preconditions.checkNotNull;
import org.jclouds.ultradns.ws.domain.Account;
import org.jclouds.ultradns.ws.internal.BaseUltraDNSWSApiLiveTest;
import org.testng.annotations.Test;
/**
* @author Adrian Cole
*/
@Test(groups = "live", singleThreaded = true, testName = "UltraDNSWSApiLiveTest")
public class UltraDNSWSApiLiveTest extends BaseUltraDNSWSApiLiveTest {
@Test
protected void testGetCurrentAccount() {
Account account = api().getCurrentAccount();
checkAccount(account);
}
private void checkAccount(Account account) {
checkNotNull(account.getId(), "Id cannot be null for an Account.");
checkNotNull(account.getName(), "Name cannot be null for Account %s", account);
}
protected UltraDNSWSApi api() {
return context.getApi();
}
}

View File

@ -0,0 +1,35 @@
/**
* 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.ultradns.ws;
import org.jclouds.providers.internal.BaseProviderMetadataTest;
import org.testng.annotations.Test;
/**
*
* @author Adrian Cole
*/
@Test(groups = "unit", testName = "UltraDNSWSProviderMetadataTest")
public class UltraDNSWSProviderMetadataTest extends BaseProviderMetadataTest {
// no dns abstraction, yet
public UltraDNSWSProviderMetadataTest() {
super(new UltraDNSWSProviderMetadata(), new UltraDNSWSApiMetadata());
}
}

View File

@ -0,0 +1,29 @@
/**
* 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.ultradns.ws.internal;
import org.jclouds.ultradns.ws.UltraDNSWSApi;
/**
*
* @author Adrian Cole
*/
public class BaseUltraDNSWSApiExpectTest extends BaseUltraDNSWSExpectTest<UltraDNSWSApi> {
}

View File

@ -0,0 +1,45 @@
/**
* 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.ultradns.ws.internal;
import org.jclouds.apis.BaseContextLiveTest;
import org.jclouds.ultradns.ws.UltraDNSWSApiMetadata;
import org.jclouds.ultradns.ws.UltraDNSWSAsyncApi;
import org.jclouds.ultradns.ws.UltraDNSWSApi;
import org.jclouds.rest.RestContext;
import org.testng.annotations.Test;
import com.google.common.reflect.TypeToken;
/**
*
* @author Adrian Cole
*/
@Test(groups = "live")
public class BaseUltraDNSWSApiLiveTest extends BaseContextLiveTest<RestContext<UltraDNSWSApi, UltraDNSWSAsyncApi>> {
public BaseUltraDNSWSApiLiveTest() {
provider = "ultradns-ws";
}
@Override
protected TypeToken<RestContext<UltraDNSWSApi, UltraDNSWSAsyncApi>> contextType() {
return UltraDNSWSApiMetadata.CONTEXT_TOKEN;
}
}

View File

@ -0,0 +1,32 @@
/**
* 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.ultradns.ws.internal;
import org.jclouds.rest.internal.BaseRestApiExpectTest;
/**
*
* @author Adrian Cole
*/
public class BaseUltraDNSWSExpectTest<T> extends BaseRestApiExpectTest<T> {
public BaseUltraDNSWSExpectTest() {
provider = "ultradns-ws";
}
}

View File

@ -0,0 +1,51 @@
/**
* 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.ultradns.ws.parse;
import static org.testng.Assert.assertEquals;
import java.io.InputStream;
import org.jclouds.http.functions.BaseHandlerTest;
import org.jclouds.ultradns.ws.domain.Account;
import org.jclouds.ultradns.ws.xml.AccountHandler;
import org.testng.annotations.Test;
/**
* @author Adrian Cole
*/
@Test
public class GetAccountsListOfUserResponseTest extends BaseHandlerTest {
public void test() {
InputStream is = getClass().getResourceAsStream("/account.xml");
Account expected = expected();
AccountHandler handler = injector.getInstance(AccountHandler.class);
Account result = factory.create(handler).parse(is);
assertEquals(result, expected);
}
public Account expected() {
return Account.fromIdAndName("01233CB945FAC523", "jclouds");
}
}

View File

@ -0,0 +1,11 @@
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:getAccountsListOfUserResponse
xmlns:ns1="http://webservice.api.ultra.neustar.com/v01/">
<AccountsList xmlns:ns2="http://schema.ultraservice.neustar.com/v01/">
<ns2:AccountDetailsData accountID="01233CB945FAC523"
accountName="jclouds" />
</AccountsList>
</ns1:getAccountsListOfUserResponse>
</soap:Body>
</soap:Envelope>

View File

@ -0,0 +1 @@
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns="http://webservice.api.ultra.neustar.com/v01/"><soapenv:Header><wsse:Security 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>credential</wsse:Password></wsse:UsernameToken></wsse:Security></soapenv:Header><soapenv:Body><getAccountsListOfUser/></soapenv:Body></soapenv:Envelope>

View File

@ -0,0 +1,38 @@
<?xml version="1.0"?>
<configuration scan="false">
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>target/test-data/jclouds.log</file>
<encoder>
<Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
</encoder>
</appender>
<appender name="WIREFILE" class="ch.qos.logback.core.FileAppender">
<file>target/test-data/jclouds-wire.log</file>
<encoder>
<Pattern>%d %-5p [%c] [%thread] %m%n</Pattern>
</encoder>
</appender>
<root>
<level value="warn" />
</root>
<logger name="org.jclouds">
<level value="DEBUG" />
<appender-ref ref="FILE" />
</logger>
<logger name="jclouds.wire">
<level value="DEBUG" />
<appender-ref ref="WIREFILE" />
</logger>
<logger name="jclouds.headers">
<level value="DEBUG" />
<appender-ref ref="WIREFILE" />
</logger>
</configuration>