Package org.jclouds.abiquo.features

Source Code of org.jclouds.abiquo.features.InfrastructureApiTest

/*
* 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.abiquo.features;

import static org.jclouds.abiquo.domain.DomainUtils.withHeader;
import static org.jclouds.reflect.Reflection2.method;

import java.io.IOException;

import javax.ws.rs.core.MediaType;

import org.jclouds.Fallbacks.NullOnNotFoundOr404;
import org.jclouds.abiquo.AbiquoFallbacks.FalseIfNotAvailable;
import org.jclouds.abiquo.AbiquoFallbacks.PropagateAbiquoExceptionOnNotFoundOr4xx;
import org.jclouds.abiquo.domain.EnterpriseResources;
import org.jclouds.abiquo.domain.InfrastructureResources;
import org.jclouds.abiquo.domain.NetworkResources;
import org.jclouds.abiquo.domain.infrastructure.options.DatacenterOptions;
import org.jclouds.abiquo.domain.infrastructure.options.IpmiOptions;
import org.jclouds.abiquo.domain.infrastructure.options.MachineOptions;
import org.jclouds.abiquo.domain.infrastructure.options.StoragePoolOptions;
import org.jclouds.abiquo.domain.network.options.IpOptions;
import org.jclouds.abiquo.domain.network.options.NetworkOptions;
import org.jclouds.abiquo.domain.options.search.FilterOptions;
import org.jclouds.fallbacks.MapHttp4xxCodesToExceptions;
import org.jclouds.http.functions.ParseXMLWithJAXB;
import org.jclouds.http.functions.ReleasePayloadAndReturn;
import org.jclouds.http.functions.ReturnStringIf2xx;
import org.jclouds.http.functions.ReturnTrueIf2xx;
import org.jclouds.reflect.Invocation;
import org.jclouds.rest.internal.GeneratedHttpRequest;
import org.testng.annotations.Test;

import com.abiquo.model.enumerator.HypervisorType;
import com.abiquo.model.enumerator.NetworkType;
import com.abiquo.model.enumerator.RemoteServiceType;
import com.abiquo.server.core.cloud.HypervisorTypesDto;
import com.abiquo.server.core.cloud.VirtualMachineWithNodeExtendedDto;
import com.abiquo.server.core.cloud.VirtualMachinesWithNodeExtendedDto;
import com.abiquo.server.core.enterprise.DatacentersLimitsDto;
import com.abiquo.server.core.enterprise.EnterpriseDto;
import com.abiquo.server.core.infrastructure.BladeLocatorLedDto;
import com.abiquo.server.core.infrastructure.DatacenterDto;
import com.abiquo.server.core.infrastructure.DatacentersDto;
import com.abiquo.server.core.infrastructure.FsmsDto;
import com.abiquo.server.core.infrastructure.LogicServerDto;
import com.abiquo.server.core.infrastructure.LogicServersDto;
import com.abiquo.server.core.infrastructure.MachineDto;
import com.abiquo.server.core.infrastructure.MachineIpmiStateDto;
import com.abiquo.server.core.infrastructure.MachineStateDto;
import com.abiquo.server.core.infrastructure.MachinesDto;
import com.abiquo.server.core.infrastructure.OrganizationDto;
import com.abiquo.server.core.infrastructure.OrganizationsDto;
import com.abiquo.server.core.infrastructure.RackDto;
import com.abiquo.server.core.infrastructure.RacksDto;
import com.abiquo.server.core.infrastructure.RemoteServiceDto;
import com.abiquo.server.core.infrastructure.RemoteServicesDto;
import com.abiquo.server.core.infrastructure.UcsRackDto;
import com.abiquo.server.core.infrastructure.UcsRacksDto;
import com.abiquo.server.core.infrastructure.network.ExternalIpDto;
import com.abiquo.server.core.infrastructure.network.ExternalIpsDto;
import com.abiquo.server.core.infrastructure.network.PublicIpDto;
import com.abiquo.server.core.infrastructure.network.PublicIpsDto;
import com.abiquo.server.core.infrastructure.network.UnmanagedIpDto;
import com.abiquo.server.core.infrastructure.network.UnmanagedIpsDto;
import com.abiquo.server.core.infrastructure.network.VLANNetworkDto;
import com.abiquo.server.core.infrastructure.network.VLANNetworksDto;
import com.abiquo.server.core.infrastructure.network.VlanTagAvailabilityDto;
import com.abiquo.server.core.infrastructure.storage.StorageDeviceDto;
import com.abiquo.server.core.infrastructure.storage.StorageDevicesDto;
import com.abiquo.server.core.infrastructure.storage.StorageDevicesMetadataDto;
import com.abiquo.server.core.infrastructure.storage.StoragePoolDto;
import com.abiquo.server.core.infrastructure.storage.StoragePoolsDto;
import com.abiquo.server.core.infrastructure.storage.TierDto;
import com.abiquo.server.core.infrastructure.storage.TiersDto;
import com.google.common.collect.ImmutableList;
import com.google.common.reflect.Invokable;

/**
* Tests annotation parsing of {@code InfrastructureApi}
*
* @author Ignasi Barrera
*/
@Test(groups = "unit", testName = "InfrastructureApiTest")
public class InfrastructureApiTest extends BaseAbiquoApiTest<InfrastructureApi> {
   /*********************** Datacenter ***********************/

