Step 2: Move test folder to root
[integration/test.git] / tools / CSIT_Test / base / testmodule.py
diff --git a/tools/CSIT_Test/base/testmodule.py b/tools/CSIT_Test/base/testmodule.py
new file mode 100644 (file)
index 0000000..6ac3478
--- /dev/null
@@ -0,0 +1,123 @@
+"""
+CSIT test tools.
+Authors: Baohua Yang@IBM, Denghui Huang@IBM
+Updated: 2013-10-30
+"""
+
+from restlib import *  # noqa
+
+
+class TestModule(object):
+    """
+    Basic module class for test restful APIS.
+    Support the standard Create, Read, Update, Delete (CRUD) actions.
+    """
+
+    def __init__(self, restSubContext, user=DEFAULT_USER, password=DEFAULT_PWD, container=DEFAULT_CONTAINER,
+                 contentType='json', prefix=DEFAULT_PREFIX):
+        self.restSubContext = restSubContext
+        self.container = container
+        self.user = user
+        self.password = password
+        self.contentType = contentType
+        self.prefix = prefix
+
+    def extract_properties(self, content, key, property):
+        """
+        Return all nodes.
+        """
+        if not isinstance(content, dict) or key not in content:
+            return None
+        else:
+            return [e.get(property) for e in content[key]]
+
+    def get_entries(self, suffix=None, key=None):
+        """
+        Get the existed entries in the service.
+        """
+        if isinstance(suffix, list) and key:
+            result = {}
+            result[key] = []
+            for s in suffix:
+                result[key].extend(self.get_entries(s).get(key))
+            return result
+        elif isinstance(suffix, str):
+            return self.read(suffix)
+        elif not suffix:
+            return self.read()
+        else:
+            return None
+
+    def add_entry(self, suffix, name, body):
+        """
+        Add entry to the service.
+        """
+        self.update(suffix + '/' + name, body)
+
+    def remove_entry(self, suffix, name):
+        """
+        Remove entry from the service.
+        """
+        self.delete(suffix + '/' + name)
+
+    def test_add_remove_operations(self, suffix_entries, suffix_entry, name, body, key):
+        result = []
+        # Add an entry
+        self.add_entry(suffix_entry, name, body)
+        r = self.get_entries(suffix_entries, key)
+        if r:
+            v = r.get(key)
+            result.append(body in v if v else False)
+            # Remove the added entry
+        if result == [True]:
+            self.remove_entry(suffix_entry, name)
+            r = self.get_entries(suffix_entries, key)
+            v = r.get(key)
+            result.append(body not in v if v else True)
+        return result == [True, True]
+
+    def create(self, suffix, body=None):
+        """
+        POST to given suffix url.
+        TODO: complete
+        """
+        url = self.prefix + self.restSubContext
+        if self.container:
+            url += '/' + self.container
+        if suffix:
+            url += '/' + suffix
+        return do_post_request(url, self.contentType, body, self.user, self.password)
+
+    def read(self, suffix=None):
+        """
+        GET from given suffix url.
+        """
+        url = self.prefix + self.restSubContext
+        if self.container:
+            url += '/' + self.container
+        if suffix:
+            url += '/' + suffix
+        return do_get_request_with_response_content(url, self.contentType, self.user, self.password)
+
+    def update(self, suffix, body=None):
+        """
+        PUT to given suffix url.
+        """
+        url = self.prefix + self.restSubContext
+        if self.container:
+            url += '/' + self.container
+        if suffix:
+            url += '/' + suffix
+        return do_put_request(url, self.contentType, body, self.user, self.password)
+
+    def delete(self, suffix):
+        """
+        DELETE to given suffix url.
+        TODO: complete
+        """
+        url = self.prefix + self.restSubContext
+        if self.container:
+            url += '/' + self.container
+        if suffix:
+            url += '/' + suffix
+        return do_delete_request(url, self.user, self.password)