http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/features/VmApiTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/features/VmApiTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/features/VmApiTest.java new file mode 100644 index 0000000..b8e786c --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/features/VmApiTest.java @@ -0,0 +1,318 @@ +/* + * 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.vcloud.features; + +import static org.jclouds.reflect.Reflection2.method; + +import java.io.IOException; +import java.net.URI; + +import org.jclouds.Fallbacks.NullOnNotFoundOr404; +import org.jclouds.http.functions.ParseSax; +import org.jclouds.http.functions.ReleasePayloadAndReturn; +import org.jclouds.http.functions.ReturnInputStream; +import org.jclouds.rest.internal.GeneratedHttpRequest; +import org.jclouds.util.Strings2; +import org.jclouds.vcloud.domain.GuestCustomizationSection; +import org.jclouds.vcloud.internal.BaseVCloudApiTest; +import org.jclouds.vcloud.utils.TestUtils; +import org.jclouds.vcloud.xml.TaskHandler; +import org.jclouds.vcloud.xml.VmHandler; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableList; +import com.google.common.reflect.Invokable; +/** + * Tests behavior of {@code VmApi} + */ +// NOTE:without testName, this will not call @Before* and fail w/NPE during +// surefire +@Test(groups = "unit", testName = "VmApiTest") +public class VmApiTest extends BaseVCloudApiTest<VmApi> { + + public void testGetThumbnailOfVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "getScreenThumbnailForVm", URI.class); + GeneratedHttpRequest request = processor + .createRequest(method, ImmutableList.<Object> of(URI.create("http://vcloud.example.com/api/v1.0/vApp/vm-12"))); + + assertRequestLineEquals(request, "GET http://vcloud.example.com/api/v1.0/vApp/vm-12/screen HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: image/png\n"); + assertPayloadEquals(request, null, null, false); + + assertResponseParserClassEquals(method, request, ReturnInputStream.class); + assertSaxResponseParserClassEquals(method, null); + assertFallbackClassEquals(method, NullOnNotFoundOr404.class); + + checkFilters(request); + } + + @Test(dataProvider = "ignoreOnWindows", description = "see http://code.google.com/p/jclouds/issues/detail?id=402") + public void testUpdateGuestConfiguration() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "updateGuestCustomizationOfVm", GuestCustomizationSection.class, + URI.class); + GuestCustomizationSection guest = new GuestCustomizationSection(URI + .create("http://vcloud.example.com/api/v1.0/vApp/vm-12/guestCustomizationSection")); + guest.setCustomizationScript("cat > /tmp/foo.txt<<EOF\nI love candy\nEOF"); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(guest, URI + .create("http://vcloud.example.com/api/v1.0/vApp/vm-12"))); + + assertRequestLineEquals(request, + "PUT http://vcloud.example.com/api/v1.0/vApp/vm-12/guestCustomizationSection HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n"); + assertPayloadEquals(request, Strings2.toStringAndClose(getClass().getResourceAsStream( + "/guestCustomizationSection.xml")), "application/vnd.vmware.vcloud.guestCustomizationSection+xml", false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, TaskHandler.class); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testUpdateCPUCountOfVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "updateCPUCountOfVm", int.class, URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(2, URI + .create("http://vcloud.example.com/api/v1.0/vApp/vm-12"))); + + assertRequestLineEquals(request, + "PUT http://vcloud.example.com/api/v1.0/vApp/vm-12/virtualHardwareSection/cpu HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n"); + assertPayloadEquals(request, Strings2.toStringAndClose(getClass().getResourceAsStream("/cpuItem.xml")), + "application/vnd.vmware.vcloud.rasdItem+xml", false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, TaskHandler.class); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testUpdateMemoryMBOfVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "updateMemoryMBOfVm", int.class, URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(512, URI + .create("http://vcloud.example.com/api/v1.0/vApp/vm-12"))); + + assertRequestLineEquals(request, + "PUT http://vcloud.example.com/api/v1.0/vApp/vm-12/virtualHardwareSection/memory HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n"); + assertPayloadEquals(request, Strings2.toStringAndClose(getClass().getResourceAsStream("/memoryItem.xml")), + "application/vnd.vmware.vcloud.rasdItem+xml", false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, TaskHandler.class); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testDeployVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "deployVm", URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/1"))); + + assertRequestLineEquals(request, "POST https://vcenterprise.bluelock.com/api/v1.0/vApp/1/action/deploy HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n"); + assertPayloadEquals(request, "<DeployVAppParams xmlns=\"http://www.vmware.com/vcloud/v1\"/>", + "application/vnd.vmware.vcloud.deployVAppParams+xml", false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, TaskHandler.class); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testDeployAndPowerOnVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "deployAndPowerOnVm", URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/1"))); + + assertRequestLineEquals(request, "POST https://vcenterprise.bluelock.com/api/v1.0/vApp/1/action/deploy HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n"); + assertPayloadEquals(request, "<DeployVAppParams xmlns=\"http://www.vmware.com/vcloud/v1\" powerOn=\"true\"/>", + "application/vnd.vmware.vcloud.deployVAppParams+xml", false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, TaskHandler.class); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testGetVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "getVm", URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vm/1"))); + + assertRequestLineEquals(request, "GET https://vcenterprise.bluelock.com/api/v1.0/vm/1 HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.vm+xml\n"); + assertPayloadEquals(request, null, null, false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, VmHandler.class); + assertFallbackClassEquals(method, NullOnNotFoundOr404.class); + + checkFilters(request); + } + + public void testRebootVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "rebootVm", URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/1"))); + + assertRequestLineEquals(request, + "POST https://vcenterprise.bluelock.com/api/v1.0/vApp/1/power/action/reboot HTTP/1.1"); + assertNonPayloadHeadersEqual(request, ""); + assertPayloadEquals(request, null, null, false); + + assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class); + assertSaxResponseParserClassEquals(method, null); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testUndeployVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "undeployVm", URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/1"))); + + assertRequestLineEquals(request, + "POST https://vcenterprise.bluelock.com/api/v1.0/vApp/1/action/undeploy HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n"); + assertPayloadEquals(request, "<UndeployVAppParams xmlns=\"http://www.vmware.com/vcloud/v1\"/>", + "application/vnd.vmware.vcloud.undeployVAppParams+xml", false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, TaskHandler.class); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testUndeployAndSaveStateOfVmSaveState() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "undeployAndSaveStateOfVm", URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/1"))); + + assertRequestLineEquals(request, + "POST https://vcenterprise.bluelock.com/api/v1.0/vApp/1/action/undeploy HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n"); + assertPayloadEquals(request, + "<UndeployVAppParams xmlns=\"http://www.vmware.com/vcloud/v1\" saveState=\"true\"/>", + "application/vnd.vmware.vcloud.undeployVAppParams+xml", false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, TaskHandler.class); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testPowerOnVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "powerOnVm", URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/1"))); + + assertRequestLineEquals(request, + "POST https://vcenterprise.bluelock.com/api/v1.0/vApp/1/power/action/powerOn HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n"); + assertPayloadEquals(request, null, null, false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, TaskHandler.class); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testPowerOffVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "powerOffVm", URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/1"))); + + assertRequestLineEquals(request, + "POST https://vcenterprise.bluelock.com/api/v1.0/vApp/1/power/action/powerOff HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n"); + assertPayloadEquals(request, null, null, false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, TaskHandler.class); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testResetVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "resetVm", URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/1"))); + + assertRequestLineEquals(request, + "POST https://vcenterprise.bluelock.com/api/v1.0/vApp/1/power/action/reset HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n"); + assertPayloadEquals(request, null, null, false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, TaskHandler.class); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testSuspendVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "suspendVm", URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/1"))); + + assertRequestLineEquals(request, + "POST https://vcenterprise.bluelock.com/api/v1.0/vApp/1/power/action/suspend HTTP/1.1"); + assertNonPayloadHeadersEqual(request, "Accept: application/vnd.vmware.vcloud.task+xml\n"); + assertPayloadEquals(request, null, null, false); + + assertResponseParserClassEquals(method, request, ParseSax.class); + assertSaxResponseParserClassEquals(method, TaskHandler.class); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + public void testShutdownVm() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VmApi.class, "shutdownVm", URI.class); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.<Object> of(URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/1"))); + + assertRequestLineEquals(request, + "POST https://vcenterprise.bluelock.com/api/v1.0/vApp/1/power/action/shutdown HTTP/1.1"); + assertNonPayloadHeadersEqual(request, ""); + assertPayloadEquals(request, null, null, false); + + assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class); + assertSaxResponseParserClassEquals(method, null); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + @DataProvider + public Object[][] ignoreOnWindows() { + return TestUtils.isWindowsOs() ? TestUtils.NO_INVOCATIONS + : TestUtils.SINGLE_NO_ARG_INVOCATION; + } + +}
http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequestTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequestTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequestTest.java new file mode 100644 index 0000000..40d1fd5 --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/filters/AddVCloudAuthorizationAndCookieToRequestTest.java @@ -0,0 +1,51 @@ +/* + * 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.vcloud.filters; + +import static org.testng.Assert.assertEquals; + +import org.jclouds.http.HttpRequest; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.google.common.base.Supplier; +import com.google.common.net.HttpHeaders; + +@Test(testName = "AddVCloudAuthorizationAndCookieToRequestTest") +public class AddVCloudAuthorizationAndCookieToRequestTest { + + private AddVCloudAuthorizationAndCookieToRequest filter; + + @BeforeTest + void setUp() { + filter = new AddVCloudAuthorizationAndCookieToRequest(new Supplier<String>() { + public String get() { + return "token"; + } + }, "1.0"); + } + + @Test + public void testApply() { + HttpRequest request = HttpRequest.builder().method("GET").endpoint("http://localhost").build(); + request = filter.filter(request); + assertEquals(request.getHeaders().size(), 3); + assertEquals(request.getFirstHeaderOrNull(HttpHeaders.COOKIE), "vcloud-token=token"); + assertEquals(request.getFirstHeaderOrNull("x-vcloud-authorization"), "token"); + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/functions/ParseLoginResponseFromHeadersTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/functions/ParseLoginResponseFromHeadersTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/functions/ParseLoginResponseFromHeadersTest.java new file mode 100644 index 0000000..66a4f4a --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/functions/ParseLoginResponseFromHeadersTest.java @@ -0,0 +1,145 @@ +/* + * 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.vcloud.functions; + +import static org.testng.Assert.assertEquals; + +import java.net.URI; + +import org.jclouds.http.HttpResponse; +import org.jclouds.http.HttpResponseException; +import org.jclouds.http.functions.BaseHandlerTest; +import org.jclouds.vcloud.VCloudMediaType; +import org.jclouds.vcloud.domain.VCloudSession; +import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableMap; + +/** + * Tests behavior of {@code ParseLoginResponseFromHeaders} + */ +// NOTE:without testName, this will not call @Before* and fail w/NPE during +// surefire +@Test(groups = "unit", testName = "ParseLoginResponseFromHeadersTest") +public class ParseLoginResponseFromHeadersTest extends BaseHandlerTest { + + private ParseLoginResponseFromHeaders parser; + + @BeforeTest + void setUp() { + parser = injector.getInstance(ParseLoginResponseFromHeaders.class); + } + + @Test + public void testApply() { + HttpResponse response = HttpResponse.builder().statusCode(200).message("OK") + .payload(getClass().getResourceAsStream("/orglist.xml")) + .addHeader("x-vcloud-authorization", "vcloud-token=9er4d061-4bff-48fa-84b1-5da7166764d2; path=/").build(); + response.getPayload().getContentMetadata().setContentType("Content-Type: application/xml; charset=utf-8"); + response.getPayload().getContentMetadata().setContentLength(307l); + + VCloudSession reply = parser.apply(response); + assertEquals(reply.getVCloudToken(), "9er4d061-4bff-48fa-84b1-5da7166764d2"); + assertEquals(reply.getOrgs(), ImmutableMap.of("[email protected]", new ReferenceTypeImpl("[email protected]", + VCloudMediaType.ORG_XML, URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/org/48")))); + + } + + @Test + public void testApplyBlueLock() { + HttpResponse response = HttpResponse.builder().statusCode(200).message("OK") + .payload(getClass().getResourceAsStream("/orglist.xml")) + .addHeader("x-vcloud-authorization", "MUKOJ2HoAfoMmLnHRp4esNb2MtWscCLLhVysnsIsCG0=").build(); + response.getPayload().getContentMetadata().setContentType("Content-Type: application/xml; charset=utf-8"); + response.getPayload().getContentMetadata().setContentLength(307l); + + VCloudSession reply = parser.apply(response); + assertEquals(reply.getVCloudToken(), "MUKOJ2HoAfoMmLnHRp4esNb2MtWscCLLhVysnsIsCG0="); + assertEquals(reply.getOrgs(), ImmutableMap.of("[email protected]", new ReferenceTypeImpl("[email protected]", + VCloudMediaType.ORG_XML, URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/org/48")))); + + } + + @Test + public void testApplyTerremark() { + HttpResponse response = HttpResponse.builder().statusCode(200).message("OK") + .payload(getClass().getResourceAsStream("/orglist.xml")) + .addHeader("Set-Cookie", "vcloud-token=37ce2715-9aba-4f48-8e45-2db8a8da702d; path=/").build(); + response.getPayload().getContentMetadata().setContentType("Content-Type: application/xml; charset=utf-8"); + response.getPayload().getContentMetadata().setContentLength(307l); + + VCloudSession reply = parser.apply(response); + assertEquals(reply.getVCloudToken(), "37ce2715-9aba-4f48-8e45-2db8a8da702d"); + assertEquals(reply.getOrgs(), ImmutableMap.of("[email protected]", new ReferenceTypeImpl("[email protected]", + VCloudMediaType.ORG_XML, URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/org/48")))); + + } + + @Test + public void testApplyTerremarkMultipleCookies() { + HttpResponse response = HttpResponse.builder().statusCode(200).message("OK") + .payload(getClass().getResourceAsStream("/orglist.xml")) + .addHeader("Set-Cookie", "NSC_ESUO_21654_72.46.239.132_443=fooo;expires=Thu, 02-Jun-2011 17:19:26 GMT;path=/;secure;httponly") + .addHeader("Set-Cookie", "vcloud-token=37ce2715-9aba-4f48-8e45-2db8a8da702d; path=/").build(); + response.getPayload().getContentMetadata().setContentType("Content-Type: application/xml; charset=utf-8"); + response.getPayload().getContentMetadata().setContentLength(307l); + + VCloudSession reply = parser.apply(response); + assertEquals(reply.getVCloudToken(), "37ce2715-9aba-4f48-8e45-2db8a8da702d"); + assertEquals(reply.getOrgs(), ImmutableMap.of("[email protected]", new ReferenceTypeImpl("[email protected]", + VCloudMediaType.ORG_XML, URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/org/48")))); + + } + + @Test(expectedExceptions = HttpResponseException.class) + public void testUnmatchedCookieThrowsHttpResponseException() { + HttpResponse response = HttpResponse.builder().statusCode(200).message("OK") + .payload(getClass().getResourceAsStream("/orglist.xml")) + .addHeader("Set-Cookie", "NSC_ESUO_21654_72.46.239.132_443=fooo;expires=Thu, 02-Jun-2011 17:19:26 GMT;path=/;secure;httponly").build(); + response.getPayload().getContentMetadata().setContentType("Content-Type: application/xml; charset=utf-8"); + response.getPayload().getContentMetadata().setContentLength(307l); + + parser.apply(response); + } + + @Test(expectedExceptions = HttpResponseException.class) + public void testNoThrowsHttpResponseException() { + HttpResponse response = HttpResponse.builder().statusCode(200).message("OK") + .payload(getClass().getResourceAsStream("/orglist.xml")).build(); + response.getPayload().getContentMetadata().setContentType("Content-Type: application/xml; charset=utf-8"); + response.getPayload().getContentMetadata().setContentLength(307l); + + parser.apply(response); + } + + @Test + public void testApplyVirtacore() { + HttpResponse response = HttpResponse.builder().statusCode(200).message("OK") + .payload(getClass().getResourceAsStream("/orglist.xml")) + .addHeader("x-vcloud-authorization", "vcloud-token=IPy0w7UGD4lwtdWAK/ZVzfuLK+dztxGRqsOhWqV0i48=").build(); + response.getPayload().getContentMetadata().setContentType("Content-Type: application/xml; charset=utf-8"); + response.getPayload().getContentMetadata().setContentLength(307l); + + VCloudSession reply = parser.apply(response); + assertEquals(reply.getVCloudToken(), "IPy0w7UGD4lwtdWAK/ZVzfuLK+dztxGRqsOhWqV0i48="); + assertEquals(reply.getOrgs(), ImmutableMap.of("[email protected]", new ReferenceTypeImpl("[email protected]", + VCloudMediaType.ORG_XML, URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/org/48")))); + + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponseTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponseTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponseTest.java new file mode 100644 index 0000000..9466191 --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/handlers/ParseVCloudErrorFromHttpResponseTest.java @@ -0,0 +1,92 @@ +/* + * 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.vcloud.handlers; + +import java.net.URI; + +import org.jclouds.http.BaseHttpErrorHandlerTest; +import org.jclouds.http.HttpErrorHandler; +import org.jclouds.http.HttpResponseException; +import org.jclouds.rest.AuthorizationException; +import org.jclouds.rest.ResourceNotFoundException; +import org.jclouds.vcloud.VCloudMediaType; +import org.testng.annotations.Test; + +@Test(groups = { "unit" }) +public class ParseVCloudErrorFromHttpResponseTest extends BaseHttpErrorHandlerTest { + + @Test + public void testGet404SetsResourceNotFoundException() { + assertCodeMakes("GET", URI.create("https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32"), 404, + "", "", ResourceNotFoundException.class); + } + + @Test + public void testGet403NoAcessToEntitySetsResourceNotFoundException() { + assertCodeMakes( + "GET", + URI.create("https://zone01.bluelock.com/api/v1.0/vApp/vapp-1535788985"), + 403, + "HTTP/1.1 403", + VCloudMediaType.ERROR_XML, + "<Error xmlns=\"http://www.vmware.com/vcloud/v1\" minorErrorCode=\"ACCESS_TO_RESOURCE_IS_FORBIDDEN\" message=\"No access to entity "(com.vmware.vcloud.entity.vapp:1535788985)".\" majorErrorCode=\"403\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.vmware.com/vcloud/v1 http://vcenterprise.bluelock.com/api/v1.0/schema/master.xsd\"></Error>\n", + ResourceNotFoundException.class); + } + + @Test + public void testGet403NoAcessToEntitySetsResourceNotFoundExceptionOnAPI1_0AgainstVCD1_5() { + assertCodeMakes( + "GET", + URI.create("https://mycloud.greenhousedata.com/api/v1.0/vApp/vapp-d3a1f2cd-d07b-4ddc-bf7b-fb7468b4d95a"), + 403, + "HTTP/1.1 403", + // NOTE VCD 1.5 appends the api version to the media type + VCloudMediaType.ERROR_XML + ";1.0", + "<Error xmlns=\"http://www.vmware.com/vcloud/v1\" minorErrorCode=\"ACCESS_TO_RESOURCE_IS_FORBIDDEN\" message=\"No access to entity "(com.vmware.vcloud.entity.vapp:d3a1f2cd-d07b-4ddc-bf7b-fb7468b4d95a)".\" majorErrorCode=\"403\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.vmware.com/vcloud/v1 http://mycloud.greenhousedata.com/api/v1.0/schema/master.xsd\"></Error>", + ResourceNotFoundException.class); + } + + @Test + public void testDelete404SetsHttpResponseException() { + assertCodeMakes("DELETE", URI.create("https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32"), + 404, "", "", HttpResponseException.class); + } + + @Test + public void testPOSTNotRunningSetsIllegalStateException() { + assertCodeMakes( + "POST", + URI.create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vapp-138351019/action/undeploy"), + 400, + "HTTP/1.1 400 Bad Request", + VCloudMediaType.ERROR_XML, + "<Error xmlns=\"http://www.vmware.com/vcloud/v1\" minorErrorCode=\"BAD_REQUEST\" message=\"The requested operation could not be executed since vApp "adriancolecap-78c" is not running"\" majorErrorCode=\"400\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.vmware.com/vcloud/v1 http://vcenterprise.bluelock.com/api/v1.0/schema/master.xsd\"></Error>\n", + IllegalStateException.class); + } + + @Test + public void test401SetsAuthorizationException() { + assertCodeMakes("GET", URI.create("https://services.vcloudexpress.terremark.com/api/v0.8a-ext1.6/vdc/32"), 401, + "", "", AuthorizationException.class); + } + + @Override + protected Class<? extends HttpErrorHandler> getHandlerClass() { + return ParseVCloudErrorFromHttpResponse.class; + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BasePayloadTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BasePayloadTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BasePayloadTest.java new file mode 100644 index 0000000..4ffe512 --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BasePayloadTest.java @@ -0,0 +1,51 @@ +/* + * 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.vcloud.internal; + +import static org.jclouds.reflect.Reflection2.method; + +import java.net.URI; +import java.util.List; + +import org.jclouds.reflect.Invocation; +import org.jclouds.rest.internal.GeneratedHttpRequest; +import org.jclouds.vcloud.VCloudApiMetadata; +import org.nnsoft.guice.rocoto.Rocoto; +import org.nnsoft.guice.rocoto.configuration.ConfigurationModule; + +import com.google.common.base.Throwables; +import com.google.inject.Guice; +import com.google.inject.Injector; + +public class BasePayloadTest { + + protected Injector injector = Guice.createInjector(Rocoto.expandVariables(new ConfigurationModule() { + protected void bindConfigurations() { + bindProperties(new VCloudApiMetadata().getDefaultProperties()); + } + })); + + protected GeneratedHttpRequest requestForArgs(List<Object> args) { + try { + Invocation invocation = Invocation.create(method(String.class, "toString"), args); + return GeneratedHttpRequest.builder().method("POST").endpoint(URI.create("http://localhost/key")) + .invocation(invocation).build(); + } catch (SecurityException e) { + throw Throwables.propagate(e); + } + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BaseVCloudApiLiveTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BaseVCloudApiLiveTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BaseVCloudApiLiveTest.java new file mode 100644 index 0000000..a4db473 --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BaseVCloudApiLiveTest.java @@ -0,0 +1,55 @@ +/* + * 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.vcloud.internal; + +import org.jclouds.compute.ComputeService; +import org.jclouds.compute.internal.BaseComputeServiceContextLiveTest; +import org.jclouds.sshj.config.SshjSshClientModule; +import org.jclouds.vcloud.VCloudApi; +import org.testng.annotations.BeforeClass; +import org.testng.annotations.Test; + +import com.google.inject.Module; + +@Test(groups = "live", enabled = true, singleThreaded = true) +public abstract class BaseVCloudApiLiveTest extends BaseComputeServiceContextLiveTest { + + // username is too long for name constraints + protected String prefix = "vcd"; + + protected ComputeService client; + + public BaseVCloudApiLiveTest() { + provider = "vcloud"; + } + + protected VCloudApi getVCloudApi() { + return view.unwrapApi(VCloudApi.class); + } + + @Override + @BeforeClass(groups = { "integration", "live" }) + public void setupContext() { + super.setupContext(); + client = view.getComputeService(); + } + + @Override + protected Module getSshModule() { + return new SshjSshClientModule(); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BaseVCloudApiTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BaseVCloudApiTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BaseVCloudApiTest.java new file mode 100644 index 0000000..feeec7c --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/BaseVCloudApiTest.java @@ -0,0 +1,270 @@ +/* + * 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.vcloud.internal; + +import static org.jclouds.Constants.PROPERTY_SESSION_INTERVAL; +import static org.testng.Assert.assertEquals; + +import java.net.URI; +import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; + +import javax.inject.Inject; +import javax.inject.Named; +import javax.inject.Singleton; + +import org.jclouds.http.HttpRequest; +import org.jclouds.ovf.Envelope; +import org.jclouds.ovf.xml.EnvelopeHandlerTest; +import org.jclouds.providers.AnonymousProviderMetadata; +import org.jclouds.providers.ProviderMetadata; +import org.jclouds.rest.AuthorizationException; +import org.jclouds.rest.ConfiguresHttpApi; +import org.jclouds.rest.internal.BaseRestAnnotationProcessingTest; +import org.jclouds.vcloud.VCloudApiMetadata; +import org.jclouds.vcloud.VCloudMediaType; +import org.jclouds.vcloud.VCloudVersionsApi; +import org.jclouds.vcloud.config.VCloudHttpApiModule; +import org.jclouds.vcloud.domain.AllocationModel; +import org.jclouds.vcloud.domain.CatalogItem; +import org.jclouds.vcloud.domain.Org; +import org.jclouds.vcloud.domain.ReferenceType; +import org.jclouds.vcloud.domain.Task; +import org.jclouds.vcloud.domain.VAppTemplate; +import org.jclouds.vcloud.domain.VCloudSession; +import org.jclouds.vcloud.domain.VDC; +import org.jclouds.vcloud.domain.VDCStatus; +import org.jclouds.vcloud.domain.internal.CatalogImpl; +import org.jclouds.vcloud.domain.internal.CatalogItemImpl; +import org.jclouds.vcloud.domain.internal.OrgImpl; +import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; +import org.jclouds.vcloud.domain.internal.VDCImpl; +import org.jclouds.vcloud.filters.AddVCloudAuthorizationAndCookieToRequest; +import org.jclouds.vcloud.xml.VAppTemplateHandlerTest; +import org.testng.annotations.Test; + +import com.google.common.base.Functions; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; +import com.google.common.cache.CacheLoader; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; +import com.google.inject.AbstractModule; +import com.google.inject.Module; +import com.google.inject.TypeLiteral; + +/** + * Tests behavior of {@code VCloudApi} + */ +// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire +@Test(groups = "unit", testName = "BaseVCloudApiTest") +public abstract class BaseVCloudApiTest<T> extends BaseRestAnnotationProcessingTest<T> { + + @Override + protected void checkFilters(HttpRequest request) { + assertEquals(request.getFilters().size(), 1); + assertEquals(request.getFilters().get(0).getClass(), AddVCloudAuthorizationAndCookieToRequest.class); + } + + @Override + protected Module createModule() { + return new VCloudHttpApiModuleExtension(); + } + + @Override + protected ProviderMetadata createProviderMetadata() { + return AnonymousProviderMetadata.forApiWithEndpoint(new VCloudApiMetadata(), "https://vcenterprise.bluelock.com/api/v1.0"); + } + + protected static final ReferenceTypeImpl ORG_REF = new ReferenceTypeImpl("org", VCloudMediaType.ORG_XML, + URI.create("https://vcenterprise.bluelock.com/api/v1.0/org/1")); + + protected static final ReferenceTypeImpl CATALOG_REF = new ReferenceTypeImpl("catalog", VCloudMediaType.CATALOG_XML, + URI.create("https://vcenterprise.bluelock.com/api/v1.0/catalog/1")); + + protected static final ReferenceTypeImpl TASKSLIST_REF = new ReferenceTypeImpl("tasksList", + VCloudMediaType.TASKSLIST_XML, URI.create("https://vcenterprise.bluelock.com/api/v1.0/tasksList/1")); + + protected static final ReferenceTypeImpl VDC_REF = new ReferenceTypeImpl("vdc", VCloudMediaType.VDC_XML, + URI.create("https://vcenterprise.bluelock.com/api/v1.0/vdc/1")); + + protected static final ReferenceTypeImpl NETWORK_REF = new ReferenceTypeImpl("network", VCloudMediaType.NETWORK_XML, + URI.create("https://vcloud.safesecureweb.com/network/1990")); + + protected static final Org ORG = new OrgImpl(ORG_REF.getName(), ORG_REF.getType(), ORG_REF.getHref(), "org", null, + ImmutableMap.<String, ReferenceType> of(CATALOG_REF.getName(), CATALOG_REF), + ImmutableMap.<String, ReferenceType> of(VDC_REF.getName(), VDC_REF), ImmutableMap.<String, ReferenceType> of( + NETWORK_REF.getName(), NETWORK_REF), TASKSLIST_REF, ImmutableList.<Task> of()); + + protected static final VDC VDC = new VDCImpl(VDC_REF.getName(), VDC_REF.getType(), VDC_REF.getHref(), + VDCStatus.READY, null, "description", ImmutableSet.<Task> of(), AllocationModel.ALLOCATION_POOL, null, null, + null, ImmutableMap.<String, ReferenceType> of( + "vapp", + new ReferenceTypeImpl("vapp", "application/vnd.vmware.vcloud.vApp+xml", URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/188849-1")), + "network", + new ReferenceTypeImpl("network", "application/vnd.vmware.vcloud.vAppTemplate+xml", URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vdcItem/2"))), + ImmutableMap.<String, ReferenceType> of(NETWORK_REF.getName(), NETWORK_REF), 0, 0, 0, false); + + @ConfiguresHttpApi + public static class VCloudHttpApiModuleExtension extends VCloudHttpApiModule { + + @Override + protected Supplier<URI> provideAuthenticationURI(VCloudVersionsApi versionService, String version) { + return Suppliers.ofInstance(URI.create("https://vcenterprise.bluelock.com/api/v1.0/login")); + } + + @Override + protected Supplier<Org> provideOrg(Supplier<Map<String, Org>> orgSupplier, + @org.jclouds.vcloud.endpoints.Org Supplier<ReferenceType> defaultOrg) { + return Suppliers.ofInstance(ORG); + } + + @Override + protected void installDefaultVCloudEndpointsModule() { + install(new AbstractModule() { + + @Override + protected void configure() { + TypeLiteral<Supplier<ReferenceType>> refTypeSupplier = new TypeLiteral<Supplier<ReferenceType>>() { + }; + bind(refTypeSupplier).annotatedWith(org.jclouds.vcloud.endpoints.Org.class).toInstance( + Suppliers.<ReferenceType> ofInstance(ORG_REF)); + bind(refTypeSupplier).annotatedWith(org.jclouds.vcloud.endpoints.Catalog.class).toInstance( + Suppliers.<ReferenceType> ofInstance(CATALOG_REF)); + bind(refTypeSupplier).annotatedWith(org.jclouds.vcloud.endpoints.TasksList.class).toInstance( + Suppliers.<ReferenceType> ofInstance(TASKSLIST_REF)); + bind(refTypeSupplier).annotatedWith(org.jclouds.vcloud.endpoints.VDC.class).toInstance( + Suppliers.<ReferenceType> ofInstance(VDC_REF)); + bind(refTypeSupplier).annotatedWith(org.jclouds.vcloud.endpoints.Network.class).toInstance( + Suppliers.<ReferenceType> ofInstance(NETWORK_REF)); + } + + }); + } + + @Override + protected Supplier<VCloudSession> provideVCloudTokenCache(@Named(PROPERTY_SESSION_INTERVAL) long seconds, + AtomicReference<AuthorizationException> authException, final VCloudLoginApi login) { + return Suppliers.<VCloudSession> ofInstance(new VCloudSession() { + + @Override + public Map<String, ReferenceType> getOrgs() { + return ImmutableMap.<String, ReferenceType> of(ORG_REF.getName(), ORG_REF); + } + + @Override + public String getVCloudToken() { + return "token"; + } + + }); + + } + + @Override + protected void configure() { + super.configure(); + bind(OrgMapSupplier.class).to(TestOrgMapSupplier.class); + bind(OrgCatalogSupplier.class).to(TestOrgCatalogSupplier.class); + bind(OrgCatalogItemSupplier.class).to(TestOrgCatalogItemSupplier.class); + } + + @SuppressWarnings("unchecked") + @Override + protected void bindCacheLoaders() { + bind(new TypeLiteral<CacheLoader<URI, VAppTemplate>>() { + }).toInstance(CacheLoader.class.cast(CacheLoader.from(Functions.constant(VAppTemplateHandlerTest.parseTemplate())))); + + bind(new TypeLiteral<CacheLoader<URI, Envelope>>() { + }).toInstance(CacheLoader.class.cast(CacheLoader.from(Functions.constant(EnvelopeHandlerTest.parseEnvelope())))); + } + + @Override + protected Supplier<Map<String, Map<String, org.jclouds.vcloud.domain.VDC>>> provideOrgVDCSupplierCache( + @Named(PROPERTY_SESSION_INTERVAL) long seconds, AtomicReference<AuthorizationException> authException, + OrgVDCSupplier supplier) { + return Suppliers.<Map<String, Map<String, org.jclouds.vcloud.domain.VDC>>> ofInstance(ImmutableMap + .<String, Map<String, org.jclouds.vcloud.domain.VDC>> of(ORG_REF.getName(), + ImmutableMap.<String, org.jclouds.vcloud.domain.VDC> of(VDC.getName(), VDC))); + } + + @Singleton + public static class TestOrgMapSupplier extends OrgMapSupplier { + + @Inject + protected TestOrgMapSupplier() { + super(null, null); + } + + @Override + public Map<String, Org> get() { + return ImmutableMap.<String, Org> of(ORG.getName(), ORG); + } + } + + @Singleton + public static class TestOrgCatalogSupplier extends OrgCatalogSupplier { + @Inject + protected TestOrgCatalogSupplier() { + super(null, null); + } + + @Override + public Map<String, Map<String, org.jclouds.vcloud.domain.Catalog>> get() { + return ImmutableMap.<String, Map<String, org.jclouds.vcloud.domain.Catalog>> of( + ORG_REF.getName(), ImmutableMap.<String, org.jclouds.vcloud.domain.Catalog> of( + CATALOG_REF.getName(), + new CatalogImpl(CATALOG_REF.getName(), CATALOG_REF.getType(), CATALOG_REF.getHref(), null, + "description", ImmutableMap.<String, ReferenceType> of( + "item", + new ReferenceTypeImpl("item", "application/vnd.vmware.vcloud.catalogItem+xml", URI + .create("https://vcenterprise.bluelock.com/api/v1.0/catalogItem/1")), + "template", + new ReferenceTypeImpl("template", "application/vnd.vmware.vcloud.vAppTemplate+xml", + URI.create("https://vcenterprise.bluelock.com/api/v1.0/catalogItem/2"))), + ImmutableList.<Task> of(), true, false))); + } + } + + @Singleton + public static class TestOrgCatalogItemSupplier extends OrgCatalogItemSupplier { + protected TestOrgCatalogItemSupplier() { + super(null, null); + } + + @Override + public Map<String, Map<String, Map<String, CatalogItem>>> get() { + return ImmutableMap.<String, Map<String, Map<String, CatalogItem>>> of( + ORG_REF.getName(), ImmutableMap + .<String, Map<String, CatalogItem>> of(CATALOG_REF + .getName(), ImmutableMap.<String, CatalogItem> of( + "template", + new CatalogItemImpl("template", URI + .create("https://vcenterprise.bluelock.com/api/v1.0/catalogItem/2"), "description", + new ReferenceTypeImpl("template", "application/vnd.vmware.vcloud.vAppTemplate+xml", + URI.create("https://vcenterprise.bluelock.com/api/v1.0/vAppTemplate/2")), + ImmutableMap.<String, String> of())))); + + } + } + + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/VCloudLoginApiTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/VCloudLoginApiTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/VCloudLoginApiTest.java new file mode 100644 index 0000000..b97cdf0 --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/internal/VCloudLoginApiTest.java @@ -0,0 +1,95 @@ +/* + * 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.vcloud.internal; + +import static org.jclouds.reflect.Reflection2.method; +import static org.testng.Assert.assertEquals; + +import java.io.IOException; +import java.net.URI; + +import org.jclouds.http.HttpRequest; +import org.jclouds.http.filters.BasicAuthentication; +import org.jclouds.location.Provider; +import org.jclouds.providers.AnonymousProviderMetadata; +import org.jclouds.providers.ProviderMetadata; +import org.jclouds.rest.internal.BaseRestAnnotationProcessingTest; +import org.jclouds.rest.internal.GeneratedHttpRequest; +import org.jclouds.vcloud.endpoints.VCloudLogin; +import org.jclouds.vcloud.functions.ParseLoginResponseFromHeaders; +import org.jclouds.vcloud.http.filters.VCloudBasicAuthentication; +import org.testng.annotations.Test; + +import com.google.common.base.Supplier; +import com.google.common.collect.ImmutableList; +import com.google.common.net.HttpHeaders; +import com.google.common.reflect.Invokable; +import com.google.inject.Binder; +import com.google.inject.Module; +import com.google.inject.Provides; +/** + * Tests behavior of {@code VCloudLoginApi} + */ +// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire +@Test(groups = "unit", testName = "VCloudLoginApiTest") +public class VCloudLoginApiTest extends BaseRestAnnotationProcessingTest<VCloudLoginApi> { + + public void testLogin() throws SecurityException, NoSuchMethodException, IOException { + Invokable<?, ?> method = method(VCloudLoginApi.class, "login"); + GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.of()); + + assertEquals(request.getRequestLine(), "POST http://localhost:8080/login HTTP/1.1"); + assertNonPayloadHeadersEqual(request, HttpHeaders.ACCEPT + ": application/vnd.vmware.vcloud.orgList+xml\n" + HttpHeaders.ACCEPT + ": application/vnd.vmware.vcloud.session+xml\n"); + assertPayloadEquals(request, null, null, false); + + assertResponseParserClassEquals(method, request, ParseLoginResponseFromHeaders.class); + assertSaxResponseParserClassEquals(method, null); + assertFallbackClassEquals(method, null); + + checkFilters(request); + } + + @Override + protected void checkFilters(HttpRequest request) { + assertEquals(request.getFilters().size(), 1); + assertEquals(request.getFilters().get(0).getClass(), VCloudBasicAuthentication.class); + } + + @Override + protected Module createModule() { + return new Module() { + + @Override + public void configure(Binder binder) { + } + + @Provides + @VCloudLogin + Supplier<URI> provideURI(@Provider Supplier<URI> uri) { + return uri; + } + + }; + } + + @Override + protected ProviderMetadata createProviderMetadata() { + return AnonymousProviderMetadata.forApiOnEndpoint(VCloudLoginApi.class, + "http://localhost:8080/login"); + } + +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptionsTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptionsTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptionsTest.java new file mode 100644 index 0000000..8994284 --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/options/InstantiateVAppTemplateOptionsTest.java @@ -0,0 +1,72 @@ +/* + * 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.vcloud.options; + +import static org.jclouds.vcloud.options.InstantiateVAppTemplateOptions.Builder.addNetworkConfig; +import static org.jclouds.vcloud.options.InstantiateVAppTemplateOptions.Builder.description; +import static org.testng.Assert.assertEquals; + +import java.net.URI; + +import org.jclouds.http.functions.config.SaxParserModule; +import org.jclouds.vcloud.domain.network.FenceMode; +import org.jclouds.vcloud.domain.network.NetworkConfig; +import org.testng.annotations.Test; + +import com.google.common.collect.Iterables; +import com.google.inject.Guice; +import com.google.inject.Injector; + +/** + * Tests behavior of {@code InstantiateVAppTemplateOptions} + */ +@Test(groups = "unit") +public class InstantiateVAppTemplateOptionsTest { + + Injector injector = Guice.createInjector(new SaxParserModule()); + + @Test + public void testAddNetworkConfig() { + InstantiateVAppTemplateOptions options = new InstantiateVAppTemplateOptions(); + options.addNetworkConfig(new NetworkConfig("default", URI.create("http://localhost"), FenceMode.BRIDGED)); + assertEquals(Iterables.get(options.getNetworkConfig(), 0).getNetworkName(), "default"); + assertEquals(Iterables.get(options.getNetworkConfig(), 0).getParentNetwork(), URI.create("http://localhost")); + assertEquals(Iterables.get(options.getNetworkConfig(), 0).getFenceMode(), FenceMode.BRIDGED); + } + + @Test + public void testAddNetworkConfigStatic() { + InstantiateVAppTemplateOptions options = addNetworkConfig(new NetworkConfig("default", + URI.create("http://localhost"), FenceMode.BRIDGED)); + assertEquals(Iterables.get(options.getNetworkConfig(), 0).getNetworkName(), "default"); + assertEquals(Iterables.get(options.getNetworkConfig(), 0).getParentNetwork(), URI.create("http://localhost")); + assertEquals(Iterables.get(options.getNetworkConfig(), 0).getFenceMode(), FenceMode.BRIDGED); + } + + @Test + public void testDescription() { + InstantiateVAppTemplateOptions options = new InstantiateVAppTemplateOptions(); + options.description("foo"); + assertEquals(options.getDescription(), "foo"); + } + + @Test + public void testDescriptionStatic() { + InstantiateVAppTemplateOptions options = description("foo"); + assertEquals(options.getDescription(), "foo"); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/suppliers/OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefaultTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/suppliers/OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefaultTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/suppliers/OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefaultTest.java new file mode 100644 index 0000000..4bdb5b8 --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/suppliers/OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefaultTest.java @@ -0,0 +1,113 @@ +/* + * 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.vcloud.suppliers; + +import static org.easymock.EasyMock.createMock; +import static org.testng.Assert.assertEquals; + +import java.util.NoSuchElementException; + +import org.jclouds.config.ValueOfConfigurationKeyOrNull; +import org.jclouds.vcloud.domain.ReferenceType; +import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; +import org.testng.annotations.Test; + +import com.google.common.base.Predicates; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableSet; +import com.google.inject.AbstractModule; +import com.google.inject.Guice; +import com.google.inject.name.Names; + +/** + * Tests behavior of + * {@code OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault} + */ +// NOTE:without testName, this will not call @Before* and fail w/NPE during +// surefire +@Test(groups = "unit", testName = "OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefaultTest") +public class OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefaultTest { + ValueOfConfigurationKeyOrNull valueOfConfigurationKeyOrNull = Guice.createInjector().getInstance( + ValueOfConfigurationKeyOrNull.class); + + @Test(expectedExceptions = IllegalArgumentException.class) + public void testIllegalArgumentWhenResourcesEmpty() { + new OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault(valueOfConfigurationKeyOrNull, "foo", + Predicates.<ReferenceType> alwaysTrue()).apply(ImmutableSet.<ReferenceType> of()); + } + + @Test + public void testReturnsOnlyResource() { + ReferenceType reference = createMock(ReferenceType.class); + + assertEquals(new OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault(valueOfConfigurationKeyOrNull, + "foo", Predicates.<ReferenceType> alwaysTrue()).apply(ImmutableSet.<ReferenceType> of(reference)), + reference); + + } + + @Test + public void testReturnsFirstResourceWhenConfigurationUnspecified() { + ReferenceType reference1 = createMock(ReferenceType.class); + ReferenceType reference2 = createMock(ReferenceType.class); + + assertEquals(new OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault(valueOfConfigurationKeyOrNull, + "foo", Predicates.<ReferenceType> alwaysTrue()).apply(ImmutableList.<ReferenceType> of(reference1, + reference2)), reference1); + + } + + @Test + public void testReturnsResourceMatchingDefaultPredicateWhenConfigurationUnspecified() { + ReferenceType reference1 = createMock(ReferenceType.class); + ReferenceType reference2 = createMock(ReferenceType.class); + + assertEquals(new OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault(valueOfConfigurationKeyOrNull, + "foo", Predicates.equalTo(reference2)).apply(ImmutableList.<ReferenceType> of(reference1, reference2)), + reference2); + + } + + @Test + public void testReturnsResourceWithNameMatchingConfigurationKey() { + ReferenceType reference1 = new ReferenceTypeImpl("travis tritt", null, null); + ReferenceType reference2 = new ReferenceTypeImpl("hail mary", null, null); + + assertEquals( + new OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault(Guice.createInjector( + new AbstractModule() { + protected void configure() { + bindConstant().annotatedWith(Names.named("foo")).to(".*mary.*"); + } + }).getInstance(ValueOfConfigurationKeyOrNull.class), "foo", Predicates.<ReferenceType> alwaysTrue()).apply(ImmutableList + .<ReferenceType> of(reference1, reference2)), reference2); + + } + + @Test(expectedExceptions = NoSuchElementException.class) + public void testThrowsNoSuchElementWhenNoneMatchConfigurationKey() { + ReferenceType reference1 = new ReferenceTypeImpl("travis tritt", null, null); + ReferenceType reference2 = new ReferenceTypeImpl("hail mary", null, null); + + new OnlyReferenceTypeFirstWithNameMatchingConfigurationKeyOrDefault(Guice.createInjector(new AbstractModule() { + protected void configure() { + bindConstant().annotatedWith(Names.named("foo")).to(".*happy.*"); + } + }).getInstance(ValueOfConfigurationKeyOrNull.class), "foo", Predicates.<ReferenceType> alwaysTrue()) + .apply(ImmutableList.<ReferenceType> of(reference1, reference2)); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/utils/TestUtils.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/utils/TestUtils.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/utils/TestUtils.java new file mode 100644 index 0000000..9a844ed --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/utils/TestUtils.java @@ -0,0 +1,30 @@ +/* + * 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.vcloud.utils; + + +/** + * Utility class for test + */ +public class TestUtils { + public static final Object[][] NO_INVOCATIONS = new Object[0][0]; + public static final Object[][] SINGLE_NO_ARG_INVOCATION = { new Object[0] }; + + public static boolean isWindowsOs() { + return System.getProperty("os.name", "").toLowerCase().contains("windows"); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/CatalogHandlerTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/CatalogHandlerTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/CatalogHandlerTest.java new file mode 100644 index 0000000..2a883e6 --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/CatalogHandlerTest.java @@ -0,0 +1,133 @@ +/* + * 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.vcloud.xml; + +import static org.jclouds.vcloud.VCloudMediaType.CATALOGITEM_XML; +import static org.testng.Assert.assertEquals; + +import java.io.InputStream; +import java.net.URI; + +import org.jclouds.http.functions.ParseSax; +import org.jclouds.http.functions.ParseSax.Factory; +import org.jclouds.http.functions.config.SaxParserModule; +import org.jclouds.vcloud.domain.Catalog; +import org.jclouds.vcloud.domain.ReferenceType; +import org.jclouds.vcloud.domain.Task; +import org.jclouds.vcloud.domain.internal.CatalogImpl; +import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.inject.Guice; +import com.google.inject.Injector; + +/** + * Tests behavior of {@code CatalogHandler} + */ +@Test(groups = "unit") +public class CatalogHandlerTest { + + private Injector injector; + + private Factory factory; + + public void testVCloud1_0() { + InputStream is = getClass().getResourceAsStream("/catalog-blank.xml"); + injector = Guice.createInjector(new SaxParserModule()); + factory = injector.getInstance(ParseSax.Factory.class); + Catalog result = factory.create(injector.getInstance(CatalogHandler.class)).parse(is); + assertEquals(result, new CatalogImpl("Jclouds-private", "application/vnd.vmware.vcloud.catalog+xml", URI + .create("https://vcenterprise.bluelock.com/api/v1.0/catalog/921222081"), new ReferenceTypeImpl(null, + "application/vnd.vmware.vcloud.org+xml", URI + .create("https://vcenterprise.bluelock.com/api/v1.0/org/9566014")), null, ImmutableMap + .<String, ReferenceType> of(), ImmutableList.<Task> of(), false, false)); + } + + public void testTerremark() { + InputStream is = getClass().getResourceAsStream("/catalog.xml"); + injector = Guice.createInjector(new SaxParserModule()); + factory = injector.getInstance(ParseSax.Factory.class); + Catalog result = factory.create(injector.getInstance(CatalogHandler.class)).parse(is); + assertEquals(result.getName(), "Miami Environment 1"); + assert result.getDescription() == null; + + assertEquals(result.getHref(), URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/vdc/32/catalog")); + assertEquals(result.get("CentOS 5.3 (32-bit)"), new ReferenceTypeImpl("CentOS 5.3 (32-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/5"))); + assertEquals(result.get("CentOS 5.3 (64-bit)"), new ReferenceTypeImpl("CentOS 5.3 (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/6"))); + assertEquals(result.get("RHEL 5.3 (32-bit)"), new ReferenceTypeImpl("RHEL 5.3 (32-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/7"))); + assertEquals(result.get("RHEL 5.3 (64-bit)"), new ReferenceTypeImpl("RHEL 5.3 (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/8"))); + assertEquals(result.get("Ubuntu JeOS 9.04 (32-bit)"), new ReferenceTypeImpl("Ubuntu JeOS 9.04 (32-bit)", + CATALOGITEM_XML, URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/11"))); + assertEquals(result.get("Ubuntu JeOS 9.04 (64-bit)"), new ReferenceTypeImpl("Ubuntu JeOS 9.04 (64-bit)", + CATALOGITEM_XML, URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/12"))); + assertEquals(result.get("Ubuntu Server 9.04 (32-bit)"), new ReferenceTypeImpl("Ubuntu Server 9.04 (32-bit)", + CATALOGITEM_XML, URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/9"))); + assertEquals(result.get("Ubuntu Server 9.04 (64-bit)"), new ReferenceTypeImpl("Ubuntu Server 9.04 (64-bit)", + CATALOGITEM_XML, URI.create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/10"))); + assertEquals(result.get("Windows 2003 Enterprise R2 (32-bit)"), new ReferenceTypeImpl( + "Windows 2003 Enterprise R2 (32-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/1"))); + assertEquals(result.get("Windows 2003 Enterprise R2 (64-bit)"), new ReferenceTypeImpl( + "Windows 2003 Enterprise R2 (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/2"))); + assertEquals(result.get("Windows 2003 Standard R2 (32-bit)"), new ReferenceTypeImpl( + "Windows 2003 Standard R2 (32-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/3"))); + assertEquals(result.get("Windows 2003 Standard R2 (64-bit)"), new ReferenceTypeImpl( + "Windows 2003 Standard R2 (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/4"))); + assertEquals(result.get("Windows 2003 Standard R2 w.SQL 2008 Web (64-bit)"), new ReferenceTypeImpl( + "Windows 2003 Standard R2 w.SQL 2008 Web (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/23"))); + assertEquals(result.get("Windows Server 2008 Enterprise (32-bit)"), new ReferenceTypeImpl( + "Windows Server 2008 Enterprise (32-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/13"))); + assertEquals(result.get("Windows Server 2008 Enterprise (64-bit)"), new ReferenceTypeImpl( + "Windows Server 2008 Enterprise (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/15"))); + assertEquals(result.get("Windows Server 2008 Enterprise R2 (64-bit)"), new ReferenceTypeImpl( + "Windows Server 2008 Enterprise R2 (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/16"))); + assertEquals(result.get("Windows Server 2008 Standard (32-bit)"), new ReferenceTypeImpl( + "Windows Server 2008 Standard (32-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/17"))); + assertEquals(result.get("Windows Server 2008 Standard (64-bit)"), new ReferenceTypeImpl( + "Windows Server 2008 Standard (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/18"))); + assertEquals(result.get("Windows Server 2008 Standard R2 (64-bit)"), new ReferenceTypeImpl( + "Windows Server 2008 Standard R2 (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/19"))); + assertEquals(result.get("Windows Server 2008 Standard w.SQL 2008 Web (64-bit)"), new ReferenceTypeImpl( + "Windows Server 2008 Standard w.SQL 2008 Web (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/14"))); + assertEquals(result.get("Windows Web Server 2008 (32-bit)"), new ReferenceTypeImpl( + "Windows Web Server 2008 (32-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/20"))); + assertEquals(result.get("Windows Web Server 2008 (64-bit)"), new ReferenceTypeImpl( + "Windows Web Server 2008 (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/21"))); + assertEquals(result.get("Windows Web Server 2008 R2 (64-bit)"), new ReferenceTypeImpl( + "Windows Web Server 2008 R2 (64-bit)", CATALOGITEM_XML, URI + .create("https://services.vcloudexpress.terremark.com/api/v0.8/catalogItem/22"))); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/CatalogItemHandlerTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/CatalogItemHandlerTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/CatalogItemHandlerTest.java new file mode 100644 index 0000000..6f2b100 --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/CatalogItemHandlerTest.java @@ -0,0 +1,84 @@ +/* + * 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.vcloud.xml; + +import static org.testng.Assert.assertEquals; + +import java.io.InputStream; +import java.net.URI; + +import org.jclouds.http.functions.ParseSax; +import org.jclouds.http.functions.ParseSax.Factory; +import org.jclouds.http.functions.config.SaxParserModule; +import org.jclouds.vcloud.domain.CatalogItem; +import org.jclouds.vcloud.domain.internal.CatalogItemImpl; +import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; +import org.testng.annotations.Test; + +import com.google.common.collect.ImmutableSortedMap; +import com.google.inject.Guice; +import com.google.inject.Injector; + +/** + * Tests behavior of {@code CatalogItemHandler} + */ +@Test(groups = "unit") +public class CatalogItemHandlerTest { + + public void testApplyInputStream() { + InputStream is = getClass().getResourceAsStream("/catalogItem-hosting.xml"); + Injector injector = Guice.createInjector(new SaxParserModule()); + Factory factory = injector.getInstance(ParseSax.Factory.class); + CatalogItem result = factory.create(injector.getInstance(CatalogItemHandler.class)).parse(is); + + assertEquals(result, new CatalogItemImpl("Windows 2008 Datacenter 64 Bit", URI + .create("https://vcloud.safesecureweb.com/api/v0.8/catalogItem/2"), "Windows 2008 Datacenter 64 Bit", + new ReferenceTypeImpl("Windows 2008 Datacenter 64 Bit", + "application/vnd.vmware.vcloud.vAppTemplate+xml", URI + .create("https://vcloud.safesecureweb.com/api/v0.8/vAppTemplate/2")), + ImmutableSortedMap.of("Foo", "Bar", "Hello", "World" + + ))); + + } + + public void testApplyInputStreamWithNamespaceUsingVcloud() { + InputStream is = getClass().getResourceAsStream("/catalogItem-carrenza-with-vcloud-namespace.xml"); + Injector injector = Guice.createInjector(new SaxParserModule()); + Factory factory = injector.getInstance(ParseSax.Factory.class); + CatalogItem result = factory.create(injector.getInstance(CatalogItemHandler.class)).parse(is); + + assertEquals(result, new CatalogItemImpl("ubuntu10.10x64", + URI.create("https://myvdc.carrenza.net/api/v1.0/catalogItem/ecd4d3a0-0d12-4195-a6d2-14cdf9f925a3"), + null, new ReferenceTypeImpl("ubuntu10.10x64", "application/vnd.vmware.vcloud.vAppTemplate+xml", + URI.create("https://myvdc.carrenza.net/api/v1.0/vAppTemplate/vappTemplate-123766ea-2b55-482c-8adf-735ab1952834")), + ImmutableSortedMap.<String, String>of())); + } + + public void testApplyInputStreamWithNamespaceUsingDefault() { + InputStream is = getClass().getResourceAsStream("/catalogItem-carrenza-with-default-namespace.xml"); + Injector injector = Guice.createInjector(new SaxParserModule()); + Factory factory = injector.getInstance(ParseSax.Factory.class); + CatalogItem result = factory.create(injector.getInstance(CatalogItemHandler.class)).parse(is); + + assertEquals(result, new CatalogItemImpl("ubuntu10.10x64", + URI.create("https://myvdc.carrenza.net/api/v1.0/catalogItem/ecd4d3a0-0d12-4195-a6d2-14cdf9f925a3"), + null, new ReferenceTypeImpl("ubuntu10.10x64", "application/vnd.vmware.vcloud.vAppTemplate+xml", + URI.create("https://myvdc.carrenza.net/api/v1.0/vAppTemplate/vappTemplate-123766ea-2b55-482c-8adf-735ab1952834")), + ImmutableSortedMap.<String, String>of())); + } +} http://git-wip-us.apache.org/repos/asf/stratos/blob/6573fbed/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/GuestCustomizationSectionHandlerTest.java ---------------------------------------------------------------------- diff --git a/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/GuestCustomizationSectionHandlerTest.java b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/GuestCustomizationSectionHandlerTest.java new file mode 100644 index 0000000..503611e --- /dev/null +++ b/dependencies/jclouds/apis/vcloud/1.8.1-stratos/src/test/java/org/jclouds/vcloud/xml/GuestCustomizationSectionHandlerTest.java @@ -0,0 +1,73 @@ +/* + * 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.vcloud.xml; + +import static org.testng.Assert.assertEquals; + +import java.io.InputStream; +import java.net.URI; +import java.net.UnknownHostException; + +import org.jclouds.http.functions.BaseHandlerTest; +import org.jclouds.vcloud.VCloudMediaType; +import org.jclouds.vcloud.domain.GuestCustomizationSection; +import org.jclouds.vcloud.domain.internal.ReferenceTypeImpl; +import org.testng.annotations.Test; + +/** + * Tests behavior of {@code GuestCustomizationSectionHandler} + */ +// NOTE:without testName, this will not call @Before* and fail w/NPE during surefire +@Test(groups = "unit", testName = "GuestCustomizationSectionHandlerTest") +public class GuestCustomizationSectionHandlerTest extends BaseHandlerTest { + + public void testDefault() throws UnknownHostException { + InputStream is = getClass().getResourceAsStream("/guestCustomization.xml"); + + GuestCustomizationSection result = factory.create(injector.getInstance(GuestCustomizationSectionHandler.class)) + .parse(is); + + checkGuestCustomization(result); + + } + + @Test(enabled = false) + public static void checkGuestCustomization(GuestCustomizationSection result) { + assertEquals(result.getType(), VCloudMediaType.GUESTCUSTOMIZATIONSECTION_XML); + assertEquals(result.getHref(), + URI.create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/guestCustomizationSection/")); + assertEquals(result.getInfo(), "Specifies Guest OS Customization Settings"); + assertEquals(result.isEnabled(), Boolean.TRUE); + assertEquals(result.shouldChangeSid(), Boolean.FALSE); + assertEquals(result.getVirtualMachineId(), "2087535248"); + assertEquals(result.isJoinDomainEnabled(), Boolean.FALSE); + assertEquals(result.useOrgSettings(), Boolean.FALSE); + assertEquals(result.getDomainName(), null); + assertEquals(result.getDomainUserName(), null); + assertEquals(result.getDomainUserPassword(), null); + assertEquals(result.isAdminPasswordEnabled(), Boolean.TRUE); + assertEquals(result.isAdminPasswordAuto(), Boolean.TRUE); + assertEquals(result.getAdminPassword(), null); + assertEquals(result.isResetPasswordRequired(), Boolean.FALSE); + assertEquals(result.getCustomizationScript(), "cat > /root/foo.txt<<EOF\nI '\"love\"' {asc|!}*&\nEOF\n"); + assertEquals(result.getComputerName(), "RHEL5"); + assertEquals( + result.getEdit(), + new ReferenceTypeImpl(null, VCloudMediaType.GUESTCUSTOMIZATIONSECTION_XML, URI + .create("https://vcenterprise.bluelock.com/api/v1.0/vApp/vm-2087535248/guestCustomizationSection/"))); + } +}
