Init the test directory with CSIT_Test tool code.
[integration/test.git] / test / tools / CSIT_Test / base / testmodule.py
1 """
2 CSIT test tools.
3 Authors: Baohua Yang@IBM, Denghui Huang@IBM
4 Updated: 2013-10-30
5 """
6
7 from restlib import *
8
9
10 class TestModule(object):
11     """
12     Basic module class for test restful APIS.
13     Support the standard Create, Read, Update, Delete (CRUD) actions.
14     """
15
16     def __init__(self, restSubContext, user=DEFAULT_USER, password=DEFAULT_PWD, container=DEFAULT_CONTAINER,
17                  contentType='json', prefix=DEFAULT_PREFIX):
18         self.restSubContext = restSubContext
19         self.container = container
20         self.user = user
21         self.password = password
22         self.contentType = contentType
23         self.prefix = prefix
24
25     def get_entries(self, suffix=None, key=None):
26         """
27         Get the existed entries in the service.
28         """
29         if isinstance(suffix, list) and key:
30             result = {}
31             result[key] = []
32             for s in suffix:
33                 result[key].extend(self.get_entries(s).get(key))
34             return result
35         elif isinstance(suffix, str):
36             return self.read(suffix)
37         elif not suffix:
38             return self.read()
39         else:
40             return None
41
42     def add_entry(self, suffix, name, body):
43         """
44         Add entry to the service.
45         """
46         self.update(suffix + '/' + name, body)
47
48     def remove_entry(self, suffix, name):
49         """
50         Remove entry from the service.
51         """
52         self.delete(suffix + '/' + name)
53
54     def test_add_remove_operations(self, suffix_entries, suffix_entry, name, body, key):
55         result = []
56         #Add an entry
57         self.add_entry(suffix_entry, name, body)
58         r = self.get_entries(suffix_entries, key)
59         if r:
60             v = r.get(key)
61             result.append(body in v if v else False)
62             #Remove the added entry
63         if result == [True]:
64             self.remove_entry(suffix_entry, name)
65             r = self.get_entries(suffix_entries, key)
66             v = r.get(key)
67             result.append(body not in v if v else True)
68         return result == [True, True]
69
70     def create(self, suffix, body=None):
71         """
72         POST to given suffix url.
73         TODO: complete
74         """
75         url = self.prefix + self.restSubContext
76         if self.container:
77             url += '/' + self.container
78         if suffix:
79             url += '/' + suffix
80         return do_post_request(url, self.contentType, body, self.user, self.password)
81
82     def read(self, suffix=None):
83         """
84         GET from given suffix url.
85         """
86         url = self.prefix + self.restSubContext
87         if self.container:
88             url += '/' + self.container
89         if suffix:
90             url += '/' + suffix
91         return do_get_request_with_response_content(url, self.contentType, self.user, self.password)
92
93     def update(self, suffix, body=None):
94         """
95         PUT to given suffix url.
96         """
97         url = self.prefix + self.restSubContext
98         if self.container:
99             url += '/' + self.container
100         if suffix:
101             url += '/' + suffix
102         return do_put_request(url, self.contentType, body, self.user, self.password)
103
104     def delete(self, suffix):
105         """
106         DELETE to given suffix url.
107         TODO: complete
108         """
109         url = self.prefix + self.restSubContext
110         if self.container:
111             url += '/' + self.container
112         if suffix:
113             url += '/' + suffix
114         return do_delete_request(url, self.user, self.password)