   public void testListDatacenters() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listDatacenters");
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.of()));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + DatacentersDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testCreateDatacenter() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "createDatacenter", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPost())));

      assertRequestLineEquals(request, "POST http://localhost/api/admin/datacenters HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + DatacenterDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.datacenterPostPayload()), DatacenterDto.class,
            DatacenterDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetDatacenter() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getDatacenter", Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(1)));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + DatacenterDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, NullOnNotFoundOr404.class);

      checkFilters(request);
   }

   public void testUpdateDatacenter() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "updateDatacenter", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut())));

      assertRequestLineEquals(request, "PUT http://localhost/api/admin/datacenters/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + DatacenterDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.datacenterPutPayload()), DatacenterDto.class,
            DatacenterDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testDeleteDatacenter() throws SecurityException, NoSuchMethodException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "deleteDatacenter", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut())));

      assertRequestLineEquals(request, "DELETE http://localhost/api/admin/datacenters/1 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 testListLimitsDatacenter() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listLimits", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/action/getLimits HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + DatacentersLimitsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   /*********************** Hypervisor ***********************/

   public void testGetHypervisorTypeFromMachine() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getHypervisorTypeFromMachine", DatacenterDto.class,
            DatacenterOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(),
                  DatacenterOptions.builder().ip("10.60.1.120").build())));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/action/hypervisor?ip=10.60.1.120 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + MediaType.TEXT_PLAIN + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ReturnStringIf2xx.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetHypervisorTypesFromDatacenter() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getHypervisorTypes", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/hypervisors HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + HypervisorTypesDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   /*********************** Managed Rack ***********************/

   public void testListRacks() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listRacks", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/racks HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + RacksDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testCreateRack() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "createRack", DatacenterDto.class, RackDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(), InfrastructureResources.rackPost())));

      assertRequestLineEquals(request, "POST http://localhost/api/admin/datacenters/1/racks HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + RackDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.rackPostPayload()), RackDto.class,
            RackDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetRack() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getRack", DatacenterDto.class, Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(), 1)));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/racks/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + RackDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, NullOnNotFoundOr404.class);

      checkFilters(request);
   }

   public void testUpdateRack() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "updateRack", RackDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.rackPut())));

      assertRequestLineEquals(request, "PUT http://localhost/api/admin/datacenters/1/racks/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + RackDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.rackPutPayload()), RackDto.class,
            RackDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testDeleteRack() throws SecurityException, NoSuchMethodException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "deleteRack", RackDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.rackPut())));

      assertRequestLineEquals(request, "DELETE http://localhost/api/admin/datacenters/1/racks/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   /*********************** Managed Rack ***********************/

   public void testListManagedRacks() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listManagedRacks", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/racks HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + UcsRacksDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testCreateManagedRack() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "createManagedRack", DatacenterDto.class,
            UcsRackDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(),
                  InfrastructureResources.managedRackPost())));

      assertRequestLineEquals(request, "POST http://localhost/api/admin/datacenters/1/racks HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + UcsRackDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.managedRackPostPayload()), UcsRackDto.class,
            UcsRackDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetManagedRack() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getManagedRack", DatacenterDto.class, Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(), 1)));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/racks/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + UcsRackDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, NullOnNotFoundOr404.class);

      checkFilters(request);
   }

   public void testUpdateManagedRack() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "updateManagedRack", UcsRackDto.class);

      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut())));

      assertRequestLineEquals(request, "PUT http://localhost/api/admin/datacenters/1/racks/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + UcsRackDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.managedRackPutPayload()), UcsRackDto.class,
            UcsRackDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListServiceProfiles() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listServiceProfiles", UcsRackDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/racks/1/logicservers HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + LogicServersDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListServiceProfilesWithOptions() throws SecurityException, NoSuchMethodException, IOException {
      FilterOptions options = FilterOptions.builder().startWith(1).limit(2).build();

      Invokable<?, ?> method = method(InfrastructureApi.class, "listServiceProfiles", UcsRackDto.class,
            FilterOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut(), options)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/racks/1/logicservers?startwith=1&limit=2 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + LogicServersDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListOrganizations() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listOrganizations", UcsRackDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/racks/1/organizations HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + OrganizationsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListOrganizationsWithOptions() throws SecurityException, NoSuchMethodException, IOException {
      FilterOptions options = FilterOptions.builder().has("org").build();

      Invokable<?, ?> method = method(InfrastructureApi.class, "listOrganizations", UcsRackDto.class,
            FilterOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut(), options)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/racks/1/organizations?has=org HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + OrganizationsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListServiceProfileTemplates() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listServiceProfileTemplates", UcsRackDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/racks/1/lstemplates HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + LogicServersDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListServiceProfileTemplatesWithOptions() throws SecurityException, NoSuchMethodException,
         IOException {
      FilterOptions options = FilterOptions.builder().ascendant(true).build();

      Invokable<?, ?> method = method(InfrastructureApi.class, "listServiceProfileTemplates", UcsRackDto.class,
            FilterOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut(), options)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/racks/1/lstemplates?asc=true HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + LogicServersDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testAssociateLogicServer() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "associateLogicServer", UcsRackDto.class,
            LogicServerDto.class, OrganizationDto.class, String.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut(),
                  InfrastructureResources.logicServerPut(), InfrastructureResources.organizationPut(), "blade")));

      assertRequestLineEquals(
            request,
            "POST http://localhost/api/admin/datacenters/1/racks/1/logicservers/associate?bladeDn=blade&lsName=server&org=org-root/org-Finance 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 testAssociateTemplate() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "associateTemplate", UcsRackDto.class,
            LogicServerDto.class, OrganizationDto.class, String.class, String.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.managedRackPut(), InfrastructureResources.logicServerPut(),
            InfrastructureResources.organizationPut(), "newname", "blade")));

      assertRequestLineEquals(
            request,
            "POST http://localhost/api/admin/datacenters/1/racks/1/logicservers/associatetemplate?newName=newname&bladeDn=blade&lsName=server&org=org-root/org-Finance 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 testCloneAndAssociateLogicServer() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "cloneAndAssociateLogicServer", UcsRackDto.class,
            LogicServerDto.class, OrganizationDto.class, String.class, String.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.managedRackPut(), InfrastructureResources.logicServerPut(),
            InfrastructureResources.organizationPut(), "newname", "blade")));

      assertRequestLineEquals(
            request,
            "POST http://localhost/api/admin/datacenters/1/racks/1/logicservers/assocclone?newName=newname&bladeDn=blade&lsName=server&org=org-root/org-Finance 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 testDissociateLogicServer() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "dissociateLogicServer", UcsRackDto.class,
            LogicServerDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut(),
                  InfrastructureResources.logicServerPut(), InfrastructureResources.organizationPut())));

      assertRequestLineEquals(request,
            "POST http://localhost/api/admin/datacenters/1/racks/1/logicservers/dissociate?lsName=server 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 testCloneLogicServer() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "cloneLogicServer", UcsRackDto.class,
            LogicServerDto.class, OrganizationDto.class, String.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut(),
                  InfrastructureResources.logicServerPut(), InfrastructureResources.organizationPut(), "name")));

      assertRequestLineEquals(
            request,
            "POST http://localhost/api/admin/datacenters/1/racks/1/logicservers/clone?newName=name&lsName=server&org=org-root/org-Finance 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 testDeleteLogicServer() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "deleteLogicServer", UcsRackDto.class,
            LogicServerDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut(),
                  InfrastructureResources.logicServerPut())));

      assertRequestLineEquals(request,
            "POST http://localhost/api/admin/datacenters/1/racks/1/logicservers/delete?lsName=server 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 testListFsms() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listFsms", UcsRackDto.class, String.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.managedRackPut(), "dn")));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/racks/1/fsm?dn=dn HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + FsmsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   /*********************** Remote Service **********************/

   public void testListRemoteServices() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listRemoteServices", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/remoteservices HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + RemoteServicesDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testCreateRemoteService() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "createRemoteService", DatacenterDto.class,
            RemoteServiceDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(),
                  InfrastructureResources.remoteServicePost())));

      assertRequestLineEquals(request, "POST http://localhost/api/admin/datacenters/1/remoteservices HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + RemoteServiceDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.remoteServicePostPayload()),
            RemoteServiceDto.class, RemoteServiceDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetRemoteService() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getRemoteService", DatacenterDto.class,
            RemoteServiceType.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.datacenterPut(), RemoteServiceType.STORAGE_SYSTEM_MONITOR)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/remoteservices/storagesystemmonitor HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + RemoteServiceDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, NullOnNotFoundOr404.class);

      checkFilters(request);
   }

   public void testUpdateRemoteService() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "updateRemoteService", RemoteServiceDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.remoteServicePut())));

      assertRequestLineEquals(request,
            "PUT http://localhost/api/admin/datacenters/1/remoteservices/nodecollector HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + RemoteServiceDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.remoteServicePutPayload()),
            RemoteServiceDto.class, RemoteServiceDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testDeleteRemoteService() throws SecurityException, NoSuchMethodException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "deleteRemoteService", RemoteServiceDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.remoteServicePut())));

      assertRequestLineEquals(request,
            "DELETE http://localhost/api/admin/datacenters/1/remoteservices/nodecollector 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 testIsAvailableRemoteService() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "isAvailable", RemoteServiceDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.remoteServicePut())));

      String checkUri = InfrastructureResources.remoteServicePut().searchLink("check").getHref();
      assertRequestLineEquals(request, String.format("GET %s HTTP/1.1", checkUri));
      assertNonPayloadHeadersEqual(request, "");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, FalseIfNotAvailable.class);

      checkFilters(request);
   }

   /*********************** Machine ***********************/

   public void testDiscoverSingleMachineWithoutOptions() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "discoverSingleMachine", DatacenterDto.class,
            String.class, HypervisorType.class, String.class, String.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.datacenterPut(), "10.60.1.222", HypervisorType.XENSERVER, "user", "pass")));

      String baseUrl = "http://localhost/api/admin/datacenters/1/action/discoversingle";
      String query = "ip=10.60.1.222&hypervisor=XENSERVER&user=user&password=pass";
      String expectedRequest = String.format("GET %s?%s HTTP/1.1", baseUrl, query);

      assertRequestLineEquals(request, expectedRequest);
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, PropagateAbiquoExceptionOnNotFoundOr4xx.class);

      checkFilters(request);
   }

   public void testDiscoverSingleMachineAllParams() throws SecurityException, NoSuchMethodException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "discoverSingleMachine", DatacenterDto.class,
            String.class, HypervisorType.class, String.class, String.class, MachineOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.datacenterPut(), "80.80.80.80", HypervisorType.KVM, "user", "pass", MachineOptions
                  .builder().port(8889).build())));

      String baseUrl = "http://localhost/api/admin/datacenters/1/action/discoversingle";
      String query = "ip=80.80.80.80&hypervisor=KVM&user=user&password=pass&port=8889";
      String expectedRequest = String.format("GET %s?%s HTTP/1.1", baseUrl, query);

      assertRequestLineEquals(request, expectedRequest);
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, PropagateAbiquoExceptionOnNotFoundOr4xx.class);

      checkFilters(request);
   }

   public void testDiscoverSingleMachineDefaultValues() throws SecurityException, NoSuchMethodException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "discoverSingleMachine", DatacenterDto.class,
            String.class, HypervisorType.class, String.class, String.class, MachineOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.datacenterPut(), "80.80.80.80", HypervisorType.KVM, "user", "pass", MachineOptions
                  .builder().build())));

      String baseUrl = "http://localhost/api/admin/datacenters/1/action/discoversingle";
      String query = "ip=80.80.80.80&hypervisor=KVM&user=user&password=pass";
      String expectedRequest = String.format("GET %s?%s HTTP/1.1", baseUrl, query);

      assertRequestLineEquals(request, expectedRequest);
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, PropagateAbiquoExceptionOnNotFoundOr4xx.class);

      checkFilters(request);
   }

   public void testDiscoverMultipleMachinesWithoutOptions() throws SecurityException, NoSuchMethodException,
         IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "discoverMultipleMachines", DatacenterDto.class,
            String.class, String.class, HypervisorType.class, String.class, String.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.datacenterPut(), "10.60.1.222", "10.60.1.250", HypervisorType.XENSERVER, "user",
            "pass")));

      String baseUrl = "http://localhost/api/admin/datacenters/1/action/discovermultiple";
      String query = "ipFrom=10.60.1.222&ipTo=10.60.1.250&hypervisor=XENSERVER&user=user&password=pass";
      String expectedRequest = String.format("GET %s?%s HTTP/1.1", baseUrl, query);

      assertRequestLineEquals(request, expectedRequest);
      assertNonPayloadHeadersEqual(request, "Accept: " + MachinesDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, PropagateAbiquoExceptionOnNotFoundOr4xx.class);

      checkFilters(request);
   }

   public void testDiscoverMultipleMachinesAllParams() throws SecurityException, NoSuchMethodException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "discoverMultipleMachines", DatacenterDto.class,
            String.class, String.class, HypervisorType.class, String.class, String.class, MachineOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.datacenterPut(), "80.80.80.80", "80.80.80.86", HypervisorType.KVM, "user", "pass",
            MachineOptions.builder().port(8889).build())));

      String baseUrl = "http://localhost/api/admin/datacenters/1/action/discovermultiple";
      String query = "ipFrom=80.80.80.80&ipTo=80.80.80.86&hypervisor=KVM&user=user&password=pass&port=8889";
      String expectedRequest = String.format("GET %s?%s HTTP/1.1", baseUrl, query);

      assertRequestLineEquals(request, expectedRequest);
      assertNonPayloadHeadersEqual(request, "Accept: " + MachinesDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, PropagateAbiquoExceptionOnNotFoundOr4xx.class);

      checkFilters(request);
   }

   public void testCheckMachineStateWithoutOptions() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "checkMachineState", DatacenterDto.class, String.class,
            HypervisorType.class, String.class, String.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.datacenterPut(), "10.60.1.222", HypervisorType.XENSERVER, "user", "pass")));

      String baseUrl = "http://localhost/api/admin/datacenters/1/action/checkmachinestate";
      String query = "ip=10.60.1.222&hypervisor=XENSERVER&user=user&password=pass";
      String expectedRequest = String.format("GET %s?%s HTTP/1.1", baseUrl, query);

      assertRequestLineEquals(request, expectedRequest);
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineStateDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, PropagateAbiquoExceptionOnNotFoundOr4xx.class);

      checkFilters(request);
   }

   public void testCheckMachineStateAllParams() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "checkMachineState", DatacenterDto.class, String.class,
            HypervisorType.class, String.class, String.class, MachineOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.datacenterPut(), "10.60.1.222", HypervisorType.XENSERVER, "user", "pass",
            MachineOptions.builder().port(8889).build())));

      String baseUrl = "http://localhost/api/admin/datacenters/1/action/checkmachinestate";
      String query = "ip=10.60.1.222&hypervisor=XENSERVER&user=user&password=pass&port=8889";
      String expectedRequest = String.format("GET %s?%s HTTP/1.1", baseUrl, query);

      assertRequestLineEquals(request, expectedRequest);
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineStateDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, PropagateAbiquoExceptionOnNotFoundOr4xx.class);

      checkFilters(request);
   }

   public void testCheckMachineIpmiStateWithoutOptions() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "checkMachineIpmiState", DatacenterDto.class,
            String.class, String.class, String.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(), "10.60.1.222", "user", "pass")));

      String baseUrl = "http://localhost/api/admin/datacenters/1/action/checkmachineipmistate";
      String query = "ip=10.60.1.222&user=user&password=pass";
      String expectedRequest = String.format("GET %s?%s HTTP/1.1", baseUrl, query);

      assertRequestLineEquals(request, expectedRequest);
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineIpmiStateDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, PropagateAbiquoExceptionOnNotFoundOr4xx.class);

      checkFilters(request);
   }

   public void testCheckMachineIpmiStateWithALLOptions() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "checkMachineIpmiState", DatacenterDto.class,
            String.class, String.class, String.class, IpmiOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.datacenterPut(), "10.60.1.222", "user", "pass", IpmiOptions.builder().port(8889)
                  .build())));

      String baseUrl = "http://localhost/api/admin/datacenters/1/action/checkmachineipmistate";
      String query = "ip=10.60.1.222&user=user&password=pass&port=8889";
      String expectedRequest = String.format("GET %s?%s HTTP/1.1", baseUrl, query);

      assertRequestLineEquals(request, expectedRequest);
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineIpmiStateDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, PropagateAbiquoExceptionOnNotFoundOr4xx.class);

      checkFilters(request);
   }

   public void testListMachines() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listMachines", RackDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.rackPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/racks/1/machines HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + MachinesDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetMachine() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getMachine", RackDto.class, Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.rackPut(), 1)));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/racks/1/machines/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, NullOnNotFoundOr404.class);

      checkFilters(request);
   }

   public void testCheckMachineState() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "checkMachineState", MachineDto.class, boolean.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut(), true)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/racks/1/machines/1/action/checkstate?sync=true HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineStateDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testCheckMachineIpmiState() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "checkMachineIpmiState", MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut())));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/racks/1/machines/1/action/checkipmistate HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineIpmiStateDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testCreateMachine() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "createMachine", RackDto.class, MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.rackPut(), InfrastructureResources.machinePost())));

      assertRequestLineEquals(request, "POST http://localhost/api/admin/datacenters/1/racks/1/machines HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.machinePostPayload()), MachineDto.class,
            MachineDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testUpdateMachine() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "updateMachine", MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut())));

      assertRequestLineEquals(request, "PUT http://localhost/api/admin/datacenters/1/racks/1/machines/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.machinePutPayload()), MachineDto.class,
            MachineDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testDeleteMachine() throws SecurityException, NoSuchMethodException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "deleteMachine", MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut())));

      assertRequestLineEquals(request, "DELETE http://localhost/api/admin/datacenters/1/racks/1/machines/1 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 testReserveMachine() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "reserveMachine", EnterpriseDto.class, MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(EnterpriseResources.enterprisePut(), InfrastructureResources.machinePut())));

      assertRequestLineEquals(request, "POST http://localhost/api/admin/enterprises/1/reservedmachines HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + MachineDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.machinePutPayload()), MachineDto.class,
            MachineDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testCancelReservation() throws SecurityException, NoSuchMethodException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "cancelReservation", EnterpriseDto.class,
            MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(EnterpriseResources.enterprisePut(), InfrastructureResources.machinePut())));

      assertRequestLineEquals(request, "DELETE http://localhost/api/admin/enterprises/1/reservedmachines/1 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 testListVirtualMachinesByMachine() throws SecurityException, NoSuchMethodException, IOException {
      MachineOptions options = MachineOptions.builder().sync(true).build();

      Invokable<?, ?> method = method(InfrastructureApi.class, "listVirtualMachinesByMachine", MachineDto.class,
            MachineOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut(), options)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/racks/1/machines/1/virtualmachines?sync=true HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + VirtualMachinesWithNodeExtendedDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetVirtualMachineByMachine() throws SecurityException, NoSuchMethodException, IOException {

      Invokable<?, ?> method = method(InfrastructureApi.class, "getVirtualMachine", MachineDto.class, Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut(), 1)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/racks/1/machines/1/virtualmachines/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + VirtualMachineWithNodeExtendedDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, NullOnNotFoundOr404.class);

      checkFilters(request);
   }

   /*********************** Blade ***********************/

   public void testPowerOff() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "powerOff", MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut())));

      assertRequestLineEquals(request,
            "PUT http://localhost/api/admin/datacenters/1/racks/1/machines/1/action/poweroff 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 testPowerOn() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "powerOn", MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut())));

      assertRequestLineEquals(request,
            "PUT http://localhost/api/admin/datacenters/1/racks/1/machines/1/action/poweron 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 testGetLogicServer() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getLogicServer", MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut())));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/racks/1/machines/1/logicserver HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + LogicServerDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testLedOn() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "ledOn", MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut())));

      assertRequestLineEquals(request,
            "POST http://localhost/api/admin/datacenters/1/racks/1/machines/1/action/ledon 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 testLedOff() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "ledOff", MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut())));

      assertRequestLineEquals(request,
            "POST http://localhost/api/admin/datacenters/1/racks/1/machines/1/action/ledoff 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 testGetLocatorLed() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getLocatorLed", MachineDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.machinePut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/racks/1/machines/1/led HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + BladeLocatorLedDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   /*********************** Storage Device ***********************/

   public void testListStorageDevices() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listStorageDevices", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/storage/devices HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StorageDevicesDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListSupportedStorageDevices() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listSupportedStorageDevices", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut())));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/storage/devices/action/supported HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StorageDevicesMetadataDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testCreateStorageDevice() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "createStorageDevice", DatacenterDto.class,
            StorageDeviceDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(),
                  InfrastructureResources.storageDevicePost())));

      assertRequestLineEquals(request, "POST http://localhost/api/admin/datacenters/1/storage/devices HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StorageDeviceDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.storageDevicePostPayload()),
            StorageDeviceDto.class, StorageDeviceDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testDeleteStorageDevice() throws SecurityException, NoSuchMethodException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "deleteStorageDevice", StorageDeviceDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.storageDevicePut())));

      assertRequestLineEquals(request, "DELETE http://localhost/api/admin/datacenters/1/storage/devices/1 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 testUpdateStorageDevice() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "updateStorageDevice", StorageDeviceDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.storageDevicePut())));

      assertRequestLineEquals(request, "PUT http://localhost/api/admin/datacenters/1/storage/devices/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StorageDeviceDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.storageDevicePutPayload()),
            StorageDeviceDto.class, StorageDeviceDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetStorageDevice() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getStorageDevice", DatacenterDto.class, Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(), 1)));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/storage/devices/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StorageDeviceDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, NullOnNotFoundOr404.class);

      checkFilters(request);
   }

   /*********************** Tier ***********************/

   public void testListTiers() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listTiers", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/storage/tiers HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + TiersDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testUpdateTier() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "updateTier", TierDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.tierPut())));

      assertRequestLineEquals(request, "PUT http://localhost/api/admin/datacenters/1/storage/tiers/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + TierDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.tierPutPayload()), TierDto.class,
            TierDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetTier() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getTier", DatacenterDto.class, Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(), 1)));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/storage/tiers/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + TierDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, NullOnNotFoundOr404.class);

      checkFilters(request);
   }

   /*********************** StoragePool ***********************/

   public void testListSyncStoragePools() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listStoragePools", StorageDeviceDto.class,
            StoragePoolOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.storageDevicePut(),
                  StoragePoolOptions.builder().sync(true).build())));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/storage/devices/1/pools?sync=true HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StoragePoolsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListStoragePoolsFromTier() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listStoragePools", TierDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.tierPut(), StoragePoolOptions.builder().sync(true)
                  .build())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/storage/tiers/1/pools HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StoragePoolsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListStoragePoolsNoParams() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listStoragePools", StorageDeviceDto.class,
            StoragePoolOptions.class);
      GeneratedHttpRequest request = processor
            .apply(Invocation.create(method, ImmutableList.<Object> of(InfrastructureResources.storageDevicePut(),
                  StoragePoolOptions.builder().build())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/storage/devices/1/pools HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StoragePoolsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testCreateStoragePool() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "createStoragePool", StorageDeviceDto.class,
            StoragePoolDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.storageDevicePut(),
                  InfrastructureResources.storagePoolPost())));

      assertRequestLineEquals(request, "POST http://localhost/api/admin/datacenters/1/storage/devices/1/pools HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StoragePoolDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.storagePoolPostPayload()), StoragePoolDto.class,
            StoragePoolDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testUpdateStoragePool() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "updateStoragePool", StoragePoolDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.storagePoolPut())));

      assertRequestLineEquals(request,
            "PUT http://localhost/api/admin/datacenters/1/storage/devices/1/pools/tururututu HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StoragePoolDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(InfrastructureResources.storagePoolPutPayload()), StoragePoolDto.class,
            StoragePoolDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testDeleteStoragePool() throws SecurityException, NoSuchMethodException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "deleteStoragePool", StoragePoolDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.storagePoolPut())));

      assertRequestLineEquals(request,
            "DELETE http://localhost/api/admin/datacenters/1/storage/devices/1/pools/tururututu 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 testGetStoragePool() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getStoragePool", StorageDeviceDto.class, String.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method, ImmutableList.<Object> of(
            InfrastructureResources.storageDevicePut(), InfrastructureResources.storagePoolPut().getIdStorage())));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/storage/devices/1/pools/tururututu HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StoragePoolDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, NullOnNotFoundOr404.class);

      checkFilters(request);
   }

   public void testRefreshStoragePool() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "refreshStoragePool", StoragePoolDto.class,
            StoragePoolOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(
            method,
            ImmutableList.<Object> of(InfrastructureResources.storagePoolPut(), StoragePoolOptions.builder().sync(true)
                  .build())));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/storage/devices/1/pools/tururututu?sync=true HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + StoragePoolDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);

      checkFilters(request);
   }

   /*********************** Network ***********************/

   public void testListNetworks() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listNetworks", DatacenterDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/network HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + VLANNetworksDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListNetworksWithOptions() throws SecurityException, NoSuchMethodException, IOException {
      NetworkOptions options = NetworkOptions.builder().type(NetworkType.PUBLIC).build();

      Invokable<?, ?> method = method(InfrastructureApi.class, "listNetworks", DatacenterDto.class,
            NetworkOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(), options)));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/network?type=PUBLIC HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + VLANNetworksDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetNetworks() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getNetwork", DatacenterDto.class, Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(), 1)));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/network/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + VLANNetworkDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, NullOnNotFoundOr404.class);

      checkFilters(request);
   }

   public void testCreateNetwork() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "createNetwork", DatacenterDto.class,
            VLANNetworkDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(), NetworkResources.vlanPost())));

      assertRequestLineEquals(request, "POST http://localhost/api/admin/datacenters/1/network HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + VLANNetworkDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(NetworkResources.vlanNetworkPostPayload()), VLANNetworkDto.class,
            VLANNetworkDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testUpdateNetwork() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "updateNetwork", VLANNetworkDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(NetworkResources.publicNetworkPut())));

      assertRequestLineEquals(request, "PUT http://localhost/api/admin/datacenters/1/network/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + VLANNetworkDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, withHeader(NetworkResources.publicNetworkPutPayload()), VLANNetworkDto.class,
            VLANNetworkDto.BASE_MEDIA_TYPE, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testDeleteNetwork() throws SecurityException, NoSuchMethodException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "deleteNetwork", VLANNetworkDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(NetworkResources.publicNetworkPut())));

      assertRequestLineEquals(request, "DELETE http://localhost/api/admin/datacenters/1/network/1 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 testCheckTagAvailability() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "checkTagAvailability", DatacenterDto.class,
            Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(InfrastructureResources.datacenterPut(), 2)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/network/action/checkavailability?tag=2 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + VlanTagAvailabilityDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, MapHttp4xxCodesToExceptions.class);

      checkFilters(request);
   }

   /*********************** Network IPs ***********************/

   public void testListPublicIps() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listPublicIps", VLANNetworkDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(NetworkResources.publicNetworkPut())));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/network/1/ips HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + PublicIpsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListPublicIpsWithOptions() throws SecurityException, NoSuchMethodException, IOException {
      IpOptions options = IpOptions.builder().startWith(10).build();
      Invokable<?, ?> method = method(InfrastructureApi.class, "listPublicIps", VLANNetworkDto.class, IpOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(NetworkResources.publicNetworkPut(), options)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/datacenters/1/network/1/ips?startwith=10 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + PublicIpsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetPublicIp() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getPublicIp", VLANNetworkDto.class, Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(NetworkResources.publicNetworkPut(), 1)));

      assertRequestLineEquals(request, "GET http://localhost/api/admin/datacenters/1/network/1/ips/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + PublicIpDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListExternalIps() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listExternalIps", VLANNetworkDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(NetworkResources.externalNetworkPut())));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/enterprises/1/limits/1/externalnetworks/1/ips HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + ExternalIpsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListExternalIpsWithOptions() throws SecurityException, NoSuchMethodException, IOException {
      IpOptions options = IpOptions.builder().startWith(10).build();
      Invokable<?, ?> method = method(InfrastructureApi.class, "listExternalIps", VLANNetworkDto.class, IpOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(NetworkResources.externalNetworkPut(), options)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/enterprises/1/limits/1/externalnetworks/1/ips?startwith=10 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + ExternalIpsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetExternalIp() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getExternalIp", VLANNetworkDto.class, Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(NetworkResources.externalNetworkPut(), 1)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/enterprises/1/limits/1/externalnetworks/1/ips/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + ExternalIpDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListUnmanagedIps() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "listUnmanagedIps", VLANNetworkDto.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(NetworkResources.unmanagedNetworkPut())));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/enterprises/1/limits/1/externalnetworks/1/ips HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + UnmanagedIpsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testListUnmanagedIpsWithOptions() throws SecurityException, NoSuchMethodException, IOException {
      IpOptions options = IpOptions.builder().startWith(10).build();
      Invokable<?, ?> method = method(InfrastructureApi.class, "listUnmanagedIps", VLANNetworkDto.class,
            IpOptions.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(NetworkResources.unmanagedNetworkPut(), options)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/enterprises/1/limits/1/externalnetworks/1/ips?startwith=10 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + UnmanagedIpsDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }

   public void testGetUnmanagedIp() throws SecurityException, NoSuchMethodException, IOException {
      Invokable<?, ?> method = method(InfrastructureApi.class, "getUnmanagedIp", VLANNetworkDto.class, Integer.class);
      GeneratedHttpRequest request = processor.apply(Invocation.create(method,
            ImmutableList.<Object> of(NetworkResources.externalNetworkPut(), 1)));

      assertRequestLineEquals(request,
            "GET http://localhost/api/admin/enterprises/1/limits/1/externalnetworks/1/ips/1 HTTP/1.1");
      assertNonPayloadHeadersEqual(request, "Accept: " + UnmanagedIpDto.BASE_MEDIA_TYPE + "\n");
      assertPayloadEquals(request, null, null, false);

      assertResponseParserClassEquals(method, request, ParseXMLWithJAXB.class);
      assertSaxResponseParserClassEquals(method, null);
      assertFallbackClassEquals(method, null);

      checkFilters(request);
   }
}
TOP

Related Classes of org.jclouds.abiquo.features.InfrastructureApiTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.