You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by an...@apache.org on 2017/04/02 11:38:45 UTC

[03/16] libcloud git commit: continue integration test driver

continue integration test driver


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

Branch: refs/heads/trunk
Commit: b5702e25ea84289e881e04a1428f8265d5e5710f
Parents: e36c9b9
Author: Anthony Shaw <an...@apache.org>
Authored: Mon Jan 9 17:06:44 2017 +1100
Committer: Anthony Shaw <an...@apache.org>
Committed: Mon Jan 9 17:06:44 2017 +1100

----------------------------------------------------------------------
 integration/README.rst       | 20 +++++++++++
 integration/__main__.py      | 16 +++++++++
 integration/api/__main__.py  |  4 ++-
 integration/api/data.py      | 26 ++++++++++++++
 integration/api/routes.py    | 12 +++++--
 integration/driver/test.py   | 72 +++++++++++++++++++++++++++++++++++++++
 integration/requirements.txt |  1 +
 7 files changed, 147 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/b5702e25/integration/README.rst
----------------------------------------------------------------------
diff --git a/integration/README.rst b/integration/README.rst
new file mode 100644
index 0000000..ed61b5a
--- /dev/null
+++ b/integration/README.rst
@@ -0,0 +1,20 @@
+Integration Test Module
+=======================
+
+This test suite is for running a live API endpoint and testing the apache-libcloud functionality as a full integration test
+
+Running the API service
+-----------------------
+
+.. code-block:: bash
+
+  pip install -r integration/requirements.txt
+  python -m integration.api
+
+Running the tests
+-----------------
+
+.. code-block:: bash
+
+   python -m integration
+   

http://git-wip-us.apache.org/repos/asf/libcloud/blob/b5702e25/integration/__main__.py
----------------------------------------------------------------------
diff --git a/integration/__main__.py b/integration/__main__.py
index e69de29..8f09ea9 100644
--- a/integration/__main__.py
+++ b/integration/__main__.py
@@ -0,0 +1,16 @@
+import unittest
+import sys
+
+from .driver.test import TestNodeDriver
+
+
+class IntegrationTest(unittest.TestCase):
+    def setUp(self):        
+        self.instance = TestNodeDriver('apache', 'libcloud', secure=False,
+                                       host='localhost', port=9898)
+
+    def test_nodes(self):
+        nodes = self.instance.list_nodes()
+
+if __name__ == '__main__':
+    sys.exit(unittest.main())

http://git-wip-us.apache.org/repos/asf/libcloud/blob/b5702e25/integration/api/__main__.py
----------------------------------------------------------------------
diff --git a/integration/api/__main__.py b/integration/api/__main__.py
index 7724165..2257687 100644
--- a/integration/api/__main__.py
+++ b/integration/api/__main__.py
@@ -13,6 +13,8 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-from bottle import route, run, template
+from bottle import run
+
+from .routes import *
 
 run(host='localhost', port=9898)

http://git-wip-us.apache.org/repos/asf/libcloud/blob/b5702e25/integration/api/data.py
----------------------------------------------------------------------
diff --git a/integration/api/data.py b/integration/api/data.py
new file mode 100644
index 0000000..e49d515
--- /dev/null
+++ b/integration/api/data.py
@@ -0,0 +1,26 @@
+# 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.
+
+NODES = [
+    {'id': '1234a',
+     'name': 'test-1',
+     'state': 'RUNNING',
+     'public_ips': ['4.4.4.4', '8.8.8.8'],
+     'private_ips': ['10.0.0.1', '192.168.1.1'],
+     'size': 'test-size-1',
+     'created_at': '2017-01-09T05:25:12+00:00',
+     'image': 'test-image-1',
+     'extra': {'test-key': 'test-value'}}
+]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/libcloud/blob/b5702e25/integration/api/routes.py
----------------------------------------------------------------------
diff --git a/integration/api/routes.py b/integration/api/routes.py
index 6e92298..7fdc3b1 100644
--- a/integration/api/routes.py
+++ b/integration/api/routes.py
@@ -13,6 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-@route('/hello/<name>')
-def index(name):
-    return template('<b>Hello {{name}}</b>!', name=name)
+import json
+
+from bottle import route, template
+
+from .data import NODES
+
+@route('/compute/nodes', method='GET')
+def list_nodes():
+    return json.dumps(NODES)

http://git-wip-us.apache.org/repos/asf/libcloud/blob/b5702e25/integration/driver/test.py
----------------------------------------------------------------------
diff --git a/integration/driver/test.py b/integration/driver/test.py
new file mode 100644
index 0000000..886c98f
--- /dev/null
+++ b/integration/driver/test.py
@@ -0,0 +1,72 @@
+# 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 base64
+
+from libcloud.common.base import JsonResponse, ConnectionUserAndKey
+from libcloud.compute.base import NodeDriver
+
+from libcloud.utils.py3 import b
+
+
+class TestResponseType(JsonResponse):
+    pass
+
+
+class TestConnection(ConnectionUserAndKey):
+    host = 'localhost'
+    secure = True
+    responseCls = TestResponseType
+
+    allow_insecure = True
+
+    def __init__(self, user_id, key, secure=True, host=None, port=None,
+                 url=None, timeout=None, proxy_url=None,
+                 api_version=None, **conn_kwargs):
+        super(TestConnection, self).__init__(
+            user_id=user_id,
+            key=key,
+            secure=secure,
+            host=host, port=port,
+            url=url, timeout=timeout,
+            proxy_url=proxy_url)
+
+    def add_default_headers(self, headers):
+        user_b64 = base64.b64encode(b('%s:%s' % (self.user_id, self.key)))
+        headers['Authorization'] = 'Basic %s' % (user_b64)
+        return headers
+
+
+class TestNodeDriver(NodeDriver):
+    connectionCls = TestConnection
+    type = 'testing'
+    api_name = 'testing'
+    name = 'Test Compute Driver'
+    website = 'http://libcloud.apache.org'
+    features = {'create_node': ['ssh_key', 'password']}
+    
+    def __init__(self, key, secret=None, secure=True,
+                 host=None, port=None, **kwargs):
+        super(TestNodeDriver, self).__init__(key=key, secret=secret,
+                                             secure=secure, host=host,
+                                             port=port,
+                                             **kwargs)
+    
+    def list_nodes(self):
+        r = self.connection.request('/compute/nodes')
+        nodes = []
+        for node in r.object:
+            nodes.append(Node(**node))
+        return nodes

http://git-wip-us.apache.org/repos/asf/libcloud/blob/b5702e25/integration/requirements.txt
----------------------------------------------------------------------
diff --git a/integration/requirements.txt b/integration/requirements.txt
new file mode 100644
index 0000000..310dc0b
--- /dev/null
+++ b/integration/requirements.txt
@@ -0,0 +1 @@
+bottle