Added examples to the test/compute/examples/nttcis directory.  Start working on 
loadbalancer test, test_nttcis.py


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/c05f59a2
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/c05f59a2
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/c05f59a2

Branch: refs/heads/trunk
Commit: c05f59a2b6463a3074ba1b4c17277b3d4242c2c9
Parents: 43d324d
Author: mitch <[email protected]>
Authored: Sun Oct 21 12:49:17 2018 -0400
Committer: mitch <[email protected]>
Committed: Sun Oct 21 12:49:17 2018 -0400

----------------------------------------------------------------------
 .../Firewall_Create_Complex_Firewall_Rule.py    |   2 +-
 .../nttcis/Firewall_Create_Simple_Rule.py       |   2 +-
 .../nttcis/Nodes_Create_mcp2_Customized.py      |  26 +
 libcloud/common/nttcis.py                       |   3 +-
 libcloud/test/loadbalancer/test_nttcis.py       | 620 +++++++++++++++++++
 tests/lib_create_test.py                        |  26 +-
 tests/lib_list_test.py                          |   5 +
 7 files changed, 679 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/c05f59a2/docs/examples/compute/nttcis/Firewall_Create_Complex_Firewall_Rule.py
----------------------------------------------------------------------
diff --git 
a/docs/examples/compute/nttcis/Firewall_Create_Complex_Firewall_Rule.py 
b/docs/examples/compute/nttcis/Firewall_Create_Complex_Firewall_Rule.py
index cc7f8f5..c96a0ca 100644
--- a/docs/examples/compute/nttcis/Firewall_Create_Complex_Firewall_Rule.py
+++ b/docs/examples/compute/nttcis/Firewall_Create_Complex_Firewall_Rule.py
@@ -4,7 +4,7 @@ from libcloud.compute.providers import get_driver
 from libcloud.common.nttcis import NttCisFirewallAddress, NttCisIpAddress, 
NttCisPort
 import libcloud.security
 
-# Get dimension data driver
+# Get nttcis driver
 libcloud.security.VERIFY_SSL_CERT = True
 cls = get_driver(Provider.NTTCIS)
 driver = cls('myusername', 'mypassword', region='eu')

http://git-wip-us.apache.org/repos/asf/libcloud/blob/c05f59a2/docs/examples/compute/nttcis/Firewall_Create_Simple_Rule.py
----------------------------------------------------------------------
diff --git a/docs/examples/compute/nttcis/Firewall_Create_Simple_Rule.py 
b/docs/examples/compute/nttcis/Firewall_Create_Simple_Rule.py
index a14fd6e..d19ffd8 100644
--- a/docs/examples/compute/nttcis/Firewall_Create_Simple_Rule.py
+++ b/docs/examples/compute/nttcis/Firewall_Create_Simple_Rule.py
@@ -4,7 +4,7 @@ from libcloud.compute.providers import get_driver
 from libcloud.common.nttcis import NttCisFirewallAddress, NttCisIpAddress, 
NttCisPort
 import libcloud.security
 
-# Get dimension data driver
+# Get nttcis driver
 libcloud.security.VERIFY_SSL_CERT = True
 cls = get_driver(Provider.NTTCIS)
 driver = cls('myusername', 'mypassword', region='eu')

