You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by da...@apache.org on 2022/04/19 10:58:07 UTC

[cloudstack-go] branch main updated: Autogenerate tests (#32)

This is an automated email from the ASF dual-hosted git repository.

davidjumani pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/cloudstack-go.git


The following commit(s) were added to refs/heads/main by this push:
     new ac35fe8  Autogenerate tests (#32)
ac35fe8 is described below

commit ac35fe8914b7df722fc3357d7323039e1cfb4b86
Author: David Jumani <dj...@gmail.com>
AuthorDate: Tue Apr 19 16:28:02 2022 +0530

    Autogenerate tests (#32)
    
    * Decouple tests from autogenerated code
    
    * Autogenereate tests
    
    * cleanup
---
 cloudstack/AccountService_test.go                  | 108 ----
 cloudstack/AddressService_test.go                  |  74 ---
 cloudstack/AffinityGroupService_test.go            |  49 --
 cloudstack/ApiDiscoveryService_test.go             | 188 -------
 cloudstack/AuthenticationService_test.go           |  80 ---
 cloudstack/CertificateService_test.go              |  56 ---
 cloudstack/ClusterService_test.go                  | 284 -----------
 cloudstack/ConfigurationService_test.go            |  92 ----
 cloudstack/DiskOfferingService_test.go             |  90 ----
 cloudstack/DomainService_test.go                   | 141 ------
 cloudstack/ExtFirewallService.go                   |  17 -
 cloudstack/ExtFirewallService_mock.go              |  24 -
 cloudstack/ExtLoadBalancerService.go               |  17 -
 cloudstack/ExtLoadBalancerService_mock.go          |  24 -
 cloudstack/ExternalDeviceService.go                |  17 -
 cloudstack/ExternalDeviceService_mock.go           |  24 -
 cloudstack/FirewallService_test.go                 | 116 -----
 cloudstack/HostService_test.go                     | 181 -------
 cloudstack/HypervisorService_test.go               |  51 --
 cloudstack/ImageStoreService_test.go               |  96 ----
 cloudstack/LoadBalancerService_test.go             |  78 ---
 cloudstack/NetworkACLService_test.go               |  48 --
 cloudstack/NetworkOfferingService_test.go          | 116 -----
 cloudstack/NetworkService_test.go                  | 156 ------
 cloudstack/PoolService_test.go                     |  97 ----
 cloudstack/ProjectService_test.go                  | 142 ------
 cloudstack/ResourcetagsService_test.go             |  76 ---
 cloudstack/SSHService_test.go                      | 116 -----
 cloudstack/ServiceOfferingService_test.go          |  96 ----
 cloudstack/StoragePoolService_test.go              |  70 ---
 cloudstack/TemplateService_test.go                 |  95 ----
 cloudstack/UserService_test.go                     | 188 -------
 cloudstack/VLANService_test.go                     |  52 --
 cloudstack/VPCService_test.go                      |  73 ---
 cloudstack/VirtualMachineService_test.go           | 170 -------
 cloudstack/cloudstack.go                           |   2 +-
 cloudstack/testdata/AccountServiceData.json        | 154 ------
 cloudstack/testdata/AddressServiceData.json        |  80 ---
 cloudstack/testdata/AffinityGroupServiceData.json  |  36 --
 cloudstack/testdata/CertificateServiceData.json    |  28 --
 cloudstack/testdata/FirewallServiceData.json       | 123 -----
 cloudstack/testdata/NetworkACLServiceData.json     |  32 --
 cloudstack/testdata/ProjectServiceData.json        | 312 ------------
 cloudstack/testdata/ResourceTagsServiceData.json   |  50 --
 cloudstack/testdata/SSHServiceData.json            | 145 ------
 cloudstack/testdata/VPCServiceData.json            | 336 -------------
 cloudstack/testdata/VPNServiceData.json            |  26 -
 cloudstack/testdata/VirtualMachineServiceData.json | 545 ---------------------
 generate/generate.go                               | 132 +++++
 .../APIDiscoveryService_test.go                    |  42 +-
 test/AccountService_test.go                        | 182 +++++++
 test/AddressService_test.go                        |  86 ++++
 test/AffinityGroupService_test.go                  |  98 ++++
 test/AlertService_test.go                          |  86 ++++
 test/AsyncjobService_test.go                       |  62 +++
 test/AuthenticationService_test.go                 |  62 +++
 test/AutoScaleService_test.go                      | 278 +++++++++++
 test/BaremetalService_test.go                      | 146 ++++++
 test/BigSwitchBCFService_test.go                   |  74 +++
 test/BrocadeVCSService_test.go                     |  86 ++++
 .../CertificateService_test.go                     |  42 +-
 .../CloudIdentifierService_test.go                 |  44 +-
 test/ClusterService_test.go                        | 182 +++++++
 test/ConfigurationService_test.go                  |  86 ++++
 test/DiskOfferingService_test.go                   |  86 ++++
 test/DomainService_test.go                         |  98 ++++
 test/EventService_test.go                          |  86 ++++
 test/FirewallService_test.go                       | 230 +++++++++
 test/GuestOSService_test.go                        | 146 ++++++
 test/HostService_test.go                           | 302 ++++++++++++
 test/HypervisorService_test.go                     |  74 +++
 test/ISOService_test.go                            | 158 ++++++
 test/ImageStoreService_test.go                     | 134 +++++
 test/InternalLBService_test.go                     | 110 +++++
 test/LDAPService_test.go                           | 158 ++++++
 test/LimitService_test.go                          |  98 ++++
 test/LoadBalancerService_test.go                   | 446 +++++++++++++++++
 test/NATService_test.go                            |  98 ++++
 test/NetworkACLService_test.go                     | 146 ++++++
 test/NetworkDeviceService_test.go                  |  74 +++
 test/NetworkOfferingService_test.go                |  86 ++++
 test/NetworkService_test.go                        | 374 ++++++++++++++
 test/NicService_test.go                            |  86 ++++
 test/NiciraNVPService_test.go                      |  74 +++
 test/OutofbandManagementService_test.go            |  74 +++
 test/OvsElementService_test.go                     |  62 +++
 test/PodService_test.go                            | 122 +++++
 test/PoolService_test.go                           |  98 ++++
 test/PortableIPService_test.go                     |  74 +++
 test/ProjectService_test.go                        | 194 ++++++++
 .../QuotaService_test.go                           |  43 +-
 test/RegionService_test.go                         |  86 ++++
 test/ResourcemetadataService_test.go               |  86 ++++
 test/ResourcetagsService_test.go                   |  86 ++++
 test/RoleService_test.go                           | 134 +++++
 test/RouterService_test.go                         | 146 ++++++
 test/SSHService_test.go                            |  98 ++++
 test/SecurityGroupService_test.go                  | 122 +++++
 test/ServiceOfferingService_test.go                |  86 ++++
 test/SnapshotService_test.go                       | 182 +++++++
 test/StoragePoolService_test.go                    |  74 +++
 test/StratosphereSSPService_test.go                |  62 +++
 test/SwiftService_test.go                          |  62 +++
 .../SystemCapacityService_test.go                  |  42 +-
 test/SystemVMService_test.go                       | 134 +++++
 test/TemplateService_test.go                       | 182 +++++++
 test/UCSService_test.go                            | 110 +++++
 test/UsageService_test.go                          | 182 +++++++
 test/UserService_test.go                           | 170 +++++++
 test/VLANService_test.go                           | 110 +++++
 test/VMGroupService_test.go                        |  86 ++++
 test/VPCService_test.go                            | 218 +++++++++
 test/VPNService_test.go                            | 278 +++++++++++
 test/VirtualMachineService_test.go                 | 302 ++++++++++++
 test/VolumeService_test.go                         | 206 ++++++++
 test/ZoneService_test.go                           | 170 +++++++
 {cloudstack => test}/cloudstack_test.go            |  89 ++--
 test/testdata/AccountService.json                  | 154 ++++++
 test/testdata/AddressService.json                  |  63 +++
 test/testdata/AffinityGroupService.json            |  28 ++
 .../testdata/ApiDiscoveryService.json              |   0
 .../testdata/AsyncJobService.json                  |   0
 .../testdata/AuthenticationService.json            |   0
 test/testdata/CertificateService.json              |  21 +
 .../testdata/ClusterService.json                   | 134 ++---
 .../testdata/ConfigurationService.json             |   0
 .../testdata/DiskOfferingService.json              |   0
 .../testdata/DomainService.json                    |  29 +-
 test/testdata/FirewallService.json                 |  93 ++++
 .../testdata/HostService.json                      | 102 ++--
 .../testdata/HypervisorService.json                |   0
 .../testdata/ISOService.json                       |   0
 .../testdata/ImageStoreService.json                |   0
 .../testdata/LimitService.json                     |   0
 .../testdata/LoadBalancerService.json              |  49 +-
 test/testdata/NetworkACLService.json               |  25 +
 .../testdata/NetworkOfferingService.json           |   0
 .../testdata/NetworkService.json                   |  91 ++--
 .../testdata/PoolService.json                      |   0
 test/testdata/ProjectService.json                  | 283 +++++++++++
 test/testdata/ResourceTagsService.json             |  36 ++
 test/testdata/SSHService.json                      | 138 ++++++
 .../testdata/ServiceOfferingService.json           |   0
 .../testdata/StoragePoolService.json               |  54 +-
 .../testdata/TemplateService.json                  |  77 ++-
 .../testdata/UserService.json                      |   8 +-
 .../testdata/VLANService.json                      |   0
 test/testdata/VPCService.json                      | 463 +++++++++++++++++
 test/testdata/VPNService.json                      |  19 +
 test/testdata/VirtualMachineService.json           | 509 +++++++++++++++++++
 150 files changed, 10811 insertions(+), 5658 deletions(-)

diff --git a/cloudstack/AccountService_test.go b/cloudstack/AccountService_test.go
deleted file mode 100644
index 3e93614..0000000
--- a/cloudstack/AccountService_test.go
+++ /dev/null
@@ -1,108 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestListAccounts(t *testing.T) {
-	apiName := "listAccountsResponse"
-	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		resp, err := ReadData(apiName, "AccountService")
-		if err != nil {
-			t.Errorf("Failed to read response data, due to: %v", err)
-			return
-		}
-		fmt.Fprintln(w, resp[apiName])
-	}))
-	defer server.Close()
-
-	client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true)
-	p := client.Account.NewListAccountsParams()
-	acc, _ := client.Account.ListAccounts(p)
-	accounts := acc.Accounts
-	if len(accounts) != 1 {
-		t.Errorf("length: actual %d, expected 1", len(accounts))
-	}
-
-	if accounts[0].Name != "admin" {
-		t.Errorf("name: actual %s, expected admin", accounts[0].Name)
-	}
-
-	if len(accounts[0].User) != 1 {
-		t.Errorf("length of user: actual %d, expected 1", len(accounts[0].User))
-	}
-
-	if accounts[0].User[0].Username != "admin" {
-		t.Errorf("username: actual %s, expected admin", accounts[0].User[0].Username)
-	}
-
-	if accounts[0].Accountdetails["key0"] != "value0" {
-		t.Errorf("accountdetails[\"key0\"]: actual %s, expected value0", accounts[0].Accountdetails["key0"])
-	}
-}
-
-func TestCreateAccounts(t *testing.T) {
-	apiName := "createAccountsResponse"
-	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		resp, err := ReadData(apiName, "AccountService")
-		if err != nil {
-			t.Errorf("Failed to read response data, due to: %v", err)
-			return
-		}
-		fmt.Fprintln(w, resp[apiName])
-	}))
-	defer server.Close()
-
-	client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true)
-	email := "user01@example.com"
-	firstname := "user01"
-	lastname := "user01"
-	password := "password"
-	username := "user01"
-
-	p := client.Account.NewCreateAccountParams(email, firstname, lastname, password, username)
-	p.SetAccountdetails(map[string]string{"key0": "value0", "key1": "value1"})
-	account, _ := client.Account.CreateAccount(p)
-
-	if account.Name != "user01" {
-		t.Errorf("name: actual %s, expected user01", account.Name)
-	}
-
-	if len(account.User) != 1 {
-		t.Errorf("length of user: actual %d, expected 1", len(account.User))
-	}
-
-	if account.User[0].Username != "user01" {
-		t.Errorf("username: actual %s, expected admin", account.User[0].Username)
-	}
-
-	if account.Accountdetails["key0"] != "value0" {
-		t.Errorf("accountdetails[\"key0\"]: actual %s, expected value0", account.Accountdetails["key0"])
-	}
-
-	if account.Accountdetails["key1"] != "value1" {
-		t.Errorf("accountdetails[\"key1\"]: actual %s, expected value1", account.Accountdetails["key1"])
-	}
-}
diff --git a/cloudstack/AddressService_test.go b/cloudstack/AddressService_test.go
deleted file mode 100644
index e993488..0000000
--- a/cloudstack/AddressService_test.go
+++ /dev/null
@@ -1,74 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestAssociateIpAddress(t *testing.T) {
-	apiName := "associateIpAddress"
-	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		response, err := ParseAsyncResponse(apiName, "AddressService", *r)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(w, response)
-	}))
-
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	p := client.Address.NewAssociateIpAddressParams()
-	p.SetZoneid("2e86e486-b472-4f12-a9b2-bb73701241e0")
-	ip, err := client.Address.AssociateIpAddress(p)
-	if err != nil {
-		t.Errorf(err.Error())
-	}
-
-	if ip.Ipaddress != "10.70.3.100" {
-		t.Errorf("ipaddress: actual %s, expected 10.70.3.100", ip.Ipaddress)
-	}
-}
-
-func TestDisassociateIpAddress(t *testing.T) {
-	apiName := "disassociateIpAddress"
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		response, err := ParseAsyncResponse(apiName, "AddressService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	p := client.Address.NewDisassociateIpAddressParams("a767fbe1-ed7a-4d7c-8221-c7d736ca622d")
-	address, err := client.Address.DisassociateIpAddress(p)
-	if err != nil {
-		t.Errorf("Failed to disassociate IP addres due to: %v", err.Error())
-		return
-	}
-	if address.Success != true {
-		t.Errorf("Failed to disassociate IP address")
-	}
-}
diff --git a/cloudstack/AffinityGroupService_test.go b/cloudstack/AffinityGroupService_test.go
deleted file mode 100644
index 03104f7..0000000
--- a/cloudstack/AffinityGroupService_test.go
+++ /dev/null
@@ -1,49 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestCreateAffinityGroup(t *testing.T) {
-	apiName := "createAffinityGroup"
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		responses, err := ParseAsyncResponse(apiName, "AffinityGroupService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, responses)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	p := client.AffinityGroup.NewCreateAffinityGroupParams("testAffinityGroup", "host affinity")
-	ag, err := client.AffinityGroup.CreateAffinityGroup(p)
-	if err != nil {
-		t.Errorf("Failed to disassociate IP addres due to: %v", err.Error())
-		return
-	}
-	if ag.Name != "testAffinityGroup" {
-		t.Errorf("Failed to create affinity group of name: testAffinityGroup")
-	}
-}
diff --git a/cloudstack/ApiDiscoveryService_test.go b/cloudstack/ApiDiscoveryService_test.go
deleted file mode 100644
index 30e63bf..0000000
--- a/cloudstack/ApiDiscoveryService_test.go
+++ /dev/null
@@ -1,188 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestListApis_SetName(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		response := `{
-			"listapisresponse": {
-  "api": [
-    {
-      "description": "List registered keypairs",
-      "isasync": false,
-      "name": "listSSHKeyPairs",
-      "params": [
-        {
-          "description": "",
-          "length": 255,
-          "name": "page",
-          "required": false,
-          "type": "integer"
-        },
-        {
-          "description": "A key pair name to look for",
-          "length": 255,
-          "name": "name",
-          "required": false,
-          "type": "string"
-        },
-        {
-          "description": "If set to false, list only resources belonging to the command's caller; if set to true - list resources that the caller is authorized to see. Default value is false",
-          "length": 255,
-          "name": "listall",
-          "required": false,
-          "type": "boolean"
-        },
-        {
-          "description": "list objects by project",
-          "length": 255,
-          "name": "projectid",
-          "related": "activateProject",
-          "required": false,
-          "type": "uuid"
-        },
-        {
-          "description": "list resources by account. Must be used with the domainId parameter.",
-          "length": 255,
-          "name": "account",
-          "required": false,
-          "type": "string"
-        },
-        {
-          "description": "A public key fingerprint to look for",
-          "length": 255,
-          "name": "fingerprint",
-          "required": false,
-          "type": "string"
-        },
-        {
-          "description": "List by keyword",
-          "length": 255,
-          "name": "keyword",
-          "required": false,
-          "type": "string"
-        },
-        {
-          "description": "",
-          "length": 255,
-          "name": "pagesize",
-          "required": false,
-          "type": "integer"
-        },
-        {
-          "description": "list only resources belonging to the domain specified",
-          "length": 255,
-          "name": "domainid",
-          "related": "listDomains",
-          "required": false,
-          "type": "uuid"
-        },
-        {
-          "description": "defaults to false, but if true, lists all resources from the parent specified by the domainId till leaves.",
-          "length": 255,
-          "name": "isrecursive",
-          "required": false,
-          "type": "boolean"
-        }
-      ],
-      "related": "",
-      "response": [
-        {},
-        {
-          "description": "Name of the keypair",
-          "name": "name",
-          "type": "string"
-        },
-        {
-          "description": "Fingerprint of the public key",
-          "name": "fingerprint",
-          "type": "string"
-        },
-        {
-          "description": "the domain name of the keypair owner",
-          "name": "domain",
-          "type": "string"
-        },
-        {
-          "description": "true if the entity/resource has annotations",
-          "name": "hasannotations",
-          "type": "boolean"
-        },
-        {
-          "description": "the domain id of the keypair owner",
-          "name": "domainid",
-          "type": "string"
-        },
-        {
-          "description": "the current status of the latest async job acting on this object",
-          "name": "jobstatus",
-          "type": "integer"
-        },
-        {
-          "description": "the UUID of the latest async job acting on this object",
-          "name": "jobid",
-          "type": "string"
-        },
-        {
-          "description": "the owner of the keypair",
-          "name": "account",
-          "type": "string"
-        },
-        {},
-        {
-          "description": "ID of the ssh keypair",
-          "name": "id",
-          "type": "string"
-        }
-      ]
-    }
-  ],
-  "count": 1
-	}
-}`
-		fmt.Fprintln(writer, response)
-	}))
-
-	defer server.Close()
-
-	client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true)
-	p := client.APIDiscovery.NewListApisParams()
-	p.SetName("listSSHKeyPairs")
-	resp, err := client.APIDiscovery.ListApis(p)
-
-	if err != nil {
-		t.Errorf("Failed to fetch listSSHKeyPairs API details, due to: %s", err)
-	}
-
-	if resp.Count != 1 {
-		t.Errorf("Failed to fetch listSSHKeyPairs API details")
-	}
-
-	if resp.Apis[0].Name != "listSSHKeyPairs" {
-		t.Errorf("Failed to fetch listSSHKeyPairs API details")
-	}
-}
diff --git a/cloudstack/AuthenticationService_test.go b/cloudstack/AuthenticationService_test.go
deleted file mode 100644
index 2295ab5..0000000
--- a/cloudstack/AuthenticationService_test.go
+++ /dev/null
@@ -1,80 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestAuthenticationService_Login(t *testing.T) {
-	apiName := "login"
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		loginResponse, err := ReadData(apiName, "AuthenticationService")
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, loginResponse[apiName])
-	}))
-	defer server.Close()
-
-	client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true)
-	loginParams := client.Authentication.NewLoginParams("admin", "password")
-	resp, err := client.Authentication.Login(loginParams)
-
-	if err != nil {
-		t.Errorf("Failed to login user 'admin', due to: %v", err)
-	}
-
-	if resp == nil {
-		t.Errorf("Failed to login user 'admin'")
-	}
-
-	if resp.Username != "admin" {
-		t.Errorf("Failed to login user 'admin'")
-	}
-}
-
-func TestAuthenticationService_Logout(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "logout"
-		logoutResponse, err := ReadData(apiName, "AuthenticationService")
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, logoutResponse[apiName])
-	}))
-
-	defer server.Close()
-
-	client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true)
-	logoutParams := client.Authentication.NewLogoutParams()
-	logoutResp, err := client.Authentication.Logout(logoutParams)
-
-	if err != nil {
-		t.Errorf("Failed to logout user 'admin', due to: %v", err)
-	}
-
-	if logoutResp.Description != "success" {
-		t.Errorf("Failed to logout user 'admin'")
-	}
-}
diff --git a/cloudstack/CertificateService_test.go b/cloudstack/CertificateService_test.go
deleted file mode 100644
index 7402a06..0000000
--- a/cloudstack/CertificateService_test.go
+++ /dev/null
@@ -1,56 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestUploadCustomCertificate(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "uploadCustomCertificate"
-		response, err := ParseAsyncResponse(apiName, "CertificateService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Certificate.NewUploadCustomCertificateParams("test", "xyz.com")
-	resp, err := client.Certificate.UploadCustomCertificate(params)
-
-	if err != nil {
-		t.Errorf("Failed to upload custom certificate, due to: %v", err)
-	}
-
-	if resp.Jobstatus == 2 {
-		t.Errorf("Failed to upload custom certificate")
-	}
-
-	if resp.Jobstatus == 1 {
-		t.Log("Successfully uploaded certificate")
-	}
-
-}
diff --git a/cloudstack/ClusterService_test.go b/cloudstack/ClusterService_test.go
deleted file mode 100644
index 68feed2..0000000
--- a/cloudstack/ClusterService_test.go
+++ /dev/null
@@ -1,284 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-var (
-	clusterName    = "TestCluster"
-	clusterType    = "CloudManaged"
-	hypervisorType = "KVM"
-	podId          = "6137ef6f-753f-4e7b-a728-8d46a92358d2"
-	zoneId         = "04ccc336-d730-42fe-8ff6-5ae36e141e81"
-)
-
-//func TestCreateCluster(t *testing.T) {
-//	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-//		response := `{
-//			"addclusterresponse": {
-//				"count": 1,
-//				"cluster": [
-//					{
-//						"id": "f1f5a259-1b55-431d-ad7e-6d39c28f1b15",
-//						"name": "TestCluster",
-//						"podid": "6137ef6f-753f-4e7b-a728-8d46a92358d2",
-//						"podname": "POD0",
-//						"zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81",
-//						"zonename": "SimZone1",
-//						"hypervisortype": "KVM",
-//						"clustertype": "CloudManaged",
-//						"allocationstate": "Enabled",
-//						"managedstate": "Managed",
-//						"cpuovercommitratio": "1.0",
-//						"memoryovercommitratio": "1.0",
-//						"resourcedetails": {
-//							"memoryOvercommitRatio": "1.0",
-//							"cpuOvercommitRatio": "1.0"
-//						}
-//					}
-//				]
-//			}
-//		}`
-//		fmt.Fprintf(writer, response)
-//	}))
-//	defer server.Close()
-//
-//	client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true)
-//	params := client.Cluster.NewAddClusterParams(clusterName, clusterType, hypervisorType, podId, zoneId)
-//	resp, err := client.Cluster.AddCluster(params)
-//
-//	if err != nil {
-//		t.Errorf("Failed to add cluster %s to zone %s, due to: %v", clusterName, zoneId, err)
-//	}
-//
-//	fmt.Printf("%v", resp)
-//	if resp.Name != clusterName {
-//		t.Errorf("Failed to add cluster")
-//	}
-//}
-
-func TestClusterService_ListClusters(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "listClusters"
-		resp, err := ReadData(apiName, "ClusterService")
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, resp[apiName])
-	}))
-	defer server.Close()
-
-	client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true)
-	params := client.Cluster.NewListClustersParams()
-	params.SetZoneid(zoneId)
-	clusterResp, err := client.Cluster.ListClusters(params)
-	if err != nil {
-		t.Errorf("Failed to list clusters in zone %s due to: %v", zoneId, err)
-	}
-
-	if clusterResp.Count != 3 {
-		t.Errorf("Failed to list all clusters in the zone")
-	}
-}
-
-func TestClusterService_DisableHAForCluster(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "disableHAForCluster"
-		responses, err := ParseAsyncResponse(apiName, "ClusterService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, responses)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Cluster.NewDisableHAForClusterParams("f1f5a259-1b55-431d-ad7e-6d39c28f1b15")
-	resp, err := client.Cluster.DisableHAForCluster(params)
-	if err != nil {
-		t.Errorf("Failed to disable HA for cluster due to %v", err)
-	}
-
-	if !resp.Success {
-		t.Errorf("Failed to disable HA for cluster")
-	}
-}
-
-func TestClusterService_EnableHAForCluster(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "enableHAForCluster"
-		responses, err := ParseAsyncResponse(apiName, "ClusterService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, responses)
-	}))
-
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Cluster.NewEnableHAForClusterParams("f1f5a259-1b55-431d-ad7e-6d39c28f1b15")
-	resp, err := client.Cluster.EnableHAForCluster(params)
-	if err != nil {
-		t.Errorf("Failed to enable HA for cluster due to %v", err)
-	}
-
-	if !resp.Success {
-		t.Errorf("Failed to enable HA for cluster")
-	}
-}
-
-func TestClusterService_DisableOutOfBandManagementForCluster(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "disableOutOfBandManagementForCluster"
-		responses, err := ParseAsyncResponse(apiName, "ClusterService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, responses)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Cluster.NewDisableOutOfBandManagementForClusterParams("f1f5a259-1b55-431d-ad7e-6d39c28f1b15")
-	resp, err := client.Cluster.DisableOutOfBandManagementForCluster(params)
-	if err != nil {
-		t.Errorf("Failed to disable Out of band management for cluster due to %v", err)
-	}
-
-	if resp.Enabled {
-		t.Errorf("Failed to disable out of band management for cluster")
-	}
-}
-
-func TestClusterService_EnableOutOfBandManagementForCluster(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "enableOutOfBandManagementForCluster"
-		responses, err := ParseAsyncResponse(apiName, "ClusterService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, responses)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Cluster.NewEnableOutOfBandManagementForClusterParams("f1f5a259-1b55-431d-ad7e-6d39c28f1b15")
-	resp, err := client.Cluster.EnableOutOfBandManagementForCluster(params)
-	if err != nil {
-		t.Errorf("Failed to enable Out of band management for cluster due to %v", err)
-	}
-
-	if !resp.Enabled {
-		t.Errorf("Failed to enable out of band management for cluster")
-	}
-}
-
-func TestClusterService_DedicateCluster(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "dedicateCluster"
-		responses, err := ParseAsyncResponse(apiName, "ClusterService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, responses)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Cluster.NewDedicateClusterParams("f1f5a259-1b55-431d-ad7e-6d39c28f1b15", "e4874e10-5fdf-11ea-9a56-1e006800018c")
-	resp, err := client.Cluster.DedicateCluster(params)
-	if err != nil {
-		t.Errorf("Failed to dedicate cluster to ROOT domain due to %v", err)
-	}
-
-	if resp.Domainid != "e4874e10-5fdf-11ea-9a56-1e006800018c" {
-		t.Errorf("Failed to dedicate cluster to right domain")
-	}
-}
-
-func TestClusterService_ReleaseDedicatedCluster(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "releaseDedicatedCluster"
-		responses, err := ParseAsyncResponse(apiName, "ClusterService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, responses)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Cluster.NewReleaseDedicatedClusterParams("f1f5a259-1b55-431d-ad7e-6d39c28f1b15")
-	resp, err := client.Cluster.ReleaseDedicatedCluster(params)
-	if err != nil {
-		t.Errorf("Failed to release dedicated cluster to ROOT domain due to %v", err)
-	}
-
-	if !resp.Success {
-		t.Errorf("Failed to release dedicated cluster to right domain")
-	}
-}
-
-func TestClusterService_UpdateCluster(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "updateCluster"
-		response, err := ReadData(apiName, "ClusterService")
-		if err != nil {
-			t.Errorf("Failed to read response data, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Cluster.NewUpdateClusterParams("f1f5a259-1b55-431d-ad7e-6d39c28f1b15")
-	params.SetClustername("TestClusterUpdated")
-	params.SetManagedstate("Unmanaged")
-	resp, err := client.Cluster.UpdateCluster(params)
-	if err != nil {
-		t.Errorf("Failed to updated cluster details - name, due to: %v", err)
-	}
-
-	if resp.Name != "TestClusterUpdated" {
-		t.Errorf("Failed to updated cluster name")
-	}
-}
-
-func TestClusterService_DeleteCluster(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "deleteCluster"
-		response, err := ReadData(apiName, "ClusterService")
-		if err != nil {
-			t.Errorf("Failed to read response data, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Cluster.NewDeleteClusterParams("f1f5a259-1b55-431d-ad7e-6d39c28f1b15")
-	resp, err := client.Cluster.DeleteCluster(params)
-	if err != nil {
-		t.Errorf("Failed to delete cluster due to: %v", err)
-	}
-
-	if !resp.Success {
-		t.Errorf("Failed to delete cluster")
-	}
-
-}
diff --git a/cloudstack/ConfigurationService_test.go b/cloudstack/ConfigurationService_test.go
deleted file mode 100644
index 00d1053..0000000
--- a/cloudstack/ConfigurationService_test.go
+++ /dev/null
@@ -1,92 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestConfigurationService_ListCapabilities(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		apiName := "listCapabilities"
-		resp, err := ReadData(apiName, "ConfigurationService")
-		if err != nil {
-			t.Errorf("Failed to read response data, due to: %v", err)
-		}
-		fmt.Fprintf(w, resp[apiName])
-	}))
-	defer server.Close()
-
-	client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true)
-	p := client.Configuration.NewListCapabilitiesParams()
-	resp, err := client.Configuration.ListCapabilities(p)
-	if err != nil {
-		t.Errorf("Failed to list capabilities due to: %v", err)
-	}
-
-	if resp == nil {
-		t.Errorf("Failed to list capabilities")
-	}
-}
-
-func TestConfigurationService_ListConfigurations(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		apiName := "listConfigurations"
-		resp, err := ReadData(apiName, "ConfigurationService")
-		if err != nil {
-			t.Errorf("Failed to read response data, due to: %v", err)
-		}
-		fmt.Fprintf(w, resp[apiName])
-	}))
-	client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true)
-	p := client.Configuration.NewListConfigurationsParams()
-	p.SetName("allow.user.create.projects")
-	resp, err := client.Configuration.ListConfigurations(p)
-	if err != nil {
-		t.Errorf("Failed to list configuration details due to: %v", err)
-	}
-	if resp.Count != 1 {
-		t.Errorf("Failed to list configuration details")
-	}
-}
-
-func TestConfigurationService_UpdateConfigurations(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		apiName := "updateConfiguration"
-		resp, err := ReadData(apiName, "ConfigurationService")
-		if err != nil {
-			t.Errorf("Failed to read response data, due to: %v", err)
-		}
-		fmt.Fprintf(w, resp[apiName])
-	}))
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	p := client.Configuration.NewUpdateConfigurationParams("allow.user.create.projects")
-	p.SetValue("false")
-	resp, err := client.Configuration.UpdateConfiguration(p)
-	if err != nil {
-		t.Errorf("Failed to update configuration due to: %v", err)
-	}
-	if resp.Value != "false" {
-		t.Errorf("Failed to update configuration")
-	}
-}
diff --git a/cloudstack/DiskOfferingService_test.go b/cloudstack/DiskOfferingService_test.go
deleted file mode 100644
index 69cbfff..0000000
--- a/cloudstack/DiskOfferingService_test.go
+++ /dev/null
@@ -1,90 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestDiskOfferingService_CreateDiskOffering(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "createDiskOffering"
-		response, err := ReadData(apiName, "DiskOfferingService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.DiskOffering.NewCreateDiskOfferingParams("test", "test")
-	resp, err := client.DiskOffering.CreateDiskOffering(params)
-	if err != nil {
-		t.Errorf("Failed to create disk offering due to: %v", err)
-	}
-
-	if resp == nil {
-		t.Errorf("Failed to create disk offering")
-	}
-}
-
-func TestDiskOfferingService_ListDiskOffering(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "listDiskOfferings"
-		response, err := ReadData(apiName, "DiskOfferingService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.DiskOffering.NewListDiskOfferingsParams()
-	params.SetId("7662b6ae-f00b-4268-973f-f3f87eaf82c5")
-	resp, err := client.DiskOffering.ListDiskOfferings(params)
-	if err != nil {
-		t.Errorf("Failed to list disk offering due to: %v", err)
-	}
-
-	if resp.Count != 1 {
-		t.Errorf("Failed to list disk offering")
-	}
-}
-
-func TestDiskOfferingService_DeleteDiskOffering(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "deleteDiskOffering"
-		response, err := ReadData(apiName, "DiskOfferingService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.DiskOffering.NewDeleteDiskOfferingParams("7662b6ae-f00b-4268-973f-f3f87eaf82c5")
-	resp, err := client.DiskOffering.DeleteDiskOffering(params)
-	if err != nil {
-		t.Errorf("Failed to delete disk offering due to : %v", err)
-	}
-	if !resp.Success {
-		t.Errorf("Failed to delete disk offering")
-	}
-}
diff --git a/cloudstack/DomainService_test.go b/cloudstack/DomainService_test.go
deleted file mode 100644
index 0c34364..0000000
--- a/cloudstack/DomainService_test.go
+++ /dev/null
@@ -1,141 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestDomainService_CreateDomain(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "createDomain"
-		response, err := ReadData(apiName, "DomainService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Domain.NewCreateDomainParams("testDomain")
-	params.SetParentdomainid("e4874e10-5fdf-11ea-9a56-1e006800018c")
-	resp, err := client.Domain.CreateDomain(params)
-	if err != nil {
-		t.Errorf("Failed to create domain due to: %v", err)
-	}
-
-	if resp.Name != "testDomain" {
-		t.Errorf("Failed to create domain")
-	}
-}
-
-func TestDomainService_UpdateDomain(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "updateDomain"
-		response, err := ReadData(apiName, "DomainService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Domain.NewUpdateDomainParams("ee05fd92-7365-4421-a15b-abfa11dfc4f6")
-	params.SetName("testDomainUpdated")
-	resp, err := client.Domain.UpdateDomain(params)
-	if err != nil {
-		t.Errorf("Failed to update domain name due to: %v", err)
-	}
-
-	if resp.Name != "testDomainUpdated" {
-		t.Errorf("Failed to update domain name")
-	}
-}
-
-func TestDomainService_ListDomains(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "listDomains"
-		response, err := ReadData(apiName, "DomainService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Domain.NewListDomainsParams()
-	params.SetId("097d3992-7a67-42e1-afb5-b4d2d81e280f")
-	resp, err := client.Domain.ListDomains(params)
-	if err != nil {
-		t.Errorf("Failed to list specific domain details due to: %v", err)
-	}
-	if resp.Count != 1 {
-		t.Errorf("Failed to list specific domain details")
-	}
-	if resp.Domains[0].Name != "DummyDomain" {
-		t.Errorf("Failed to fetch details of specific domain")
-	}
-}
-
-func TestDomainService_ListDomainChildren(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "listDomainChildren"
-		response, err := ReadData(apiName, "DomainService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Domain.NewListDomainChildrenParams()
-	params.SetId("99becf06-7f0f-4eb4-bdc3-44fecb8cb829")
-	resp, err := client.Domain.ListDomainChildren(params)
-	if err != nil {
-		t.Errorf("Failed to list specific domain's children due to: %v", err)
-	}
-	if resp.Count != 1 {
-		t.Errorf("Failed to list specific domain's children ")
-	}
-}
-
-func TestDomainService_DeleteDomain(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "deleteDomain"
-		response, err := ParseAsyncResponse(apiName, "DomainService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Domain.NewDeleteDomainParams("ee05fd92-7365-4421-a15b-abfa11dfc4f6")
-	resp, err := client.Domain.DeleteDomain(params)
-	if err != nil {
-		t.Errorf("Failed to delete domain due to: %v", err)
-	}
-	if !resp.Success {
-		t.Errorf("Failed to delete domain")
-	}
-}
diff --git a/cloudstack/ExtFirewallService.go b/cloudstack/ExtFirewallService.go
deleted file mode 100644
index 4676b3e..0000000
--- a/cloudstack/ExtFirewallService.go
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// Copyright 2018, Sander van Harmelen
-//
-// Licensed 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 cloudstack
diff --git a/cloudstack/ExtFirewallService_mock.go b/cloudstack/ExtFirewallService_mock.go
deleted file mode 100644
index 601b0b4..0000000
--- a/cloudstack/ExtFirewallService_mock.go
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// 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.
-//
-
-// Code generated by MockGen. DO NOT EDIT.
-// Source: ./cloudstack/ExtFirewallService.go
-
-// Package cloudstack is a generated GoMock package.
-package cloudstack
diff --git a/cloudstack/ExtLoadBalancerService.go b/cloudstack/ExtLoadBalancerService.go
deleted file mode 100644
index 4676b3e..0000000
--- a/cloudstack/ExtLoadBalancerService.go
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// Copyright 2018, Sander van Harmelen
-//
-// Licensed 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 cloudstack
diff --git a/cloudstack/ExtLoadBalancerService_mock.go b/cloudstack/ExtLoadBalancerService_mock.go
deleted file mode 100644
index 245d4c1..0000000
--- a/cloudstack/ExtLoadBalancerService_mock.go
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// 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.
-//
-
-// Code generated by MockGen. DO NOT EDIT.
-// Source: ./cloudstack/ExtLoadBalancerService.go
-
-// Package cloudstack is a generated GoMock package.
-package cloudstack
diff --git a/cloudstack/ExternalDeviceService.go b/cloudstack/ExternalDeviceService.go
deleted file mode 100644
index 4676b3e..0000000
--- a/cloudstack/ExternalDeviceService.go
+++ /dev/null
@@ -1,17 +0,0 @@
-//
-// Copyright 2018, Sander van Harmelen
-//
-// Licensed 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 cloudstack
diff --git a/cloudstack/ExternalDeviceService_mock.go b/cloudstack/ExternalDeviceService_mock.go
deleted file mode 100644
index 7535c52..0000000
--- a/cloudstack/ExternalDeviceService_mock.go
+++ /dev/null
@@ -1,24 +0,0 @@
-//
-// 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.
-//
-
-// Code generated by MockGen. DO NOT EDIT.
-// Source: ./cloudstack/ExternalDeviceService.go
-
-// Package cloudstack is a generated GoMock package.
-package cloudstack
diff --git a/cloudstack/FirewallService_test.go b/cloudstack/FirewallService_test.go
deleted file mode 100644
index abfd1af..0000000
--- a/cloudstack/FirewallService_test.go
+++ /dev/null
@@ -1,116 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestFirewallService_CreateFirewallRule(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "createFirewallRule"
-		response, err := ParseAsyncResponse(apiName, "FirewallService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Firewall.NewCreateFirewallRuleParams("192.168.2.4", "tcp")
-	resp, err := client.Firewall.CreateFirewallRule(params)
-	if err != nil {
-		t.Errorf("Failed to create firewall rule due to: %v", err)
-	}
-	if resp.Ipaddress != "192.168.2.4" {
-		t.Errorf("Failed to create firewall rule")
-	}
-
-	if resp.State != "Active" {
-		t.Errorf("Failed to create firewall rule")
-	}
-}
-
-func TestFirewallService_DeleteFirewallRule(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "deleteFirewallRule"
-		response, err := ParseAsyncResponse(apiName, "FirewallService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Firewall.NewDeleteFirewallRuleParams("fb4ad2ee-02c8-433e-a769-6f18afddc750")
-	resp, err := client.Firewall.DeleteFirewallRule(params)
-	if err != nil {
-		t.Errorf("Failed to delete firewall rule due to: %v", err)
-	}
-	if !resp.Success {
-		t.Errorf("Failed to delete firewall rule")
-	}
-}
-
-func TestFirewallService_CreateEgressFirewallRule(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "createEgressFirewallRule"
-		response, err := ParseAsyncResponse(apiName, "FirewallService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Firewall.NewCreateEgressFirewallRuleParams("c4a3303c-376d-4d56-b336-1bd91cb130b6", "tcp")
-	resp, err := client.Firewall.CreateEgressFirewallRule(params)
-	if err != nil {
-		t.Errorf("Failed to create egress firewall rule due to: %v", err)
-	}
-
-	if resp.State != "Active" {
-		t.Errorf("Failed to create egress firewall rule")
-	}
-}
-
-func TestFirewallService_DeleteEgressFirewallRule(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "deleteEgressFirewallRule"
-		response, err := ParseAsyncResponse(apiName, "FirewallService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Firewall.NewDeleteEgressFirewallRuleParams("fb4ad2ee-02c8-433e-a769-6f18afddc750")
-	resp, err := client.Firewall.DeleteEgressFirewallRule(params)
-	if err != nil {
-		t.Errorf("Failed to delete egress firewall rule due to: %v", err)
-	}
-	if !resp.Success {
-		t.Errorf("Failed to delete egress firewall rule")
-	}
-}
diff --git a/cloudstack/HostService_test.go b/cloudstack/HostService_test.go
deleted file mode 100644
index 6d4acc2..0000000
--- a/cloudstack/HostService_test.go
+++ /dev/null
@@ -1,181 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestHostService_AddHost(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "addHost"
-		response, err := ReadData(apiName, "HostService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response[apiName])
-	}))
-
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Host.NewAddHostParams("Simulator", "5382edc2-e689-4074-bd67-0e1a236eb2bc", "http://sim/c0/h0",
-		"d4a81f75-5d92-415e-ab59-e85cc2ce56d9")
-	resp, err := client.Host.AddHost(params)
-	if err != nil {
-		t.Errorf("Failed to add host due to: %v", err)
-		return
-	}
-
-	if resp == nil {
-		t.Errorf("Failed to add host")
-	}
-}
-
-func TestHostService_ListHosts(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "listHosts"
-		response, err := ReadData(apiName, "HostService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Host.NewListHostsParams()
-	resp, err := client.Host.ListHosts(params)
-	if err != nil {
-		t.Errorf("Failed to add host due to: %v", err)
-		return
-	}
-	if resp.Count != 1 {
-		t.Errorf("Failed to add host")
-	}
-}
-
-func TestHostService_PrepareHostForMaintenance(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "prepareHostForMaintenance"
-		response, err := ParseAsyncResponse(apiName, "HostService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Host.NewPrepareHostForMaintenanceParams("8e8e68e7-19ea-4a78-bbdb-6e79d27729c9")
-	resp, err := client.Host.PrepareHostForMaintenance(params)
-	if err != nil {
-		t.Errorf("Failed to prepare host for maintenance due to: %v", err)
-		return
-	}
-	if resp.Resourcestate != "PrepareForMaintenance" {
-		t.Errorf("Failed to prepare host for maintenance")
-	}
-}
-
-func TestHostService_CancelHostForMaintenance(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "cancelHostForMaintenance"
-		response, err := ParseAsyncResponse(apiName, "HostService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Host.NewCancelHostMaintenanceParams("8e8e68e7-19ea-4a78-bbdb-6e79d27729c9")
-	resp, err := client.Host.CancelHostMaintenance(params)
-	if err != nil {
-		t.Errorf("Failed to cancel host for maintenance due to: %v", err)
-		return
-	}
-	if resp.Resourcestate != "Enabled" {
-		t.Errorf("Failed to cancel host for maintenance")
-	}
-}
-
-func TestHostService_EnableOutOfBandManagementForHost(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "enableOutOfBandManagementForHost"
-		response, err := ParseAsyncResponse(apiName, "HostService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Host.NewEnableOutOfBandManagementForHostParams("8e8e68e7-19ea-4a78-bbdb-6e79d27729c9")
-	resp, err := client.Host.EnableOutOfBandManagementForHost(params)
-	if err != nil {
-		t.Errorf("Failed to enable out of band management for due to: %v", err)
-	}
-	if !resp.Enabled {
-		t.Errorf("Failed to enable out of band management")
-	}
-}
-
-func TestHostService_DisableOutOfBandManagementForHost(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "disableOutOfBandManagementForHost"
-		response, err := ParseAsyncResponse(apiName, "HostService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Host.NewDisableOutOfBandManagementForHostParams("8e8e68e7-19ea-4a78-bbdb-6e79d27729c9")
-	resp, err := client.Host.DisableOutOfBandManagementForHost(params)
-	if err != nil {
-		t.Errorf("Failed to disable out of band management for due to: %v", err)
-	}
-	if resp.Enabled {
-		t.Errorf("Failed to disable out of band management")
-	}
-}
-
-func TestHostService_EnableHAForHost(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "enableHAForHost"
-		response, err := ParseAsyncResponse(apiName, "HostService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Host.NewEnableHAForHostParams("8e8e68e7-19ea-4a78-bbdb-6e79d27729c9")
-	resp, err := client.Host.EnableHAForHost(params)
-	if err != nil {
-		t.Errorf("Failed to enable HA for due to: %v", err)
-	}
-	if !resp.Haenable {
-		t.Errorf("Failed to enable HA for host")
-	}
-}
diff --git a/cloudstack/HypervisorService_test.go b/cloudstack/HypervisorService_test.go
deleted file mode 100644
index 92ebf9e..0000000
--- a/cloudstack/HypervisorService_test.go
+++ /dev/null
@@ -1,51 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestHypervisorService_ListSpecificHypervisorCapabilities(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "listHypervisorCapabilities"
-		response, err := ReadData(apiName, "HypervisorService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Hypervisor.NewListHypervisorCapabilitiesParams()
-	params.SetId("1")
-	resp, err := client.Hypervisor.ListHypervisorCapabilities(params)
-	if err != nil {
-		t.Errorf("Failed to list hypervisor capabilities due to: %v", err)
-		return
-	}
-
-	if resp.Count != 1 {
-		t.Errorf("Failed list specific hypervisor capability")
-	}
-}
diff --git a/cloudstack/ImageStoreService_test.go b/cloudstack/ImageStoreService_test.go
deleted file mode 100644
index 3c82e5f..0000000
--- a/cloudstack/ImageStoreService_test.go
+++ /dev/null
@@ -1,96 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestImageStoreService_AddImageStore(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "addImageStore"
-		response, err := ReadData(apiName, "ImageStoreService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.ImageStore.NewAddImageStoreParams("NFS")
-	resp, err := client.ImageStore.AddImageStore(params)
-	if err != nil {
-		t.Errorf("Failed to add image store due to: %v", err)
-		return
-	}
-
-	if resp == nil || resp.Providername != "NFS" {
-		t.Errorf(" Failed to add image store")
-	}
-}
-
-func TestImageStoreService_ListImageStores(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "listImageStores"
-		response, err := ReadData(apiName, "ImageStoreService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.ImageStore.NewListImageStoresParams()
-	resp, err := client.ImageStore.ListImageStores(params)
-	if err != nil {
-		t.Errorf("Failed to list image stores due to: %v", err)
-		return
-	}
-
-	if resp == nil || resp.Count != 1 {
-		t.Errorf(" Failed to list image stores")
-	}
-}
-
-func TestImageStoreService_DeleteImageStore(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "deleteImageStore"
-		response, err := ReadData(apiName, "ImageStoreService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.ImageStore.NewDeleteImageStoreParams("0ac85364-e31a-4840-97a4-a237b4291dfa")
-	resp, err := client.ImageStore.DeleteImageStore(params)
-	if err != nil {
-		t.Errorf("Failed to delete image store due to: %v", err)
-		return
-	}
-
-	if resp == nil || !resp.Success {
-		t.Errorf(" Failed to delete image store")
-	}
-}
diff --git a/cloudstack/LoadBalancerService_test.go b/cloudstack/LoadBalancerService_test.go
deleted file mode 100644
index 6256fe9..0000000
--- a/cloudstack/LoadBalancerService_test.go
+++ /dev/null
@@ -1,78 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestLoadBalancerService_CreateLoadBalancerRule(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "createLoadBalancerRule"
-		response, err := ParseAsyncResponse(apiName, "LoadBalancerService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.LoadBalancer.NewCreateLoadBalancerRuleParams("roundrobin", "testLBRule", 9090, 9090)
-	params.SetProtocol("tcp")
-	params.SetNetworkid("cc39d938-5ea0-4d9c-b89d-421da3274e54")
-	params.SetPublicipid("bab02a09-1244-4235-a938-150e75e04ce0")
-	resp, err := client.LoadBalancer.CreateLoadBalancerRule(params)
-	if err != nil {
-		t.Errorf("Failed to create load balancer rule due to: %v", err)
-	}
-	if resp.Name != "testLBRule" {
-		t.Errorf("Failed to create load balancer rule")
-	}
-}
-
-func TestLoadBalancerService_AssignLoadBalancerRule(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "assignLoadBalancerRule"
-		response, err := ParseAsyncResponse(apiName, "LoadBalancerService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.LoadBalancer.NewAssignToLoadBalancerRuleParams("be6294cc-8f99-42c8-970d-f54c511972a3")
-	vmIpMap := make(map[string]string)
-	vmIpMap["vmid"] = "c7749abf-fadb-4658-9346-bbef95a2456f"
-	vmIpMap["vmip"] = "10.1.1.178"
-	params.SetVmidipmap(vmIpMap)
-	resp, err := client.LoadBalancer.AssignToLoadBalancerRule(params)
-	if err != nil {
-		t.Errorf("Failed to assign vm to loadbalancer rule due to: %v", err)
-		return
-	}
-
-	if resp == nil {
-		t.Errorf("Failed to assign vm to loadbalancer rule")
-	}
-}
diff --git a/cloudstack/NetworkACLService_test.go b/cloudstack/NetworkACLService_test.go
deleted file mode 100644
index b9023aa..0000000
--- a/cloudstack/NetworkACLService_test.go
+++ /dev/null
@@ -1,48 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestNetworkACLService_UpdateNetworkACLList(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "updateNetworkACLList"
-		response, err := ParseAsyncResponse(apiName, "NetworkACLService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.NetworkACL.NewUpdateNetworkACLListParams("a31e11a0-57fe-41df-be7a-34d359673061")
-	resp, err := client.NetworkACL.UpdateNetworkACLList(params)
-	if err != nil {
-		t.Errorf("Failed to update Network ACL list due to: %v", err)
-	}
-	if resp == nil {
-		t.Errorf("Failed to update Network ACL list ")
-	}
-}
diff --git a/cloudstack/NetworkOfferingService_test.go b/cloudstack/NetworkOfferingService_test.go
deleted file mode 100644
index 98e5f00..0000000
--- a/cloudstack/NetworkOfferingService_test.go
+++ /dev/null
@@ -1,116 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestNetworkOfferingService_CreateNetworkOffering(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "createNetworkOffering"
-		response, err := ReadData(apiName, "NetworkOfferingService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.NetworkOffering.NewCreateNetworkOfferingParams("testNetOffering", "L2", "testNetOffering", "Guest")
-	resp, err := client.NetworkOffering.CreateNetworkOffering(params)
-	if err != nil {
-		t.Errorf("Failed to create network offering due to: %v", err)
-	}
-	if resp.Name != "testNetOffering" {
-		t.Errorf("Failed to create network offering")
-	}
-}
-
-func TestNetworkOfferingService_UpdateNetworkOffering(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "updateNetworkOffering"
-		response, err := ReadData(apiName, "NetworkOfferingService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.NetworkOffering.NewUpdateNetworkOfferingParams()
-	params.SetState("Enabled")
-	resp, err := client.NetworkOffering.UpdateNetworkOffering(params)
-	if err != nil {
-		t.Errorf("Failed to update network offering state due to: %v", err)
-	}
-
-	if resp.State != "Enabled" {
-		t.Errorf("Failed to enable network offering")
-	}
-}
-
-func TestNetworkOfferingService_ListNetworkOffering(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "listNetworkOfferings"
-		response, err := ReadData(apiName, "NetworkOfferingService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.NetworkOffering.NewListNetworkOfferingsParams()
-	params.SetId("c2000683-68fd-437e-a4cf-f3676e1d18c1")
-	resp, err := client.NetworkOffering.ListNetworkOfferings(params)
-	if err != nil {
-		t.Errorf("Failed to list network offering due to: %v", err)
-	}
-
-	if resp.Count != 1 {
-		t.Errorf("Failed to list network offering")
-	}
-}
-
-func TestNetworkOfferingService_DeleteNetworkOffering(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "deleteNetworkOffering"
-		response, err := ReadData(apiName, "NetworkOfferingService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.NetworkOffering.NewDeleteNetworkOfferingParams("c2000683-68fd-437e-a4cf-f3676e1d18c1")
-	resp, err := client.NetworkOffering.DeleteNetworkOffering(params)
-	if err != nil {
-		t.Errorf("Failed to delete network offering due to: %v", err)
-	}
-
-	if !resp.Success {
-		t.Errorf("Failed to list network offering")
-	}
-}
diff --git a/cloudstack/NetworkService_test.go b/cloudstack/NetworkService_test.go
deleted file mode 100644
index 18f7508..0000000
--- a/cloudstack/NetworkService_test.go
+++ /dev/null
@@ -1,156 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestNetworkService_CreateNetwork(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "createNetwork"
-		response, err := ReadData(apiName, "NetworkService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Network.NewCreateNetworkParams("testIsolatedNet", "testIsolatedNet", "69b7f746-208a-47c3-a940-4d3ebb720372", "04ccc336-d730-42fe-8ff6-5ae36e141e81")
-	resp, err := client.Network.CreateNetwork(params)
-	if err != nil {
-		t.Errorf("Failed to create network due to: %v", err)
-	}
-	if resp == nil || resp.Name != "testIsolatedNet" {
-		t.Errorf("Failed to create network")
-	}
-}
-
-func TestNetworkService_ListNetworks(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "listNetworks"
-		response, err := ReadData(apiName, "NetworkService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Network.NewListNetworksParams()
-	params.SetId("eb9c270d-dd66-443b-9524-ada1eff4442a")
-	resp, err := client.Network.ListNetworks(params)
-	if err != nil {
-		t.Errorf("Failed to list specific network details due to : %v", err)
-	}
-	if resp.Count != 1 {
-		t.Errorf("Failed to list specific network details")
-	}
-	if resp.Networks[0].Id != "eb9c270d-dd66-443b-9524-ada1eff4442a" {
-		t.Errorf("Failed to list specific network details")
-	}
-}
-
-func TestNetworkService_DeleteNetwork(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "deleteNetwork"
-		response, err := ParseAsyncResponse(apiName, "NetworkService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Network.NewDeleteNetworkParams("eb9c270d-dd66-443b-9524-ada1eff4442a")
-	resp, err := client.Network.DeleteNetwork(params)
-	if err != nil {
-		t.Errorf("Failed to delete network due to: %v", err)
-		return
-	}
-	if resp == nil || !resp.Success {
-		t.Errorf("Failed to delete network")
-	}
-}
-
-//func TestNetworkService_RestartNetworkWithCleanUp(t *testing.T) {
-//	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-//		responses := map[string]string{
-//			"restartNetwork": `{
-//				"restartnetworkresponse": {
-//					"jobid": "09b1ab5d-02d0-410f-b373-6520962b98eb"
-//				}
-//			}`,
-//			"queryAsyncJobResult": `{
-//				"queryasyncjobresultresponse": {
-//					"accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-//					"userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-//					"cmd": "org.apache.cloudstack.api.command.user.network.RestartNetworkCmd",
-//					"jobstatus": 1,
-//					"jobprocstatus": 0,
-//					"jobresultcode": 0,
-//					"jobresulttype": "object",
-//					"jobresult": {
-//						"success": true
-//					},
-//					"created": "2021-10-04T05:37:23+0000",
-//					"completed": "2021-10-04T05:37:41+0000",
-//					"jobid": "09b1ab5d-02d0-410f-b373-6520962b98eb"
-//				}
-//			}`,
-//		}
-//		fmt.Fprintf(writer, responses[request.FormValue("command")])
-//	}))
-//	defer server.Close()
-//	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-//	params := client.Network.NewRestartNetworkParams("30358053-0f9d-4112-9948-976477896db6")
-//	params.SetCleanup(true)
-//	_, err := client.Network.RestartNetwork(params)
-//	if err != nil {
-//		t.Errorf("Failed to restart network with cleanup due to: %v", err)
-//		return
-//	}
-//}
-
-func TestNetworkService_CreatePhysicalNetwork(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "createPhysicalNetwork"
-		response, err := ParseAsyncResponse(apiName, "NetworkService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Network.NewCreatePhysicalNetworkParams("testPhyNet", "d4a81f75-5d92-415e-ab59-e85cc2ce56d9")
-	resp, err := client.Network.CreatePhysicalNetwork(params)
-	if err != nil {
-		t.Errorf("Failed to create physical network due to: %v", err)
-		return
-	}
-	if resp == nil || resp.Name != "testPhyNet" {
-		t.Errorf("Failed to create physical network")
-	}
-}
diff --git a/cloudstack/PoolService_test.go b/cloudstack/PoolService_test.go
deleted file mode 100644
index c0f8993..0000000
--- a/cloudstack/PoolService_test.go
+++ /dev/null
@@ -1,97 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestPoolService_CreateStoragePool(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "createStoragePool"
-		response, err := ReadData(apiName, "PoolService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.Pool.NewCreateStoragePoolParams("testPrimary1", "nfs://10.1.1.2/export/primary1", "6ebc7a1c-ff98-425c-ac0d-b6c2e3ae6e33")
-	resp, err := client.Pool.CreateStoragePool(params)
-	if err != nil {
-		t.Errorf("Failed to create storage pool due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.Name != "testPrimary1" {
-		t.Errorf("Failed to create storage pool")
-	}
-}
-
-func TestPoolService_ListStoragePools(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "listStoragePools"
-		response, err := ReadData(apiName, "PoolService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.Pool.NewListStoragePoolsParams()
-	params.SetId("3fd44942-4881-3fb0-95f1-5d7b7ae64cfb")
-	resp, err := client.Pool.ListStoragePools(params)
-	if err != nil {
-		t.Errorf("Failed to list storage pool details due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.Count != 1 {
-		t.Errorf("Failed to list storage pool")
-	}
-}
-
-func TestPoolService_DeleteStoragePool(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "deleteStoragePool"
-		response, err := ReadData(apiName, "PoolService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.Pool.NewDeleteStoragePoolParams("3fd44942-4881-3fb0-95f1-5d7b7ae64cfb")
-	resp, err := client.Pool.DeleteStoragePool(params)
-	if err != nil {
-		t.Errorf("Failed to delete storage pool details due to %v", err)
-		return
-	}
-
-	if resp == nil || !resp.Success {
-		t.Errorf("Failed to delete storage pool")
-	}
-}
diff --git a/cloudstack/ProjectService_test.go b/cloudstack/ProjectService_test.go
deleted file mode 100644
index 8d65869..0000000
--- a/cloudstack/ProjectService_test.go
+++ /dev/null
@@ -1,142 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestProjectService_CreateProject(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "createProject"
-		response, err := ParseAsyncResponse(apiName, "ProjectService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Project.NewCreateProjectParams("testProject", "testProject")
-	resp, err := client.Project.CreateProject(params)
-	if err != nil {
-		t.Errorf("Failed to create Project due to: %v", err)
-		return
-	}
-	if resp == nil || resp.Name != "testProject" {
-		t.Errorf("Failed to create project")
-	}
-}
-
-func TestProjectService_ActivateProject(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "activateProject"
-		response, err := ParseAsyncResponse(apiName, "ProjectService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Project.NewActivateProjectParams("99a842a4-e50f-4265-8ca7-249959506c13")
-	resp, err := client.Project.ActivateProject(params)
-	if err != nil {
-		t.Errorf("Failed to activate Project due to: %v", err)
-		return
-	}
-	if resp == nil || resp.Id != "99a842a4-e50f-4265-8ca7-249959506c13" || resp.State != "Active" {
-		t.Errorf("Failed to activate project")
-	}
-}
-
-func TestProjectService_SuspendProject(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "suspendProject"
-		response, err := ParseAsyncResponse(apiName, "ProjectService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Project.NewSuspendProjectParams("99a842a4-e50f-4265-8ca7-249959506c13")
-	resp, err := client.Project.SuspendProject(params)
-	if err != nil {
-		t.Errorf("Failed to suspend Project due to: %v", err)
-		return
-	}
-	if resp == nil || resp.Id != "99a842a4-e50f-4265-8ca7-249959506c13" || resp.State != "Suspended" {
-		t.Errorf("Failed to suspend project")
-	}
-}
-
-func TestProjectService_UpdateProject(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "updateProject"
-		response, err := ParseAsyncResponse(apiName, "ProjectService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Project.NewUpdateProjectParams("99a842a4-e50f-4265-8ca7-249959506c13")
-	params.SetDisplaytext("testProjectUpdated")
-	resp, err := client.Project.UpdateProject(params)
-	if err != nil {
-		t.Errorf("Failed to update Project details due to: %v", err)
-		return
-	}
-
-	if resp == nil || resp.Id != "69646881-8d7f-4800-987d-106698a42608" || resp.Displaytext != "testProjectUpdate" {
-		t.Errorf("Failed to update project name")
-	}
-}
-
-func TestProjectService_listProjectRolePermissions(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "listProjectRolePermissions"
-		response, err := ReadData(apiName, "ProjectService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.Project.NewListProjectRolePermissionsParams("69646881-8d7f-4800-987d-106698a42608")
-	params.SetProjectroleid("fa089002-d055-46b5-aa0a-18f2eae2b4fc")
-	resp, err := client.Project.ListProjectRolePermissions(params)
-	if err != nil {
-		t.Errorf("Failed to list project role permissions due to %v", err)
-		return
-	}
-
-	fmt.Println(resp)
-	if resp == nil || resp.Count != 1 {
-		t.Errorf("Failed to list VM")
-	}
-}
diff --git a/cloudstack/ResourcetagsService_test.go b/cloudstack/ResourcetagsService_test.go
deleted file mode 100644
index 30404d4..0000000
--- a/cloudstack/ResourcetagsService_test.go
+++ /dev/null
@@ -1,76 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestResourcetagsService_CreateTags(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "createTags"
-		response, err := ParseAsyncResponse(apiName, "ResourceTagsService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	tags := make(map[string]string)
-	tags["key"] = "testKey"
-	tags["value"] = "testValue"
-	params := client.Resourcetags.NewCreateTagsParams([]string{"99a842a4-e50f-4265-8ca7-249959506c13"}, "Project", tags)
-	resp, err := client.Resourcetags.CreateTags(params)
-	if err != nil {
-		t.Errorf("Failed to create tags for project due to: %v", err)
-		return
-	}
-
-	if resp == nil || !resp.Success {
-		t.Errorf("Failed to create project tags")
-	}
-}
-
-func TestResourcetagsService_DeleteTags(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "deleteTags"
-		response, err := ParseAsyncResponse(apiName, "ResourceTagsService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Resourcetags.NewDeleteTagsParams([]string{"99a842a4-e50f-4265-8ca7-249959506c13"}, "Project")
-	resp, err := client.Resourcetags.DeleteTags(params)
-	if err != nil {
-		t.Errorf("Failed to delete tags for project due to: %v", err)
-		return
-	}
-
-	if resp == nil || !resp.Success {
-		t.Errorf("Failed to delete project tags")
-	}
-}
diff --git a/cloudstack/SSHService_test.go b/cloudstack/SSHService_test.go
deleted file mode 100644
index 6fd01f7..0000000
--- a/cloudstack/SSHService_test.go
+++ /dev/null
@@ -1,116 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestSSHService_CreateSSHKeyPair(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "createSSHKeyPair"
-		response, err := ReadData(apiName, "SSHService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.SSH.NewCreateSSHKeyPairParams("testSSHKey")
-	resp, err := client.SSH.CreateSSHKeyPair(params)
-	if err != nil {
-		t.Errorf("Failed to create SSH key pair due to %v", err)
-		return
-	}
-	if resp == nil || resp.Name != "testSSHKey" {
-		t.Errorf("Failed to create SSH key pair")
-	}
-}
-
-func TestSSHService_ListSSHKeyPairs(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "listSSHKeyPairs"
-		response, err := ReadData(apiName, "SSHService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.SSH.NewListSSHKeyPairsParams()
-	params.SetName("testSSHKey")
-	resp, err := client.SSH.ListSSHKeyPairs(params)
-	if err != nil {
-		t.Errorf("Failed to list SSH key pair due to %v", err)
-		return
-	}
-	if resp == nil || resp.Count != 1 {
-		t.Errorf("Failed to list SSH key pair")
-	}
-}
-
-func TestSSHService_ResetSSHKeyForVirtualMachine(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "resetSSHKeyForVirtualMachine"
-		response, err := ParseAsyncResponse(apiName, "SSHService", *r)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.SSH.NewResetSSHKeyForVirtualMachineParams("8aa29529-b238-45f3-8992-5befadcd8bb0", "testSSHKey")
-	resp, err := client.SSH.ResetSSHKeyForVirtualMachine(params)
-	if err != nil {
-		t.Errorf("Failed to reset SSH key pair for VM due to %v", err)
-		return
-	}
-	if resp == nil || resp.Keypair != "testSSHKey" {
-		t.Errorf("Failed to reset SSH key pair for VM")
-	}
-}
-
-func TestSSHService_DeleteSSHKeyPair(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "deleteSSHKeyPair"
-		response, err := ReadData(apiName, "SSHService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.SSH.NewDeleteSSHKeyPairParams("testSSHKey")
-	resp, err := client.SSH.DeleteSSHKeyPair(params)
-	if err != nil {
-		t.Errorf("Failed to delete SSH key pair due to %v", err)
-		return
-	}
-	if resp == nil || !resp.Success {
-		t.Errorf("Failed to delete SSH key pair")
-	}
-}
diff --git a/cloudstack/ServiceOfferingService_test.go b/cloudstack/ServiceOfferingService_test.go
deleted file mode 100644
index 0fa4a48..0000000
--- a/cloudstack/ServiceOfferingService_test.go
+++ /dev/null
@@ -1,96 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestServiceOfferingService_CreateServiceOffering(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		apiName := "createServiceOffering"
-		response, err := ReadData(apiName, "ServiceOfferingService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(w, response[apiName])
-	}))
-	defer server.Close()
-
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	p := client.ServiceOffering.NewCreateServiceOfferingParams("testServiceOffering", "testServiceOffering")
-	resp, err := client.ServiceOffering.CreateServiceOffering(p)
-	if err != nil {
-		t.Errorf("Failed to create service offering due to %v", err)
-		return
-	}
-	if resp == nil || resp.Name != "testServiceOffering" {
-		t.Errorf("Failed to create service offering")
-	}
-}
-
-func TestServiceOfferingService_UpdateServiceOffering(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		apiName := "updateServiceOffering"
-		response, err := ReadData(apiName, "ServiceOfferingService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(w, response[apiName])
-	}))
-	defer server.Close()
-
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	p := client.ServiceOffering.NewUpdateServiceOfferingParams("efaeeab0-4b09-4729-8b6f-62645db41b37")
-	p.SetName("testServiceOfferingUpdated")
-	resp, err := client.ServiceOffering.UpdateServiceOffering(p)
-	if err != nil {
-		t.Errorf("Failed to update service offering due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.Name != "testServiceOfferingUpdated" {
-		t.Errorf("Failed to create service offering name")
-	}
-}
-
-func TestServiceOfferingService_DeleteServiceOffering(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
-		apiName := "deleteServiceOffering"
-		response, err := ReadData(apiName, "ServiceOfferingService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(w, response[apiName])
-	}))
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	p := client.ServiceOffering.NewDeleteServiceOfferingParams("efaeeab0-4b09-4729-8b6f-62645db41b37")
-	resp, err := client.ServiceOffering.DeleteServiceOffering(p)
-	if err != nil {
-		t.Errorf("Failed to delete service offering due to %v", err)
-		return
-	}
-	if resp == nil || !resp.Success {
-		t.Errorf("Failed to delete service offering")
-	}
-}
diff --git a/cloudstack/StoragePoolService_test.go b/cloudstack/StoragePoolService_test.go
deleted file mode 100644
index a83e87c..0000000
--- a/cloudstack/StoragePoolService_test.go
+++ /dev/null
@@ -1,70 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestStoragePoolService_CancelStorageMaintenance(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "cancelStorageMaintenance"
-		response, err := ParseAsyncResponse(apiName, "StoragePoolService", *r)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.StoragePool.NewCancelStorageMaintenanceParams("44ad900d-785b-3eff-addc-a5e6bf4927ef")
-	resp, err := client.StoragePool.CancelStorageMaintenance(params)
-	if err != nil {
-		t.Errorf("Failed to cancel storage maintenance due to %v", err)
-		return
-	}
-	if resp == nil || resp.State != "Up" {
-		t.Errorf("Failed to cancel Storage pool maintenance")
-	}
-}
-func TestStoragePoolService_EnableStorageMaintenance(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "enableStorageMaintenance"
-		response, err := ParseAsyncResponse(apiName, "StoragePoolService", *r)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.StoragePool.NewEnableStorageMaintenanceParams("44ad900d-785b-3eff-addc-a5e6bf4927ef")
-	resp, err := client.StoragePool.EnableStorageMaintenance(params)
-	if err != nil {
-		t.Errorf("Failed to enable storage maintenance due to %v", err)
-		return
-	}
-	if resp == nil || resp.State != "Maintenance" {
-		t.Errorf("Failed to enable Storage pool maintenance")
-	}
-}
diff --git a/cloudstack/TemplateService_test.go b/cloudstack/TemplateService_test.go
deleted file mode 100644
index fa474a0..0000000
--- a/cloudstack/TemplateService_test.go
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestTemplateService_RegisterTemplate(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "registerTemplate"
-		response, err := ReadData(apiName, "TemplateService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.Template.NewRegisterTemplateParams("testTemplate", "VHD",
-		"Simulator", "testTemplate", "http://dl.openvm.eu/cloudstack/macchinina/x86_64/macchinina-xen.vhd.bz2")
-	resp, err := client.Template.RegisterTemplate(params)
-	if err != nil {
-		t.Errorf("Failed to register template due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.Count != 1 {
-		t.Errorf("Failed to register template")
-	}
-}
-
-func TestTemplateService_CreateTemplate(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "createTemplate"
-		response, err := ParseAsyncResponse(apiName, "TemplateService", *r)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.Template.NewCreateTemplateParams("createTempFromVol", "createTempFromVol", "e510f742-5fdf-11ea-9a56-1e006800018c")
-	resp, err := client.Template.CreateTemplate(params)
-	if err != nil {
-		t.Errorf("Failed to create template from volume due to %v", err)
-		return
-	}
-	if resp == nil || resp.Name != "createTempFromVol" {
-		t.Errorf("Failed to create template from volume")
-	}
-}
-
-func TestTemplateService_ExtractTemplate(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "extractTemplate"
-		response, err := ParseAsyncResponse(apiName, "TemplateService", *r)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.Template.NewExtractTemplateParams("5ce8f0b1-a910-4631-a8de-1e332bf3a6b7", "HTTP_DOWNLOAD")
-	resp, err := client.Template.ExtractTemplate(params)
-	if err != nil {
-		t.Errorf("Failed to download template due to %v", err)
-		return
-	}
-	if resp == nil || resp.Url == "" {
-		t.Errorf("Failed to download template")
-	}
-}
diff --git a/cloudstack/UserService_test.go b/cloudstack/UserService_test.go
deleted file mode 100644
index 50cdf2b..0000000
--- a/cloudstack/UserService_test.go
+++ /dev/null
@@ -1,188 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestUserService_CreateUser(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "createUser"
-		response, err := ReadData(apiName, "UserService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.User.NewCreateUserParams("admin", "user.xyz.com",
-		"firstname", "lastname", "password", "dummyUser")
-	resp, err := client.User.CreateUser(params)
-	if err != nil {
-		t.Errorf("Failed to create user due to %v", err)
-		return
-	}
-	if resp == nil || resp.Username != "dummyUser" {
-		t.Errorf("Failed to create user")
-	}
-}
-
-func TestUserService_EnableUser(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "enableUser"
-		response, err := ReadData(apiName, "UserService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.User.NewEnableUserParams("cd2b5afa-db4d-4532-88ec-1356a273e534")
-	resp, err := client.User.EnableUser(params)
-	if err != nil {
-		t.Errorf("Failed to enable user due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.State != "enabled" {
-		t.Errorf("Failed to enable user")
-	}
-}
-
-func TestUserService_DisableUser(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "disableUser"
-		response, err := ParseAsyncResponse(apiName, "UserService", *request)
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.User.NewDisableUserParams("cd2b5afa-db4d-4532-88ec-1356a273e534")
-	resp, err := client.User.DisableUser(params)
-	if err != nil {
-		t.Errorf("Failed to disable user due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.State != "disabled" {
-		t.Errorf("Failed to disable user")
-	}
-}
-
-func TestUserService_ListUser(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "listUsers"
-		response, err := ReadData(apiName, "UserService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.User.NewListUsersParams()
-	params.SetId("cd2b5afa-db4d-4532-88ec-1356a273e534")
-	resp, err := client.User.ListUsers(params)
-	if err != nil {
-		t.Errorf("Failed to list user details due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.Count != 1 {
-		t.Errorf("Failed to list user details")
-	}
-}
-
-func TestUserService_LockUser(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "lockUser"
-		response, err := ReadData(apiName, "UserService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.User.NewLockUserParams("3b7325b3-849c-4314-ad19-dd3c483b6d1a")
-	resp, err := client.User.LockUser(params)
-	if err != nil {
-		t.Errorf("Failed to lock user due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.State != "locked" {
-		t.Errorf("Failed to lock user")
-	}
-}
-
-func TestUserService_DeleteUser(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "deleteUser"
-		response, err := ReadData(apiName, "UserService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.User.NewDeleteUserParams("cd2b5afa-db4d-4532-88ec-1356a273e534")
-	resp, err := client.User.DeleteUser(params)
-	if err != nil {
-		t.Errorf("Failed to delete user due to %v", err)
-		return
-	}
-
-	if resp == nil || !resp.Success {
-		t.Errorf("Failed to delete user")
-	}
-}
-
-func TestGetUserKeys(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "getUserKeys"
-		response, err := ReadData(apiName, "UserService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.User.NewGetUserKeysParams("random-id")
-	resp, err := client.User.GetUserKeys(params)
-	if err != nil {
-		t.Errorf("Failed to get user keys due to %v", err)
-		return
-	}
-	if resp.Apikey == "" || resp.Secretkey == "" {
-		t.Errorf("Parsing failure")
-	}
-}
diff --git a/cloudstack/VLANService_test.go b/cloudstack/VLANService_test.go
deleted file mode 100644
index 82711a3..0000000
--- a/cloudstack/VLANService_test.go
+++ /dev/null
@@ -1,52 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestNetworkService_DedicateGuestVLANRange(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "dedicateGuestVlanRange"
-		response, err := ReadData(apiName, "VLANService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.VLAN.NewDedicateGuestVlanRangeParams("8e27a637-7525-49ed-81ce-52bd5e5d9ea2", "100-110")
-	params.SetAccount("admin")
-	params.SetDomainid("e4874e10-5fdf-11ea-9a56-1e006800018c")
-	resp, err := client.VLAN.DedicateGuestVlanRange(params)
-	if err != nil {
-		t.Errorf("Failed to dedicate guest VLAN range for physical network due to: %v", err)
-		return
-	}
-
-	if resp == nil || resp.Guestvlanrange != "100-110" {
-		t.Errorf("Failed to dedicate guest VLAN range for physical network")
-	}
-}
diff --git a/cloudstack/VPCService_test.go b/cloudstack/VPCService_test.go
deleted file mode 100644
index 595ce1b..0000000
--- a/cloudstack/VPCService_test.go
+++ /dev/null
@@ -1,73 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestVPCService_RestartVPC(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "restartVPC"
-		response, err := ParseAsyncResponse(apiName, "VPCService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.VPC.NewRestartVPCParams("f9ec95f3-70be-448a-8ba2-cb6388dce55a")
-
-	resp, err := client.VPC.RestartVPC(params)
-	if err != nil {
-		t.Errorf("Failed to restart VPC network due to: %v", err)
-	}
-	if resp == nil {
-		t.Errorf("Failed to restart VPC network")
-	}
-}
-
-func TestVPCService_ListVPCs(t *testing.T) {
-
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "listVPCs"
-		response, err := ParseAsyncResponse(apiName, "VPCService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.VPC.NewListVPCsParams()
-	resp, err := client.VPC.ListVPCs(params)
-
-	if err != nil {
-		t.Errorf("Failed to list VPCs due to: %v", err)
-	}
-	if resp == nil {
-		t.Errorf("Failed to list VPCs")
-	}
-}
diff --git a/cloudstack/VirtualMachineService_test.go b/cloudstack/VirtualMachineService_test.go
deleted file mode 100644
index 3cc9cdc..0000000
--- a/cloudstack/VirtualMachineService_test.go
+++ /dev/null
@@ -1,170 +0,0 @@
-//
-// 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 cloudstack
-
-import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
-	"testing"
-)
-
-func TestVirtualMachineService_DeployVirtualMachine(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "deployVirtualMachine"
-		response, err := ParseAsyncResponse(apiName, "VirtualMachineService", *r)
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.VirtualMachine.NewDeployVirtualMachineParams("498ce071-a077-4237-9492-e55c42553327",
-		"50459b99-5fe0-11ea-9a56-1e006800018c", "1d8d87d4-1425-459c-8d81-c6f57dca2bd2")
-	params.SetName("testDummyVM")
-	params.SetNetworkids([]string{"87503ba2-d59d-4a5e-8f7f-b3f486cedbd8"})
-	resp, err := client.VirtualMachine.DeployVirtualMachine(params)
-	if err != nil {
-		t.Errorf("Failed to deploy VM with given specs due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.Name != "testDummyVM" {
-		t.Errorf("Failed to deploy VM with given specs")
-	}
-}
-
-func TestVirtualMachineService_AddNicToVirtualMachine(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "addNicToVirtualMachine"
-		response, err := ParseAsyncResponse(apiName, "VirtualMachineService", *r)
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.VirtualMachine.NewAddNicToVirtualMachineParams("30358053-0f9d-4112-9948-976477896db6",
-		"915653c4-298b-4d74-bdee-4ced282114f1")
-	resp, err := client.VirtualMachine.AddNicToVirtualMachine(params)
-	if err != nil {
-		t.Errorf("Failed to add nic to VM due to %v", err)
-		return
-	}
-
-	if resp == nil || len(resp.Nic) != 2 {
-		t.Errorf("Failed to add nic to VM")
-	}
-}
-
-func TestVirtualMachineService_StopVirtualMachine(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "stopVirtualMachine"
-		response, err := ParseAsyncResponse(apiName, "VirtualMachineService", *r)
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.VirtualMachine.NewStopVirtualMachineParams("915653c4-298b-4d74-bdee-4ced282114f1")
-	resp, err := client.VirtualMachine.StopVirtualMachine(params)
-	if err != nil {
-		t.Errorf("Failed to stop VM due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.State != "Stopped" {
-		t.Errorf("Failed to stop VM")
-	}
-}
-
-func TestVirtualMachineService_StartVirtualMachine(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "startVirtualMachine"
-		response, err := ParseAsyncResponse(apiName, "VirtualMachineService", *r)
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.VirtualMachine.NewStartVirtualMachineParams("915653c4-298b-4d74-bdee-4ced282114f1")
-	resp, err := client.VirtualMachine.StartVirtualMachine(params)
-	if err != nil {
-		t.Errorf("Failed to start VM due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.State != "Running" {
-		t.Errorf("Failed to start VM")
-	}
-}
-
-func TestVirtualMachineService_ListVirtualMachines(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "listVirtualMachines"
-		response, err := ReadData(apiName, "VirtualMachineService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.VirtualMachine.NewListVirtualMachinesParams()
-	params.SetId("915653c4-298b-4d74-bdee-4ced282114f1")
-	resp, err := client.VirtualMachine.ListVirtualMachines(params)
-	if err != nil {
-		t.Errorf("Failed to list VM due to %v", err)
-		return
-	}
-
-	if resp == nil || resp.Count != 1 {
-		t.Errorf("Failed to list VM")
-	}
-}
-
-func TestVirtualMachineService_ScaleVirtualMachine(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, r *http.Request) {
-		apiName := "scaleVirtualMachine"
-		response, err := ParseAsyncResponse(apiName, "VirtualMachineService", *r)
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", true)
-	params := client.VirtualMachine.NewScaleVirtualMachineParams("88dedd6b-4fc0-44bf-b76f-441a13bc1f99", "57aba75e-5567-44c9-bfcc-c2c14503a5a6")
-	resp, err := client.VirtualMachine.ScaleVirtualMachine(params)
-	if err != nil {
-		t.Errorf("Failed to scale VM due to %v", err)
-		return
-	}
-
-	if resp == nil {
-		t.Errorf("Failed to list VM")
-	}
-}
diff --git a/cloudstack/cloudstack.go b/cloudstack/cloudstack.go
index 4933845..0e30601 100644
--- a/cloudstack/cloudstack.go
+++ b/cloudstack/cloudstack.go
@@ -39,7 +39,7 @@ import (
 	"strings"
 	"time"
 
-	gomock "github.com/golang/mock/gomock"
+	"github.com/golang/mock/gomock"
 )
 
 // UnlimitedResourceID is a special ID to define an unlimited resource
diff --git a/cloudstack/testdata/AccountServiceData.json b/cloudstack/testdata/AccountServiceData.json
deleted file mode 100644
index a673dc6..0000000
--- a/cloudstack/testdata/AccountServiceData.json
+++ /dev/null
@@ -1,154 +0,0 @@
-{
-	"listAccountsResponse": {
-		"listaccountsresponse": {
-			"account": [
-				{
-					"accountdetails": {
-						"key0": "value0",
-						"key1": "value1"
-					},
-					"accounttype": 1,
-					"cpuavailable": "Unlimited",
-					"cpulimit": "Unlimited",
-					"cputotal": 1,
-					"domain": "ROOT",
-					"domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a",
-					"groups": [],
-					"id": "62f61a73-5f5a-11e5-bc86-0242ac11180a",
-					"ipavailable": "Unlimited",
-					"iplimit": "Unlimited",
-					"iptotal": 1,
-					"isdefault": true,
-					"memoryavailable": "Unlimited",
-					"memorylimit": "Unlimited",
-					"memorytotal": 512,
-					"name": "admin",
-					"networkavailable": "Unlimited",
-					"networklimit": "Unlimited",
-					"networktotal": 1,
-					"primarystorageavailable": "Unlimited",
-					"primarystoragelimit": "Unlimited",
-					"primarystoragetotal": 2,
-					"projectavailable": "Unlimited",
-					"projectlimit": "Unlimited",
-					"projecttotal": 1,
-					"receivedbytes": 100,
-					"secondarystorageavailable": "Unlimited",
-					"secondarystoragelimit": "Unlimited",
-					"secondarystoragetotal": 0,
-					"sentbytes": 100,
-					"snapshotavailable": "Unlimited",
-					"snapshotlimit": "Unlimited",
-					"snapshottotal": 0,
-					"state": "enabled",
-					"templateavailable": "Unlimited",
-					"templatelimit": "Unlimited",
-					"templatetotal": 0,
-					"user": [
-						{
-							"account": "admin",
-							"accountid": "62f61a73-5f5a-11e5-bc86-0242ac11180a",
-							"accounttype": 1,
-							"apikey": "BFCyYeY0HhhrvNWC7FBwHTlso52ow3XWZUzNuiv03jmJOQn-5UH5BTVRVheiBnaRfYFE9yOzjwiqkbahq9P-Rw",
-							"created": "2015-09-20T05:42:31+0000",
-							"domain": "ROOT",
-							"domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a",
-							"email": "admin@mailprovider.com",
-							"firstname": "Admin",
-							"id": "62f6394b-5f5a-11e5-bc86-0242ac11180a",
-							"iscallerchilddomain": false,
-							"isdefault": true,
-							"lastname": "User",
-							"secretkey": "Em1UPdKTYEDaUxPXKtpqy_1uYluHWU2ZHotPi-VnBi_-MOEUAANoFHg3ycDProluDzYAXmT3YRssk367ylr_4A",
-							"state": "enabled",
-							"username": "admin"
-						}
-					],
-					"vmavailable": "Unlimited",
-					"vmlimit": "Unlimited",
-					"vmrunning": 1,
-					"vmtotal": 1,
-					"volumeavailable": "Unlimited",
-					"volumelimit": "Unlimited",
-					"volumetotal": 1,
-					"vpcavailable": "Unlimited",
-					"vpclimit": "Unlimited",
-					"vpctotal": 0
-				}
-			],
-			"count": 1
-		}
-	},
-	"createAccountsResponse": {
-		"createaccountresponse": {
-			"account": {
-				"accountdetails": {
-					"key0": "value0",
-					"key1": "value1"
-				},
-				"accounttype": 2,
-				"cpuavailable": "40",
-				"cpulimit": "40",
-				"cputotal": 0,
-				"domain": "ROOT",
-				"domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a",
-				"groups": [],
-				"id": "c9cb9df8-dcd5-44c5-a40d-2e7d266669a6",
-				"ipavailable": "20",
-				"iplimit": "20",
-				"iptotal": 0,
-				"isdefault": false,
-				"memoryavailable": "40960",
-				"memorylimit": "40960",
-				"memorytotal": 0,
-				"name": "user01",
-				"networkavailable": "20",
-				"networklimit": "20",
-				"networktotal": 0,
-				"primarystorageavailable": "200",
-				"primarystoragelimit": "200",
-				"primarystoragetotal": 0,
-				"projectavailable": "Unlimited",
-				"projectlimit": "Unlimited",
-				"projecttotal": 0,
-				"secondarystorageavailable": "400",
-				"secondarystoragelimit": "400",
-				"secondarystoragetotal": 0,
-				"snapshotavailable": "20",
-				"snapshotlimit": "20",
-				"snapshottotal": 0,
-				"state": "enabled",
-				"templateavailable": "20",
-				"templatelimit": "20",
-				"templatetotal": 0,
-				"user": [
-					{
-						"account": "user01",
-						"accountid": "c9cb9df8-dcd5-44c5-a40d-2e7d266669a6",
-						"accounttype": 2,
-						"created": "2016-07-26T02:17:17+0000",
-						"domain": "ROOT",
-						"domainid": "62f5fe2e-5f5a-11e5-bc86-0242ac11180a",
-						"email": "user01@example.com",
-						"firstname": "user01",
-						"id": "1d69ac45-a8f7-469c-ab24-d2b0382fa8be",
-						"iscallerchilddomain": false,
-						"isdefault": false,
-						"lastname": "user01",
-						"state": "enabled",
-						"username": "user01"
-					}
-				],
-				"vmavailable": "20",
-				"vmlimit": "20",
-				"vmtotal": 0,
-				"volumeavailable": "20",
-				"volumelimit": "20",
-				"volumetotal": 0,
-				"vpcavailable": "20",
-				"vpclimit": "20",
-				"vpctotal": 0
-			}
-		}
-	}
-}
diff --git a/cloudstack/testdata/AddressServiceData.json b/cloudstack/testdata/AddressServiceData.json
deleted file mode 100644
index 5073dae..0000000
--- a/cloudstack/testdata/AddressServiceData.json
+++ /dev/null
@@ -1,80 +0,0 @@
-{
-  "associateIpAddress": {
-    "associateIpAddress": {
-      "associateipaddressresponse": {
-        "id": "dc51835f-b0e2-4a2e-91a4-6cccc44bdae3",
-        "jobid": "8e805516-1729-46cf-a7d0-7289d523871e"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-        "cmd": "org.apache.cloudstack.api.command.admin.address.AssociateIPAddrCmdByAdmin",
-        "jobstatus": 1,
-        "jobprocstatus": 0,
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobresult": {
-          "ipaddress": {
-            "id": "dc51835f-b0e2-4a2e-91a4-6cccc44bdae3",
-            "ipaddress": "10.70.3.100",
-            "allocated": "2021-10-01T16:25:11+0000",
-            "zoneid": "3fc049b0-87ae-4d77-90c1-cce70da17db6",
-            "zonename": "testAdvZone2",
-            "issourcenat": true,
-            "account": "admin",
-            "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-            "domain": "ROOT",
-            "forvirtualnetwork": true,
-            "vlanid": "2e86e486-b472-4f12-a9b2-bb73701241e0",
-            "vlanname": "vlan://untagged",
-            "isstaticnat": false,
-            "issystem": false,
-            "associatednetworkid": "cf8056db-25e1-49d1-b023-f13a717e5ecc",
-            "associatednetworkname": "test-adv-network",
-            "networkid": "f17d38db-4810-437e-be28-d38cd30e3034",
-            "state": "Allocating",
-            "physicalnetworkid": "0d6c1e76-2d83-459a-bbce-c133fbd732b7",
-            "tags": [],
-            "isportable": false,
-            "fordisplay": true
-          }
-        },
-        "jobinstancetype": "IpAddress",
-        "jobinstanceid": "dc51835f-b0e2-4a2e-91a4-6cccc44bdae3",
-        "created": "2021-10-01T16:25:12+0000",
-        "completed": "2021-10-01T16:25:12+0000",
-        "jobid": "8e805516-1729-46cf-a7d0-7289d523871e"
-      }
-    }
-  },
-  "disassociateIpAddress": {
-    "disassociateIpAddress": {
-      "disassociateipaddressresponse": {
-        "jobid": "44fc961e-9d57-4313-9f11-7556508b319c"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-      "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-      "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-      "cmd": "org.apache.cloudstack.api.command.user.address.DisassociateIPAddrCmd",
-      "jobstatus": 1,
-      "jobprocstatus": 0,
-      "jobresultcode": 0,
-      "jobresulttype": "object",
-      "jobresult": {
-        "success": true
-      },
-      "jobinstancetype": "IpAddress",
-      "jobinstanceid": "a767fbe1-ed7a-4d7c-8221-c7d736ca622d",
-      "created": "2021-10-01T16:42:32+0000",
-      "completed": "2021-10-01T16:42:33+0000",
-      "jobid": "44fc961e-9d57-4313-9f11-7556508b319c"
-      }
-    }
-  }
-}
-
-
diff --git a/cloudstack/testdata/AffinityGroupServiceData.json b/cloudstack/testdata/AffinityGroupServiceData.json
deleted file mode 100644
index a398e22..0000000
--- a/cloudstack/testdata/AffinityGroupServiceData.json
+++ /dev/null
@@ -1,36 +0,0 @@
-{
-  "createAffinityGroup": {
-    "createAffinityGroup": {
-      "createaffinitygroupresponse": {
-        "id": "5059d7e3-9213-448d-9314-6ae4e1d95a33",
-        "jobid": "58e969e8-768b-44d0-b278-fd1b2f236c00"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-        "cmd": "org.apache.cloudstack.api.command.user.affinitygroup.CreateAffinityGroupCmd",
-        "jobstatus": 1,
-        "jobprocstatus": 0,
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobresult": {
-          "affinitygroup": {
-            "id": "5059d7e3-9213-448d-9314-6ae4e1d95a33",
-            "name": "testAffinityGroup",
-            "description": "testAffinityGroup",
-            "account": "admin",
-            "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-            "domain": "ROOT",
-            "type": "host affinity"
-          }
-        },
-        "jobinstancetype": "AffinityGroup",
-        "created": "2021-10-01T16:59:04+0000",
-        "completed": "2021-10-01T16:59:04+0000",
-        "jobid": "58e969e8-768b-44d0-b278-fd1b2f236c00"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/cloudstack/testdata/CertificateServiceData.json b/cloudstack/testdata/CertificateServiceData.json
deleted file mode 100644
index df1ef3e..0000000
--- a/cloudstack/testdata/CertificateServiceData.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
-  "uploadCustomCertificate": {
-    "uploadCustomCertificate": {
-      "uploadcustomcertificateresponse": {
-        "jobid": "bb14e24d-af95-4d9d-8ead-e4f42ccd83f7"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "3bcbd8be-19eb-11ec-83a0-1e00bd000159",
-        "userid": "3bcd30ee-19eb-11ec-83a0-1e00bd000159",
-        "cmd": "org.apache.cloudstack.api.command.admin.resource.UploadCustomCertificateCmd",
-        "jobstatus": 1,
-        "jobprocstatus": 0,
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobresult": {
-          "customcertificate": {
-            "message": "Certificate has been successfully updated, if its the server certificate we would reboot all running console proxy VMs and secondary storage VMs to propagate the new certificate, please give a few minutes for console access and storage services service to be up and working again"
-          }
-        },
-        "created": "2021-10-02T07:43:59+0000",
-        "completed": "2021-10-02T07:43:59+0000",
-        "jobid": "bb14e24d-af95-4d9d-8ead-e4f42ccd83f7"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/cloudstack/testdata/FirewallServiceData.json b/cloudstack/testdata/FirewallServiceData.json
deleted file mode 100644
index 6edf39b..0000000
--- a/cloudstack/testdata/FirewallServiceData.json
+++ /dev/null
@@ -1,123 +0,0 @@
-{
-  "createFirewallRule": {
-    "createFirewallRule": {
-      "createfirewallruleresponse": {
-        "id": "fb4ad2ee-02c8-433e-a769-6f18afddc750",
-        "jobid": "104d5139-91dc-40a1-af2b-a94730e42e89"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94",
-        "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94",
-        "cmd": "org.apache.cloudstack.api.command.user.firewall.CreateFirewallRuleCmd",
-        "jobstatus": 1,
-        "jobprocstatus": 0,
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobresult": {
-          "firewallrule": {
-            "id": "fb4ad2ee-02c8-433e-a769-6f18afddc750",
-            "protocol": "tcp",
-            "ipaddressid": "a4aa35ef-34ad-4332-9247-378c83b8f927",
-            "networkid": "c4a3303c-376d-4d56-b336-1bd91cb130b6",
-            "ipaddress": "192.168.2.4",
-            "state": "Active",
-            "cidrlist": "0.0.0.0/0",
-            "tags": [],
-            "fordisplay": true
-            }
-          },
-        "jobinstancetype": "FirewallRule",
-        "jobinstanceid": "fb4ad2ee-02c8-433e-a769-6f18afddc750",
-        "created": "2021-10-02T23:20:07+0530",
-        "completed": "2021-10-02T23:20:07+0530",
-        "jobid": "104d5139-91dc-40a1-af2b-a94730e42e89"
-        }
-      }
-    },
-    "deleteFirewallRule": {
-      "deleteFirewallRule": {
-        "deletefirewallruleresponse": {
-          "jobid": "6ae96f78-1c28-45f9-a30b-761ac5f3a87b"
-        }
-      },
-      "queryAsyncJobResult": {
-        "queryasyncjobresultresponse": {
-          "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94",
-          "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94",
-          "cmd": "org.apache.cloudstack.api.command.user.firewall.DeleteFirewallRuleCmd",
-          "jobstatus": 1,
-          "jobprocstatus": 0,
-          "jobresultcode": 0,
-          "jobresulttype": "object",
-          "jobresult": {
-            "success": true
-           },
-        "created": "2021-10-02T23:25:22+0530",
-        "completed": "2021-10-02T23:25:22+0530",
-        "jobid": "6ae96f78-1c28-45f9-a30b-761ac5f3a87b"
-        }
-      }
-    },
-  "createEgressFirewallRule": {
-    "createEgressFirewallRule": {
-      "createegressfirewallruleresponse": {
-        "id": "b7d8b539-8c72-4d25-8539-625f665681ad",
-        "jobid": "8841a004-eb50-4d4e-aed5-7bc2494dc856"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-      "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94",
-      "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94",
-      "cmd": "org.apache.cloudstack.api.command.user.firewall.CreateEgressFirewallRuleCmd",
-      "jobstatus": 1,
-      "jobprocstatus": 0,
-      "jobresultcode": 0,
-      "jobresulttype": "object",
-      "jobresult": {
-        "firewallrule": {
-        "id": "b7d8b539-8c72-4d25-8539-625f665681ad",
-        "protocol": "tcp",
-        "networkid": "c4a3303c-376d-4d56-b336-1bd91cb130b6",
-        "state": "Active",
-        "cidrlist": "10.1.1.0/24",
-        "tags": [],
-        "fordisplay": true,
-        "destcidrlist": ""
-         }
-        },
-      "jobinstancetype": "FirewallRule",
-      "jobinstanceid": "b7d8b539-8c72-4d25-8539-625f665681ad",
-      "created": "2021-10-02T23:29:41+0530",
-      "completed": "2021-10-02T23:29:41+0530",
-      "jobid": "8841a004-eb50-4d4e-aed5-7bc2494dc856"
-      }
-    }
-  },
-  "deleteEgressFirewallRule": {
-    "deleteEgressFirewallRule": {
-      "deleteegressfirewallruleresponse": {
-        "jobid": "91b10008-2e9f-412d-afa6-3c54a0bb19f5"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "bc1b501c-1d18-11ec-9173-50eb7122da94",
-        "userid": "bc1b6b47-1d18-11ec-9173-50eb7122da94",
-        "cmd": "org.apache.cloudstack.api.command.user.firewall.DeleteEgressFirewallRuleCmd",
-        "jobstatus": 1,
-        "jobprocstatus": 0,
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobresult": {
-        "success": true
-       },
-      "created": "2021-10-02T23:32:08+0530",
-      "completed": "2021-10-02T23:32:08+0530",
-      "jobid": "91b10008-2e9f-412d-afa6-3c54a0bb19f5"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/cloudstack/testdata/NetworkACLServiceData.json b/cloudstack/testdata/NetworkACLServiceData.json
deleted file mode 100644
index fffac7d..0000000
--- a/cloudstack/testdata/NetworkACLServiceData.json
+++ /dev/null
@@ -1,32 +0,0 @@
-{
-  "updateNetworkACLList": {
-    "updateNetworkACLList": {
-      "updatenetworkacllistresponse": {
-        "jobid": "6dd51379-b8cf-422c-a6ef-f96c07798c97"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-        "cmd": "org.apache.cloudstack.api.command.user.network.UpdateNetworkACLListCmd",
-        "jobstatus": 1,
-        "jobprocstatus": 0,
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobresult": {
-          "networkacllist": {
-            "id": "a31e11a0-57fe-41df-be7a-34d359673061",
-            "name": "test",
-            "description": "testtest",
-            "vpcid": "40419d33-6d48-4c54-ae2e-5c312b401593",
-            "fordisplay": true
-          }
-        },
-        "created": "2021-10-13T04:46:30+0000",
-        "completed": "2021-10-13T04:46:30+0000",
-        "jobid": "6dd51379-b8cf-422c-a6ef-f96c07798c97"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/cloudstack/testdata/ProjectServiceData.json b/cloudstack/testdata/ProjectServiceData.json
deleted file mode 100644
index 907bff0..0000000
--- a/cloudstack/testdata/ProjectServiceData.json
+++ /dev/null
@@ -1,312 +0,0 @@
-{
-  "createProject": {
-    "createProject": {
-      "createprojectresponse": {
-        "id": "69646881-8d7f-4800-987d-106698a42608",
-        "jobid": "0666daab-af9b-4001-ae70-78ac6bc697e8"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-        "cmd": "org.apache.cloudstack.api.command.user.project.CreateProjectCmd",
-        "jobstatus": 1,
-        "jobprocstatus": 0,
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobresult": {
-          "project": {
-            "id": "69646881-8d7f-4800-987d-106698a42608",
-            "name": "testProject",
-            "displaytext": "testProject",
-            "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-            "domain": "ROOT",
-            "owner": [
-              {
-              "account": "admin"
-              }
-            ],
-            "projectaccountname": "PrjAcct-testProject-1",
-            "state": "Active",
-            "tags": [],
-            "networklimit": "20",
-            "networktotal": 0,
-            "networkavailable": "20",
-            "vpclimit": "20",
-            "vpctotal": 0,
-            "vpcavailable": "20",
-            "cpulimit": "40",
-            "cputotal": 0,
-            "cpuavailable": "40",
-            "memorylimit": "40960",
-            "memorytotal": 0,
-            "memoryavailable": "40960",
-            "primarystoragelimit": "200",
-            "primarystoragetotal": 0,
-            "primarystorageavailable": "200",
-            "secondarystoragelimit": "400",
-            "secondarystoragetotal": 0,
-            "secondarystorageavailable": "400.0",
-            "vmlimit": "20",
-            "vmtotal": 0,
-            "vmavailable": "20",
-            "iplimit": "20",
-            "iptotal": 0,
-            "ipavailable": "20",
-            "volumelimit": "20",
-            "volumetotal": 0,
-            "volumeavailable": "20",
-            "snapshotlimit": "20",
-            "snapshottotal": 0,
-            "snapshotavailable": "20",
-            "templatelimit": "20",
-            "templatetotal": 0,
-            "templateavailable": "20",
-            "vmstopped": 0,
-            "vmrunning": 0
-            }
-          },
-        "jobinstancetype": "None",
-        "created": "2021-10-04T06:21:54+0000",
-        "completed": "2021-10-04T06:21:54+0000",
-        "jobid": "0666daab-af9b-4001-ae70-78ac6bc697e8"
-      }
-    }
-  },
-  "activateProject": {
-    "activateProject": {
-      "activaterojectresponse": {
-        "jobid": "fa12a90a-29fc-43c0-8cbd-5be49b72ed22"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-      "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-      "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-      "cmd": "org.apache.cloudstack.api.command.user.project.ActivateProjectCmd",
-      "jobstatus": 1,
-      "jobprocstatus": 0,
-      "jobresultcode": 0,
-      "jobresulttype": "object",
-      "jobresult": {
-        "project": {
-        "id": "99a842a4-e50f-4265-8ca7-249959506c13",
-        "name": "Admin Project",
-        "displaytext": "Admin Project",
-        "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-        "domain": "ROOT",
-        "owner": [
-          {
-            "account": "admin"
-          }
-        ],
-        "projectaccountname": "PrjAcct-Admin Project-1",
-        "state": "Active",
-        "tags": [],
-        "networklimit": "20",
-        "networktotal": 0,
-        "networkavailable": "20",
-        "vpclimit": "20",
-        "vpctotal": 0,
-        "vpcavailable": "20",
-        "cpulimit": "40",
-        "cputotal": 0,
-        "cpuavailable": "40",
-        "memorylimit": "40960",
-        "memorytotal": 0,
-        "memoryavailable": "40960",
-        "primarystoragelimit": "200",
-        "primarystoragetotal": 0,
-        "primarystorageavailable": "200",
-        "secondarystoragelimit": "400",
-        "secondarystoragetotal": 0,
-        "secondarystorageavailable": "400.0",
-        "vmlimit": "20",
-        "vmtotal": 0,
-        "vmavailable": "20",
-        "iplimit": "20",
-        "iptotal": 0,
-        "ipavailable": "20",
-        "volumelimit": "20",
-        "volumetotal": 0,
-        "volumeavailable": "20",
-        "snapshotlimit": "20",
-        "snapshottotal": 0,
-        "snapshotavailable": "20",
-        "templatelimit": "20",
-        "templatetotal": 0,
-        "templateavailable": "20",
-        "vmstopped": 0,
-        "vmrunning": 0
-        }
-      },
-      "created": "2021-10-04T06:30:39+0000",
-      "completed": "2021-10-04T06:30:39+0000",
-      "jobid": "fa12a90a-29fc-43c0-8cbd-5be49b72ed22"
-      }
-    }
-  },
-  "suspendProject": {
-    "suspendProject": {
-      "suspendprojectresponse": {
-        "jobid": "608f4d53-ceae-4747-9c0d-e8c15fc52135"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-      "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-      "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-      "cmd": "org.apache.cloudstack.api.command.user.project.SuspendProjectCmd",
-      "jobstatus": 1,
-      "jobprocstatus": 0,
-      "jobresultcode": 0,
-      "jobresulttype": "object",
-      "jobresult": {
-      "project": {
-        "id": "99a842a4-e50f-4265-8ca7-249959506c13",
-        "name": "Admin Project",
-        "displaytext": "Admin Project",
-        "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-        "domain": "ROOT",
-        "owner": [
-          {
-            "account": "admin"
-          }
-        ],
-        "projectaccountname": "PrjAcct-Admin Project-1",
-        "state": "Suspended",
-        "tags": [],
-        "networklimit": "20",
-        "networktotal": 0,
-        "networkavailable": "20",
-        "vpclimit": "20",
-        "vpctotal": 0,
-        "vpcavailable": "20",
-        "cpulimit": "40",
-        "cputotal": 0,
-        "cpuavailable": "40",
-        "memorylimit": "40960",
-        "memorytotal": 0,
-        "memoryavailable": "40960",
-        "primarystoragelimit": "200",
-        "primarystoragetotal": 0,
-        "primarystorageavailable": "200",
-        "secondarystoragelimit": "400",
-        "secondarystoragetotal": 0,
-        "secondarystorageavailable": "400.0",
-        "vmlimit": "20",
-        "vmtotal": 0,
-        "vmavailable": "20",
-        "iplimit": "20",
-        "iptotal": 0,
-        "ipavailable": "20",
-        "volumelimit": "20",
-        "volumetotal": 0,
-        "volumeavailable": "20",
-        "snapshotlimit": "20",
-        "snapshottotal": 0,
-        "snapshotavailable": "20",
-        "templatelimit": "20",
-        "templatetotal": 0,
-        "templateavailable": "20",
-        "vmstopped": 0,
-        "vmrunning": 0
-        }
-      },
-      "created": "2021-10-04T06:34:01+0000",
-      "completed": "2021-10-04T06:34:01+0000",
-      "jobid": "608f4d53-ceae-4747-9c0d-e8c15fc52135"
-      }
-    }
-  },
-  "updateProject": {
-    "updateProject": {
-      "updateprojectresponse": {
-        "jobid": "1330d540-c099-4943-ac22-3fd5846c0e5b"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-        "cmd": "org.apache.cloudstack.api.command.user.project.UpdateProjectCmd",
-        "jobstatus": 1,
-        "jobprocstatus": 0,
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobresult": {
-        "project": {
-        "id": "69646881-8d7f-4800-987d-106698a42608",
-        "name": "testProject",
-        "displaytext": "testProjectUpdate",
-        "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-        "domain": "ROOT",
-        "owner": [
-          {
-            "account": "admin"
-          }
-        ],
-        "projectaccountname": "PrjAcct-testProject-1",
-        "state": "Active",
-        "tags": [],
-        "networklimit": "20",
-        "networktotal": 0,
-        "networkavailable": "20",
-        "vpclimit": "20",
-        "vpctotal": 0,
-        "vpcavailable": "20",
-        "cpulimit": "40",
-        "cputotal": 0,
-        "cpuavailable": "40",
-        "memorylimit": "40960",
-        "memorytotal": 0,
-        "memoryavailable": "40960",
-        "primarystoragelimit": "200",
-        "primarystoragetotal": 0,
-        "primarystorageavailable": "200",
-        "secondarystoragelimit": "400",
-        "secondarystoragetotal": 0,
-        "secondarystorageavailable": "400.0",
-        "vmlimit": "20",
-        "vmtotal": 0,
-        "vmavailable": "20",
-        "iplimit": "20",
-        "iptotal": 0,
-        "ipavailable": "20",
-        "volumelimit": "20",
-        "volumetotal": 0,
-        "volumeavailable": "20",
-        "snapshotlimit": "20",
-        "snapshottotal": 0,
-        "snapshotavailable": "20",
-        "templatelimit": "20",
-        "templatetotal": 0,
-        "templateavailable": "20",
-        "vmstopped": 0,
-        "vmrunning": 0
-        }
-      },
-      "created": "2021-10-04T06:35:29+0000",
-      "completed": "2021-10-04T06:35:29+0000",
-      "jobid": "1330d540-c099-4943-ac22-3fd5846c0e5b"
-      }
-    }
-  },
-  "listProjectRolePermissions": {
-    "listprojectrolepermissionsresponse": {
-      "count": 1,
-      "projectrolepermission": [
-        {
-          "id": "e68daeca-556f-4fd2-b4ee-378cb994ef76",
-          "projectroleid": "fa089002-d055-46b5-aa0a-18f2eae2b4fc",
-          "projectid": "69646881-8d7f-4800-987d-106698a42608",
-          "projectrolename": "testProjectPerm",
-          "rule": "activateProject",
-          "permission": "deny",
-          "description": ""
-        }
-      ]
-    }
-  }
-}
\ No newline at end of file
diff --git a/cloudstack/testdata/ResourceTagsServiceData.json b/cloudstack/testdata/ResourceTagsServiceData.json
deleted file mode 100644
index e8419e0..0000000
--- a/cloudstack/testdata/ResourceTagsServiceData.json
+++ /dev/null
@@ -1,50 +0,0 @@
-{
-  "createTags": {
-    "createTags": {
-      "createtagsresponse": {
-        "jobid": "fb96bb6b-c192-492d-9671-42cea59a3709"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-        "cmd": "org.apache.cloudstack.api.command.user.tag.CreateTagsCmd",
-        "completed": "2021-10-04T06:58:35+0000",
-        "created": "2021-10-04T06:58:35+0000",
-        "jobid": "4901a56e-60aa-4385-8ab6-8f9591ef0469",
-        "jobprocstatus": 0,
-        "jobresult": {
-          "success": true
-         },
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobstatus": 1,
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c"
-      }
-    }
-  },
-  "deleteTags": {
-    "deleteTags": {
-      "deletetagsresponse": {
-        "jobid": "494d0f35-057a-4cc7-bf5d-b52d3b803a36"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-        "cmd": "org.apache.cloudstack.api.command.user.tag.DeleteTagsCmd",
-        "completed": "2021-10-04T07:07:22+0000",
-        "created": "2021-10-04T07:07:22+0000",
-        "jobid": "494d0f35-057a-4cc7-bf5d-b52d3b803a36",
-        "jobprocstatus": 0,
-        "jobresult": {
-          "success": true
-          },
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobstatus": 1,
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/cloudstack/testdata/SSHServiceData.json b/cloudstack/testdata/SSHServiceData.json
deleted file mode 100644
index b782bf2..0000000
--- a/cloudstack/testdata/SSHServiceData.json
+++ /dev/null
@@ -1,145 +0,0 @@
-{
-  "createSSHKeyPair": {
-    "createsshkeypairresponse": {
-      "keypair": {
-        "privatekey": "-----BEGIN RSA PRIVATE KEY-----\nMIIEowIBAAKCAQEAlMDlCrzlmEBwmPmQBhvD4PeRdEUV2tyoEuLLwkg7FkZFrjdd\nZaC8+N82Jm/lr27sqq5xVoo6n54k3hG9HVxNZjQBY5IiRNeQIF30Ye5c6TzboCCH\nAJVZYf4Dj5ucJvxg+V1+rZMNNJs6y2tMRGfmQ9zdrHZwOutKBeWTlGLtXyMabc5o\nVVe4hjngxh7s+CbEAA8oE9KFk1ZyhJ7SDj6G9vrMoBYNgqNGG6DHF/NM0A0yaEnj\nZU5MECXnw9qT7W8ggy5UM9AYtfzAyWBrS3jDwFgOjEZ+TW7vvC1Q3lnGkzpTHlye\nRppPm/7Xa8xapIdDV2UdEXnChHj9+Jwpa5nBJQIDAQABAoIBABaReW56oD7MMAkV\ne+NhXQOJq/i+7oTpC1rqK83LFaPYf4PiBHqBu4nq [...]
-        "name": "testSSHKey",
-        "account": "admin",
-        "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-        "domain": "ROOT",
-        "fingerprint": "3b:f7:0b:34:40:0d:a5:3c:2a:75:f8:82:1d:88:99:36"
-      }
-    }
-  },
-  "listSSHKeyPairs": {
-    "listsshkeypairsresponse": {
-      "count": 1,
-      "sshkeypair": [
-        {
-          "account": "admin",
-          "domain": "ROOT",
-          "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-          "fingerprint": "3b:f7:0b:34:40:0d:a5:3c:2a:75:f8:82:1d:88:99:36",
-          "name": "testSSHKey"
-        }
-      ]
-    }
-  },
-  "resetSSHKeyForVirtualMachine": {
-    "resetSSHKeyForVirtualMachine": {
-      "resetSSHKeyforvirtualmachineresponse": {
-        "jobid": "da766971-3902-4675-9cf2-8bcb2398aba3"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-      "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-      "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-      "cmd": "org.apache.cloudstack.api.command.admin.vm.ResetVMSSHKeyCmdByAdmin",
-      "jobstatus": 1,
-      "jobprocstatus": 0,
-      "jobresultcode": 0,
-      "jobresulttype": "object",
-      "jobresult": {
-        "virtualmachine": {
-        "id": "8aa29529-b238-45f3-8992-5befadcd8bb0",
-        "name": "Admin-VPC-T3-VM",
-        "displayname": "abc12",
-        "account": "admin",
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-        "username": "admin",
-        "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-        "domain": "ROOT",
-        "created": "2021-07-05T09:16:22+0000",
-        "state": "Stopped",
-        "haenable": false,
-        "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2",
-        "zonename": "shouldwork",
-        "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c",
-        "templatename": "CentOS 5.6 (64-bit)",
-        "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI",
-        "passwordenabled": false,
-        "serviceofferingid": "79802d1a-186b-4e34-a550-220987cb03c2",
-        "serviceofferingname": "const1",
-        "diskofferingid": "3d321179-f9c6-4a77-8f47-6fae3a8126d1",
-        "diskofferingname": "Medium",
-        "backupofferingid": "7c42d74e-c029-4431-9025-6caa8b903472",
-        "backupofferingname": "BackupGoldDummy",
-        "cpunumber": 1,
-        "cpuspeed": 1000,
-        "memory": 256,
-        "cpuused": "10%",
-        "networkkbsread": 209485824,
-        "networkkbswrite": 104742912,
-        "diskkbsread": 0,
-        "diskkbswrite": 0,
-        "memorykbs": 0,
-        "memoryintfreekbs": 0,
-        "memorytargetkbs": 0,
-        "diskioread": 0,
-        "diskiowrite": 0,
-        "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-        "rootdeviceid": 1,
-        "rootdevicetype": "DATADISK",
-        "securitygroup": [],
-        "nic": [
-          {
-          "id": "511941ff-229d-4a3b-8b09-f83b0608ed6b",
-          "networkid": "30358053-0f9d-4112-9948-976477896db6",
-          "networkname": "test-network-2",
-          "netmask": "255.255.255.0",
-          "gateway": "10.1.2.1",
-          "ipaddress": "10.1.2.71",
-          "traffictype": "Guest",
-          "type": "Isolated",
-          "isdefault": true,
-          "macaddress": "02:00:35:ff:00:0c",
-          "secondaryip": [],
-          "extradhcpoption": []
-          },
-          {
-          "id": "186e56ee-8de8-4869-ac00-dc91dc51d6f2",
-          "networkid": "6463e120-c36a-4569-aaa7-729922a55825",
-          "networkname": "sw1",
-          "traffictype": "Guest",
-          "type": "L2",
-          "isdefault": false,
-          "macaddress": "02:00:3d:a2:00:02",
-          "secondaryip": [],
-          "extradhcpoption": []
-          }
-        ],
-        "hypervisor": "Simulator",
-        "instancename": "i-2-613-QA",
-        "details": {
-          "cpuNumber": "1",
-          "memory": "256",
-          "Message.ReservedCapacityFreed.Flag": "true",
-          "SSH.PublicKey": "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCUwOUKvOWYQHCY+ZAGG8Pg95F0RRXa3KgS4svCSDsWRkWuN11loLz43zYmb+WvbuyqrnFWijqfniTeEb0dXE1mNAFjkiJE15AgXfRh7lzpPNugIIcAlVlh/gOPm5wm/GD5XX6tkw00mzrLa0xEZ+ZD3N2sdnA660oF5ZOUYu1fIxptzmhVV7iGOeDGHuz4JsQADygT0oWTVnKEntIOPob2+sygFg2Co0YboMcX80zQDTJoSeNlTkwQJefD2pPtbyCDLlQz0Bi1/MDJYGtLeMPAWA6MRn5Nbu+8LVDeWcaTOlMeXJ5Gmk+b/tdrzFqkh0NXZR0RecKEeP34nClrmcEl \n",
-          "Encrypted.Password": "YcyvikAL5LHq4gXwGVE3yW0j7iuuTWcxnMpYQDqHn+6R1agzIibv3eoF1onUFgHYQ0XtJUzMR4QfZDzlHnqYDTB+rKjjc9YcZzWhVSoVKQ45bUqAKFBXJTfDLQ3ZmvULxJ2VXf/HuuOh5Th5S62bP68QrrVCMPUArUYRRFPw0EkQVdvjwF1raNXpKWDAtcwITaroxW0pL9S8ome5R7JHKPxyK9G8/lqC4ywodvPaG+vGV0eHTiQeUab/dQ8Pxze6Ny88uwv8oH2vu+zMbs91uDDL9lMl7WV5Rq6RucKRAjOBLfPj+f+8jq3xnCG8JzUa63G2lAvP9qIzk3eYzoeYkw=="
-          },
-        "keypair": "testSSHKey",
-        "affinitygroup": [],
-        "displayvm": true,
-        "isdynamicallyscalable": false,
-        "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-        "osdisplayname": "CentOS 5.6 (64-bit)",
-        "tags": [],
-        "jobid": "da766971-3902-4675-9cf2-8bcb2398aba3",
-        "jobstatus": 0
-        }
-      },
-      "jobinstancetype": "VirtualMachine",
-      "jobinstanceid": "8aa29529-b238-45f3-8992-5befadcd8bb0",
-      "created": "2021-10-04T07:39:55+0000",
-      "completed": "2021-10-04T07:39:55+0000",
-      "jobid": "da766971-3902-4675-9cf2-8bcb2398aba3"
-      }
-    }
-  },
-  "deleteSSHKeyPair": {
-    "deletesshkeypairresponse": {
-      "success": true
-    }
-  }
-}
\ No newline at end of file
diff --git a/cloudstack/testdata/VPCServiceData.json b/cloudstack/testdata/VPCServiceData.json
deleted file mode 100644
index 595f832..0000000
--- a/cloudstack/testdata/VPCServiceData.json
+++ /dev/null
@@ -1,336 +0,0 @@
-{
-  "restartVPC": {
-    "restartVPC": {
-      "restartvpcresponse": {
-        "jobid": "98272f42-917c-4286-8c05-4e38d85d32e0"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "0644f184-269b-11ec-ad12-1e00bc0003a5",
-        "userid": "06466ac0-269b-11ec-ad12-1e00bc0003a5",
-        "cmd": "org.apache.cloudstack.api.command.user.vpc.RestartVPCCmd",
-        "jobstatus": 1,
-        "jobprocstatus": 0,
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobresult": {
-          "success": true
-        },
-        "created": "2021-10-13T04:36:30+0000",
-        "completed": "2021-10-13T04:36:30+0000",
-        "jobid": "98272f42-917c-4286-8c05-4e38d85d32e0"
-      }
-    }
-  },
-  "listVPCs": {
-    "listVPCs": {
-      "listvpcresponse": {
-        "count": 2,
-        "vpc": [
-          {
-            "id": "49b5fa29-e98f-4078-b407-7e7928105ec0",
-            "name": "my-vpc",
-            "displaytext": "my-vpc-text",
-            "state": "Enabled",
-            "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81",
-            "zonename": "SimZone1",
-            "service": [
-              { "name": "Dns", "provider": [{ "name": "VpcVirtualRouter" }] },
-              { "name": "Dhcp", "provider": [{ "name": "VpcVirtualRouter" }] },
-              {
-                "name": "PortForwarding",
-                "provider": [{ "name": "VpcVirtualRouter" }]
-              },
-              {
-                "name": "StaticNat",
-                "provider": [{ "name": "VpcVirtualRouter" }]
-              },
-              { "name": "Vpn", "provider": [{ "name": "VpcVirtualRouter" }] },
-              {
-                "name": "SourceNat",
-                "provider": [{ "name": "VpcVirtualRouter" }]
-              },
-              {
-                "name": "NetworkACL",
-                "provider": [{ "name": "VpcVirtualRouter" }]
-              },
-              {
-                "name": "UserData",
-                "provider": [{ "name": "VpcVirtualRouter" }]
-              },
-              {
-                "name": "Lb",
-                "provider": [
-                  { "name": "VpcVirtualRouter" },
-                  { "name": "InternalLbVm" }
-                ]
-              }
-            ],
-            "cidr": "10.0.0.0/8",
-            "vpcofferingid": "8142b164-0fa2-40c6-9067-2a90ae526df5",
-            "vpcofferingname": "Default VPC offering",
-            "created": "2021-12-26T22:26:18+0000",
-            "account": "admin",
-            "domainid": "bbae9696-627f-11ec-8fb6-0242ac110002",
-            "domain": "ROOT",
-            "network": [],
-            "restartrequired": false,
-            "networkdomain": "my-domain",
-            "tags": [{ "key": "my-tag", "value": "true" }],
-            "fordisplay": true,
-            "distributedvpcrouter": false,
-            "regionlevelvpc": false,
-            "redundantvpcrouter": false,
-            "hasannotations": false
-          },
-          {
-            "id": "78d49100-e4af-4692-9a49-284fa2444eb9",
-            "name": "my-vpc",
-            "displaytext": "my-vpc",
-            "state": "Enabled",
-            "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81",
-            "zonename": "SimZone1",
-            "service": [
-              { "name": "Dns", "provider": [{ "name": "VpcVirtualRouter" }] },
-              { "name": "Dhcp", "provider": [{ "name": "VpcVirtualRouter" }] },
-              {
-                "name": "PortForwarding",
-                "provider": [{ "name": "VpcVirtualRouter" }]
-              },
-              {
-                "name": "StaticNat",
-                "provider": [{ "name": "VpcVirtualRouter" }]
-              },
-              { "name": "Vpn", "provider": [{ "name": "VpcVirtualRouter" }] },
-              {
-                "name": "SourceNat",
-                "provider": [{ "name": "VpcVirtualRouter" }]
-              },
-              {
-                "name": "NetworkACL",
-                "provider": [{ "name": "VpcVirtualRouter" }]
-              },
-              {
-                "name": "UserData",
-                "provider": [{ "name": "VpcVirtualRouter" }]
-              },
-              {
-                "name": "Lb",
-                "provider": [
-                  { "name": "VpcVirtualRouter" },
-                  { "name": "InternalLbVm" }
-                ]
-              }
-            ],
-            "cidr": "10.0.0.0/8",
-            "vpcofferingid": "8142b164-0fa2-40c6-9067-2a90ae526df5",
-            "vpcofferingname": "Default VPC offering",
-            "created": "2021-12-26T22:28:44+0000",
-            "account": "admin",
-            "domainid": "bbae9696-627f-11ec-8fb6-0242ac110002",
-            "domain": "ROOT",
-            "network": [
-              {
-                "id": "e22cab07-58ac-4a1b-b0a8-fcee1bbecc7d",
-                "name": "my-network",
-                "displaytext": "my-network",
-                "broadcastdomaintype": "Vlan",
-                "traffictype": "Guest",
-                "gateway": "10.1.1.1",
-                "netmask": "255.255.255.0",
-                "cidr": "10.1.1.0/24",
-                "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81",
-                "zonename": "SimZone1",
-                "networkofferingid": "f26a1059-24df-4f76-9daf-16d42ce9df11",
-                "networkofferingname": "DefaultIsolatedNetworkOfferingForVpcNetworks",
-                "networkofferingdisplaytext": "Offering for Isolated Vpc networks with Source Nat service enabled",
-                "networkofferingconservemode": false,
-                "networkofferingavailability": "Optional",
-                "issystem": false,
-                "state": "Allocated",
-                "related": "e22cab07-58ac-4a1b-b0a8-fcee1bbecc7d",
-                "dns1": "10.147.28.6",
-                "type": "Isolated",
-                "acltype": "Account",
-                "account": "admin",
-                "domainid": "bbae9696-627f-11ec-8fb6-0242ac110002",
-                "domain": "ROOT",
-                "service": [
-                  {
-                    "name": "Dns",
-                    "provider": [{ "name": "VpcVirtualRouter" }],
-                    "capability": [
-                      {
-                        "name": "AllowDnsSuffixModification",
-                        "value": "true",
-                        "canchooseservicecapability": false
-                      }
-                    ]
-                  },
-                  {
-                    "name": "Dhcp",
-                    "provider": [{ "name": "VpcVirtualRouter" }],
-                    "capability": [
-                      {
-                        "name": "DhcpAccrossMultipleSubnets",
-                        "value": "true",
-                        "canchooseservicecapability": false
-                      }
-                    ]
-                  },
-                  {
-                    "name": "PortForwarding",
-                    "provider": [{ "name": "VpcVirtualRouter" }],
-                    "capability": [
-                      {
-                        "name": "SupportedProtocols",
-                        "value": "tcp,udp",
-                        "canchooseservicecapability": false
-                      }
-                    ]
-                  },
-                  {
-                    "name": "StaticNat",
-                    "provider": [{ "name": "VpcVirtualRouter" }],
-                    "capability": [
-                      {
-                        "name": "ElasticIp",
-                        "value": "false",
-                        "canchooseservicecapability": false
-                      },
-                      {
-                        "name": "AssociatePublicIP",
-                        "value": "true",
-                        "canchooseservicecapability": false
-                      }
-                    ]
-                  },
-                  {
-                    "name": "Vpn",
-                    "provider": [{ "name": "VpcVirtualRouter" }],
-                    "capability": [
-                      {
-                        "name": "SupportedVpnTypes",
-                        "value": "pptp,l2tp,ipsec",
-                        "canchooseservicecapability": false
-                      },
-                      {
-                        "name": "VpnTypes",
-                        "value": "s2svpn",
-                        "canchooseservicecapability": false
-                      }
-                    ]
-                  },
-                  {
-                    "name": "SourceNat",
-                    "provider": [{ "name": "VpcVirtualRouter" }],
-                    "capability": [
-                      {
-                        "name": "SupportedSourceNatTypes",
-                        "value": "peraccount",
-                        "canchooseservicecapability": true
-                      },
-                      {
-                        "name": "RedundantRouter",
-                        "value": "false",
-                        "canchooseservicecapability": true
-                      }
-                    ]
-                  },
-                  {
-                    "name": "NetworkACL",
-                    "provider": [{ "name": "VpcVirtualRouter" }],
-                    "capability": [
-                      {
-                        "name": "SupportedProtocols",
-                        "value": "tcp,udp,icmp",
-                        "canchooseservicecapability": false
-                      }
-                    ]
-                  },
-                  {
-                    "name": "UserData",
-                    "provider": [{ "name": "VpcVirtualRouter" }],
-                    "capability": []
-                  },
-                  {
-                    "name": "Lb",
-                    "provider": [{ "name": "VpcVirtualRouter" }],
-                    "capability": [
-                      {
-                        "name": "SupportedStickinessMethods",
-                        "value": "[{\"methodname\":\"LbCookie\",\"paramlist\":[{\"paramname\":\"cookie-name\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"mode\",\"required\":false,\"isflag\":false,\"description\":\" \"},{\"paramname\":\"nocache\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"indirect\",\"required\":false,\"isflag\":true,\"description\":\" \"},{\"paramname\":\"postonly\",\"required\":false,\"isflag\":true,\"desc [...]
-                        "canchooseservicecapability": false
-                      },
-                      {
-                        "name": "SupportedLbAlgorithms",
-                        "value": "roundrobin,leastconn,source",
-                        "canchooseservicecapability": false
-                      },
-                      {
-                        "name": "LbSchemes",
-                        "value": "Public",
-                        "canchooseservicecapability": false
-                      },
-                      {
-                        "name": "SupportedProtocols",
-                        "value": "tcp, udp, tcp-proxy",
-                        "canchooseservicecapability": false
-                      },
-                      {
-                        "name": "SupportedLBIsolation",
-                        "value": "dedicated",
-                        "canchooseservicecapability": true
-                      },
-                      {
-                        "name": "AutoScaleCounters",
-                        "value": "[{\"methodname\":\"cpu\",\"paramlist\":[]},{\"methodname\":\"memory\",\"paramlist\":[]}]",
-                        "canchooseservicecapability": false
-                      },
-                      {
-                        "name": "ElasticLb",
-                        "value": "false",
-                        "canchooseservicecapability": false
-                      },
-                      {
-                        "name": "InlineMode",
-                        "value": "false",
-                        "canchooseservicecapability": false
-                      }
-                    ]
-                  }
-                ],
-                "networkdomain": "my-domain",
-                "physicalnetworkid": "ffcffe07-5cbf-4862-9c52-8e7153a5239a",
-                "restartrequired": false,
-                "specifyipranges": false,
-                "vpcid": "78d49100-e4af-4692-9a49-284fa2444eb9",
-                "vpcname": "my-vpc",
-                "canusefordeploy": true,
-                "ispersistent": false,
-                "tags": [],
-                "details": {},
-                "displaynetwork": true,
-                "strechedl2subnet": false,
-                "redundantrouter": false,
-                "created": "2021-12-26T22:28:52+0000",
-                "receivedbytes": 0,
-                "sentbytes": 0,
-                "hasannotations": false
-              }
-            ],
-            "restartrequired": false,
-            "networkdomain": "my-domain",
-            "tags": [{ "key": "my-tag", "value": "true" }],
-            "fordisplay": true,
-            "distributedvpcrouter": false,
-            "regionlevelvpc": false,
-            "redundantvpcrouter": false,
-            "hasannotations": false
-          }
-        ]
-      }
-    }
-  }
-}
diff --git a/cloudstack/testdata/VPNServiceData.json b/cloudstack/testdata/VPNServiceData.json
deleted file mode 100644
index 790ede9..0000000
--- a/cloudstack/testdata/VPNServiceData.json
+++ /dev/null
@@ -1,26 +0,0 @@
-{
-  "deleteRemoteAccessVpn": {
-    "deleteRemoteAccessVpn": {
-      "deleteremoteaccessvpnresponse": {
-        "jobid": "3697537c-f796-44f2-b997-0b71ff4f4e07"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "7a2fad8f-2bde-11ec-b173-1e0086000207",
-        "cmd": "org.apache.cloudstack.api.command.user.vpn.DeleteRemoteAccessVpnCmd",
-        "completed": "2021-10-13T07:38:53+0000",
-        "created": "2021-10-13T07:38:51+0000",
-        "jobid": "50bdd6c2-6958-48ba-94fe-3e6ec410dcce",
-        "jobprocstatus": 0,
-        "jobresult": {
-          "success": true
-        },
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobstatus": 1,
-        "userid": "7a309dc2-2bde-11ec-b173-1e0086000207"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/cloudstack/testdata/VirtualMachineServiceData.json b/cloudstack/testdata/VirtualMachineServiceData.json
deleted file mode 100644
index 918a8b1..0000000
--- a/cloudstack/testdata/VirtualMachineServiceData.json
+++ /dev/null
@@ -1,545 +0,0 @@
-{
-  "deployVirtualMachine": {
-    "deployVirtualMachine": {
-      "deployvirtualmachineresponse": {
-        "id": "915653c4-298b-4d74-bdee-4ced282114f1",
-        "jobid": "74bbb422-fb74-47ac-a22a-ad86a7831d3f"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-        "cmd": "org.apache.cloudstack.api.command.admin.vm.DeployVMCmdByAdmin",
-        "jobstatus": 1,
-        "jobprocstatus": 0,
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobresult": {
-          "virtualmachine": {
-          "id": "915653c4-298b-4d74-bdee-4ced282114f1",
-          "name": "testDummyVM",
-          "displayname": "testDummyVM",
-          "account": "admin",
-          "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-          "username": "admin",
-          "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-          "domain": "ROOT",
-          "created": "2021-10-04T09:24:38+0000",
-          "state": "Running",
-          "haenable": false,
-          "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2",
-          "zonename": "shouldwork",
-          "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9",
-          "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf",
-          "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c",
-          "templatename": "CentOS 5.6 (64-bit)",
-          "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI",
-          "passwordenabled": false,
-          "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327",
-          "serviceofferingname": "Very small instance",
-          "cpunumber": 1,
-          "cpuspeed": 100,
-          "memory": 256,
-          "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-          "rootdeviceid": 0,
-          "rootdevicetype": "ROOT",
-          "securitygroup": [],
-          "nic": [
-            {
-            "id": "47d79da1-2fe1-4a44-a503-523055714a72",
-            "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8",
-            "networkname": "test",
-            "netmask": "255.255.255.0",
-            "gateway": "10.1.1.1",
-            "ipaddress": "10.1.1.62",
-            "isolationuri": "vlan://1850",
-            "broadcasturi": "vlan://1850",
-            "traffictype": "Guest",
-            "type": "Isolated",
-            "isdefault": true,
-            "macaddress": "02:00:34:fb:00:01",
-            "secondaryip": [],
-            "extradhcpoption": []
-            }
-            ],
-            "hypervisor": "Simulator",
-            "instancename": "i-2-683-QA",
-            "details": {},
-            "affinitygroup": [],
-            "displayvm": true,
-            "isdynamicallyscalable": false,
-            "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-            "osdisplayname": "CentOS 5.6 (64-bit)",
-            "bootmode": "legacy",
-            "boottype": "Bios",
-            "tags": [],
-            "jobid": "74bbb422-fb74-47ac-a22a-ad86a7831d3f",
-            "jobstatus": 0
-            }
-          },
-        "jobinstancetype": "VirtualMachine",
-        "jobinstanceid": "915653c4-298b-4d74-bdee-4ced282114f1",
-        "created": "2021-10-04T09:24:38+0000",
-        "completed": "2021-10-04T09:24:42+0000",
-        "jobid": "74bbb422-fb74-47ac-a22a-ad86a7831d3f"
-      }
-    }
-  },
-  "addNicToVirtualMachine": {
-    "addNicToVirtualMachine": {
-      "addnictovirtualmachineresponse": {
-        "jobid": "ec9d4711-b334-4750-868b-fb4d79d5801c"
-      }
-    },
-    "queryAsyncJobResult": {
-    "queryasyncjobresultresponse": {
-    "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-    "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-    "cmd": "org.apache.cloudstack.api.command.admin.vm.AddNicToVMCmdByAdmin",
-    "jobstatus": 1,
-    "jobprocstatus": 0,
-    "jobresultcode": 0,
-    "jobresulttype": "object",
-    "jobresult": {
-    "virtualmachine": {
-    "id": "915653c4-298b-4d74-bdee-4ced282114f1",
-    "name": "testDummyVM",
-    "displayname": "testDummyVM",
-    "account": "admin",
-    "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-    "username": "admin",
-    "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-    "domain": "ROOT",
-    "created": "2021-10-04T09:24:38+0000",
-    "state": "Running",
-    "haenable": false,
-    "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2",
-    "zonename": "shouldwork",
-    "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9",
-    "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf",
-    "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-    "securitygroup": [],
-    "nic": [
-    {
-    "id": "0921d201-f7ac-4f49-bf09-ffe9497fdab0",
-    "networkid": "30358053-0f9d-4112-9948-976477896db6",
-    "networkname": "test-network-2",
-    "netmask": "255.255.255.0",
-    "gateway": "10.1.2.1",
-    "ipaddress": "10.1.2.102",
-    "isolationuri": "vlan://1955",
-    "broadcasturi": "vlan://1955",
-    "traffictype": "Guest",
-    "type": "Isolated",
-    "isdefault": false,
-    "macaddress": "02:00:13:a4:00:21",
-    "secondaryip": [],
-    "extradhcpoption": []
-    },
-    {
-    "id": "47d79da1-2fe1-4a44-a503-523055714a72",
-    "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8",
-    "networkname": "test",
-    "netmask": "255.255.255.0",
-    "gateway": "10.1.1.1",
-    "ipaddress": "10.1.1.62",
-    "isolationuri": "vlan://1850",
-    "broadcasturi": "vlan://1850",
-    "traffictype": "Guest",
-    "type": "Isolated",
-    "isdefault": true,
-    "macaddress": "02:00:34:fb:00:01",
-    "secondaryip": [],
-    "extradhcpoption": []
-    }
-    ],
-    "hypervisor": "Simulator",
-    "instancename": "i-2-683-QA",
-    "details": {},
-    "affinitygroup": [],
-    "displayvm": true,
-    "isdynamicallyscalable": false,
-    "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-    "osdisplayname": "CentOS 5.6 (64-bit)",
-    "bootmode": "legacy",
-    "boottype": "Bios",
-    "tags": []
-    }
-    },
-    "created": "2021-10-04T09:29:51+0000",
-    "completed": "2021-10-04T09:29:54+0000",
-    "jobid": "ec9d4711-b334-4750-868b-fb4d79d5801c"
-    }
-    }
-  },
-  "stopVirtualMachine": {
-    "stopVirtualMachine": {
-      "stopvirtualmachineresponse": {
-        "jobid": "604bc5ed-1b7e-4d63-abc8-a55077a4c2c1"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-      "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-      "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-      "cmd": "org.apache.cloudstack.api.command.admin.vm.StopVMCmdByAdmin",
-      "jobstatus": 1,
-      "jobprocstatus": 0,
-      "jobresultcode": 0,
-      "jobresulttype": "object",
-      "jobresult": {
-        "virtualmachine": {
-        "id": "915653c4-298b-4d74-bdee-4ced282114f1",
-        "name": "testDummyVM",
-        "displayname": "testDummyVM",
-        "account": "admin",
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-        "username": "admin",
-        "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-        "domain": "ROOT",
-        "created": "2021-10-04T09:24:38+0000",
-        "state": "Stopped",
-        "haenable": false,
-        "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2",
-        "zonename": "shouldwork",
-        "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c",
-        "templatename": "CentOS 5.6 (64-bit)",
-        "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI",
-        "passwordenabled": false,
-        "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327",
-        "serviceofferingname": "Very small instance",
-        "cpunumber": 1,
-        "cpuspeed": 100,
-        "memory": 256,
-        "cpuused": "10%",
-        "networkkbsread": 917504,
-        "networkkbswrite": 458752,
-        "diskkbsread": 0,
-        "diskkbswrite": 0,
-        "memorykbs": 0,
-        "memoryintfreekbs": 0,
-        "memorytargetkbs": 0,
-        "diskioread": 0,
-        "diskiowrite": 0,
-        "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-        "rootdeviceid": 0,
-        "rootdevicetype": "ROOT",
-        "securitygroup": [],
-        "nic": [
-          {
-          "id": "47d79da1-2fe1-4a44-a503-523055714a72",
-          "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8",
-          "networkname": "test",
-          "netmask": "255.255.255.0",
-          "gateway": "10.1.1.1",
-          "ipaddress": "10.1.1.62",
-          "traffictype": "Guest",
-          "type": "Isolated",
-          "isdefault": true,
-          "macaddress": "02:00:34:fb:00:01",
-          "secondaryip": [],
-          "extradhcpoption": []
-          }
-        ],
-        "hypervisor": "Simulator",
-        "instancename": "i-2-683-QA",
-        "details": {
-        "Message.ReservedCapacityFreed.Flag": "false"
-        },
-        "affinitygroup": [],
-        "displayvm": true,
-        "isdynamicallyscalable": false,
-        "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-        "osdisplayname": "CentOS 5.6 (64-bit)",
-        "tags": [],
-        "jobid": "604bc5ed-1b7e-4d63-abc8-a55077a4c2c1",
-        "jobstatus": 0
-        }
-      },
-      "jobinstancetype": "VirtualMachine",
-      "jobinstanceid": "915653c4-298b-4d74-bdee-4ced282114f1",
-      "created": "2021-10-04T09:53:06+0000",
-      "completed": "2021-10-04T09:53:08+0000",
-      "jobid": "604bc5ed-1b7e-4d63-abc8-a55077a4c2c1"
-      }
-    }
-  },
-  "startVirtualMachine": {
-    "startVirtualMachine": {
-      "startvirtualmachineresponse": {
-        "jobid": "468d69d7-f327-4105-bec2-0e43107ae956"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-      "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-      "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-      "cmd": "org.apache.cloudstack.api.command.admin.vm.StartVMCmdByAdmin",
-      "jobstatus": 1,
-      "jobprocstatus": 0,
-      "jobresultcode": 0,
-      "jobresulttype": "object",
-      "jobresult": {
-        "virtualmachine": {
-        "id": "915653c4-298b-4d74-bdee-4ced282114f1",
-        "name": "testDummyVM",
-        "displayname": "testDummyVM",
-        "account": "admin",
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-        "username": "admin",
-        "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-        "domain": "ROOT",
-        "created": "2021-10-04T09:24:38+0000",
-        "state": "Running",
-        "haenable": false,
-        "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2",
-        "zonename": "shouldwork",
-        "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9",
-        "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf",
-        "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c",
-        "templatename": "CentOS 5.6 (64-bit)",
-        "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI",
-        "passwordenabled": false,
-        "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327",
-        "serviceofferingname": "Very small instance",
-        "cpunumber": 1,
-        "cpuspeed": 100,
-        "memory": 256,
-        "cpuused": "10%",
-        "networkkbsread": 917504,
-        "networkkbswrite": 458752,
-        "diskkbsread": 0,
-        "diskkbswrite": 0,
-        "memorykbs": 0,
-        "memoryintfreekbs": 0,
-        "memorytargetkbs": 0,
-        "diskioread": 0,
-        "diskiowrite": 0,
-        "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-        "rootdeviceid": 0,
-        "rootdevicetype": "ROOT",
-        "securitygroup": [],
-        "nic": [
-          {
-          "id": "47d79da1-2fe1-4a44-a503-523055714a72",
-          "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8",
-          "networkname": "test",
-          "netmask": "255.255.255.0",
-          "gateway": "10.1.1.1",
-          "ipaddress": "10.1.1.62",
-          "isolationuri": "vlan://1994",
-          "broadcasturi": "vlan://1994",
-          "traffictype": "Guest",
-          "type": "Isolated",
-          "isdefault": true,
-          "macaddress": "02:00:34:fb:00:01",
-          "secondaryip": [],
-          "extradhcpoption": []
-          }
-        ],
-        "hypervisor": "Simulator",
-        "instancename": "i-2-683-QA",
-        "details": {
-        "Message.ReservedCapacityFreed.Flag": "false"
-        },
-        "affinitygroup": [],
-        "displayvm": true,
-        "isdynamicallyscalable": false,
-        "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-        "osdisplayname": "CentOS 5.6 (64-bit)",
-        "tags": [],
-        "jobid": "468d69d7-f327-4105-bec2-0e43107ae956",
-        "jobstatus": 0
-        }
-      },
-      "jobinstancetype": "VirtualMachine",
-      "jobinstanceid": "915653c4-298b-4d74-bdee-4ced282114f1",
-      "created": "2021-10-04T09:57:19+0000",
-      "completed": "2021-10-04T09:57:22+0000",
-      "jobid": "468d69d7-f327-4105-bec2-0e43107ae956"
-      }
-    }
-  },
-  "listVirtualMachines": {
-    "listVirtualMachines": {
-      "count": 1,
-      "virtualmachine": [
-        {
-          "account": "admin",
-          "affinitygroup": [],
-          "cpunumber": 1,
-          "cpuspeed": 100,
-          "cpuused": "10%",
-          "created": "2021-10-04T09:24:38+0000",
-          "details": {
-            "Message.ReservedCapacityFreed.Flag": "false"
-          },
-          "diskioread": 0,
-          "diskiowrite": 0,
-          "diskkbsread": 0,
-          "diskkbswrite": 0,
-          "displayname": "testDummyVM",
-          "displayvm": true,
-          "domain": "ROOT",
-          "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-          "guestosid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-          "haenable": false,
-          "hostid": "8e8e68e7-19ea-4a78-bbdb-6e79d27729c9",
-          "hostname": "SimulatedAgent.4234d24b-37fd-42bf-9184-874889001baf",
-          "hypervisor": "Simulator",
-          "id": "915653c4-298b-4d74-bdee-4ced282114f1",
-          "instancename": "i-2-683-QA",
-          "isdynamicallyscalable": false,
-          "memory": 256,
-          "memoryintfreekbs": 0,
-          "memorykbs": 0,
-          "memorytargetkbs": 0,
-          "name": "testDummyVM",
-          "networkkbsread": 1015808,
-          "networkkbswrite": 507904,
-          "nic": [
-            {
-              "broadcasturi": "vlan://1994",
-              "extradhcpoption": [],
-              "gateway": "10.1.1.1",
-              "id": "47d79da1-2fe1-4a44-a503-523055714a72",
-              "ipaddress": "10.1.1.62",
-              "isdefault": true,
-              "isolationuri": "vlan://1994",
-              "macaddress": "02:00:34:fb:00:01",
-              "netmask": "255.255.255.0",
-              "networkid": "87503ba2-d59d-4a5e-8f7f-b3f486cedbd8",
-              "networkname": "test",
-              "secondaryip": [],
-              "traffictype": "Guest",
-              "type": "Isolated"
-            }
-          ],
-          "osdisplayname": "CentOS 5.6 (64-bit)",
-          "ostypeid": "e53f7606-5fdf-11ea-9a56-1e006800018c",
-          "passwordenabled": false,
-          "rootdeviceid": 0,
-          "rootdevicetype": "ROOT",
-          "securitygroup": [],
-          "serviceofferingid": "498ce071-a077-4237-9492-e55c42553327",
-          "serviceofferingname": "Very small instance",
-          "state": "Running",
-          "tags": [],
-          "templatedisplaytext": "CentOS 5.6 (64-bit) no GUI",
-          "templateid": "50459b99-5fe0-11ea-9a56-1e006800018c",
-          "templatename": "CentOS 5.6 (64-bit)",
-          "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-          "username": "admin",
-          "zoneid": "1d8d87d4-1425-459c-8d81-c6f57dca2bd2",
-          "zonename": "shouldwork"
-        }
-      ]
-    }
-  },
-  "scaleVirtualMachine": {
-    "scaleVirtualMachine": {
-      "scalevirtualmachineresponse": {
-        "jobid": "f9a9af61-47ea-4fb7-acc9-93ea50f12042"
-      }
-    },
-    "queryAsyncJobResult": {
-      "queryasyncjobresultresponse": {
-        "accountid": "27ef5ba2-5fe0-11ea-9a56-1e006800018c",
-        "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-        "cmd": "org.apache.cloudstack.api.command.admin.vm.ScaleVMCmdByAdmin",
-        "jobstatus": 1,
-        "jobprocstatus": 0,
-        "jobresultcode": 0,
-        "jobresulttype": "object",
-        "jobresult": {
-          "virtualmachine": {
-            "id": "88dedd6b-4fc0-44bf-b76f-441a13bc1f99",
-            "name": "QA-88dedd6b-4fc0-44bf-b76f-441a13bc1f99",
-            "displayname": "QA-88dedd6b-4fc0-44bf-b76f-441a13bc1f99",
-            "account": "admin",
-            "userid": "27f2484f-5fe0-11ea-9a56-1e006800018c",
-            "username": "admin",
-            "domainid": "e4874e10-5fdf-11ea-9a56-1e006800018c",
-            "domain": "ROOT",
-            "created": "2020-05-22T19:52:22+0000",
-            "lastupdated": "2021-10-06T09:57:19+0000",
-            "state": "Stopped",
-            "haenable": false,
-            "zoneid": "04ccc336-d730-42fe-8ff6-5ae36e141e81",
-            "zonename": "SimZone1",
-            "templateid": "56217438-4f36-450b-9246-850a10a3e57b",
-            "templatename": "macha-sim1",
-            "templatedisplaytext": "macha-simm",
-            "passwordenabled": true,
-            "isoid": "169fe81d-47e0-4119-b38c-f6ce42dcf451",
-            "isoname": "k8s-1.16.3-Kubernetes-Binaries-ISO",
-            "isodisplaytext": "k8s-1.16.3-Kubernetes-Binaries-IS",
-            "serviceofferingid": "57aba75e-5567-44c9-bfcc-c2c14503a5a6",
-            "serviceofferingname": "Medium Instanc",
-            "backupofferingid": "7c42d74e-c029-4431-9025-6caa8b903472",
-            "backupofferingname": "BackupGoldDummy",
-            "cpunumber": 1,
-            "cpuspeed": 1000,
-            "memory": 1024,
-            "guestosid": "12fea95b-5fe0-11ea-9a56-1e006800018c",
-            "rootdeviceid": 0,
-            "rootdevicetype": "ROOT",
-            "securitygroup": [],
-            "nic": [
-              {
-                "id": "c26193a6-9b41-4149-b836-e48bc46fc5c8",
-                "networkid": "b9bb5ef5-16cd-413c-996e-3671d8a2bc20",
-                "networkname": "test",
-                "netmask": "255.255.255.0",
-                "gateway": "10.1.1.1",
-                "ipaddress": "10.1.1.208",
-                "traffictype": "Guest",
-                "type": "Isolated",
-                "isdefault": false,
-                "macaddress": "02:00:63:59:00:05",
-                "secondaryip": [],
-                "extradhcpoption": [],
-                "deviceid": "1"
-              },
-              {
-                "id": "d9f8203d-e680-438a-86b6-327c69271011",
-                "networkid": "cc39d938-5ea0-4d9c-b89d-421da3274e54",
-                "networkname": "testNet2",
-                "netmask": "255.255.255.0",
-                "gateway": "10.1.1.1",
-                "ipaddress": "10.1.1.177",
-                "traffictype": "Guest",
-                "type": "Isolated",
-                "isdefault": true,
-                "macaddress": "02:00:22:f7:00:08",
-                "secondaryip": [],
-                "extradhcpoption": [],
-                "deviceid": "0"
-              }
-            ],
-            "hypervisor": "Simulator",
-            "instancename": "i-2-101-QA",
-            "details": {
-              "keyboard": "us",
-              "Message.ReservedCapacityFreed.Flag": "true"
-            },
-            "affinitygroup": [],
-            "displayvm": true,
-            "isdynamicallyscalable": false,
-            "ostypeid": "12fea95b-5fe0-11ea-9a56-1e006800018c",
-            "osdisplayname": "CentOS 6 (64-bit)",
-            "pooltype": "NetworkFilesystem",
-            "receivedbytes": 0,
-            "sentbytes": 0,
-            "tags": [],
-            "hasannotations": true
-          }
-        },
-        "created": "2021-10-13T04:54:55+0000",
-        "completed": "2021-10-13T04:54:56+0000",
-        "jobid": "f9a9af61-47ea-4fb7-acc9-93ea50f12042"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/generate/generate.go b/generate/generate.go
index 1fc5f38..b50dc62 100644
--- a/generate/generate.go
+++ b/generate/generate.go
@@ -226,6 +226,15 @@ func main() {
 		errors = append(errors, &goimportError{string(out)})
 	}
 
+	testdir, err := testDir()
+	if err != nil {
+		log.Fatal(err)
+	}
+	out, err = exec.Command("goimports", "-w", testdir).CombinedOutput()
+	if err != nil {
+		errors = append(errors, &goimportError{string(out)})
+	}
+
 	if len(errors) > 0 {
 		log.Printf("%d API(s) failed to generate:", len(errors))
 		for _, ce := range errors {
@@ -769,6 +778,16 @@ func (s *service) WriteGeneratedCode() error {
 		return err
 	}
 
+	if s.name != "CustomService" {
+		tests, err := s.GenerateTestCode()
+		if err != nil {
+			return err
+		}
+		testdir, err := testDir()
+		file := path.Join(testdir, s.name+"_test.go")
+		ioutil.WriteFile(file, tests, 0644)
+	}
+
 	file := path.Join(outdir, s.name+".go")
 	return ioutil.WriteFile(file, code, 0644)
 }
@@ -974,6 +993,105 @@ func (s *service) GenerateCode() ([]byte, error) {
 	return clean, nil
 }
 
+func (s *service) GenerateTestCode() ([]byte, error) {
+	var buf bytes.Buffer
+	s.p = func(format string, args ...interface{}) {
+		_, err := fmt.Fprintf(&buf, format, args...)
+		if err != nil {
+			panic(err)
+		}
+	}
+	s.pn = func(format string, args ...interface{}) {
+		s.p(format+"\n", args...)
+	}
+	pn := s.pn
+
+	pn("//")
+	pn("// Licensed to the Apache Software Foundation (ASF) under one")
+	pn("// or more contributor license agreements.  See the NOTICE file")
+	pn("// distributed with this work for additional information")
+	pn("// regarding copyright ownership.  The ASF licenses this file")
+	pn("// to you under the Apache License, Version 2.0 (the")
+	pn("// \"License\"); you may not use this file except in compliance")
+	pn("// with the License.  You may obtain a copy of the License at")
+	pn("//")
+	pn("//   http://www.apache.org/licenses/LICENSE-2.0")
+	pn("//")
+	pn("// Unless required by applicable law or agreed to in writing,")
+	pn("// software distributed under the License is distributed on an")
+	pn("// \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY")
+	pn("// KIND, either express or implied.  See the License for the")
+	pn("// specific language governing permissions and limitations")
+	pn("// under the License.")
+	pn("//")
+	pn("")
+	pn("package test")
+	pn("")
+
+	pn("func Test%s(t *testing.T) {", s.name)
+	pn("	service := \"%s\"", s.name)
+	pn("	response, err := readData(service)")
+	pn("	if err != nil {")
+	pn("		t.Skipf(\"Skipping test as %%v\", err)")
+	pn("	}")
+	pn("	server := CreateTestServer(t, response)")
+	pn("	client := cloudstack.NewClient(server.URL, \"APIKEY\", \"SECRETKEY\", true)")
+	pn("	defer server.Close()")
+	pn("")
+
+	for _, a := range s.apis {
+		s.generateAPITest(a)
+	}
+	pn("}")
+
+	clean, err := format.Source(buf.Bytes())
+	if err != nil {
+		buf.WriteTo(os.Stdout)
+		return buf.Bytes(), err
+	}
+	return clean, nil
+}
+
+func (s *service) generateAPITest(a *API) {
+	p, pn := s.p, s.pn
+	tn := capitalize(a.Name + "Params")
+	rp := APIParams{}
+	pn("	test%s := func(t *testing.T) {", a.Name)
+	pn("		if _, ok := response[\"%s\"]; !ok {", a.Name)
+	pn("			t.Skipf(\"Skipping as no json response is provided in testdata\")")
+	pn("		}")
+	p("		p := client.%s.New%s(", strings.TrimSuffix(s.name, "Service"), tn)
+	for _, ap := range a.Params {
+		if ap.Required {
+			rp = append(rp, ap)
+			p("%s, ", getDefaultValueForType(a.Name, ap.Name, ap.Type))
+		}
+	}
+	pn(")")
+	pn("		_, err := client.%s.%s(p)", strings.TrimSuffix(s.name, "Service"), capitalize(a.Name))
+	pn("		if err != nil {")
+	pn("			t.Errorf(err.Error())")
+	pn("		}")
+	pn("	}")
+	pn("    t.Run(\"%s\", test%s)", capitalize(a.Name), a.Name)
+	pn("")
+}
+
+func getDefaultValueForType(aName string, pName string, pType string) string {
+	switch pType {
+	case "boolean":
+		return "true"
+	case "short", "int", "integer", "long", "float", "double":
+		return "0"
+	case "list":
+		return "[]string{}"
+	case "map":
+		return "map[string]string{}"
+	default:
+		return fmt.Sprintf("\"%s\"", pName)
+	}
+}
+
 func (s *service) generateParamType(a *API) {
 	pn := s.pn
 
@@ -1831,6 +1949,20 @@ func sourceDir() (string, error) {
 	return outdir, nil
 }
 
+func testDir() (string, error) {
+	wd, err := os.Getwd()
+	if err != nil {
+		return "", err
+	}
+	testdir := path.Join(wd, "test")
+
+	if err := os.MkdirAll(testdir, 0755); err != nil {
+		return "", fmt.Errorf("Failed to Mkdir %s: %v", testdir, err)
+	}
+	return testdir, nil
+
+}
+
 func mapType(aName string, pName string, pType string) string {
 	if _, ok := longToStringConvertedParams[pName]; ok {
 		pType = "UUID"
diff --git a/cloudstack/LimitService_test.go b/test/APIDiscoveryService_test.go
similarity index 56%
copy from cloudstack/LimitService_test.go
copy to test/APIDiscoveryService_test.go
index 81aa2e0..ccd60d1 100644
--- a/cloudstack/LimitService_test.go
+++ b/test/APIDiscoveryService_test.go
@@ -17,34 +17,34 @@
 // under the License.
 //
 
-package cloudstack
+package test
 
 import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
 	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
 )
 
-func TestLimitService_ResetApiLimit(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "resetApiLimit"
-		response, err := ReadData(apiName, "LimitService")
-		if err != nil {
-			t.Errorf("Failed to read response data due to: %v", err)
-		}
-		fmt.Fprintln(writer, response[apiName])
-	}))
-	defer server.Close()
-	client := NewClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.Limit.NewResetApiLimitParams()
-	resp, err := client.Limit.ResetApiLimit(params)
+func TestAPIDiscoveryService(t *testing.T) {
+	service := "APIDiscoveryService"
+	response, err := readData(service)
 	if err != nil {
-		t.Errorf("Failed to reset API Params limit due to: %v", err)
-		return
+		t.Skipf("Skipping test as %v", err)
 	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
 
-	if resp == nil {
-		t.Errorf("Failed to register template")
+	testlistApis := func(t *testing.T) {
+		if _, ok := response["listApis"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.APIDiscovery.NewListApisParams()
+		_, err := client.APIDiscovery.ListApis(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
 	}
+	t.Run("ListApis", testlistApis)
+
 }
diff --git a/test/AccountService_test.go b/test/AccountService_test.go
new file mode 100644
index 0000000..7810e9d
--- /dev/null
+++ b/test/AccountService_test.go
@@ -0,0 +1,182 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestAccountService(t *testing.T) {
+	service := "AccountService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddAccountToProject := func(t *testing.T) {
+		if _, ok := response["addAccountToProject"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewAddAccountToProjectParams("projectid")
+		_, err := client.Account.AddAccountToProject(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddAccountToProject", testaddAccountToProject)
+
+	testcreateAccount := func(t *testing.T) {
+		if _, ok := response["createAccount"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewCreateAccountParams("email", "firstname", "lastname", "password", "username")
+		_, err := client.Account.CreateAccount(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateAccount", testcreateAccount)
+
+	testdeleteAccount := func(t *testing.T) {
+		if _, ok := response["deleteAccount"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewDeleteAccountParams("id")
+		_, err := client.Account.DeleteAccount(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteAccount", testdeleteAccount)
+
+	testdeleteAccountFromProject := func(t *testing.T) {
+		if _, ok := response["deleteAccountFromProject"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewDeleteAccountFromProjectParams("account", "projectid")
+		_, err := client.Account.DeleteAccountFromProject(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteAccountFromProject", testdeleteAccountFromProject)
+
+	testdisableAccount := func(t *testing.T) {
+		if _, ok := response["disableAccount"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewDisableAccountParams(true)
+		_, err := client.Account.DisableAccount(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DisableAccount", testdisableAccount)
+
+	testenableAccount := func(t *testing.T) {
+		if _, ok := response["enableAccount"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewEnableAccountParams()
+		_, err := client.Account.EnableAccount(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("EnableAccount", testenableAccount)
+
+	testgetSolidFireAccountId := func(t *testing.T) {
+		if _, ok := response["getSolidFireAccountId"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewGetSolidFireAccountIdParams("accountid", "storageid")
+		_, err := client.Account.GetSolidFireAccountId(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("GetSolidFireAccountId", testgetSolidFireAccountId)
+
+	testlistAccounts := func(t *testing.T) {
+		if _, ok := response["listAccounts"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewListAccountsParams()
+		_, err := client.Account.ListAccounts(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListAccounts", testlistAccounts)
+
+	testlistProjectAccounts := func(t *testing.T) {
+		if _, ok := response["listProjectAccounts"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewListProjectAccountsParams("projectid")
+		_, err := client.Account.ListProjectAccounts(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListProjectAccounts", testlistProjectAccounts)
+
+	testlockAccount := func(t *testing.T) {
+		if _, ok := response["lockAccount"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewLockAccountParams("account", "domainid")
+		_, err := client.Account.LockAccount(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("LockAccount", testlockAccount)
+
+	testmarkDefaultZoneForAccount := func(t *testing.T) {
+		if _, ok := response["markDefaultZoneForAccount"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewMarkDefaultZoneForAccountParams("account", "domainid", "zoneid")
+		_, err := client.Account.MarkDefaultZoneForAccount(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("MarkDefaultZoneForAccount", testmarkDefaultZoneForAccount)
+
+	testupdateAccount := func(t *testing.T) {
+		if _, ok := response["updateAccount"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Account.NewUpdateAccountParams()
+		_, err := client.Account.UpdateAccount(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateAccount", testupdateAccount)
+
+}
diff --git a/test/AddressService_test.go b/test/AddressService_test.go
new file mode 100644
index 0000000..5a71b71
--- /dev/null
+++ b/test/AddressService_test.go
@@ -0,0 +1,86 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestAddressService(t *testing.T) {
+	service := "AddressService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testassociateIpAddress := func(t *testing.T) {
+		if _, ok := response["associateIpAddress"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Address.NewAssociateIpAddressParams()
+		_, err := client.Address.AssociateIpAddress(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AssociateIpAddress", testassociateIpAddress)
+
+	testdisassociateIpAddress := func(t *testing.T) {
+		if _, ok := response["disassociateIpAddress"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Address.NewDisassociateIpAddressParams("id")
+		_, err := client.Address.DisassociateIpAddress(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DisassociateIpAddress", testdisassociateIpAddress)
+
+	testlistPublicIpAddresses := func(t *testing.T) {
+		if _, ok := response["listPublicIpAddresses"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Address.NewListPublicIpAddressesParams()
+		_, err := client.Address.ListPublicIpAddresses(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListPublicIpAddresses", testlistPublicIpAddresses)
+
+	testupdateIpAddress := func(t *testing.T) {
+		if _, ok := response["updateIpAddress"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Address.NewUpdateIpAddressParams("id")
+		_, err := client.Address.UpdateIpAddress(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateIpAddress", testupdateIpAddress)
+
+}
diff --git a/test/AffinityGroupService_test.go b/test/AffinityGroupService_test.go
new file mode 100644
index 0000000..e841b4a
--- /dev/null
+++ b/test/AffinityGroupService_test.go
@@ -0,0 +1,98 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestAffinityGroupService(t *testing.T) {
+	service := "AffinityGroupService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testcreateAffinityGroup := func(t *testing.T) {
+		if _, ok := response["createAffinityGroup"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AffinityGroup.NewCreateAffinityGroupParams("name", "type")
+		_, err := client.AffinityGroup.CreateAffinityGroup(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateAffinityGroup", testcreateAffinityGroup)
+
+	testdeleteAffinityGroup := func(t *testing.T) {
+		if _, ok := response["deleteAffinityGroup"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AffinityGroup.NewDeleteAffinityGroupParams()
+		_, err := client.AffinityGroup.DeleteAffinityGroup(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteAffinityGroup", testdeleteAffinityGroup)
+
+	testlistAffinityGroupTypes := func(t *testing.T) {
+		if _, ok := response["listAffinityGroupTypes"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AffinityGroup.NewListAffinityGroupTypesParams()
+		_, err := client.AffinityGroup.ListAffinityGroupTypes(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListAffinityGroupTypes", testlistAffinityGroupTypes)
+
+	testlistAffinityGroups := func(t *testing.T) {
+		if _, ok := response["listAffinityGroups"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AffinityGroup.NewListAffinityGroupsParams()
+		_, err := client.AffinityGroup.ListAffinityGroups(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListAffinityGroups", testlistAffinityGroups)
+
+	testupdateVMAffinityGroup := func(t *testing.T) {
+		if _, ok := response["updateVMAffinityGroup"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AffinityGroup.NewUpdateVMAffinityGroupParams("id")
+		_, err := client.AffinityGroup.UpdateVMAffinityGroup(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateVMAffinityGroup", testupdateVMAffinityGroup)
+
+}
diff --git a/test/AlertService_test.go b/test/AlertService_test.go
new file mode 100644
index 0000000..e409fe2
--- /dev/null
+++ b/test/AlertService_test.go
@@ -0,0 +1,86 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestAlertService(t *testing.T) {
+	service := "AlertService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testarchiveAlerts := func(t *testing.T) {
+		if _, ok := response["archiveAlerts"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Alert.NewArchiveAlertsParams()
+		_, err := client.Alert.ArchiveAlerts(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ArchiveAlerts", testarchiveAlerts)
+
+	testdeleteAlerts := func(t *testing.T) {
+		if _, ok := response["deleteAlerts"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Alert.NewDeleteAlertsParams()
+		_, err := client.Alert.DeleteAlerts(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteAlerts", testdeleteAlerts)
+
+	testgenerateAlert := func(t *testing.T) {
+		if _, ok := response["generateAlert"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Alert.NewGenerateAlertParams("description", "name", 0)
+		_, err := client.Alert.GenerateAlert(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("GenerateAlert", testgenerateAlert)
+
+	testlistAlerts := func(t *testing.T) {
+		if _, ok := response["listAlerts"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Alert.NewListAlertsParams()
+		_, err := client.Alert.ListAlerts(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListAlerts", testlistAlerts)
+
+}
diff --git a/test/AsyncjobService_test.go b/test/AsyncjobService_test.go
new file mode 100644
index 0000000..e89c2bf
--- /dev/null
+++ b/test/AsyncjobService_test.go
@@ -0,0 +1,62 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestAsyncjobService(t *testing.T) {
+	service := "AsyncjobService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testlistAsyncJobs := func(t *testing.T) {
+		if _, ok := response["listAsyncJobs"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Asyncjob.NewListAsyncJobsParams()
+		_, err := client.Asyncjob.ListAsyncJobs(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListAsyncJobs", testlistAsyncJobs)
+
+	testqueryAsyncJobResult := func(t *testing.T) {
+		if _, ok := response["queryAsyncJobResult"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Asyncjob.NewQueryAsyncJobResultParams("jobid")
+		_, err := client.Asyncjob.QueryAsyncJobResult(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("QueryAsyncJobResult", testqueryAsyncJobResult)
+
+}
diff --git a/test/AuthenticationService_test.go b/test/AuthenticationService_test.go
new file mode 100644
index 0000000..891b0a5
--- /dev/null
+++ b/test/AuthenticationService_test.go
@@ -0,0 +1,62 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestAuthenticationService(t *testing.T) {
+	service := "AuthenticationService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testlogin := func(t *testing.T) {
+		if _, ok := response["login"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Authentication.NewLoginParams("password", "username")
+		_, err := client.Authentication.Login(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("Login", testlogin)
+
+	testlogout := func(t *testing.T) {
+		if _, ok := response["logout"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Authentication.NewLogoutParams()
+		_, err := client.Authentication.Logout(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("Logout", testlogout)
+
+}
diff --git a/test/AutoScaleService_test.go b/test/AutoScaleService_test.go
new file mode 100644
index 0000000..0eb73f8
--- /dev/null
+++ b/test/AutoScaleService_test.go
@@ -0,0 +1,278 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestAutoScaleService(t *testing.T) {
+	service := "AutoScaleService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testcreateAutoScalePolicy := func(t *testing.T) {
+		if _, ok := response["createAutoScalePolicy"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewCreateAutoScalePolicyParams("action", []string{}, 0)
+		_, err := client.AutoScale.CreateAutoScalePolicy(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateAutoScalePolicy", testcreateAutoScalePolicy)
+
+	testcreateAutoScaleVmGroup := func(t *testing.T) {
+		if _, ok := response["createAutoScaleVmGroup"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewCreateAutoScaleVmGroupParams("lbruleid", 0, 0, []string{}, []string{}, "vmprofileid")
+		_, err := client.AutoScale.CreateAutoScaleVmGroup(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateAutoScaleVmGroup", testcreateAutoScaleVmGroup)
+
+	testcreateAutoScaleVmProfile := func(t *testing.T) {
+		if _, ok := response["createAutoScaleVmProfile"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewCreateAutoScaleVmProfileParams("serviceofferingid", "templateid", "zoneid")
+		_, err := client.AutoScale.CreateAutoScaleVmProfile(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateAutoScaleVmProfile", testcreateAutoScaleVmProfile)
+
+	testcreateCondition := func(t *testing.T) {
+		if _, ok := response["createCondition"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewCreateConditionParams("counterid", "relationaloperator", 0)
+		_, err := client.AutoScale.CreateCondition(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateCondition", testcreateCondition)
+
+	testcreateCounter := func(t *testing.T) {
+		if _, ok := response["createCounter"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewCreateCounterParams("name", "source", "value")
+		_, err := client.AutoScale.CreateCounter(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateCounter", testcreateCounter)
+
+	testdeleteAutoScalePolicy := func(t *testing.T) {
+		if _, ok := response["deleteAutoScalePolicy"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewDeleteAutoScalePolicyParams("id")
+		_, err := client.AutoScale.DeleteAutoScalePolicy(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteAutoScalePolicy", testdeleteAutoScalePolicy)
+
+	testdeleteAutoScaleVmGroup := func(t *testing.T) {
+		if _, ok := response["deleteAutoScaleVmGroup"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewDeleteAutoScaleVmGroupParams("id")
+		_, err := client.AutoScale.DeleteAutoScaleVmGroup(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteAutoScaleVmGroup", testdeleteAutoScaleVmGroup)
+
+	testdeleteAutoScaleVmProfile := func(t *testing.T) {
+		if _, ok := response["deleteAutoScaleVmProfile"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewDeleteAutoScaleVmProfileParams("id")
+		_, err := client.AutoScale.DeleteAutoScaleVmProfile(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteAutoScaleVmProfile", testdeleteAutoScaleVmProfile)
+
+	testdeleteCondition := func(t *testing.T) {
+		if _, ok := response["deleteCondition"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewDeleteConditionParams("id")
+		_, err := client.AutoScale.DeleteCondition(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteCondition", testdeleteCondition)
+
+	testdeleteCounter := func(t *testing.T) {
+		if _, ok := response["deleteCounter"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewDeleteCounterParams("id")
+		_, err := client.AutoScale.DeleteCounter(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteCounter", testdeleteCounter)
+
+	testdisableAutoScaleVmGroup := func(t *testing.T) {
+		if _, ok := response["disableAutoScaleVmGroup"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewDisableAutoScaleVmGroupParams("id")
+		_, err := client.AutoScale.DisableAutoScaleVmGroup(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DisableAutoScaleVmGroup", testdisableAutoScaleVmGroup)
+
+	testenableAutoScaleVmGroup := func(t *testing.T) {
+		if _, ok := response["enableAutoScaleVmGroup"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewEnableAutoScaleVmGroupParams("id")
+		_, err := client.AutoScale.EnableAutoScaleVmGroup(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("EnableAutoScaleVmGroup", testenableAutoScaleVmGroup)
+
+	testlistAutoScalePolicies := func(t *testing.T) {
+		if _, ok := response["listAutoScalePolicies"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewListAutoScalePoliciesParams()
+		_, err := client.AutoScale.ListAutoScalePolicies(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListAutoScalePolicies", testlistAutoScalePolicies)
+
+	testlistAutoScaleVmGroups := func(t *testing.T) {
+		if _, ok := response["listAutoScaleVmGroups"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewListAutoScaleVmGroupsParams()
+		_, err := client.AutoScale.ListAutoScaleVmGroups(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListAutoScaleVmGroups", testlistAutoScaleVmGroups)
+
+	testlistAutoScaleVmProfiles := func(t *testing.T) {
+		if _, ok := response["listAutoScaleVmProfiles"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewListAutoScaleVmProfilesParams()
+		_, err := client.AutoScale.ListAutoScaleVmProfiles(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListAutoScaleVmProfiles", testlistAutoScaleVmProfiles)
+
+	testlistConditions := func(t *testing.T) {
+		if _, ok := response["listConditions"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewListConditionsParams()
+		_, err := client.AutoScale.ListConditions(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListConditions", testlistConditions)
+
+	testlistCounters := func(t *testing.T) {
+		if _, ok := response["listCounters"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewListCountersParams()
+		_, err := client.AutoScale.ListCounters(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListCounters", testlistCounters)
+
+	testupdateAutoScalePolicy := func(t *testing.T) {
+		if _, ok := response["updateAutoScalePolicy"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewUpdateAutoScalePolicyParams("id")
+		_, err := client.AutoScale.UpdateAutoScalePolicy(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateAutoScalePolicy", testupdateAutoScalePolicy)
+
+	testupdateAutoScaleVmGroup := func(t *testing.T) {
+		if _, ok := response["updateAutoScaleVmGroup"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewUpdateAutoScaleVmGroupParams("id")
+		_, err := client.AutoScale.UpdateAutoScaleVmGroup(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateAutoScaleVmGroup", testupdateAutoScaleVmGroup)
+
+	testupdateAutoScaleVmProfile := func(t *testing.T) {
+		if _, ok := response["updateAutoScaleVmProfile"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.AutoScale.NewUpdateAutoScaleVmProfileParams("id")
+		_, err := client.AutoScale.UpdateAutoScaleVmProfile(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateAutoScaleVmProfile", testupdateAutoScaleVmProfile)
+
+}
diff --git a/test/BaremetalService_test.go b/test/BaremetalService_test.go
new file mode 100644
index 0000000..77a53ba
--- /dev/null
+++ b/test/BaremetalService_test.go
@@ -0,0 +1,146 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestBaremetalService(t *testing.T) {
+	service := "BaremetalService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddBaremetalDhcp := func(t *testing.T) {
+		if _, ok := response["addBaremetalDhcp"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Baremetal.NewAddBaremetalDhcpParams("dhcpservertype", "password", "physicalnetworkid", "url", "username")
+		_, err := client.Baremetal.AddBaremetalDhcp(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddBaremetalDhcp", testaddBaremetalDhcp)
+
+	testaddBaremetalPxeKickStartServer := func(t *testing.T) {
+		if _, ok := response["addBaremetalPxeKickStartServer"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Baremetal.NewAddBaremetalPxeKickStartServerParams("password", "physicalnetworkid", "pxeservertype", "tftpdir", "url", "username")
+		_, err := client.Baremetal.AddBaremetalPxeKickStartServer(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddBaremetalPxeKickStartServer", testaddBaremetalPxeKickStartServer)
+
+	testaddBaremetalPxePingServer := func(t *testing.T) {
+		if _, ok := response["addBaremetalPxePingServer"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Baremetal.NewAddBaremetalPxePingServerParams("password", "physicalnetworkid", "pingdir", "pingstorageserverip", "pxeservertype", "tftpdir", "url", "username")
+		_, err := client.Baremetal.AddBaremetalPxePingServer(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddBaremetalPxePingServer", testaddBaremetalPxePingServer)
+
+	testaddBaremetalRct := func(t *testing.T) {
+		if _, ok := response["addBaremetalRct"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Baremetal.NewAddBaremetalRctParams("baremetalrcturl")
+		_, err := client.Baremetal.AddBaremetalRct(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddBaremetalRct", testaddBaremetalRct)
+
+	testdeleteBaremetalRct := func(t *testing.T) {
+		if _, ok := response["deleteBaremetalRct"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Baremetal.NewDeleteBaremetalRctParams("id")
+		_, err := client.Baremetal.DeleteBaremetalRct(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteBaremetalRct", testdeleteBaremetalRct)
+
+	testlistBaremetalDhcp := func(t *testing.T) {
+		if _, ok := response["listBaremetalDhcp"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Baremetal.NewListBaremetalDhcpParams("physicalnetworkid")
+		_, err := client.Baremetal.ListBaremetalDhcp(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListBaremetalDhcp", testlistBaremetalDhcp)
+
+	testlistBaremetalPxeServers := func(t *testing.T) {
+		if _, ok := response["listBaremetalPxeServers"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Baremetal.NewListBaremetalPxeServersParams("physicalnetworkid")
+		_, err := client.Baremetal.ListBaremetalPxeServers(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListBaremetalPxeServers", testlistBaremetalPxeServers)
+
+	testlistBaremetalRct := func(t *testing.T) {
+		if _, ok := response["listBaremetalRct"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Baremetal.NewListBaremetalRctParams()
+		_, err := client.Baremetal.ListBaremetalRct(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListBaremetalRct", testlistBaremetalRct)
+
+	testnotifyBaremetalProvisionDone := func(t *testing.T) {
+		if _, ok := response["notifyBaremetalProvisionDone"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Baremetal.NewNotifyBaremetalProvisionDoneParams("mac")
+		_, err := client.Baremetal.NotifyBaremetalProvisionDone(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("NotifyBaremetalProvisionDone", testnotifyBaremetalProvisionDone)
+
+}
diff --git a/test/BigSwitchBCFService_test.go b/test/BigSwitchBCFService_test.go
new file mode 100644
index 0000000..87d377f
--- /dev/null
+++ b/test/BigSwitchBCFService_test.go
@@ -0,0 +1,74 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestBigSwitchBCFService(t *testing.T) {
+	service := "BigSwitchBCFService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddBigSwitchBcfDevice := func(t *testing.T) {
+		if _, ok := response["addBigSwitchBcfDevice"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.BigSwitchBCF.NewAddBigSwitchBcfDeviceParams("hostname", true, "password", "physicalnetworkid", "username")
+		_, err := client.BigSwitchBCF.AddBigSwitchBcfDevice(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddBigSwitchBcfDevice", testaddBigSwitchBcfDevice)
+
+	testdeleteBigSwitchBcfDevice := func(t *testing.T) {
+		if _, ok := response["deleteBigSwitchBcfDevice"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.BigSwitchBCF.NewDeleteBigSwitchBcfDeviceParams("bcfdeviceid")
+		_, err := client.BigSwitchBCF.DeleteBigSwitchBcfDevice(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteBigSwitchBcfDevice", testdeleteBigSwitchBcfDevice)
+
+	testlistBigSwitchBcfDevices := func(t *testing.T) {
+		if _, ok := response["listBigSwitchBcfDevices"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.BigSwitchBCF.NewListBigSwitchBcfDevicesParams()
+		_, err := client.BigSwitchBCF.ListBigSwitchBcfDevices(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListBigSwitchBcfDevices", testlistBigSwitchBcfDevices)
+
+}
diff --git a/test/BrocadeVCSService_test.go b/test/BrocadeVCSService_test.go
new file mode 100644
index 0000000..bbd6685
--- /dev/null
+++ b/test/BrocadeVCSService_test.go
@@ -0,0 +1,86 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestBrocadeVCSService(t *testing.T) {
+	service := "BrocadeVCSService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddBrocadeVcsDevice := func(t *testing.T) {
+		if _, ok := response["addBrocadeVcsDevice"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.BrocadeVCS.NewAddBrocadeVcsDeviceParams("hostname", "password", "physicalnetworkid", "username")
+		_, err := client.BrocadeVCS.AddBrocadeVcsDevice(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddBrocadeVcsDevice", testaddBrocadeVcsDevice)
+
+	testdeleteBrocadeVcsDevice := func(t *testing.T) {
+		if _, ok := response["deleteBrocadeVcsDevice"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.BrocadeVCS.NewDeleteBrocadeVcsDeviceParams("vcsdeviceid")
+		_, err := client.BrocadeVCS.DeleteBrocadeVcsDevice(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteBrocadeVcsDevice", testdeleteBrocadeVcsDevice)
+
+	testlistBrocadeVcsDeviceNetworks := func(t *testing.T) {
+		if _, ok := response["listBrocadeVcsDeviceNetworks"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.BrocadeVCS.NewListBrocadeVcsDeviceNetworksParams("vcsdeviceid")
+		_, err := client.BrocadeVCS.ListBrocadeVcsDeviceNetworks(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListBrocadeVcsDeviceNetworks", testlistBrocadeVcsDeviceNetworks)
+
+	testlistBrocadeVcsDevices := func(t *testing.T) {
+		if _, ok := response["listBrocadeVcsDevices"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.BrocadeVCS.NewListBrocadeVcsDevicesParams()
+		_, err := client.BrocadeVCS.ListBrocadeVcsDevices(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListBrocadeVcsDevices", testlistBrocadeVcsDevices)
+
+}
diff --git a/cloudstack/VPNService_test.go b/test/CertificateService_test.go
similarity index 53%
rename from cloudstack/VPNService_test.go
rename to test/CertificateService_test.go
index 41acffc..1a6caae 100644
--- a/cloudstack/VPNService_test.go
+++ b/test/CertificateService_test.go
@@ -17,34 +17,34 @@
 // under the License.
 //
 
-package cloudstack
+package test
 
 import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
 	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
 )
 
-func TestVPNService_DeleteRemoteAccessVpn(t *testing.T) {
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		apiName := "deleteRemoteAccessVpn"
-		response, err := ParseAsyncResponse(apiName, "VPNService", *request)
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response)
-	}))
-	defer server.Close()
-	client := NewAsyncClient(server.URL, "APIKEY", "SECRETKEY", false)
-	params := client.VPN.NewDeleteRemoteAccessVpnParams("8dcd19e9-dbe6-4576-9602-4c3350918983")
-	resp, err := client.VPN.DeleteRemoteAccessVpn(params)
+func TestCertificateService(t *testing.T) {
+	service := "CertificateService"
+	response, err := readData(service)
 	if err != nil {
-		t.Errorf("Failed to delete remote access VPN due to: %v", err)
-		return
+		t.Skipf("Skipping test as %v", err)
 	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
 
-	if resp == nil {
-		t.Errorf("Failed to update project name")
+	testuploadCustomCertificate := func(t *testing.T) {
+		if _, ok := response["uploadCustomCertificate"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Certificate.NewUploadCustomCertificateParams("certificate", "domainsuffix")
+		_, err := client.Certificate.UploadCustomCertificate(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
 	}
+	t.Run("UploadCustomCertificate", testuploadCustomCertificate)
+
 }
diff --git a/cloudstack/AsyncJobService_test.go b/test/CloudIdentifierService_test.go
similarity index 55%
rename from cloudstack/AsyncJobService_test.go
rename to test/CloudIdentifierService_test.go
index 7e55029..6173ff8 100644
--- a/cloudstack/AsyncJobService_test.go
+++ b/test/CloudIdentifierService_test.go
@@ -17,36 +17,34 @@
 // under the License.
 //
 
-package cloudstack
+package test
 
 import (
-	"fmt"
-	"net/http"
-	"net/http/httptest"
 	"testing"
-)
-
-func TestListAsyncJobs(t *testing.T) {
-	apiName := "listAsyncJobs"
-	server := httptest.NewServer(http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) {
-		response, err := ReadData(apiName, "AsyncJobService")
-		if err != nil {
-			t.Errorf("Failed to parse response, due to: %v", err)
-		}
-		fmt.Fprintf(writer, response[apiName])
-	}))
 
-	defer server.Close()
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
 
-	client := newClient(server.URL, "APIKEY", "SECRETKEY", true, true)
-	p := client.Asyncjob.NewListAsyncJobsParams()
-	p.SetListall(true)
-	resp, err := client.Asyncjob.ListAsyncJobs(p)
+func TestCloudIdentifierService(t *testing.T) {
+	service := "CloudIdentifierService"
+	response, err := readData(service)
 	if err != nil {
-		t.Errorf("Failed to fetch listAsyncJobs response, due to: %v", err)
+		t.Skipf("Skipping test as %v", err)
 	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
 
-	if resp.Count != 1 {
-		t.Errorf("Failed to fetch listAsyncJobs response")
+	testgetCloudIdentifier := func(t *testing.T) {
+		if _, ok := response["getCloudIdentifier"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.CloudIdentifier.NewGetCloudIdentifierParams("userid")
+		_, err := client.CloudIdentifier.GetCloudIdentifier(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
 	}
+	t.Run("GetCloudIdentifier", testgetCloudIdentifier)
+
 }
diff --git a/test/ClusterService_test.go b/test/ClusterService_test.go
new file mode 100644
index 0000000..d08f0b1
--- /dev/null
+++ b/test/ClusterService_test.go
@@ -0,0 +1,182 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestClusterService(t *testing.T) {
+	service := "ClusterService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddCluster := func(t *testing.T) {
+		if _, ok := response["addCluster"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewAddClusterParams("clustername", "clustertype", "hypervisor", "podid", "zoneid")
+		_, err := client.Cluster.AddCluster(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddCluster", testaddCluster)
+
+	testdedicateCluster := func(t *testing.T) {
+		if _, ok := response["dedicateCluster"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewDedicateClusterParams("clusterid", "domainid")
+		_, err := client.Cluster.DedicateCluster(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DedicateCluster", testdedicateCluster)
+
+	testdeleteCluster := func(t *testing.T) {
+		if _, ok := response["deleteCluster"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewDeleteClusterParams("id")
+		_, err := client.Cluster.DeleteCluster(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteCluster", testdeleteCluster)
+
+	testdisableOutOfBandManagementForCluster := func(t *testing.T) {
+		if _, ok := response["disableOutOfBandManagementForCluster"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewDisableOutOfBandManagementForClusterParams("clusterid")
+		_, err := client.Cluster.DisableOutOfBandManagementForCluster(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DisableOutOfBandManagementForCluster", testdisableOutOfBandManagementForCluster)
+
+	testenableOutOfBandManagementForCluster := func(t *testing.T) {
+		if _, ok := response["enableOutOfBandManagementForCluster"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewEnableOutOfBandManagementForClusterParams("clusterid")
+		_, err := client.Cluster.EnableOutOfBandManagementForCluster(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("EnableOutOfBandManagementForCluster", testenableOutOfBandManagementForCluster)
+
+	testenableHAForCluster := func(t *testing.T) {
+		if _, ok := response["enableHAForCluster"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewEnableHAForClusterParams("clusterid")
+		_, err := client.Cluster.EnableHAForCluster(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("EnableHAForCluster", testenableHAForCluster)
+
+	testdisableHAForCluster := func(t *testing.T) {
+		if _, ok := response["disableHAForCluster"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewDisableHAForClusterParams("clusterid")
+		_, err := client.Cluster.DisableHAForCluster(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DisableHAForCluster", testdisableHAForCluster)
+
+	testlistClusters := func(t *testing.T) {
+		if _, ok := response["listClusters"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewListClustersParams()
+		_, err := client.Cluster.ListClusters(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListClusters", testlistClusters)
+
+	testlistClustersMetrics := func(t *testing.T) {
+		if _, ok := response["listClustersMetrics"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewListClustersMetricsParams()
+		_, err := client.Cluster.ListClustersMetrics(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListClustersMetrics", testlistClustersMetrics)
+
+	testlistDedicatedClusters := func(t *testing.T) {
+		if _, ok := response["listDedicatedClusters"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewListDedicatedClustersParams()
+		_, err := client.Cluster.ListDedicatedClusters(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListDedicatedClusters", testlistDedicatedClusters)
+
+	testreleaseDedicatedCluster := func(t *testing.T) {
+		if _, ok := response["releaseDedicatedCluster"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewReleaseDedicatedClusterParams("clusterid")
+		_, err := client.Cluster.ReleaseDedicatedCluster(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ReleaseDedicatedCluster", testreleaseDedicatedCluster)
+
+	testupdateCluster := func(t *testing.T) {
+		if _, ok := response["updateCluster"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Cluster.NewUpdateClusterParams("id")
+		_, err := client.Cluster.UpdateCluster(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateCluster", testupdateCluster)
+
+}
diff --git a/test/ConfigurationService_test.go b/test/ConfigurationService_test.go
new file mode 100644
index 0000000..355fb73
--- /dev/null
+++ b/test/ConfigurationService_test.go
@@ -0,0 +1,86 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestConfigurationService(t *testing.T) {
+	service := "ConfigurationService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testlistCapabilities := func(t *testing.T) {
+		if _, ok := response["listCapabilities"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Configuration.NewListCapabilitiesParams()
+		_, err := client.Configuration.ListCapabilities(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListCapabilities", testlistCapabilities)
+
+	testlistConfigurations := func(t *testing.T) {
+		if _, ok := response["listConfigurations"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Configuration.NewListConfigurationsParams()
+		_, err := client.Configuration.ListConfigurations(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListConfigurations", testlistConfigurations)
+
+	testlistDeploymentPlanners := func(t *testing.T) {
+		if _, ok := response["listDeploymentPlanners"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Configuration.NewListDeploymentPlannersParams()
+		_, err := client.Configuration.ListDeploymentPlanners(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListDeploymentPlanners", testlistDeploymentPlanners)
+
+	testupdateConfiguration := func(t *testing.T) {
+		if _, ok := response["updateConfiguration"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Configuration.NewUpdateConfigurationParams("name")
+		_, err := client.Configuration.UpdateConfiguration(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateConfiguration", testupdateConfiguration)
+
+}
diff --git a/test/DiskOfferingService_test.go b/test/DiskOfferingService_test.go
new file mode 100644
index 0000000..87ed9a9
--- /dev/null
+++ b/test/DiskOfferingService_test.go
@@ -0,0 +1,86 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestDiskOfferingService(t *testing.T) {
+	service := "DiskOfferingService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testcreateDiskOffering := func(t *testing.T) {
+		if _, ok := response["createDiskOffering"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.DiskOffering.NewCreateDiskOfferingParams("displaytext", "name")
+		_, err := client.DiskOffering.CreateDiskOffering(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateDiskOffering", testcreateDiskOffering)
+
+	testdeleteDiskOffering := func(t *testing.T) {
+		if _, ok := response["deleteDiskOffering"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.DiskOffering.NewDeleteDiskOfferingParams("id")
+		_, err := client.DiskOffering.DeleteDiskOffering(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteDiskOffering", testdeleteDiskOffering)
+
+	testlistDiskOfferings := func(t *testing.T) {
+		if _, ok := response["listDiskOfferings"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.DiskOffering.NewListDiskOfferingsParams()
+		_, err := client.DiskOffering.ListDiskOfferings(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListDiskOfferings", testlistDiskOfferings)
+
+	testupdateDiskOffering := func(t *testing.T) {
+		if _, ok := response["updateDiskOffering"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.DiskOffering.NewUpdateDiskOfferingParams("id")
+		_, err := client.DiskOffering.UpdateDiskOffering(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateDiskOffering", testupdateDiskOffering)
+
+}
diff --git a/test/DomainService_test.go b/test/DomainService_test.go
new file mode 100644
index 0000000..cd8dfa5
--- /dev/null
+++ b/test/DomainService_test.go
@@ -0,0 +1,98 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestDomainService(t *testing.T) {
+	service := "DomainService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testcreateDomain := func(t *testing.T) {
+		if _, ok := response["createDomain"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Domain.NewCreateDomainParams("name")
+		_, err := client.Domain.CreateDomain(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateDomain", testcreateDomain)
+
+	testdeleteDomain := func(t *testing.T) {
+		if _, ok := response["deleteDomain"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Domain.NewDeleteDomainParams("id")
+		_, err := client.Domain.DeleteDomain(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteDomain", testdeleteDomain)
+
+	testlistDomainChildren := func(t *testing.T) {
+		if _, ok := response["listDomainChildren"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Domain.NewListDomainChildrenParams()
+		_, err := client.Domain.ListDomainChildren(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListDomainChildren", testlistDomainChildren)
+
+	testlistDomains := func(t *testing.T) {
+		if _, ok := response["listDomains"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Domain.NewListDomainsParams()
+		_, err := client.Domain.ListDomains(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListDomains", testlistDomains)
+
+	testupdateDomain := func(t *testing.T) {
+		if _, ok := response["updateDomain"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Domain.NewUpdateDomainParams("id")
+		_, err := client.Domain.UpdateDomain(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateDomain", testupdateDomain)
+
+}
diff --git a/test/EventService_test.go b/test/EventService_test.go
new file mode 100644
index 0000000..a38ad53
--- /dev/null
+++ b/test/EventService_test.go
@@ -0,0 +1,86 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestEventService(t *testing.T) {
+	service := "EventService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testarchiveEvents := func(t *testing.T) {
+		if _, ok := response["archiveEvents"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Event.NewArchiveEventsParams()
+		_, err := client.Event.ArchiveEvents(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ArchiveEvents", testarchiveEvents)
+
+	testdeleteEvents := func(t *testing.T) {
+		if _, ok := response["deleteEvents"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Event.NewDeleteEventsParams()
+		_, err := client.Event.DeleteEvents(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteEvents", testdeleteEvents)
+
+	testlistEventTypes := func(t *testing.T) {
+		if _, ok := response["listEventTypes"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Event.NewListEventTypesParams()
+		_, err := client.Event.ListEventTypes(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListEventTypes", testlistEventTypes)
+
+	testlistEvents := func(t *testing.T) {
+		if _, ok := response["listEvents"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Event.NewListEventsParams()
+		_, err := client.Event.ListEvents(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListEvents", testlistEvents)
+
+}
diff --git a/test/FirewallService_test.go b/test/FirewallService_test.go
new file mode 100644
index 0000000..f49ef89
--- /dev/null
+++ b/test/FirewallService_test.go
@@ -0,0 +1,230 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestFirewallService(t *testing.T) {
+	service := "FirewallService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddPaloAltoFirewall := func(t *testing.T) {
+		if _, ok := response["addPaloAltoFirewall"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewAddPaloAltoFirewallParams("networkdevicetype", "password", "physicalnetworkid", "url", "username")
+		_, err := client.Firewall.AddPaloAltoFirewall(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddPaloAltoFirewall", testaddPaloAltoFirewall)
+
+	testconfigurePaloAltoFirewall := func(t *testing.T) {
+		if _, ok := response["configurePaloAltoFirewall"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewConfigurePaloAltoFirewallParams("fwdeviceid")
+		_, err := client.Firewall.ConfigurePaloAltoFirewall(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ConfigurePaloAltoFirewall", testconfigurePaloAltoFirewall)
+
+	testcreateEgressFirewallRule := func(t *testing.T) {
+		if _, ok := response["createEgressFirewallRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewCreateEgressFirewallRuleParams("networkid", "protocol")
+		_, err := client.Firewall.CreateEgressFirewallRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateEgressFirewallRule", testcreateEgressFirewallRule)
+
+	testcreateFirewallRule := func(t *testing.T) {
+		if _, ok := response["createFirewallRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewCreateFirewallRuleParams("ipaddressid", "protocol")
+		_, err := client.Firewall.CreateFirewallRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateFirewallRule", testcreateFirewallRule)
+
+	testcreatePortForwardingRule := func(t *testing.T) {
+		if _, ok := response["createPortForwardingRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewCreatePortForwardingRuleParams("ipaddressid", 0, "protocol", 0, "virtualmachineid")
+		_, err := client.Firewall.CreatePortForwardingRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreatePortForwardingRule", testcreatePortForwardingRule)
+
+	testdeleteEgressFirewallRule := func(t *testing.T) {
+		if _, ok := response["deleteEgressFirewallRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewDeleteEgressFirewallRuleParams("id")
+		_, err := client.Firewall.DeleteEgressFirewallRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteEgressFirewallRule", testdeleteEgressFirewallRule)
+
+	testdeleteFirewallRule := func(t *testing.T) {
+		if _, ok := response["deleteFirewallRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewDeleteFirewallRuleParams("id")
+		_, err := client.Firewall.DeleteFirewallRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteFirewallRule", testdeleteFirewallRule)
+
+	testdeletePaloAltoFirewall := func(t *testing.T) {
+		if _, ok := response["deletePaloAltoFirewall"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewDeletePaloAltoFirewallParams("fwdeviceid")
+		_, err := client.Firewall.DeletePaloAltoFirewall(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeletePaloAltoFirewall", testdeletePaloAltoFirewall)
+
+	testdeletePortForwardingRule := func(t *testing.T) {
+		if _, ok := response["deletePortForwardingRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewDeletePortForwardingRuleParams("id")
+		_, err := client.Firewall.DeletePortForwardingRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeletePortForwardingRule", testdeletePortForwardingRule)
+
+	testlistEgressFirewallRules := func(t *testing.T) {
+		if _, ok := response["listEgressFirewallRules"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewListEgressFirewallRulesParams()
+		_, err := client.Firewall.ListEgressFirewallRules(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListEgressFirewallRules", testlistEgressFirewallRules)
+
+	testlistFirewallRules := func(t *testing.T) {
+		if _, ok := response["listFirewallRules"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewListFirewallRulesParams()
+		_, err := client.Firewall.ListFirewallRules(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListFirewallRules", testlistFirewallRules)
+
+	testlistPaloAltoFirewalls := func(t *testing.T) {
+		if _, ok := response["listPaloAltoFirewalls"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewListPaloAltoFirewallsParams()
+		_, err := client.Firewall.ListPaloAltoFirewalls(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListPaloAltoFirewalls", testlistPaloAltoFirewalls)
+
+	testlistPortForwardingRules := func(t *testing.T) {
+		if _, ok := response["listPortForwardingRules"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewListPortForwardingRulesParams()
+		_, err := client.Firewall.ListPortForwardingRules(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListPortForwardingRules", testlistPortForwardingRules)
+
+	testupdateEgressFirewallRule := func(t *testing.T) {
+		if _, ok := response["updateEgressFirewallRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewUpdateEgressFirewallRuleParams("id")
+		_, err := client.Firewall.UpdateEgressFirewallRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateEgressFirewallRule", testupdateEgressFirewallRule)
+
+	testupdateFirewallRule := func(t *testing.T) {
+		if _, ok := response["updateFirewallRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewUpdateFirewallRuleParams("id")
+		_, err := client.Firewall.UpdateFirewallRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateFirewallRule", testupdateFirewallRule)
+
+	testupdatePortForwardingRule := func(t *testing.T) {
+		if _, ok := response["updatePortForwardingRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Firewall.NewUpdatePortForwardingRuleParams("id")
+		_, err := client.Firewall.UpdatePortForwardingRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdatePortForwardingRule", testupdatePortForwardingRule)
+
+}
diff --git a/test/GuestOSService_test.go b/test/GuestOSService_test.go
new file mode 100644
index 0000000..7877db2
--- /dev/null
+++ b/test/GuestOSService_test.go
@@ -0,0 +1,146 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestGuestOSService(t *testing.T) {
+	service := "GuestOSService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddGuestOs := func(t *testing.T) {
+		if _, ok := response["addGuestOs"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.GuestOS.NewAddGuestOsParams(map[string]string{}, "oscategoryid", "osdisplayname")
+		_, err := client.GuestOS.AddGuestOs(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddGuestOs", testaddGuestOs)
+
+	testaddGuestOsMapping := func(t *testing.T) {
+		if _, ok := response["addGuestOsMapping"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.GuestOS.NewAddGuestOsMappingParams("hypervisor", "hypervisorversion", "osnameforhypervisor")
+		_, err := client.GuestOS.AddGuestOsMapping(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddGuestOsMapping", testaddGuestOsMapping)
+
+	testlistGuestOsMapping := func(t *testing.T) {
+		if _, ok := response["listGuestOsMapping"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.GuestOS.NewListGuestOsMappingParams()
+		_, err := client.GuestOS.ListGuestOsMapping(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListGuestOsMapping", testlistGuestOsMapping)
+
+	testlistOsCategories := func(t *testing.T) {
+		if _, ok := response["listOsCategories"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.GuestOS.NewListOsCategoriesParams()
+		_, err := client.GuestOS.ListOsCategories(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListOsCategories", testlistOsCategories)
+
+	testlistOsTypes := func(t *testing.T) {
+		if _, ok := response["listOsTypes"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.GuestOS.NewListOsTypesParams()
+		_, err := client.GuestOS.ListOsTypes(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListOsTypes", testlistOsTypes)
+
+	testremoveGuestOs := func(t *testing.T) {
+		if _, ok := response["removeGuestOs"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.GuestOS.NewRemoveGuestOsParams("id")
+		_, err := client.GuestOS.RemoveGuestOs(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("RemoveGuestOs", testremoveGuestOs)
+
+	testremoveGuestOsMapping := func(t *testing.T) {
+		if _, ok := response["removeGuestOsMapping"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.GuestOS.NewRemoveGuestOsMappingParams("id")
+		_, err := client.GuestOS.RemoveGuestOsMapping(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("RemoveGuestOsMapping", testremoveGuestOsMapping)
+
+	testupdateGuestOs := func(t *testing.T) {
+		if _, ok := response["updateGuestOs"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.GuestOS.NewUpdateGuestOsParams(map[string]string{}, "id", "osdisplayname")
+		_, err := client.GuestOS.UpdateGuestOs(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateGuestOs", testupdateGuestOs)
+
+	testupdateGuestOsMapping := func(t *testing.T) {
+		if _, ok := response["updateGuestOsMapping"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.GuestOS.NewUpdateGuestOsMappingParams("id", "osnameforhypervisor")
+		_, err := client.GuestOS.UpdateGuestOsMapping(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateGuestOsMapping", testupdateGuestOsMapping)
+
+}
diff --git a/test/HostService_test.go b/test/HostService_test.go
new file mode 100644
index 0000000..1ad6e25
--- /dev/null
+++ b/test/HostService_test.go
@@ -0,0 +1,302 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestHostService(t *testing.T) {
+	service := "HostService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddBaremetalHost := func(t *testing.T) {
+		if _, ok := response["addBaremetalHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewAddBaremetalHostParams("hypervisor", "podid", "url", "zoneid")
+		_, err := client.Host.AddBaremetalHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddBaremetalHost", testaddBaremetalHost)
+
+	testaddGloboDnsHost := func(t *testing.T) {
+		if _, ok := response["addGloboDnsHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewAddGloboDnsHostParams("password", "physicalnetworkid", "url", "username")
+		_, err := client.Host.AddGloboDnsHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddGloboDnsHost", testaddGloboDnsHost)
+
+	testaddHost := func(t *testing.T) {
+		if _, ok := response["addHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewAddHostParams("hypervisor", "podid", "url", "zoneid")
+		_, err := client.Host.AddHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddHost", testaddHost)
+
+	testaddSecondaryStorage := func(t *testing.T) {
+		if _, ok := response["addSecondaryStorage"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewAddSecondaryStorageParams("url")
+		_, err := client.Host.AddSecondaryStorage(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddSecondaryStorage", testaddSecondaryStorage)
+
+	testcancelHostMaintenance := func(t *testing.T) {
+		if _, ok := response["cancelHostMaintenance"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewCancelHostMaintenanceParams("id")
+		_, err := client.Host.CancelHostMaintenance(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CancelHostMaintenance", testcancelHostMaintenance)
+
+	testconfigureHAForHost := func(t *testing.T) {
+		if _, ok := response["configureHAForHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewConfigureHAForHostParams("hostid", "provider")
+		_, err := client.Host.ConfigureHAForHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ConfigureHAForHost", testconfigureHAForHost)
+
+	testenableHAForHost := func(t *testing.T) {
+		if _, ok := response["enableHAForHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewEnableHAForHostParams("hostid")
+		_, err := client.Host.EnableHAForHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("EnableHAForHost", testenableHAForHost)
+
+	testdedicateHost := func(t *testing.T) {
+		if _, ok := response["dedicateHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewDedicateHostParams("domainid", "hostid")
+		_, err := client.Host.DedicateHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DedicateHost", testdedicateHost)
+
+	testdeleteHost := func(t *testing.T) {
+		if _, ok := response["deleteHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewDeleteHostParams("id")
+		_, err := client.Host.DeleteHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteHost", testdeleteHost)
+
+	testdisableOutOfBandManagementForHost := func(t *testing.T) {
+		if _, ok := response["disableOutOfBandManagementForHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewDisableOutOfBandManagementForHostParams("hostid")
+		_, err := client.Host.DisableOutOfBandManagementForHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DisableOutOfBandManagementForHost", testdisableOutOfBandManagementForHost)
+
+	testenableOutOfBandManagementForHost := func(t *testing.T) {
+		if _, ok := response["enableOutOfBandManagementForHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewEnableOutOfBandManagementForHostParams("hostid")
+		_, err := client.Host.EnableOutOfBandManagementForHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("EnableOutOfBandManagementForHost", testenableOutOfBandManagementForHost)
+
+	testfindHostsForMigration := func(t *testing.T) {
+		if _, ok := response["findHostsForMigration"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewFindHostsForMigrationParams("virtualmachineid")
+		_, err := client.Host.FindHostsForMigration(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("FindHostsForMigration", testfindHostsForMigration)
+
+	testlistDedicatedHosts := func(t *testing.T) {
+		if _, ok := response["listDedicatedHosts"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewListDedicatedHostsParams()
+		_, err := client.Host.ListDedicatedHosts(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListDedicatedHosts", testlistDedicatedHosts)
+
+	testlistHostTags := func(t *testing.T) {
+		if _, ok := response["listHostTags"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewListHostTagsParams()
+		_, err := client.Host.ListHostTags(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListHostTags", testlistHostTags)
+
+	testlistHosts := func(t *testing.T) {
+		if _, ok := response["listHosts"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewListHostsParams()
+		_, err := client.Host.ListHosts(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListHosts", testlistHosts)
+
+	testlistHostsMetrics := func(t *testing.T) {
+		if _, ok := response["listHostsMetrics"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewListHostsMetricsParams()
+		_, err := client.Host.ListHostsMetrics(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListHostsMetrics", testlistHostsMetrics)
+
+	testprepareHostForMaintenance := func(t *testing.T) {
+		if _, ok := response["prepareHostForMaintenance"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewPrepareHostForMaintenanceParams("id")
+		_, err := client.Host.PrepareHostForMaintenance(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("PrepareHostForMaintenance", testprepareHostForMaintenance)
+
+	testreconnectHost := func(t *testing.T) {
+		if _, ok := response["reconnectHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewReconnectHostParams("id")
+		_, err := client.Host.ReconnectHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ReconnectHost", testreconnectHost)
+
+	testreleaseDedicatedHost := func(t *testing.T) {
+		if _, ok := response["releaseDedicatedHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewReleaseDedicatedHostParams("hostid")
+		_, err := client.Host.ReleaseDedicatedHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ReleaseDedicatedHost", testreleaseDedicatedHost)
+
+	testreleaseHostReservation := func(t *testing.T) {
+		if _, ok := response["releaseHostReservation"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewReleaseHostReservationParams("id")
+		_, err := client.Host.ReleaseHostReservation(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ReleaseHostReservation", testreleaseHostReservation)
+
+	testupdateHost := func(t *testing.T) {
+		if _, ok := response["updateHost"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewUpdateHostParams("id")
+		_, err := client.Host.UpdateHost(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateHost", testupdateHost)
+
+	testupdateHostPassword := func(t *testing.T) {
+		if _, ok := response["updateHostPassword"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Host.NewUpdateHostPasswordParams("password", "username")
+		_, err := client.Host.UpdateHostPassword(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateHostPassword", testupdateHostPassword)
+
+}
diff --git a/test/HypervisorService_test.go b/test/HypervisorService_test.go
new file mode 100644
index 0000000..e0ec6ca
--- /dev/null
+++ b/test/HypervisorService_test.go
@@ -0,0 +1,74 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestHypervisorService(t *testing.T) {
+	service := "HypervisorService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testlistHypervisorCapabilities := func(t *testing.T) {
+		if _, ok := response["listHypervisorCapabilities"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Hypervisor.NewListHypervisorCapabilitiesParams()
+		_, err := client.Hypervisor.ListHypervisorCapabilities(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListHypervisorCapabilities", testlistHypervisorCapabilities)
+
+	testlistHypervisors := func(t *testing.T) {
+		if _, ok := response["listHypervisors"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Hypervisor.NewListHypervisorsParams()
+		_, err := client.Hypervisor.ListHypervisors(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListHypervisors", testlistHypervisors)
+
+	testupdateHypervisorCapabilities := func(t *testing.T) {
+		if _, ok := response["updateHypervisorCapabilities"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Hypervisor.NewUpdateHypervisorCapabilitiesParams()
+		_, err := client.Hypervisor.UpdateHypervisorCapabilities(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateHypervisorCapabilities", testupdateHypervisorCapabilities)
+
+}
diff --git a/test/ISOService_test.go b/test/ISOService_test.go
new file mode 100644
index 0000000..01d397c
--- /dev/null
+++ b/test/ISOService_test.go
@@ -0,0 +1,158 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestISOService(t *testing.T) {
+	service := "ISOService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testattachIso := func(t *testing.T) {
+		if _, ok := response["attachIso"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ISO.NewAttachIsoParams("id", "virtualmachineid")
+		_, err := client.ISO.AttachIso(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AttachIso", testattachIso)
+
+	testcopyIso := func(t *testing.T) {
+		if _, ok := response["copyIso"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ISO.NewCopyIsoParams("id")
+		_, err := client.ISO.CopyIso(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CopyIso", testcopyIso)
+
+	testdeleteIso := func(t *testing.T) {
+		if _, ok := response["deleteIso"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ISO.NewDeleteIsoParams("id")
+		_, err := client.ISO.DeleteIso(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteIso", testdeleteIso)
+
+	testdetachIso := func(t *testing.T) {
+		if _, ok := response["detachIso"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ISO.NewDetachIsoParams("virtualmachineid")
+		_, err := client.ISO.DetachIso(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DetachIso", testdetachIso)
+
+	testextractIso := func(t *testing.T) {
+		if _, ok := response["extractIso"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ISO.NewExtractIsoParams("id", "mode")
+		_, err := client.ISO.ExtractIso(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ExtractIso", testextractIso)
+
+	testlistIsoPermissions := func(t *testing.T) {
+		if _, ok := response["listIsoPermissions"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ISO.NewListIsoPermissionsParams("id")
+		_, err := client.ISO.ListIsoPermissions(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListIsoPermissions", testlistIsoPermissions)
+
+	testlistIsos := func(t *testing.T) {
+		if _, ok := response["listIsos"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ISO.NewListIsosParams()
+		_, err := client.ISO.ListIsos(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListIsos", testlistIsos)
+
+	testregisterIso := func(t *testing.T) {
+		if _, ok := response["registerIso"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ISO.NewRegisterIsoParams("displaytext", "name", "url", "zoneid")
+		_, err := client.ISO.RegisterIso(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("RegisterIso", testregisterIso)
+
+	testupdateIso := func(t *testing.T) {
+		if _, ok := response["updateIso"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ISO.NewUpdateIsoParams("id")
+		_, err := client.ISO.UpdateIso(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateIso", testupdateIso)
+
+	testupdateIsoPermissions := func(t *testing.T) {
+		if _, ok := response["updateIsoPermissions"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ISO.NewUpdateIsoPermissionsParams("id")
+		_, err := client.ISO.UpdateIsoPermissions(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateIsoPermissions", testupdateIsoPermissions)
+
+}
diff --git a/test/ImageStoreService_test.go b/test/ImageStoreService_test.go
new file mode 100644
index 0000000..31fee6a
--- /dev/null
+++ b/test/ImageStoreService_test.go
@@ -0,0 +1,134 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestImageStoreService(t *testing.T) {
+	service := "ImageStoreService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddImageStore := func(t *testing.T) {
+		if _, ok := response["addImageStore"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ImageStore.NewAddImageStoreParams("provider")
+		_, err := client.ImageStore.AddImageStore(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddImageStore", testaddImageStore)
+
+	testaddImageStoreS3 := func(t *testing.T) {
+		if _, ok := response["addImageStoreS3"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ImageStore.NewAddImageStoreS3Params("accesskey", "bucket", "endpoint", "secretkey")
+		_, err := client.ImageStore.AddImageStoreS3(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddImageStoreS3", testaddImageStoreS3)
+
+	testcreateSecondaryStagingStore := func(t *testing.T) {
+		if _, ok := response["createSecondaryStagingStore"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ImageStore.NewCreateSecondaryStagingStoreParams("url")
+		_, err := client.ImageStore.CreateSecondaryStagingStore(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateSecondaryStagingStore", testcreateSecondaryStagingStore)
+
+	testdeleteImageStore := func(t *testing.T) {
+		if _, ok := response["deleteImageStore"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ImageStore.NewDeleteImageStoreParams("id")
+		_, err := client.ImageStore.DeleteImageStore(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteImageStore", testdeleteImageStore)
+
+	testdeleteSecondaryStagingStore := func(t *testing.T) {
+		if _, ok := response["deleteSecondaryStagingStore"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ImageStore.NewDeleteSecondaryStagingStoreParams("id")
+		_, err := client.ImageStore.DeleteSecondaryStagingStore(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteSecondaryStagingStore", testdeleteSecondaryStagingStore)
+
+	testlistImageStores := func(t *testing.T) {
+		if _, ok := response["listImageStores"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ImageStore.NewListImageStoresParams()
+		_, err := client.ImageStore.ListImageStores(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListImageStores", testlistImageStores)
+
+	testlistSecondaryStagingStores := func(t *testing.T) {
+		if _, ok := response["listSecondaryStagingStores"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ImageStore.NewListSecondaryStagingStoresParams()
+		_, err := client.ImageStore.ListSecondaryStagingStores(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListSecondaryStagingStores", testlistSecondaryStagingStores)
+
+	testupdateCloudToUseObjectStore := func(t *testing.T) {
+		if _, ok := response["updateCloudToUseObjectStore"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.ImageStore.NewUpdateCloudToUseObjectStoreParams("provider")
+		_, err := client.ImageStore.UpdateCloudToUseObjectStore(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateCloudToUseObjectStore", testupdateCloudToUseObjectStore)
+
+}
diff --git a/test/InternalLBService_test.go b/test/InternalLBService_test.go
new file mode 100644
index 0000000..7477127
--- /dev/null
+++ b/test/InternalLBService_test.go
@@ -0,0 +1,110 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestInternalLBService(t *testing.T) {
+	service := "InternalLBService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testconfigureInternalLoadBalancerElement := func(t *testing.T) {
+		if _, ok := response["configureInternalLoadBalancerElement"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.InternalLB.NewConfigureInternalLoadBalancerElementParams(true, "id")
+		_, err := client.InternalLB.ConfigureInternalLoadBalancerElement(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ConfigureInternalLoadBalancerElement", testconfigureInternalLoadBalancerElement)
+
+	testcreateInternalLoadBalancerElement := func(t *testing.T) {
+		if _, ok := response["createInternalLoadBalancerElement"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.InternalLB.NewCreateInternalLoadBalancerElementParams("nspid")
+		_, err := client.InternalLB.CreateInternalLoadBalancerElement(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateInternalLoadBalancerElement", testcreateInternalLoadBalancerElement)
+
+	testlistInternalLoadBalancerElements := func(t *testing.T) {
+		if _, ok := response["listInternalLoadBalancerElements"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.InternalLB.NewListInternalLoadBalancerElementsParams()
+		_, err := client.InternalLB.ListInternalLoadBalancerElements(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListInternalLoadBalancerElements", testlistInternalLoadBalancerElements)
+
+	testlistInternalLoadBalancerVMs := func(t *testing.T) {
+		if _, ok := response["listInternalLoadBalancerVMs"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.InternalLB.NewListInternalLoadBalancerVMsParams()
+		_, err := client.InternalLB.ListInternalLoadBalancerVMs(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListInternalLoadBalancerVMs", testlistInternalLoadBalancerVMs)
+
+	teststartInternalLoadBalancerVM := func(t *testing.T) {
+		if _, ok := response["startInternalLoadBalancerVM"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.InternalLB.NewStartInternalLoadBalancerVMParams("id")
+		_, err := client.InternalLB.StartInternalLoadBalancerVM(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("StartInternalLoadBalancerVM", teststartInternalLoadBalancerVM)
+
+	teststopInternalLoadBalancerVM := func(t *testing.T) {
+		if _, ok := response["stopInternalLoadBalancerVM"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.InternalLB.NewStopInternalLoadBalancerVMParams("id")
+		_, err := client.InternalLB.StopInternalLoadBalancerVM(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("StopInternalLoadBalancerVM", teststopInternalLoadBalancerVM)
+
+}
diff --git a/test/LDAPService_test.go b/test/LDAPService_test.go
new file mode 100644
index 0000000..15e852d
--- /dev/null
+++ b/test/LDAPService_test.go
@@ -0,0 +1,158 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestLDAPService(t *testing.T) {
+	service := "LDAPService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddLdapConfiguration := func(t *testing.T) {
+		if _, ok := response["addLdapConfiguration"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LDAP.NewAddLdapConfigurationParams("hostname", 0)
+		_, err := client.LDAP.AddLdapConfiguration(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddLdapConfiguration", testaddLdapConfiguration)
+
+	testdeleteLdapConfiguration := func(t *testing.T) {
+		if _, ok := response["deleteLdapConfiguration"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LDAP.NewDeleteLdapConfigurationParams("hostname")
+		_, err := client.LDAP.DeleteLdapConfiguration(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteLdapConfiguration", testdeleteLdapConfiguration)
+
+	testimportLdapUsers := func(t *testing.T) {
+		if _, ok := response["importLdapUsers"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LDAP.NewImportLdapUsersParams()
+		_, err := client.LDAP.ImportLdapUsers(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ImportLdapUsers", testimportLdapUsers)
+
+	testldapConfig := func(t *testing.T) {
+		if _, ok := response["ldapConfig"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LDAP.NewLdapConfigParams()
+		_, err := client.LDAP.LdapConfig(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("LdapConfig", testldapConfig)
+
+	testldapCreateAccount := func(t *testing.T) {
+		if _, ok := response["ldapCreateAccount"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LDAP.NewLdapCreateAccountParams("username")
+		_, err := client.LDAP.LdapCreateAccount(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("LdapCreateAccount", testldapCreateAccount)
+
+	testldapRemove := func(t *testing.T) {
+		if _, ok := response["ldapRemove"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LDAP.NewLdapRemoveParams()
+		_, err := client.LDAP.LdapRemove(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("LdapRemove", testldapRemove)
+
+	testlinkDomainToLdap := func(t *testing.T) {
+		if _, ok := response["linkDomainToLdap"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LDAP.NewLinkDomainToLdapParams(0, "domainid", "type")
+		_, err := client.LDAP.LinkDomainToLdap(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("LinkDomainToLdap", testlinkDomainToLdap)
+
+	testlistLdapConfigurations := func(t *testing.T) {
+		if _, ok := response["listLdapConfigurations"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LDAP.NewListLdapConfigurationsParams()
+		_, err := client.LDAP.ListLdapConfigurations(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListLdapConfigurations", testlistLdapConfigurations)
+
+	testlistLdapUsers := func(t *testing.T) {
+		if _, ok := response["listLdapUsers"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LDAP.NewListLdapUsersParams()
+		_, err := client.LDAP.ListLdapUsers(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListLdapUsers", testlistLdapUsers)
+
+	testsearchLdap := func(t *testing.T) {
+		if _, ok := response["searchLdap"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LDAP.NewSearchLdapParams("query")
+		_, err := client.LDAP.SearchLdap(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("SearchLdap", testsearchLdap)
+
+}
diff --git a/test/LimitService_test.go b/test/LimitService_test.go
new file mode 100644
index 0000000..57d1991
--- /dev/null
+++ b/test/LimitService_test.go
@@ -0,0 +1,98 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestLimitService(t *testing.T) {
+	service := "LimitService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testgetApiLimit := func(t *testing.T) {
+		if _, ok := response["getApiLimit"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Limit.NewGetApiLimitParams()
+		_, err := client.Limit.GetApiLimit(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("GetApiLimit", testgetApiLimit)
+
+	testlistResourceLimits := func(t *testing.T) {
+		if _, ok := response["listResourceLimits"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Limit.NewListResourceLimitsParams()
+		_, err := client.Limit.ListResourceLimits(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListResourceLimits", testlistResourceLimits)
+
+	testresetApiLimit := func(t *testing.T) {
+		if _, ok := response["resetApiLimit"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Limit.NewResetApiLimitParams()
+		_, err := client.Limit.ResetApiLimit(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ResetApiLimit", testresetApiLimit)
+
+	testupdateResourceCount := func(t *testing.T) {
+		if _, ok := response["updateResourceCount"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Limit.NewUpdateResourceCountParams("domainid")
+		_, err := client.Limit.UpdateResourceCount(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateResourceCount", testupdateResourceCount)
+
+	testupdateResourceLimit := func(t *testing.T) {
+		if _, ok := response["updateResourceLimit"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.Limit.NewUpdateResourceLimitParams(0)
+		_, err := client.Limit.UpdateResourceLimit(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateResourceLimit", testupdateResourceLimit)
+
+}
diff --git a/test/LoadBalancerService_test.go b/test/LoadBalancerService_test.go
new file mode 100644
index 0000000..00131f1
--- /dev/null
+++ b/test/LoadBalancerService_test.go
@@ -0,0 +1,446 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestLoadBalancerService(t *testing.T) {
+	service := "LoadBalancerService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddNetscalerLoadBalancer := func(t *testing.T) {
+		if _, ok := response["addNetscalerLoadBalancer"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewAddNetscalerLoadBalancerParams("networkdevicetype", "password", "physicalnetworkid", "url", "username")
+		_, err := client.LoadBalancer.AddNetscalerLoadBalancer(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AddNetscalerLoadBalancer", testaddNetscalerLoadBalancer)
+
+	testassignCertToLoadBalancer := func(t *testing.T) {
+		if _, ok := response["assignCertToLoadBalancer"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewAssignCertToLoadBalancerParams("certid", "lbruleid")
+		_, err := client.LoadBalancer.AssignCertToLoadBalancer(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AssignCertToLoadBalancer", testassignCertToLoadBalancer)
+
+	testassignToGlobalLoadBalancerRule := func(t *testing.T) {
+		if _, ok := response["assignToGlobalLoadBalancerRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewAssignToGlobalLoadBalancerRuleParams("id", []string{})
+		_, err := client.LoadBalancer.AssignToGlobalLoadBalancerRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AssignToGlobalLoadBalancerRule", testassignToGlobalLoadBalancerRule)
+
+	testassignToLoadBalancerRule := func(t *testing.T) {
+		if _, ok := response["assignToLoadBalancerRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewAssignToLoadBalancerRuleParams("id")
+		_, err := client.LoadBalancer.AssignToLoadBalancerRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("AssignToLoadBalancerRule", testassignToLoadBalancerRule)
+
+	testconfigureNetscalerLoadBalancer := func(t *testing.T) {
+		if _, ok := response["configureNetscalerLoadBalancer"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewConfigureNetscalerLoadBalancerParams("lbdeviceid")
+		_, err := client.LoadBalancer.ConfigureNetscalerLoadBalancer(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ConfigureNetscalerLoadBalancer", testconfigureNetscalerLoadBalancer)
+
+	testcreateGlobalLoadBalancerRule := func(t *testing.T) {
+		if _, ok := response["createGlobalLoadBalancerRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewCreateGlobalLoadBalancerRuleParams("gslbdomainname", "gslbservicetype", "name", 0)
+		_, err := client.LoadBalancer.CreateGlobalLoadBalancerRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateGlobalLoadBalancerRule", testcreateGlobalLoadBalancerRule)
+
+	testcreateLBHealthCheckPolicy := func(t *testing.T) {
+		if _, ok := response["createLBHealthCheckPolicy"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewCreateLBHealthCheckPolicyParams("lbruleid")
+		_, err := client.LoadBalancer.CreateLBHealthCheckPolicy(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateLBHealthCheckPolicy", testcreateLBHealthCheckPolicy)
+
+	testcreateLBStickinessPolicy := func(t *testing.T) {
+		if _, ok := response["createLBStickinessPolicy"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewCreateLBStickinessPolicyParams("lbruleid", "methodname", "name")
+		_, err := client.LoadBalancer.CreateLBStickinessPolicy(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateLBStickinessPolicy", testcreateLBStickinessPolicy)
+
+	testcreateLoadBalancer := func(t *testing.T) {
+		if _, ok := response["createLoadBalancer"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewCreateLoadBalancerParams("algorithm", 0, "name", "networkid", "scheme", "sourceipaddressnetworkid", 0)
+		_, err := client.LoadBalancer.CreateLoadBalancer(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateLoadBalancer", testcreateLoadBalancer)
+
+	testcreateLoadBalancerRule := func(t *testing.T) {
+		if _, ok := response["createLoadBalancerRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewCreateLoadBalancerRuleParams("algorithm", "name", 0, 0)
+		_, err := client.LoadBalancer.CreateLoadBalancerRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateLoadBalancerRule", testcreateLoadBalancerRule)
+
+	testdeleteGlobalLoadBalancerRule := func(t *testing.T) {
+		if _, ok := response["deleteGlobalLoadBalancerRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewDeleteGlobalLoadBalancerRuleParams("id")
+		_, err := client.LoadBalancer.DeleteGlobalLoadBalancerRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteGlobalLoadBalancerRule", testdeleteGlobalLoadBalancerRule)
+
+	testdeleteLBHealthCheckPolicy := func(t *testing.T) {
+		if _, ok := response["deleteLBHealthCheckPolicy"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewDeleteLBHealthCheckPolicyParams("id")
+		_, err := client.LoadBalancer.DeleteLBHealthCheckPolicy(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteLBHealthCheckPolicy", testdeleteLBHealthCheckPolicy)
+
+	testdeleteLBStickinessPolicy := func(t *testing.T) {
+		if _, ok := response["deleteLBStickinessPolicy"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewDeleteLBStickinessPolicyParams("id")
+		_, err := client.LoadBalancer.DeleteLBStickinessPolicy(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteLBStickinessPolicy", testdeleteLBStickinessPolicy)
+
+	testdeleteLoadBalancer := func(t *testing.T) {
+		if _, ok := response["deleteLoadBalancer"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewDeleteLoadBalancerParams("id")
+		_, err := client.LoadBalancer.DeleteLoadBalancer(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteLoadBalancer", testdeleteLoadBalancer)
+
+	testdeleteLoadBalancerRule := func(t *testing.T) {
+		if _, ok := response["deleteLoadBalancerRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewDeleteLoadBalancerRuleParams("id")
+		_, err := client.LoadBalancer.DeleteLoadBalancerRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteLoadBalancerRule", testdeleteLoadBalancerRule)
+
+	testdeleteNetscalerLoadBalancer := func(t *testing.T) {
+		if _, ok := response["deleteNetscalerLoadBalancer"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewDeleteNetscalerLoadBalancerParams("lbdeviceid")
+		_, err := client.LoadBalancer.DeleteNetscalerLoadBalancer(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteNetscalerLoadBalancer", testdeleteNetscalerLoadBalancer)
+
+	testdeleteSslCert := func(t *testing.T) {
+		if _, ok := response["deleteSslCert"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewDeleteSslCertParams("id")
+		_, err := client.LoadBalancer.DeleteSslCert(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteSslCert", testdeleteSslCert)
+
+	testlistGlobalLoadBalancerRules := func(t *testing.T) {
+		if _, ok := response["listGlobalLoadBalancerRules"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewListGlobalLoadBalancerRulesParams()
+		_, err := client.LoadBalancer.ListGlobalLoadBalancerRules(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListGlobalLoadBalancerRules", testlistGlobalLoadBalancerRules)
+
+	testlistLBHealthCheckPolicies := func(t *testing.T) {
+		if _, ok := response["listLBHealthCheckPolicies"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewListLBHealthCheckPoliciesParams()
+		_, err := client.LoadBalancer.ListLBHealthCheckPolicies(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListLBHealthCheckPolicies", testlistLBHealthCheckPolicies)
+
+	testlistLBStickinessPolicies := func(t *testing.T) {
+		if _, ok := response["listLBStickinessPolicies"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewListLBStickinessPoliciesParams()
+		_, err := client.LoadBalancer.ListLBStickinessPolicies(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListLBStickinessPolicies", testlistLBStickinessPolicies)
+
+	testlistLoadBalancerRuleInstances := func(t *testing.T) {
+		if _, ok := response["listLoadBalancerRuleInstances"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewListLoadBalancerRuleInstancesParams("id")
+		_, err := client.LoadBalancer.ListLoadBalancerRuleInstances(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListLoadBalancerRuleInstances", testlistLoadBalancerRuleInstances)
+
+	testlistLoadBalancerRules := func(t *testing.T) {
+		if _, ok := response["listLoadBalancerRules"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewListLoadBalancerRulesParams()
+		_, err := client.LoadBalancer.ListLoadBalancerRules(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListLoadBalancerRules", testlistLoadBalancerRules)
+
+	testlistLoadBalancers := func(t *testing.T) {
+		if _, ok := response["listLoadBalancers"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewListLoadBalancersParams()
+		_, err := client.LoadBalancer.ListLoadBalancers(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListLoadBalancers", testlistLoadBalancers)
+
+	testlistNetscalerLoadBalancers := func(t *testing.T) {
+		if _, ok := response["listNetscalerLoadBalancers"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewListNetscalerLoadBalancersParams()
+		_, err := client.LoadBalancer.ListNetscalerLoadBalancers(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListNetscalerLoadBalancers", testlistNetscalerLoadBalancers)
+
+	testlistSslCerts := func(t *testing.T) {
+		if _, ok := response["listSslCerts"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewListSslCertsParams()
+		_, err := client.LoadBalancer.ListSslCerts(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListSslCerts", testlistSslCerts)
+
+	testremoveCertFromLoadBalancer := func(t *testing.T) {
+		if _, ok := response["removeCertFromLoadBalancer"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewRemoveCertFromLoadBalancerParams("lbruleid")
+		_, err := client.LoadBalancer.RemoveCertFromLoadBalancer(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("RemoveCertFromLoadBalancer", testremoveCertFromLoadBalancer)
+
+	testremoveFromGlobalLoadBalancerRule := func(t *testing.T) {
+		if _, ok := response["removeFromGlobalLoadBalancerRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewRemoveFromGlobalLoadBalancerRuleParams("id", []string{})
+		_, err := client.LoadBalancer.RemoveFromGlobalLoadBalancerRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("RemoveFromGlobalLoadBalancerRule", testremoveFromGlobalLoadBalancerRule)
+
+	testremoveFromLoadBalancerRule := func(t *testing.T) {
+		if _, ok := response["removeFromLoadBalancerRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewRemoveFromLoadBalancerRuleParams("id")
+		_, err := client.LoadBalancer.RemoveFromLoadBalancerRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("RemoveFromLoadBalancerRule", testremoveFromLoadBalancerRule)
+
+	testupdateGlobalLoadBalancerRule := func(t *testing.T) {
+		if _, ok := response["updateGlobalLoadBalancerRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewUpdateGlobalLoadBalancerRuleParams("id")
+		_, err := client.LoadBalancer.UpdateGlobalLoadBalancerRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateGlobalLoadBalancerRule", testupdateGlobalLoadBalancerRule)
+
+	testupdateLBHealthCheckPolicy := func(t *testing.T) {
+		if _, ok := response["updateLBHealthCheckPolicy"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewUpdateLBHealthCheckPolicyParams("id")
+		_, err := client.LoadBalancer.UpdateLBHealthCheckPolicy(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateLBHealthCheckPolicy", testupdateLBHealthCheckPolicy)
+
+	testupdateLBStickinessPolicy := func(t *testing.T) {
+		if _, ok := response["updateLBStickinessPolicy"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewUpdateLBStickinessPolicyParams("id")
+		_, err := client.LoadBalancer.UpdateLBStickinessPolicy(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateLBStickinessPolicy", testupdateLBStickinessPolicy)
+
+	testupdateLoadBalancer := func(t *testing.T) {
+		if _, ok := response["updateLoadBalancer"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewUpdateLoadBalancerParams("id")
+		_, err := client.LoadBalancer.UpdateLoadBalancer(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateLoadBalancer", testupdateLoadBalancer)
+
+	testupdateLoadBalancerRule := func(t *testing.T) {
+		if _, ok := response["updateLoadBalancerRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewUpdateLoadBalancerRuleParams("id")
+		_, err := client.LoadBalancer.UpdateLoadBalancerRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateLoadBalancerRule", testupdateLoadBalancerRule)
+
+	testuploadSslCert := func(t *testing.T) {
+		if _, ok := response["uploadSslCert"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.LoadBalancer.NewUploadSslCertParams("certificate", "name", "privatekey")
+		_, err := client.LoadBalancer.UploadSslCert(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UploadSslCert", testuploadSslCert)
+
+}
diff --git a/test/NATService_test.go b/test/NATService_test.go
new file mode 100644
index 0000000..b57322a
--- /dev/null
+++ b/test/NATService_test.go
@@ -0,0 +1,98 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestNATService(t *testing.T) {
+	service := "NATService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testcreateIpForwardingRule := func(t *testing.T) {
+		if _, ok := response["createIpForwardingRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NAT.NewCreateIpForwardingRuleParams("ipaddressid", "protocol", 0)
+		_, err := client.NAT.CreateIpForwardingRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateIpForwardingRule", testcreateIpForwardingRule)
+
+	testdeleteIpForwardingRule := func(t *testing.T) {
+		if _, ok := response["deleteIpForwardingRule"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NAT.NewDeleteIpForwardingRuleParams("id")
+		_, err := client.NAT.DeleteIpForwardingRule(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteIpForwardingRule", testdeleteIpForwardingRule)
+
+	testdisableStaticNat := func(t *testing.T) {
+		if _, ok := response["disableStaticNat"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NAT.NewDisableStaticNatParams("ipaddressid")
+		_, err := client.NAT.DisableStaticNat(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DisableStaticNat", testdisableStaticNat)
+
+	testenableStaticNat := func(t *testing.T) {
+		if _, ok := response["enableStaticNat"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NAT.NewEnableStaticNatParams("ipaddressid", "virtualmachineid")
+		_, err := client.NAT.EnableStaticNat(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("EnableStaticNat", testenableStaticNat)
+
+	testlistIpForwardingRules := func(t *testing.T) {
+		if _, ok := response["listIpForwardingRules"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NAT.NewListIpForwardingRulesParams()
+		_, err := client.NAT.ListIpForwardingRules(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListIpForwardingRules", testlistIpForwardingRules)
+
+}
diff --git a/test/NetworkACLService_test.go b/test/NetworkACLService_test.go
new file mode 100644
index 0000000..4364ecf
--- /dev/null
+++ b/test/NetworkACLService_test.go
@@ -0,0 +1,146 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestNetworkACLService(t *testing.T) {
+	service := "NetworkACLService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testcreateNetworkACL := func(t *testing.T) {
+		if _, ok := response["createNetworkACL"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NetworkACL.NewCreateNetworkACLParams("protocol")
+		_, err := client.NetworkACL.CreateNetworkACL(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateNetworkACL", testcreateNetworkACL)
+
+	testcreateNetworkACLList := func(t *testing.T) {
+		if _, ok := response["createNetworkACLList"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NetworkACL.NewCreateNetworkACLListParams("name", "vpcid")
+		_, err := client.NetworkACL.CreateNetworkACLList(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("CreateNetworkACLList", testcreateNetworkACLList)
+
+	testdeleteNetworkACL := func(t *testing.T) {
+		if _, ok := response["deleteNetworkACL"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NetworkACL.NewDeleteNetworkACLParams("id")
+		_, err := client.NetworkACL.DeleteNetworkACL(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteNetworkACL", testdeleteNetworkACL)
+
+	testdeleteNetworkACLList := func(t *testing.T) {
+		if _, ok := response["deleteNetworkACLList"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NetworkACL.NewDeleteNetworkACLListParams("id")
+		_, err := client.NetworkACL.DeleteNetworkACLList(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("DeleteNetworkACLList", testdeleteNetworkACLList)
+
+	testlistNetworkACLLists := func(t *testing.T) {
+		if _, ok := response["listNetworkACLLists"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NetworkACL.NewListNetworkACLListsParams()
+		_, err := client.NetworkACL.ListNetworkACLLists(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListNetworkACLLists", testlistNetworkACLLists)
+
+	testlistNetworkACLs := func(t *testing.T) {
+		if _, ok := response["listNetworkACLs"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NetworkACL.NewListNetworkACLsParams()
+		_, err := client.NetworkACL.ListNetworkACLs(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ListNetworkACLs", testlistNetworkACLs)
+
+	testreplaceNetworkACLList := func(t *testing.T) {
+		if _, ok := response["replaceNetworkACLList"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NetworkACL.NewReplaceNetworkACLListParams("aclid")
+		_, err := client.NetworkACL.ReplaceNetworkACLList(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("ReplaceNetworkACLList", testreplaceNetworkACLList)
+
+	testupdateNetworkACLItem := func(t *testing.T) {
+		if _, ok := response["updateNetworkACLItem"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NetworkACL.NewUpdateNetworkACLItemParams("id")
+		_, err := client.NetworkACL.UpdateNetworkACLItem(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateNetworkACLItem", testupdateNetworkACLItem)
+
+	testupdateNetworkACLList := func(t *testing.T) {
+		if _, ok := response["updateNetworkACLList"]; !ok {
+			t.Skipf("Skipping as no json response is provided in testdata")
+		}
+		p := client.NetworkACL.NewUpdateNetworkACLListParams("id")
+		_, err := client.NetworkACL.UpdateNetworkACLList(p)
+		if err != nil {
+			t.Errorf(err.Error())
+		}
+	}
+	t.Run("UpdateNetworkACLList", testupdateNetworkACLList)
+
+}
diff --git a/test/NetworkDeviceService_test.go b/test/NetworkDeviceService_test.go
new file mode 100644
index 0000000..47b8613
--- /dev/null
+++ b/test/NetworkDeviceService_test.go
@@ -0,0 +1,74 @@
+//
+// 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 test
+
+import (
+	"testing"
+
+	"github.com/apache/cloudstack-go/v2/cloudstack"
+)
+
+func TestNetworkDeviceService(t *testing.T) {
+	service := "NetworkDeviceService"
+	response, err := readData(service)
+	if err != nil {
+		t.Skipf("Skipping test as %v", err)
+	}
+	server := CreateTestServer(t, response)
+	client := cloudstack.NewClient(server.URL, "APIKEY", "SECRETKEY", true)
+	defer server.Close()
+
+	testaddNetworkDevice := func(t *testing.T) {
... 7962 lines suppressed ...