928b67b0bfa2334a98975656134f8395a0cf33d8
[integration/test.git] / test / tools / Robot_Tool / libraries / 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
26     def extract_properties(self, content, key, property):
27         """
28         Return all nodes.
29         """
30         if not isinstance(content, dict) or not content.has_key(key):
31             return None
32         else:
33             return [e.get(property) for e in content[key]]
34
35     def get_entries(self, suffix=None, key=None):
36         """
37         Get the existed entries in the service.
38         """
39         if isinstance(suffix, list) and key:
40             result = {}
41             result[key] = []
42             for s in suffix:
43                 result[key].extend(self.get_entries(s).get(key))
44             return result
45         elif isinstance(suffix, str):
46             return self.read(suffix)
47         elif not suffix:
48             return self.read()
49         else:
50             return None
51
52     def add_entry(self, suffix, name, body):
53         """
54         Add entry to the service.
55         """
56         self.update(suffix + '/' + name, body)
57
58     def remove_entry(self, suffix, name):
59         """
60         Remove entry from the service.
61         """
62         self.delete(suffix + '/' + name)
63
64     def test_add_remove_operations(self, suffix_entries, suffix_entry, name, body, key):
65         result = []
66         #Add an entry
67         self.add_entry(suffix_entry, name, body)
68         r = self.get_entries(suffix_entries, key)
69         if r:
70             v = r.get(key)
71             result.append(body in v if v else False)
72             #Remove the added entry
73         if result == [True]:
74             self.remove_entry(suffix_entry, name)
75             r = self.get_entries(suffix_entries, key)
76             v = r.get(key)
77             result.append(body not in v if v else True)
78         return result == [True, True]
79
80     def create(self, suffix, body=None):
81         """
82         POST to given suffix url.
83         TODO: complete
84         """
85         url = self.prefix + self.restSubContext
86         if self.container:
87             url += '/' + self.container
88         if suffix:
89             url += '/' + suffix
90         return do_post_request(url, self.contentType, body, self.user, self.password)
91
92     def read(self, suffix=None):
93         """
94         GET from given suffix url.
95         """
96         url = self.prefix + self.restSubContext
97         if self.container:
98             url += '/' + self.container
99         if suffix:
100             url += '/' + suffix
101         return do_get_request_with_response_content(url, self.contentType, self.user, self.password)
102
103     def update(self, suffix, body=None):
104         """
105         PUT to given suffix url.
106         """
107         url = self.prefix + self.restSubContext
108         if self.container:
109             url += '/' + self.container
110         if suffix:
111             url += '/' + suffix
112         return do_put_request(url, self.contentType, body, self.user, self.password)
113
114     def delete(self, suffix):
115         """
116         DELETE to given suffix url.
117         TODO: complete
118         """
119         url = self.prefix + self.restSubContext
120         if self.container:
121             url += '/' + self.container
122         if suffix:
123             url += '/' + suffix
124         return do_delete_request(url, self.user, self.password)