http://git-wip-us.apache.org/repos/asf/libcloud/blob/c05f59a2/docs/examples/compute/nttcis/Nodes_Create_mcp2_Customized.py
----------------------------------------------------------------------
diff --git a/docs/examples/compute/nttcis/Nodes_Create_mcp2_Customized.py 
b/docs/examples/compute/nttcis/Nodes_Create_mcp2_Customized.py
new file mode 100644
index 0000000..8f89986
--- /dev/null
+++ b/docs/examples/compute/nttcis/Nodes_Create_mcp2_Customized.py
@@ -0,0 +1,26 @@
+from libcloud.compute.types import Provider
+from libcloud.compute.providers import get_driver
+import libcloud.security
+
+# Get nttcis driver
+libcloud.security.VERIFY_SSL_CERT = True
+cls = get_driver(Provider.NTTCIS)
+driver = cls('myusername', 'mypassword', region='eu')
+image_name = "SLES 12 64-bit"
+images = driver.list_images(location='EU6')
+image = [i for i in images if i.name == image_name][0]
+domain_name = 'test_1'
+domains = driver.ex_list_network_domains(location='EU6')
+net_domain = [d for d in domains if d.name == domain_name][0]
+psswd = 'mypassword123!'
+vlan_name = "vlan1"
+vlans = driver.ex_list_vlans()
+vlan = [v for v in vlans if v.name == vlan_name][0]
+new_node = driver.create_node("Suse_12", image, psswd,
+                              ex_description="Customized_Suse server",
+                              ex_network_domain=net_domain,
+                              ex_primary_nic_vlan=vlan,
+                              ex_primary_nic_network_adapter='VMXNET3',
+                              ex_memory_gb=8
+                              )
+driver.ex_wait_for_state('running', driver.ex_get_node_by_id, 20, 420, 
new_node.id)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/c05f59a2/libcloud/common/nttcis.py
----------------------------------------------------------------------
diff --git a/libcloud/common/nttcis.py b/libcloud/common/nttcis.py
index b1e7c4b..35dd0a9 100644
--- a/libcloud/common/nttcis.py
+++ b/libcloud/common/nttcis.py
@@ -595,12 +595,11 @@ class NttCisConnection(ConnectionUserAndKey):
         while cnt < timeout / poll_interval:
             result = func(*args, **kwargs)
             if isinstance(result, Node):
-                object_state = result.state
+                object_state = result.state.lower()
             else:
                 # BUG: need to use result.status.lower() or
                 #  will never match if client uses lower case
                 object_state = result.status.lower()
-
             if object_state is state or object_state in state:
                 return result
             sleep(poll_interval)

