Repository: libcloud
Updated Branches:
  refs/heads/trunk 6869ebc1d -> c8184e98a


http://git-wip-us.apache.org/repos/asf/libcloud/blob/34cff301/libcloud/test/compute/fixtures/profitbricks/list_nodes.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/profitbricks/list_nodes.xml 
b/libcloud/test/compute/fixtures/profitbricks/list_nodes.xml
new file mode 100644
index 0000000..c392d25
--- /dev/null
+++ b/libcloud/test/compute/fixtures/profitbricks/list_nodes.xml
@@ -0,0 +1,172 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/";>
+   <S:Body>
+      <ns2:getAllServersResponse xmlns:ns2="http://ws.api.profitbricks.com/";>
+         <return>
+            <dataCenterId>e1e8ec0d-b47f-4d39-a91b-6e885483c899</dataCenterId>
+            <dataCenterVersion>5</dataCenterVersion>
+            <serverId>c8e57d7b-e731-46ad-a913-1828c0562246</serverId>
+            <serverName>server001</serverName>
+            <cores>1</cores>
+            <ram>1024</ram>
+            <internetAccess>true</internetAccess>
+            <ips>10.13.198.11</ips>
+            <ips>162.254.25.197</ips>
+            <ips>10.10.108.12</ips>
+            <connectedStorages>
+               <bootDevice>true</bootDevice>
+               <busType>VIRTIO</busType>
+               <deviceNumber>1</deviceNumber>
+               <size>50</size>
+               <storageId>b07d7c20-8cd4-4502-aab1-c0195b7f18a1</storageId>
+               <storageName>server001-storage001</storageName>
+            </connectedStorages>
+            <nics>
+               
<dataCenterId>e1e8ec0d-b47f-4d39-a91b-6e885483c899</dataCenterId>
+               <dataCenterVersion>5</dataCenterVersion>
+               <nicId>7fb08916-eb64-40b8-a081-fafe0e374145</nicId>
+               <lanId>2</lanId>
+               <internetAccess>false</internetAccess>
+               <serverId>c8e57d7b-e731-46ad-a913-1828c0562246</serverId>
+               <ips>10.10.108.12</ips>
+               <macAddress>02:01:b9:a5:81:d9</macAddress>
+               <firewall>
+                  <active>false</active>
+                  <firewallId>27062b18-aab9-4046-9071-c375121fdcd4</firewallId>
+                  <nicId>7fb08916-eb64-40b8-a081-fafe0e374145</nicId>
+                  <provisioningState>AVAILABLE</provisioningState>
+               </firewall>
+               <dhcpActive>true</dhcpActive>
+               <provisioningState>AVAILABLE</provisioningState>
+            </nics>
+            <nics>
+               
<dataCenterId>e1e8ec0d-b47f-4d39-a91b-6e885483c899</dataCenterId>
+               <dataCenterVersion>5</dataCenterVersion>
+               <nicId>3f980c78-89b7-4f65-8e5d-28abc2f158aa</nicId>
+               <lanId>3</lanId>
+               <internetAccess>false</internetAccess>
+               <serverId>c8e57d7b-e731-46ad-a913-1828c0562246</serverId>
+               <ips>10.13.198.11</ips>
+               <macAddress>02:01:7f:31:2f:71</macAddress>
+               <firewall>
+                  <active>false</active>
+                  <firewallId>b644fbfd-ff6f-4ba5-882c-d0478f327819</firewallId>
+                  <nicId>3f980c78-89b7-4f65-8e5d-28abc2f158aa</nicId>
+                  <provisioningState>AVAILABLE</provisioningState>
+               </firewall>
+               <dhcpActive>true</dhcpActive>
+               <provisioningState>AVAILABLE</provisioningState>
+            </nics>
+            <nics>
+               
<dataCenterId>e1e8ec0d-b47f-4d39-a91b-6e885483c899</dataCenterId>
+               <dataCenterVersion>5</dataCenterVersion>
+               <nicId>8df3ec08-b6f7-4038-85eb-da6620d31aa5</nicId>
+               <lanId>1</lanId>
+               <internetAccess>true</internetAccess>
+               <serverId>c8e57d7b-e731-46ad-a913-1828c0562246</serverId>
+               <ips>162.254.25.197</ips>
+               <macAddress>02:01:1f:9c:f3:24</macAddress>
+               <firewall>
+                  <active>false</active>
+                  <firewallId>0bd04380-b4f3-4013-96a2-d71d134fd895</firewallId>
+                  <nicId>8df3ec08-b6f7-4038-85eb-da6620d31aa5</nicId>
+                  <provisioningState>AVAILABLE</provisioningState>
+               </firewall>
+               <dhcpActive>true</dhcpActive>
+               <gatewayIp>162.254.25.1</gatewayIp>
+               <provisioningState>AVAILABLE</provisioningState>
+            </nics>
+            <provisioningState>AVAILABLE</provisioningState>
+            <virtualMachineState>RUNNING</virtualMachineState>
+            <creationTime>2014-07-14T20:52:20.839Z</creationTime>
+            
<lastModificationTime>2014-07-14T22:11:09.324Z</lastModificationTime>
+            <osType>LINUX</osType>
+            <availabilityZone>ZONE_1</availabilityZone>
+         </return>
+         <return>
+            <dataCenterId>e1e8ec0d-b47f-4d39-a91b-6e885483c899</dataCenterId>
+            <dataCenterVersion>5</dataCenterVersion>
+            <serverId>7080c05b-1a91-4661-a217-60d864acee44</serverId>
+            <serverName>server002</serverName>
+            <cores>1</cores>
+            <ram>1024</ram>
+            <internetAccess>false</internetAccess>
+            <ips>10.13.198.12</ips>
+            <ips>10.10.108.11</ips>
+            <connectedStorages>
+               <bootDevice>true</bootDevice>
+               <busType>VIRTIO</busType>
+               <deviceNumber>1</deviceNumber>
+               <size>50</size>
+               <storageId>b96f49f6-c1d3-4250-8135-35c17c827657</storageId>
+               <storageName>server002-storage001</storageName>
+            </connectedStorages>
+            <nics>
+               
<dataCenterId>e1e8ec0d-b47f-4d39-a91b-6e885483c899</dataCenterId>
+               <dataCenterVersion>5</dataCenterVersion>
+               <nicId>f1e0a1c6-329b-4629-b95b-ba81a30a4d73</nicId>
+               <lanId>2</lanId>
+               <internetAccess>false</internetAccess>
+               <serverId>7080c05b-1a91-4661-a217-60d864acee44</serverId>
+               <ips>10.10.108.11</ips>
+               <macAddress>02:01:58:5e:9a:3c</macAddress>
+               <firewall>
+                  <active>false</active>
+                  <firewallId>263d5a2c-c95b-4903-b290-a33cb47616c4</firewallId>
+                  <nicId>f1e0a1c6-329b-4629-b95b-ba81a30a4d73</nicId>
+                  <provisioningState>AVAILABLE</provisioningState>
+               </firewall>
+               <dhcpActive>true</dhcpActive>
+               <provisioningState>AVAILABLE</provisioningState>
+            </nics>
+            <nics>
+               
<dataCenterId>e1e8ec0d-b47f-4d39-a91b-6e885483c899</dataCenterId>
+               <dataCenterVersion>5</dataCenterVersion>
+               <nicId>847c50c7-d7dc-4fe6-8216-e05dc7ea7b18</nicId>
+               <lanId>3</lanId>
+               <internetAccess>false</internetAccess>
+               <serverId>7080c05b-1a91-4661-a217-60d864acee44</serverId>
+               <ips>10.13.198.12</ips>
+               <macAddress>02:01:1e:32:2f:40</macAddress>
+               <firewall>
+                  <active>false</active>
+                  <firewallId>35c42660-94d5-483d-aca7-8e6e97507508</firewallId>
+                  <nicId>847c50c7-d7dc-4fe6-8216-e05dc7ea7b18</nicId>
+                  <provisioningState>AVAILABLE</provisioningState>
+               </firewall>
+               <dhcpActive>true</dhcpActive>
+               <provisioningState>AVAILABLE</provisioningState>
+            </nics>
+            <provisioningState>AVAILABLE</provisioningState>
+            <virtualMachineState>RUNNING</virtualMachineState>
+            <creationTime>2014-07-14T21:40:12.265Z</creationTime>
+            
<lastModificationTime>2014-07-14T22:11:09.324Z</lastModificationTime>
+            <osType>LINUX</osType>
+            <availabilityZone>AUTO</availabilityZone>
+         </return>
+         <return>
+            <dataCenterId>6571ecd4-8602-4692-ae14-2f85eedbc403</dataCenterId>
+            <dataCenterVersion>2</dataCenterVersion>
+            <serverId>c9b9b603-65a3-4f11-bd24-ff1b494a85e2</serverId>
+            <serverName>server001</serverName>
+            <cores>1</cores>
+            <ram>1024</ram>
+            <internetAccess>false</internetAccess>
+            <connectedStorages>
+               <bootDevice>true</bootDevice>
+               <busType>VIRTIO</busType>
+               <deviceNumber>1</deviceNumber>
+               <size>50</size>
+               <storageId>06dad54e-85b2-4146-ab15-ef55cb121921</storageId>
+               <storageName>Storage</storageName>
+            </connectedStorages>
+            <provisioningState>AVAILABLE</provisioningState>
+            <virtualMachineState>RUNNING</virtualMachineState>
+            <creationTime>2014-07-14T21:06:21.421Z</creationTime>
+            
<lastModificationTime>2014-07-14T21:06:21.421Z</lastModificationTime>
+            <osType>LINUX</osType>
+            <availabilityZone>ZONE_2</availabilityZone>
+         </return>
+      </ns2:getAllServersResponse>
+   </S:Body>
+</S:Envelope>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/34cff301/libcloud/test/compute/fixtures/profitbricks/list_volumes.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/profitbricks/list_volumes.xml 
b/libcloud/test/compute/fixtures/profitbricks/list_volumes.xml
new file mode 100644
index 0000000..5b73042
--- /dev/null
+++ b/libcloud/test/compute/fixtures/profitbricks/list_volumes.xml
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/";>
+   <S:Body>
+      <ns2:getAllStoragesResponse xmlns:ns2="http://ws.api.profitbricks.com/";>
+         <return>
+            <dataCenterId>06eac419-c2b3-4761-aeb9-10efdd2cf292</dataCenterId>
+            <dataCenterVersion>2</dataCenterVersion>
+            <storageId>453582cf-8d54-4ec8-bc0b-f9962f7fd232</storageId>
+            <size>50</size>
+            <storageName>storage001</storageName>
+            <mountImage>
+               <imageId>d2f627c4-0289-11e4-9f63-52540066fee9</imageId>
+               <imageName>CentOS-6-server-2014-07-01</imageName>
+            </mountImage>
+            <serverIds>ebee7d83-912b-42f1-9b62-b953351a7e29</serverIds>
+            <provisioningState>AVAILABLE</provisioningState>
+            <creationTime>2014-07-15T03:19:38.252Z</creationTime>
+            
<lastModificationTime>2014-07-15T03:28:58.724Z</lastModificationTime>
+         </return>
+         <return>
+            <dataCenterId>06eac419-c2b3-4761-aeb9-10efdd2cf292</dataCenterId>
+            <dataCenterVersion>2</dataCenterVersion>
+            <storageId>4e547123-897b-4520-a74e-c4ae2ff62f92</storageId>
+            <size>50</size>
+            <storageName>storage002</storageName>
+            <mountImage>
+               <imageId>d2f627c4-0289-11e4-9f63-52540066fee9</imageId>
+               <imageName>CentOS-6-server-2014-07-01</imageName>
+            </mountImage>
+            <serverIds>86413124-8dd3-4708-8475-9b4e7d059401</serverIds>
+            <provisioningState>AVAILABLE</provisioningState>
+            <creationTime>2014-07-15T03:19:38.252Z</creationTime>
+            
<lastModificationTime>2014-07-15T03:28:58.724Z</lastModificationTime>
+         </return>
+         <return>
+            <dataCenterId>06eac419-c2b3-4761-aeb9-10efdd2cf292</dataCenterId>
+            <dataCenterVersion>2</dataCenterVersion>
+            <storageId>0c893ea8-6bd7-483f-9d72-5a2fc4edff83</storageId>
+            <size>50</size>
+            <storageName>storage003</storageName>
+            <mountImage>
+               <imageId>d2f627c4-0289-11e4-9f63-52540066fee9</imageId>
+               <imageName>CentOS-6-server-2014-07-01</imageName>
+            </mountImage>
+            <serverIds>ebee7d83-912b-42f1-9b62-b953351a7e29</serverIds>
+            <provisioningState>AVAILABLE</provisioningState>
+            <creationTime>2014-07-15T03:28:58.724Z</creationTime>
+            
<lastModificationTime>2014-07-15T03:28:58.724Z</lastModificationTime>
+         </return>
+         <return>
+            <dataCenterId>06eac419-c2b3-4761-aeb9-10efdd2cf292</dataCenterId>
+            <dataCenterVersion>2</dataCenterVersion>
+            <storageId>6584f97e-90f3-4664-8d5b-8ff4539bf800</storageId>
+            <size>50</size>
+            <storageName>storage004</storageName>
+            <mountImage>
+               <imageId>10033683-01e2-11e4-9f63-52540066fee9</imageId>
+               <imageName>Ubuntu-13.10-server-2014-07-01</imageName>
+            </mountImage>
+            <provisioningState>AVAILABLE</provisioningState>
+            <creationTime>2014-07-15T03:28:58.724Z</creationTime>
+            
<lastModificationTime>2014-07-15T03:28:58.724Z</lastModificationTime>
+         </return>
+      </ns2:getAllStoragesResponse>
+   </S:Body>
+</S:Envelope>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/34cff301/libcloud/test/compute/fixtures/profitbricks/reboot_node.xml
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/fixtures/profitbricks/reboot_node.xml 
b/libcloud/test/compute/fixtures/profitbricks/reboot_node.xml
new file mode 100644
index 0000000..afb9e37
--- /dev/null
+++ b/libcloud/test/compute/fixtures/profitbricks/reboot_node.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/";>
+   <S:Body>
+      <ns2:resetServerResponse xmlns:ns2="http://ws.api.profitbricks.com/";>
+         <return>
+            <requestId>3492524</requestId>
+         </return>
+      </ns2:resetServerResponse>
+   </S:Body>
+</S:Envelope>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/34cff301/libcloud/test/compute/test_profitbricks.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_profitbricks.py 
b/libcloud/test/compute/test_profitbricks.py
new file mode 100644
index 0000000..ab7ab06
--- /dev/null
+++ b/libcloud/test/compute/test_profitbricks.py
@@ -0,0 +1,509 @@
+# 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.test import MockHttp
+from libcloud.test.file_fixtures import ComputeFileFixtures
+from libcloud.compute.types import Provider
+from libcloud.compute.types import NodeState
+from libcloud.compute.providers import get_driver
+from libcloud.test import unittest
+from libcloud.test.secrets import PROFIT_BRICKS_PARAMS
+
+
+class ProfitBricksTests(unittest.TestCase):
+
+    def setUp(self):
+        ProfitBricks = get_driver(Provider.PROFIT_BRICKS)
+        ProfitBricks.connectionCls.conn_classes = (None, ProfitBricksMockHttp)
+        self.driver = ProfitBricks(*PROFIT_BRICKS_PARAMS)
+
+    ''' Server Function Tests
+    '''
+    def test_list_nodes(self):
+        nodes = self.driver.list_nodes()
+
+        self.assertEqual(len(nodes), 3)
+
+        node = nodes[0]
+        self.assertEquals(node.id, "c8e57d7b-e731-46ad-a913-1828c0562246")
+        self.assertEquals(node.name, "server001")
+        self.assertEquals(node.state, 0)
+        self.assertEquals(node.public_ips, ['162.254.25.197'])
+        self.assertEquals(node.private_ips, ['10.10.108.12', '10.13.198.11'])
+        self.assertEquals(node.extra['datacenter_id'], 
"e1e8ec0d-b47f-4d39-a91b-6e885483c899")
+        self.assertEquals(node.extra['datacenter_version'], "5")
+        self.assertEquals(node.extra['provisioning_state'], 0)
+        self.assertEquals(node.extra['creation_time'], 
"2014-07-14T20:52:20.839Z")
+        self.assertEquals(node.extra['last_modification_time'], 
"2014-07-14T22:11:09.324Z")
+        self.assertEquals(node.extra['os_type'], "LINUX")
+        self.assertEquals(node.extra['availability_zone'], "ZONE_1")
+
+    def test_ex_describe_node(self):
+        image = type('NodeImage', (object,),
+                     dict(id="cd59b162-0289-11e4-9f63-52540066fee9",
+                          name="Debian-7-server-2014-07-01"))
+        size = type('NodeSize', (object,),
+                    dict(id="2",
+                         name="Small Instance",
+                         ram=2048,
+                         disk=50,
+                         extra={'cores': 1}))
+
+        node = self.driver.create_node(name="SPC-Server",
+                                       image=image,
+                                       size=size)
+
+        self.assertEquals(node.id, "7b18b85f-cc93-4c2d-abcc-5ce732d35750")
+
+    def test_reboot_node(self):
+        node = type('Node', (object,),
+                    dict(id="c8e57d7b-e731-46ad-a913-1828c0562246"))
+        reboot = self.driver.reboot_node(node=node)
+
+        self.assertTrue(reboot)
+
+    def test_ex_stop_node(self):
+        node = type('Node', (object,),
+                    dict(id="c8e57d7b-e731-46ad-a913-1828c0562246"))
+        stop = self.driver.ex_stop_node(node=node)
+
+        self.assertTrue(stop)
+
+    def test_ex_start_node(self):
+        node = type('Node', (object,),
+                    dict(id="c8e57d7b-e731-46ad-a913-1828c0562246"))
+        start = self.driver.ex_start_node(node=node)
+
+        self.assertTrue(start)
+
+    def test_destroy_node(self):
+        node = type('Node', (object,),
+                    dict(id="c8e57d7b-e731-46ad-a913-1828c0562246"))
+        destroy = self.driver.destroy_node(node=node)
+
+        self.assertTrue(destroy)
+
+    def test_ex_update_node(self):
+        node = type('Node', (object,),
+                    dict(id="c8e57d7b-e731-46ad-a913-1828c0562246"))
+
+        zone = type('ExProfitBricksAvailabilityZone', (object,),
+                    dict(name="ZONE_2"))
+
+        update = self.driver.ex_update_node(node=node, ram=2048, cores=2, 
name="server002", availability_zone=zone)
+
+        self.assertTrue(update)
+
+    ''' Volume Function Tests
+    '''
+    def test_list_volumes(self):
+        volumes = self.driver.list_volumes()
+
+        self.assertEqual(len(volumes), 4)
+
+        volume = volumes[0]
+        self.assertEquals(volume.id, "453582cf-8d54-4ec8-bc0b-f9962f7fd232")
+        self.assertEquals(volume.name, "storage001")
+        self.assertEquals(volume.size, 50)
+        self.assertEquals(volume.extra['server_id'], 
"ebee7d83-912b-42f1-9b62-b953351a7e29")
+        self.assertEquals(volume.extra['provisioning_state'], 0)
+        self.assertEquals(volume.extra['creation_time'], 
"2014-07-15T03:19:38.252Z")
+        self.assertEquals(volume.extra['last_modification_time'], 
"2014-07-15T03:28:58.724Z")
+        self.assertEquals(volume.extra['image_id'], 
"d2f627c4-0289-11e4-9f63-52540066fee9")
+        self.assertEquals(volume.extra['image_name'], 
"CentOS-6-server-2014-07-01")
+        self.assertEquals(volume.extra['datacenter_id'], 
"06eac419-c2b3-4761-aeb9-10efdd2cf292")
+
+    def test_create_volume(self):
+        datacenter = type('Datacenter', (object,),
+                          dict(id="8669a69f-2274-4520-b51e-dbdf3986a476"))
+
+        image = type('NodeImage', (object,),
+                     dict(id="cd59b162-0289-11e4-9f63-52540066fee9"))
+
+        create = self.driver.create_volume(name="StackPointCloudStorage001",
+                                           size=50,
+                                           ex_datacenter=datacenter,
+                                           ex_image=image)
+
+        self.assertTrue(create)
+
+    def test_attach_volume_general(self):
+        volume = type('StorageVolume', (object,),
+                      dict(id="8669a69f-2274-4520-b51e-dbdf3986a476"))
+
+        node = type('Node', (object,),
+                    dict(id="cd59b162-0289-11e4-9f63-52540066fee9"))
+
+        attach = self.driver.attach_volume(node=node,
+                                           volume=volume,
+                                           device=None, ex_bus_type=None)
+
+        self.assertTrue(attach)
+
+    def test_attach_volume_device_defined(self):
+        volume = type('StorageVolume', (object,),
+                      dict(id="8669a69f-2274-4520-b51e-dbdf3986a476"))
+
+        node = type('Node', (object,),
+                    dict(id="cd59b162-0289-11e4-9f63-52540066fee9"))
+
+        attach = self.driver.attach_volume(node=node, volume=volume, device=1, 
ex_bus_type=None)
+
+        self.assertTrue(attach)
+
+    def test_attach_volume_bus_type_defined(self):
+        volume = type('StorageVolume', (object,),
+                      dict(id="8669a69f-2274-4520-b51e-dbdf3986a476"))
+
+        node = type('Node', (object,),
+                    dict(id="cd59b162-0289-11e4-9f63-52540066fee9"))
+
+        attach = self.driver.attach_volume(node=node,
+                                           volume=volume,
+                                           device=None,
+                                           ex_bus_type="IDE")
+
+        self.assertTrue(attach)
+
+    def test_attach_volume_options_defined(self):
+        volume = type('StorageVolume', (object,),
+                      dict(id="8669a69f-2274-4520-b51e-dbdf3986a476"))
+
+        node = type('Node', (object,),
+                    dict(id="cd59b162-0289-11e4-9f63-52540066fee9"))
+
+        attach = self.driver.attach_volume(node=node, volume=volume,
+                                           device=1, ex_bus_type="IDE")
+
+        self.assertTrue(attach)
+
+    def test_detach_volume(self):
+        volume = type('StorageVolume', (object,),
+                      dict(id="8669a69f-2274-4520-b51e-dbdf3986a476",
+                           extra={'server_id': 
"cd59b162-0289-11e4-9f63-52540066fee9"}
+                           ))
+
+        attach = self.driver.detach_volume(volume=volume)
+
+        self.assertTrue(attach)
+
+    def test_destroy_volume(self):
+        volume = type('StorageVolume', (object,),
+                      dict(id="8669a69f-2274-4520-b51e-dbdf3986a476"))
+
+        destroy = self.driver.destroy_volume(volume=volume)
+
+        self.assertTrue(destroy)
+
+    def test_update_volume(self):
+        volume = type('StorageVolume', (object,),
+                      dict(id="8669a69f-2274-4520-b51e-dbdf3986a476"))
+
+        destroy = self.driver.ex_update_volume(volume=volume)
+
+        self.assertTrue(destroy)
+
+    def test_ex_describe_volume(self):
+        describe = 
self.driver.ex_describe_volume(volume_id="8669a69f-2274-4520-b51e-dbdf3986a476")
+
+        self.assertEqual(describe.id, "00d0b9e7-e016-456f-85a0-517aa9a34bf5")
+        self.assertEqual(describe.size, 50)
+        self.assertEqual(describe.name, "StackPointCloud-Volume")
+        self.assertEqual(describe.extra['provisioning_state'], 
NodeState.RUNNING)
+
+    ''' Image Function Tests
+    '''
+    def test_list_images(self):
+        images = self.driver.list_images()
+
+        self.assertEqual(len(images), 3)
+
+        image = images[0]
+        self.assertEqual(image.extra['cpu_hotpluggable'], "false")
+        self.assertEqual(image.id, "03b6c3e7-f2ad-11e3-a036-52540066fee9")
+        self.assertEqual(image.name, "windows-2012-r2-server-2014-06")
+        self.assertEqual(image.extra['image_size'], "11264")
+        self.assertEqual(image.extra['image_type'], "HDD")
+        self.assertEqual(image.extra['memory_hotpluggable'], "false")
+        self.assertEqual(image.extra['os_type'], "WINDOWS")
+        self.assertEqual(image.extra['public'], "true")
+        self.assertEqual(image.extra['location'], None)
+        self.assertEqual(image.extra['writeable'], "true")
+
+    ''' Datacenter Function Tests
+    '''
+    def test_ex_create_datacenter(self):
+        datacenter = self.driver.ex_create_datacenter(name="StackPointCloud",
+                                                      location="us/la")
+
+        self.assertEqual(datacenter.id, '0c793dd1-d4cd-4141-86f3-8b1a24b2d604')
+        self.assertEqual(datacenter.extra['location'], 'us/las')
+        self.assertEqual(datacenter.version, '1')
+
+    def test_ex_destroy_datacenter(self):
+        datacenter = type('Datacenter', (object,),
+                          dict(id="8669a69f-2274-4520-b51e-dbdf3986a476"))
+        destroy = self.driver.ex_destroy_datacenter(datacenter=datacenter)
+
+        self.assertTrue(destroy)
+
+    def test_ex_describe_datacenter(self):
+        datacenter = type('Datacenter', (object,),
+                          dict(id="d96dfafc-9a8c-4c0e-8a0c-857a15db572d"))
+        describe = 
self.driver.ex_describe_datacenter(datacenter_id=datacenter.id)
+
+        self.assertEqual(describe.id, 'a3e6f83a-8982-4d6a-aebc-60baf5755ede')
+        self.assertEqual(describe.name, 'StackPointCloud')
+        self.assertEqual(describe.version, '1')
+        self.assertEqual(describe.extra['location'], 'us/las')
+        self.assertEqual(describe.extra['provisioning_state'], 
NodeState.RUNNING)
+
+    def test_ex_clear_datacenter(self):
+        datacenter = type('Datacenter', (object,),
+                          dict(id="8669a69f-2274-4520-b51e-dbdf3986a476"))
+        clear = self.driver.ex_clear_datacenter(datacenter=datacenter)
+
+        self.assertTrue(clear)
+
+    def test_ex_list_datacenters(self):
+        datacenters = self.driver.ex_list_datacenters()
+
+        self.assertEqual(len(datacenters), 2)
+
+        dc1 = datacenters[0]
+        self.assertEquals(dc1.id, "a3e6f83a-8982-4d6a-aebc-60baf5755ede")
+        self.assertEquals(dc1.name, "StackPointCloud")
+        self.assertEquals(dc1.version, "1")
+
+    def test_ex_rename_datacenter(self):
+        datacenter = type('Datacenter', (object,),
+                          dict(id="d96dfafc-9a8c-4c0e-8a0c-857a15db572d"))
+
+        update = self.driver.ex_rename_datacenter(datacenter=datacenter,
+                                                  name="StackPointCloud")
+
+        self.assertTrue(update)
+
+    def test_list_locations(self):
+        locations = self.driver.list_locations()
+        self.assertEqual(len(locations), 3)
+
+        locationNamesResult = sorted(list(a.name for a in locations))
+        locationNamesExpected = ['de/fkb', 'de/fra', 'us/las']
+
+        self.assertEquals(locationNamesResult, locationNamesExpected)
+
+    ''' Availability Zone Tests
+    '''
+
+    def test_ex_list_availability_zones(self):
+        zones = self.driver.ex_list_availability_zones()
+        self.assertEqual(len(zones), 3)
+
+        zoneNamesResult = sorted(list(a.name for a in zones))
+        zoneNamesExpected = ['AUTO', 'ZONE_1', 'ZONE_2']
+
+        self.assertEquals(zoneNamesResult, zoneNamesExpected)
+
+    ''' Interface Tests
+    '''
+
+    def test_ex_list_interfaces(self):
+        interfaces = self.driver.ex_list_network_interfaces()
+
+        self.assertEqual(len(interfaces), 3)
+
+        interface = interfaces[0]
+        self.assertEquals(interface.id, "6b38a4f3-b851-4614-9e3a-5ddff4727727")
+        self.assertEquals(interface.name, "StackPointCloud")
+        self.assertEquals(interface.state, 0)
+        self.assertEquals(interface.extra['server_id'], 
"234f0cf9-1efc-4ade-b829-036456584116")
+        self.assertEquals(interface.extra['lan_id'], '3')
+        self.assertEquals(interface.extra['internet_access'], 'false')
+        self.assertEquals(interface.extra['mac_address'], "02:01:40:47:90:04")
+        self.assertEquals(interface.extra['dhcp_active'], "true")
+        self.assertEquals(interface.extra['gateway_ip'], None)
+        self.assertEquals(interface.extra['ips'], ['10.14.96.11', 
'162.254.26.14', '162.254.26.15'])
+
+    def test_ex_create_network_interface(self):
+        node = type('Node', (object,),
+                    dict(id="cd59b162-0289-11e4-9f63-52540066fee9"))
+
+        interface = self.driver.ex_create_network_interface(node=node)
+        self.assertEqual(interface.id, '6b38a4f3-b851-4614-9e3a-5ddff4727727')
+
+    def test_ex_destroy_network_interface(self):
+        network_interface = type('ProfitBricksNetworkInterface', (object,),
+                                 dict(
+                                 id="cd59b162-0289-11e4-9f63-52540066fee9"))
+
+        destroy = self.driver.ex_destroy_network_interface(
+            network_interface=network_interface)
+
+        self.assertTrue(destroy)
+
+    def test_ex_update_network_interface(self):
+        network_interface = type('ProfitBricksNetworkInterface', (object,),
+                                 dict(
+                                 id="cd59b162-0289-11e4-9f63-52540066fee9"))
+
+        create = self.driver.ex_update_network_interface(
+            network_interface=network_interface)
+
+        self.assertTrue(create)
+
+    def test_ex_describe_network_interface(self):
+        network_interface = type('ProfitBricksNetworkInterface', (object,),
+                                 dict(
+                                 id="cd59b162-0289-11e4-9f63-52540066fee9"))
+
+        describe = 
self.driver.ex_describe_network_interface(network_interface=network_interface)
+
+        self.assertEquals(describe.id, "f1c7a244-2fa6-44ee-8fb6-871f337683a3")
+        self.assertEquals(describe.name, None)
+        self.assertEquals(describe.state, 0)
+        self.assertEquals(describe.extra['datacenter_id'], 
"a3a2e730-0dc3-47e6-bac6-4c056d5e2aee")
+        self.assertEquals(describe.extra['datacenter_version'], "6")
+        self.assertEquals(describe.extra['server_id'], 
"c09f4f31-336c-4ad2-9ec7-591778513408")
+        self.assertEquals(describe.extra['lan_id'], "1")
+        self.assertEquals(describe.extra['internet_access'], "false")
+        self.assertEquals(describe.extra['mac_address'], "02:01:96:d7:60:e0")
+        self.assertEquals(describe.extra['dhcp_active'], "true")
+        self.assertEquals(describe.extra['gateway_ip'], None)
+        self.assertEquals(describe.extra['ips'], ['10.10.38.12'])
+
+    def test_list_sizes(self):
+        sizes = self.driver.list_sizes()
+
+        self.assertEqual(len(sizes), 7)
+
+
+class ProfitBricksMockHttp(MockHttp):
+
+    fixtures = ComputeFileFixtures('profitbricks')
+
+    def _1_3_clearDataCenter(self, method, url, body, headers):
+        body = self.fixtures.load('ex_clear_datacenter.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_createDataCenter(self, method, url, body, headers):
+        body = self.fixtures.load('ex_create_datacenter.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_deleteDataCenter(self, method, url, body, headers):
+        body = self.fixtures.load('ex_destroy_datacenter.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_getDataCenter(self, method, url, body, headers):
+        body = self.fixtures.load('ex_describe_datacenter.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_getAllDataCenters(self, method, url, body, headers):
+        body = self.fixtures.load('ex_list_datacenters.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_updateDataCenter(self, method, url, body, headers):
+        body = self.fixtures.load('ex_update_datacenter.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_getAllImages(self, method, url, body, headers):
+        body = self.fixtures.load('list_images.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_getAllServers(self, method, url, body, headers):
+        body = self.fixtures.load('list_nodes.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_resetServer(self, method, url, body, headers):
+        body = self.fixtures.load('reboot_node.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_stopServer(self, method, url, body, headers):
+        body = self.fixtures.load('ex_stop_node.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_startServer(self, method, url, body, headers):
+        body = self.fixtures.load('ex_start_node.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_deleteServer(self, method, url, body, headers):
+        body = self.fixtures.load('destroy_node.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_getAllStorages(self, method, url, body, headers):
+        body = self.fixtures.load('list_volumes.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_createStorage(self, method, url, body, headers):
+        body = self.fixtures.load('create_volume.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_connectStorageToServer(self, method, url, body, headers):
+        body = self.fixtures.load('attach_volume.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_disconnectStorageFromServer(self, method, url, body, headers):
+        body = self.fixtures.load('detach_volume.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_deleteStorage(self, method, url, body, headers):
+        body = self.fixtures.load('destroy_volume.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_updateStorage(self, method, url, body, headers):
+        body = self.fixtures.load('ex_update_volume.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_updateServer(self, method, url, body, headers):
+        body = self.fixtures.load('ex_update_node.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_getNic(self, method, url, body, headers):
+        body = self.fixtures.load('ex_describe_network_interface.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_getAllNic(self, method, url, body, headers):
+        body = self.fixtures.load('ex_list_network_interfaces.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_createNic(self, method, url, body, headers):
+        body = self.fixtures.load('ex_list_network_interfaces.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_deleteNic(self, method, url, body, headers):
+        body = self.fixtures.load('ex_destroy_network_interface.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_updateNic(self, method, url, body, headers):
+        body = self.fixtures.load('ex_update_network_interface.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_getServer(self, method, url, body, headers):
+        body = self.fixtures.load('ex_describe_node.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_getStorage(self, method, url, body, headers):
+        body = self.fixtures.load('ex_describe_volume.xml')
+        return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+    def _1_3_createServer(self, method, url, body, headers):
+        body = self.fixtures.load('create_node.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/34cff301/libcloud/test/secrets.py-dist
----------------------------------------------------------------------
diff --git a/libcloud/test/secrets.py-dist b/libcloud/test/secrets.py-dist
index 030176e..b3525e8 100644
--- a/libcloud/test/secrets.py-dist
+++ b/libcloud/test/secrets.py-dist
@@ -44,6 +44,7 @@ GRIDSPOT_PARAMS = ('key',)
 HOSTVIRTUAL_PARAMS = ('key',)
 DIGITAL_OCEAN_PARAMS = ('user', 'key')
 CLOUDFRAMES_PARAMS = ('key', 'secret', False, 'host', 8888)
+PROFIT_BRICKS_PARAMS = ('user', 'key')
 
 # Storage
 STORAGE_S3_PARAMS = ('key', 'secret')

Reply via email to