Author: tomaz
Date: Wed Apr 11 04:40:50 2012
New Revision: 1324548
URL: http://svn.apache.org/viewvc?rev=1324548&view=rev
Log:
Add tests for Joyent driver.
Added:
libcloud/trunk/test/compute/test_joyent.py
Modified:
libcloud/trunk/libcloud/compute/drivers/joyent.py
libcloud/trunk/test/secrets.py-dist
Modified: libcloud/trunk/libcloud/compute/drivers/joyent.py
URL:
http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/joyent.py?rev=1324548&r1=1324547&r2=1324548&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/joyent.py (original)
+++ libcloud/trunk/libcloud/compute/drivers/joyent.py Wed Apr 11 04:40:50 2012
@@ -169,7 +169,7 @@ class JoyentNodeDriver(NodeDriver):
public_ips.append(ip)
if 'credentials' in data['metadata']:
- extra['password'] = data['metadata']['credentials']
+ extra['password'] = data['metadata']['credentials']['root']
node = Node(id=data['id'], name=data['name'], state=state,
public_ips=public_ips, private_ips=private_ips,
Added: libcloud/trunk/test/compute/test_joyent.py
URL:
http://svn.apache.org/viewvc/libcloud/trunk/test/compute/test_joyent.py?rev=1324548&view=auto
==============================================================================
--- libcloud/trunk/test/compute/test_joyent.py (added)
+++ libcloud/trunk/test/compute/test_joyent.py Wed Apr 11 04:40:50 2012
@@ -0,0 +1,104 @@
+# 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
+import unittest
+
+from libcloud.utils.py3 import httplib
+from libcloud.common.types import LibcloudError
+from libcloud.compute.base import Node, NodeState
+from libcloud.compute.drivers.joyent import JoyentNodeDriver
+
+from test import MockHttp
+from test.compute import TestCaseMixin
+from test.file_fixtures import ComputeFileFixtures
+from test.secrets import JOYENT_PARAMS
+
+
+class JoyentTestCase(unittest.TestCase):
+ def setUp(self):
+ JoyentNodeDriver.connectionCls.conn_classes = (None, JoyentHttp)
+ self.driver = JoyentNodeDriver(*JOYENT_PARAMS)
+
+ def test_instantiate_invalid_location(self):
+ try:
+ JoyentNodeDriver('user', 'key', location='invalid')
+ except LibcloudError:
+ pass
+ else:
+ self.fail('Exception was not thrown')
+
+ def test_list_sizes(self):
+ sizes = self.driver.list_sizes()
+
+ self.assertEqual(sizes[0].ram, 16384)
+
+ def test_list_images(self):
+ images = self.driver.list_images()
+
+ self.assertEqual(images[0].name, 'nodejs')
+
+ def test_list_nodes_with_and_without_credentials(self):
+ nodes = self.driver.list_nodes()
+ self.assertEqual(len(nodes), 2)
+
+ node = nodes[0]
+ self.assertEqual(node.public_ips[0], '165.225.129.129')
+ self.assertEqual(node.private_ips[0], '10.112.1.130')
+ self.assertEqual(node.state, NodeState.RUNNING)
+
+ node = nodes[1]
+ self.assertEqual(node.public_ips[0], '165.225.129.128')
+ self.assertEqual(node.private_ips[0], '10.112.1.131')
+ self.assertEqual(node.state, NodeState.RUNNING)
+ self.assertEqual(node.extra['password'], 'abc')
+
+ def test_create_node(self):
+ image = self.driver.list_images()[0]
+ size = self.driver.list_sizes()[0]
+ node = self.driver.create_node(image=image, size=size, name='testlc')
+
+ self.assertEqual(node.name, 'testlc')
+
+ def test_ex_stop_node(self):
+ node = self.driver.list_nodes()[0]
+ self.assertTrue(self.driver.ex_stop_node(node))
+
+
+class JoyentHttp(MockHttp):
+ fixtures = ComputeFileFixtures('joyent')
+
+ def _my_packages(self, method, url, body, headers):
+ body = self.fixtures.load('my_packages.json')
+ return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+ def _my_datasets(self, method, url, body, headers):
+ body = self.fixtures.load('my_datasets.json')
+ return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+ def _my_machines(self, method, url, body, headers):
+ if method == 'GET':
+ body = self.fixtures.load('my_machines.json')
+ elif method == 'POST':
+ body = self.fixtures.load('my_machines_create.json')
+ return (httplib.OK, body, {}, httplib.responses[httplib.OK])
+
+ def _my_machines_2fb67f5f_53f2_40ab_9d99_b9ff68cfb2ab(self, method, url,
+ body, headers):
+ return (httplib.ACCEPTED, '', {}, httplib.responses[httplib.ACCEPTED])
+
+
+if __name__ == '__main__':
+ sys.exit(unittest.main())
Modified: libcloud/trunk/test/secrets.py-dist
URL:
http://svn.apache.org/viewvc/libcloud/trunk/test/secrets.py-dist?rev=1324548&r1=1324547&r2=1324548&view=diff
==============================================================================
--- libcloud/trunk/test/secrets.py-dist (original)
+++ libcloud/trunk/test/secrets.py-dist Wed Apr 11 04:40:50 2012
@@ -35,6 +35,7 @@ SOFTLAYER_PARAMS = ('user', 'api_key')
VCLOUD_PARAMS = ('user', 'secret')
VOXEL_PARAMS = ('key', 'secret')
VPSNET_PARAMS = ('user', 'key')
+JOYENT_PARAMS = ('user', 'key')
# Storage
STORAGE_S3_PARAMS = ('key', 'secret')