http://git-wip-us.apache.org/repos/asf/libcloud/blob/c05f59a2/libcloud/test/loadbalancer/test_nttcis.py
----------------------------------------------------------------------
diff --git a/libcloud/test/loadbalancer/test_nttcis.py 
b/libcloud/test/loadbalancer/test_nttcis.py
new file mode 100644
index 0000000..49be1b4
--- /dev/null
+++ b/libcloud/test/loadbalancer/test_nttcis.py
@@ -0,0 +1,620 @@
+# 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.
+import sys
+from libcloud.utils.py3 import httplib
+
+from libcloud.common.types import InvalidCredsError
+from libcloud.common.nttcis import NttCisVIPNode, NttCisPool
+from libcloud.common.nttcis import NttCisPoolMember
+from libcloud.loadbalancer.base import LoadBalancer, Member, Algorithm
+from libcloud.loadbalancer.drivers.nttcis import NttCisLBDriver as NttCis
+from libcloud.loadbalancer.types import State
+
+from libcloud.test import MockHttp, unittest
+from libcloud.test.file_fixtures import LoadBalancerFileFixtures
+
+from libcloud.test.secrets import NTTCIS_PARAMS
+
+
[email protected]()
+def driver():
+    NttCis.connectionCls.active_api_version = "2.7"
+    NttCis.connectionCls.conn_class = NttCisMockHttp
+    NttCisMockHttp.type = None
+    driver = NttCis(*NTTCIS_PARAMS)
+    return driver
+
+
+def test_invalid_region(self):
+    with self.assertRaises(ValueError):
+        self.driver = DimensionData(*DIMENSIONDATA_PARAMS, region='blah')
+
+def test_invalid_creds(self):
+    DimensionDataMockHttp.type = 'UNAUTHORIZED'
+    with self.assertRaises(InvalidCredsError):
+        self.driver.list_balancers()
+
+def test_create_balancer(self):
+    self.driver.ex_set_current_network_domain('1234')
+    members = []
+    members.append(Member(
+        id=None,
+        ip='1.2.3.4',
+        port=80))
+
+    balancer = self.driver.create_balancer(
+        name='test',
+        port=80,
+        protocol='http',
+        algorithm=Algorithm.ROUND_ROBIN,
+        members=members,
+        ex_listener_ip_address='5.6.7.8')
+    self.assertEqual(balancer.name, 'test')
+    self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
+    self.assertEqual(balancer.ip, '165.180.12.22')
+    self.assertEqual(balancer.port, 80)
+    self.assertEqual(balancer.extra['pool_id'], 
'9e6b496d-5261-4542-91aa-b50c7f569c54')
+    self.assertEqual(balancer.extra['network_domain_id'], '1234')
+    self.assertEqual(balancer.extra['listener_ip_address'], '5.6.7.8')
+
+def test_create_balancer_with_defaults(self):
+    self.driver.ex_set_current_network_domain('1234')
+
+    balancer = self.driver.create_balancer(
+        name='test',
+        port=None,
+        protocol=None,
+        algorithm=None,
+        members=None)
+    self.assertEqual(balancer.name, 'test')
+    self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
+    self.assertEqual(balancer.ip, '165.180.12.22')
+    self.assertEqual(balancer.port, None)
+    self.assertEqual(balancer.extra['pool_id'], 
'9e6b496d-5261-4542-91aa-b50c7f569c54')
+    self.assertEqual(balancer.extra['network_domain_id'], '1234')
+
+def test_create_balancer_no_members(self):
+    self.driver.ex_set_current_network_domain('1234')
+    members = None
+
+    balancer = self.driver.create_balancer(
+        name='test',
+        port=80,
+        protocol='http',
+        algorithm=Algorithm.ROUND_ROBIN,
+        members=members)
+    self.assertEqual(balancer.name, 'test')
+    self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
+    self.assertEqual(balancer.ip, '165.180.12.22')
+    self.assertEqual(balancer.port, 80)
+    self.assertEqual(balancer.extra['pool_id'], 
'9e6b496d-5261-4542-91aa-b50c7f569c54')
+    self.assertEqual(balancer.extra['network_domain_id'], '1234')
+
+def test_create_balancer_empty_members(self):
+    self.driver.ex_set_current_network_domain('1234')
+    members = []
+
+    balancer = self.driver.create_balancer(
+        name='test',
+        port=80,
+        protocol='http',
+        algorithm=Algorithm.ROUND_ROBIN,
+        members=members)
+    self.assertEqual(balancer.name, 'test')
+    self.assertEqual(balancer.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
+    self.assertEqual(balancer.ip, '165.180.12.22')
+    self.assertEqual(balancer.port, 80)
+    self.assertEqual(balancer.extra['pool_id'], 
'9e6b496d-5261-4542-91aa-b50c7f569c54')
+    self.assertEqual(balancer.extra['network_domain_id'], '1234')
+
+def test_list_balancers(self):
+    bal = self.driver.list_balancers()
+    self.assertEqual(bal[0].name, 'myProduction.Virtual.Listener')
+    self.assertEqual(bal[0].id, '6115469d-a8bb-445b-bb23-d23b5283f2b9')
+    self.assertEqual(bal[0].port, '8899')
+    self.assertEqual(bal[0].ip, '165.180.12.22')
+    self.assertEqual(bal[0].state, State.RUNNING)
+
+def test_balancer_list_members(self):
+    extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
+             'network_domain_id': '1234'}
+    balancer = LoadBalancer(
+        id='234',
+        name='test',
+        state=State.RUNNING,
+        ip='1.2.3.4',
+        port=1234,
+        driver=self.driver,
+        extra=extra
+    )
+    members = self.driver.balancer_list_members(balancer)
+    self.assertEqual(2, len(members))
+    self.assertEqual(members[0].ip, '10.0.3.13')
+    self.assertEqual(members[0].id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
+    self.assertEqual(members[0].port, 9889)
+
+def test_balancer_attach_member(self):
+    extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
+             'network_domain_id': '1234'}
+    balancer = LoadBalancer(
+        id='234',
+        name='test',
+        state=State.RUNNING,
+        ip='1.2.3.4',
+        port=1234,
+        driver=self.driver,
+        extra=extra
+    )
+    member = Member(
+        id=None,
+        ip='112.12.2.2',
+        port=80,
+        balancer=balancer,
+        extra=None)
+    member = self.driver.balancer_attach_member(balancer, member)
+    self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
+
+def test_balancer_attach_member_without_port(self):
+    extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
+             'network_domain_id': '1234'}
+    balancer = LoadBalancer(
+        id='234',
+        name='test',
+        state=State.RUNNING,
+        ip='1.2.3.4',
+        port=1234,
+        driver=self.driver,
+        extra=extra
+    )
+    member = Member(
+        id=None,
+        ip='112.12.2.2',
+        port=None,
+        balancer=balancer,
+        extra=None)
+    member = self.driver.balancer_attach_member(balancer, member)
+    self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
+    self.assertEqual(member.port, None)
+
+def test_balancer_detach_member(self):
+    extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
+             'network_domain_id': '1234'}
+    balancer = LoadBalancer(
+        id='234',
+        name='test',
+        state=State.RUNNING,
+        ip='1.2.3.4',
+        port=1234,
+        driver=self.driver,
+        extra=extra
+    )
+    member = Member(
+        id='3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0',
+        ip='112.12.2.2',
+        port=80,
+        balancer=balancer,
+        extra=None)
+    result = self.driver.balancer_detach_member(balancer, member)
+    self.assertEqual(result, True)
+
+def test_destroy_balancer(self):
+    extra = {'pool_id': '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
+             'network_domain_id': '1234'}
+    balancer = LoadBalancer(
+        id='234',
+        name='test',
+        state=State.RUNNING,
+        ip='1.2.3.4',
+        port=1234,
+        driver=self.driver,
+        extra=extra
+    )
+    response = self.driver.destroy_balancer(balancer)
+    self.assertEqual(response, True)
+
+def test_set_get_network_domain_id(self):
+    self.driver.ex_set_current_network_domain('1234')
+    nwd = self.driver.ex_get_current_network_domain()
+    self.assertEqual(nwd, '1234')
+
+def test_ex_create_pool_member(self):
+    pool = DimensionDataPool(
+        id='4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
+        name='test',
+        description='test',
+        status=State.RUNNING,
+        health_monitor_id=None,
+        load_balance_method=None,
+        service_down_action=None,
+        slow_ramp_time=None
+    )
+    node = DimensionDataVIPNode(
+        id='2344',
+        name='test',
+        status=State.RUNNING,
+        ip='123.23.3.2'
+    )
+    member = self.driver.ex_create_pool_member(
+        pool=pool,
+        node=node,
+        port=80
+    )
+    self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
+    self.assertEqual(member.name, '10.0.3.13')
+    self.assertEqual(member.ip, '123.23.3.2')
+
+def test_ex_create_node(self):
+    node = self.driver.ex_create_node(
+        network_domain_id='12345',
+        name='test',
+        ip='123.12.32.2',
+        ex_description='',
+        connection_limit=25000,
+        connection_rate_limit=2000)
+    self.assertEqual(node.name, 'myProductionNode.1')
+    self.assertEqual(node.id, '9e6b496d-5261-4542-91aa-b50c7f569c54')
+
+def test_ex_create_pool(self, ):
+    pool = self.driver.ex_create_pool(
+        network_domain_id='1234',
+        name='test',
+        balancer_method='ROUND_ROBIN',
+        ex_description='test',
+        service_down_action='NONE',
+        slow_ramp_time=30)
+    self.assertEqual(pool.id, '9e6b496d-5261-4542-91aa-b50c7f569c54')
+    self.assertEqual(pool.name, 'test')
+    self.assertEqual(pool.status, State.RUNNING)
+
+def test_ex_create_virtual_listener(self):
+    listener = self.driver.ex_create_virtual_listener(
+        network_domain_id='12345',
+        name='test',
+        ex_description='test',
+        port=80,
+        pool=DimensionDataPool(
+            id='1234',
+            name='test',
+            description='test',
+            status=State.RUNNING,
+            health_monitor_id=None,
+            load_balance_method=None,
+            service_down_action=None,
+            slow_ramp_time=None
+        ))
+    self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
+    self.assertEqual(listener.name, 'test')
+
+def test_ex_create_virtual_listener_unusual_port(self):
+    listener = self.driver.ex_create_virtual_listener(
+        network_domain_id='12345',
+        name='test',
+        ex_description='test',
+        port=8900,
+        pool=DimensionDataPool(
+            id='1234',
+            name='test',
+            description='test',
+            status=State.RUNNING,
+            health_monitor_id=None,
+            load_balance_method=None,
+            service_down_action=None,
+            slow_ramp_time=None
+        ))
+    self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
+    self.assertEqual(listener.name, 'test')
+
+def test_ex_create_virtual_listener_without_port(self):
+    listener = self.driver.ex_create_virtual_listener(
+        network_domain_id='12345',
+        name='test',
+        ex_description='test',
+        pool=DimensionDataPool(
+            id='1234',
+            name='test',
+            description='test',
+            status=State.RUNNING,
+            health_monitor_id=None,
+            load_balance_method=None,
+            service_down_action=None,
+            slow_ramp_time=None
+        ))
+    self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
+    self.assertEqual(listener.name, 'test')
+
+def test_ex_create_virtual_listener_without_pool(self):
+    listener = self.driver.ex_create_virtual_listener(
+        network_domain_id='12345',
+        name='test',
+        ex_description='test')
+    self.assertEqual(listener.id, '8334f461-0df0-42d5-97eb-f4678eb26bea')
+    self.assertEqual(listener.name, 'test')
+
+def test_get_balancer(self):
+    bal = self.driver.get_balancer('6115469d-a8bb-445b-bb23-d23b5283f2b9')
+    self.assertEqual(bal.name, 'myProduction.Virtual.Listener')
+    self.assertEqual(bal.id, '6115469d-a8bb-445b-bb23-d23b5283f2b9')
+    self.assertEqual(bal.port, '8899')
+    self.assertEqual(bal.ip, '165.180.12.22')
+    self.assertEqual(bal.state, State.RUNNING)
+
+def test_list_protocols(self):
+    protocols = self.driver.list_protocols()
+    self.assertNotEqual(0, len(protocols))
+
+def test_ex_get_nodes(self):
+    nodes = self.driver.ex_get_nodes()
+    self.assertEqual(2, len(nodes))
+    self.assertEqual(nodes[0].name, 'ProductionNode.1')
+    self.assertEqual(nodes[0].id, '34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
+    self.assertEqual(nodes[0].ip, '10.10.10.101')
+
+def test_ex_get_node(self):
+    node = self.driver.ex_get_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
+    self.assertEqual(node.name, 'ProductionNode.2')
+    self.assertEqual(node.id, '34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
+    self.assertEqual(node.ip, '10.10.10.101')
+
+def test_ex_update_node(self):
+    node = self.driver.ex_get_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
+    node.connection_limit = '100'
+    result = self.driver.ex_update_node(node)
+    self.assertEqual(result.connection_limit, '100')
+
+def test_ex_destroy_node(self):
+    result = 
self.driver.ex_destroy_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
+    self.assertTrue(result)
+
+def test_ex_set_node_state(self):
+    node = self.driver.ex_get_node('34de6ed6-46a4-4dae-a753-2f8d3840c6f9')
+    result = self.driver.ex_set_node_state(node, False)
+    self.assertEqual(result.connection_limit, '10000')
+
+def test_ex_get_pools(self):
+    pools = self.driver.ex_get_pools()
+    self.assertNotEqual(0, len(pools))
+    self.assertEqual(pools[0].name, 'myDevelopmentPool.1')
+    self.assertEqual(pools[0].id, '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
+
+def test_ex_get_pool(self):
+    pool = self.driver.ex_get_pool('4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
+    self.assertEqual(pool.name, 'myDevelopmentPool.1')
+    self.assertEqual(pool.id, '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
+
+def test_ex_update_pool(self):
+    pool = self.driver.ex_get_pool('4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
+    pool.slow_ramp_time = '120'
+    result = self.driver.ex_update_pool(pool)
+    self.assertTrue(result)
+
+def test_ex_destroy_pool(self):
+    response = self.driver.ex_destroy_pool(
+        pool=DimensionDataPool(
+            id='4d360b1f-bc2c-4ab7-9884-1f03ba2768f7',
+            name='test',
+            description='test',
+            status=State.RUNNING,
+            health_monitor_id=None,
+            load_balance_method=None,
+            service_down_action=None,
+            slow_ramp_time=None))
+    self.assertTrue(response)
+
+def test_get_pool_members(self):
+    members = 
self.driver.ex_get_pool_members('4d360b1f-bc2c-4ab7-9884-1f03ba2768f7')
+    self.assertEqual(2, len(members))
+    self.assertEqual(members[0].id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
+    self.assertEqual(members[0].name, '10.0.3.13')
+    self.assertEqual(members[0].status, 'NORMAL')
+    self.assertEqual(members[0].ip, '10.0.3.13')
+    self.assertEqual(members[0].port, 9889)
+    self.assertEqual(members[0].node_id, 
'3c207269-e75e-11e4-811f-005056806999')
+
+def test_get_pool_member(self):
+    member = 
self.driver.ex_get_pool_member('3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
+    self.assertEqual(member.id, '3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
+    self.assertEqual(member.name, '10.0.3.13')
+    self.assertEqual(member.status, 'NORMAL')
+    self.assertEqual(member.ip, '10.0.3.13')
+    self.assertEqual(member.port, 9889)
+
+def test_set_pool_member_state(self):
+    member = 
self.driver.ex_get_pool_member('3dd806a2-c2c8-4c0c-9a4f-5219ea9266c0')
+    result = self.driver.ex_set_pool_member_state(member, True)
+    self.assertTrue(result)
+
+def test_ex_destroy_pool_member(self):
+    response = self.driver.ex_destroy_pool_member(
+        member=DimensionDataPoolMember(
+            id='',
+            name='test',
+            status=State.RUNNING,
+            ip='1.2.3.4',
+            port=80,
+            node_id='3c207269-e75e-11e4-811f-005056806999'),
+        destroy_node=False)
+    self.assertTrue(response)
+
+def test_ex_destroy_pool_member_with_node(self):
+    response = self.driver.ex_destroy_pool_member(
+        member=DimensionDataPoolMember(
+            id='',
+            name='test',
+            status=State.RUNNING,
+            ip='1.2.3.4',
+            port=80,
+            node_id='34de6ed6-46a4-4dae-a753-2f8d3840c6f9'),
+        destroy_node=True)
+    self.assertTrue(response)
+
+def test_ex_get_default_health_monitors(self):
+    monitors = self.driver.ex_get_default_health_monitors(
+        '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7'
+    )
+    self.assertEqual(len(monitors), 6)
+    self.assertEqual(monitors[0].id, '01683574-d487-11e4-811f-005056806999')
+    self.assertEqual(monitors[0].name, 'CCDEFAULT.Http')
+    self.assertFalse(monitors[0].node_compatible)
+    self.assertTrue(monitors[0].pool_compatible)
+
+def test_ex_get_default_persistence_profiles(self):
+    profiles = self.driver.ex_get_default_persistence_profiles(
+        '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7'
+    )
+    self.assertEqual(len(profiles), 4)
+    self.assertEqual(profiles[0].id, 'a34ca024-f3db-11e4-b010-005056806999')
+    self.assertEqual(profiles[0].name, 'CCDEFAULT.Cookie')
+    self.assertEqual(profiles[0].fallback_compatible, False)
+    self.assertEqual(len(profiles[0].compatible_listeners), 1)
+    self.assertEqual(profiles[0].compatible_listeners[0].type, 
'PERFORMANCE_LAYER_4')
+
+def test_ex_get_default_irules(self):
+    irules = self.driver.ex_get_default_irules(
+        '4d360b1f-bc2c-4ab7-9884-1f03ba2768f7'
+    )
+    self.assertEqual(len(irules), 4)
+    self.assertEqual(irules[0].id, '2b20cb2c-ffdc-11e4-b010-005056806999')
+    self.assertEqual(irules[0].name, 'CCDEFAULT.HttpsRedirect')
+    self.assertEqual(len(irules[0].compatible_listeners), 1)
+    self.assertEqual(irules[0].compatible_listeners[0].type, 
'PERFORMANCE_LAYER_4')
+
+
+class NttCisMockHttp(MockHttp):
+
+    fixtures = LoadBalancerFileFixtures('nttcis')
+
+    def _oec_0_9_myaccount_UNAUTHORIZED(self, method, url, body, headers):
+        return (httplib.UNAUTHORIZED, "", {}, 
httplib.responses[httplib.UNAUTHORIZED])
+
+    def _oec_0_9_myaccount(self, method, url, body, headers):
+        body = self.fixtures.load('oec_0_9_myaccount.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _oec_0_9_myaccount_INPROGRESS(self, method, url, body, headers):
+        body = self.fixtures.load('oec_0_9_myaccount.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_virtualListener(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_virtualListener.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_virtualListener_6115469d_a8bb_445b_bb23_d23b5283f2b9(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            
'networkDomainVip_virtualListener_6115469d_a8bb_445b_bb23_d23b5283f2b9.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_pool(self, 
method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_pool.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_pool_4d360b1f_bc2c_4ab7_9884_1f03ba2768f7(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_pool_4d360b1f_bc2c_4ab7_9884_1f03ba2768f7.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_poolMember(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_poolMember.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_poolMember_3dd806a2_c2c8_4c0c_9a4f_5219ea9266c0(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            
'networkDomainVip_poolMember_3dd806a2_c2c8_4c0c_9a4f_5219ea9266c0.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_createPool(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_createPool.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_createNode(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_createNode.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_addPoolMember(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_addPoolMember.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_createVirtualListener(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_createVirtualListener.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_removePoolMember(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_removePoolMember.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_deleteVirtualListener(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_deleteVirtualListener.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_deletePool(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_deletePool.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_deleteNode(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_deleteNode.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_node(self, 
method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_node.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_node_34de6ed6_46a4_4dae_a753_2f8d3840c6f9(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_node_34de6ed6_46a4_4dae_a753_2f8d3840c6f9.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_editNode(self, 
method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_editNode.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_editPool(self, 
method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_editPool.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_editPoolMember(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_editPoolMember.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_defaultHealthMonitor(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_defaultHealthMonitor.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_defaultPersistenceProfile(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_defaultPersistenceProfile.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def 
_caas_2_4_8a8f6abc_2745_4d8a_9cbc_8dabe5a7d0e4_networkDomainVip_defaultIrule(self,
 method, url, body, headers):
+        body = self.fixtures.load(
+            'networkDomainVip_defaultIrule.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+if __name__ == '__main__':
+    sys.exit(unittest.main())

http://git-wip-us.apache.org/repos/asf/libcloud/blob/c05f59a2/tests/lib_create_test.py
----------------------------------------------------------------------
diff --git a/tests/lib_create_test.py b/tests/lib_create_test.py
index d222605..93154e4 100644
--- a/tests/lib_create_test.py
+++ b/tests/lib_create_test.py
@@ -54,7 +54,31 @@ def test_deploy_server(compute_driver):
     new_node = compute_driver.create_node("ubuntu", image[0], psswd, 
ex_description="auto_created_server",
                                          ex_network_domain=net_domain[0], 
ex_primary_nic_vlan=vlan[0])
     compute_driver.ex_wait_for_state('running', 
compute_driver.ex_get_node_by_id, 2, 300, new_node.id)
-    assert new_node.state == 'running'
+    node = compute_driver.ex_get_node_by_id(new_node.id)
+    assert node.state == 'running'
+
+
+def test_deploy_customized_server(compute_driver, capsys):
+    image_name = "SLES 12 64-bit"
+    images = compute_driver.list_images(location='EU6')
+    image = [i for i in images if i.name == image_name][0]
+    domain_name = 'sdk_test_1'
+    domains = compute_driver.ex_list_network_domains(location='EU6')
+    net_domain = [d for d in domains if d.name == domain_name][0]
+    psswd = 'Snmpv2c!'
+    vlan_name = "sdk_vlan1"
+    vlans = compute_driver.ex_list_vlans()
+    vlan = [v for v in vlans if v.name == vlan_name][0]
+    new_node = compute_driver.create_node("Suse_12", image, psswd,
+                                          ex_description="Customized_Suse 
server",
+                                          ex_network_domain=net_domain,
+                                          ex_primary_nic_vlan=vlan,
+                                          
ex_primary_nic_network_adapter='VMXNET3',
+                                          ex_memory_gb=8
+                                          )
+    compute_driver.ex_wait_for_state('running', 
compute_driver.ex_get_node_by_id, 2, 600, new_node.id)
+    node = compute_driver.ex_get_node_by_id(new_node.id)
+    assert node.state == 'running'
 
 
 def test_delete_server(compute_driver):

http://git-wip-us.apache.org/repos/asf/libcloud/blob/c05f59a2/tests/lib_list_test.py
----------------------------------------------------------------------
diff --git a/tests/lib_list_test.py b/tests/lib_list_test.py
index 2fe4bda..b64a13c 100644
--- a/tests/lib_list_test.py
+++ b/tests/lib_list_test.py
@@ -102,6 +102,11 @@ def test_list_node_image(compute_driver):
 """
 
 
+def test_get_node_by_id(compute_driver):
+    node = 
compute_driver.ex_get_node_by_id("50db7b25-6dd8-49ea-8b06-942cee5850b7")
+    print(node)
+
+
 def test_list_node_started(compute_driver):
     nodes = compute_driver.list_nodes(ex_started='true')
     print()

Reply via email to