Update iotdm library and tests.
[integration/test.git] / csit / libraries / ciotdm.py
index a342c4e9ab6c9a7d4473548c6bec0fbbcb9f562b..6f56bf936b9157f81cb6642aaff536f6e57dfad8 100644 (file)
@@ -24,18 +24,62 @@ cse_payload = '''
 
 resourcepayload = '''
 {
-  any:
-  [
-    {%s}
-  ]
+    %s
 }
 '''
 
+ae_payload = '''
+{
+    "m2m:ae":{%s}
+}
+'''
+
+con_payload = '''
+{
+    "m2m:cnt":{%s}
+}
+'''
+
+cin_payload = '''
+{
+   "m2m:cin":{%s}
+}
+'''
+
+sub_payload = '''
+{
+    "m2m:sub":{%s}
+}
+'''
+
+acp_payload = '''
+{
+    "m2m:acp":{%s}
+}
+'''
+
+nod_payload = '''
+{
+    "m2m:nod":{%s}
+}
+'''
+
+resources = {"m2m:ae", "m2m:cnt", "m2m:cin", "m2m:sub",
+             "m2m:acp", "m2m:nod", "m2m:grp"}
+
+payload_map = {1: acp_payload, 2: ae_payload, 3: con_payload,
+               4: cin_payload, 14: nod_payload, 23: sub_payload}
+
 
 def find_key(response, key):
     """Deserialize response, return value for key or None."""
-    val = response.json()
-    return val.get(key, None)
+    dic = response.json()
+    key1 = list(dic.keys())
+    if len(key1) != 1:
+        raise ValueError("The response should be json object")
+    if key1[0] not in resources:
+        raise ValueError("The resource is not recognized")
+    return dic.get(key1[0], None).get(key, None)
 
 
 def name(response):
@@ -92,12 +136,12 @@ def error(response):
         return None
 
 
-def normalize(resourceURI):
+def normalize(resource_uri):
     """Remove the first / of /InCSE1/ae1."""
-    if resourceURI is not None:
-        if resourceURI[0] == "/":
-            return resourceURI[1:]
-    return resourceURI
+    if resource_uri is not None:
+        if resource_uri[0] == "/":
+            return resource_uri[1:]
+    return resource_uri
 
 
 class connect:
@@ -116,141 +160,145 @@ class connect:
             # Admittedly these are "magic values" but are required
             # and until a proper defaulting initializer is in place
             # are hard-coded.
-            'content-type': 'application/json',
+            'content-type': 'application/vnd.onem2m-res+json',
             'X-M2M-Origin': '//localhost:10000',
             'X-M2M-RI': '12345',
             'X-M2M-OT': 'NOW'
         }
         self.server = "%s://" % (protocol) + server
-        if base is not None:
-            self.url = self.server + op_provision
-            self.response = self.session.post(
-                self.url, data=self.payload, timeout=self.timeout)
-            print(self.response.text)
-
-    def create(self, parent, restype, attr=None, name=None):
-        """Create resource."""
+        self.url = self.server + op_provision
+        self.response = self.session.post(
+            self.url, data=self.payload, timeout=self.timeout)
+
+    def modify_headers_origin(self, new_origin):
+        """Modify the headers to test ACP."""
+        self.headers['X-M2M-Origin'] = new_origin
+
+    def create(self, parent, restype, attr=None):
+        """Create certain resource with attributes under parent URI.
+
+        Args:
+            :param parent: the target URI
+            :param restype: the resourceType of the resource
+            :param attr: the payload of the resource
+        """
         if parent is None:
             return None
-        payload = resourcepayload % (attr)
-        print payload
-        self.headers['X-M2M-NM'] = name
+        restype = int(restype)
+        payload = payload_map[restype]
+        payload = payload % (attr)
+        self.headers['content-type'] = 'application/\
+            vnd.onem2m-res+json;ty=%s' % (restype)
         parent = normalize(parent)
-        self.url = self.server + ":8282/%s?ty=%s&rcn=1" % (
-            parent, restype)
+        self.url = self.server + ":8282/%s?&rcn=1" % (
+            parent)
         self.response = self.session.post(
             self.url, payload, timeout=self.timeout, headers=self.headers)
-        return self.response
 
-    def createWithCommand(self, parent, restype,
-                          command, attr=None, name=None):
-        """Create resource."""
+    def create_with_command(self, parent, restype,
+                            command, attr=None):
+        """Create certain resource with attributes under parent URI.
+
+        Args:
+            :param parent: the target URI
+            :param restype: the resourceType of the resource
+            :param command: the command would be in the URI after &
+            :param attr: the payload of the resource
+        """
         if parent is None:
             return None
-        payload = resourcepayload % (attr)
-        print payload
-        if name is None:
-            self.headers['X-M2M-NM'] = None
-        else:
-            self.headers['X-M2M-NM'] = name
+        restype = int(restype)
+        payload = payload_map[restype]
+        payload = payload % (attr)
+        self.headers['content-type'] = 'application/\
+            vnd.onem2m-res+json;ty=%s' % (restype)
         parent = normalize(parent)
-        self.url = self.server + ":8282/%s?ty=%s&%s" % (
-            parent, restype, command)
+        self.url = self.server + ":8282/%s?%s" % (
+            parent, command)
         self.response = self.session.post(
             self.url, payload, timeout=self.timeout, headers=self.headers)
-        return self.response
 
-    def retrieve(self, resourceURI):
-        """Retrieve resource."""
-        if resourceURI is None:
+    def retrieve(self, resource_uri):
+        """Retrieve resource using resource_uri."""
+        if resource_uri is None:
             return None
-        resourceURI = normalize(resourceURI)
-        self.url = self.server + ":8282/%s?rcn=5&drt=2" % (resourceURI)
+        resource_uri = normalize(resource_uri)
+        self.url = self.server + ":8282/%s?rcn=5" % (resource_uri)
         self.headers['X-M2M-NM'] = None
+        self.headers['content-type'] = 'application/vnd.onem2m-res+json'
         self.response = self.session.get(
             self.url, timeout=self.timeout, headers=self.headers
         )
-        return self.response
 
-    def retrieveWithCommand(self, resourceURI, command):
-        """Retrieve resource with command."""
-        if resourceURI is None:
+    def retrieve_with_command(self, resource_uri, command):
+        """Retrieve resource using resource_uri with command."""
+        if resource_uri is None:
             return None
         if command is None:
             return None
-        resourceURI = normalize(resourceURI)
-        self.url = self.server + ":8282/%s?%s" % (resourceURI, command)
+        resource_uri = normalize(resource_uri)
+        self.url = self.server + ":8282/%s?%s" % (resource_uri, command)
         self.headers['X-M2M-NM'] = None
+        self.headers['content-type'] = 'application/vnd.onem2m-res+json'
         self.response = self.session.get(
             self.url, timeout=self.timeout, headers=self.headers
         )
-        return self.response
 
-    def update(self, resourceURI, restype, attr=None, name=None):
-        """Update resource attr."""
-        if resourceURI is None:
+    def update(self, resource_uri, restype, attr=None):
+        """Update resource at resource_uri with new attributes."""
+        if resource_uri is None:
             return None
-        resourceURI = normalize(resourceURI)
-        # print(payload)
-        payload = resourcepayload % (attr)
-        print payload
-        if name is None:
-            self.headers['X-M2M-NM'] = None
-        else:
-            self.headers['X-M2M-NM'] = name
-        self.url = self.server + ":8282/%s" % (resourceURI)
+        resource_uri = normalize(resource_uri)
+        restype = int(restype)
+        payload = payload_map[restype]
+        payload = payload % (attr)
+        self.headers['content-type'] = 'application/vnd.onem2m-res+json'
+        self.url = self.server + ":8282/%s" % (resource_uri)
         self.response = self.session.put(
             self.url, payload, timeout=self.timeout, headers=self.headers)
-        return self.response
 
-    def updateWithCommand(self, resourceURI, restype,
-                          command, attr=None, name=None):
-        """Update resource attr."""
-        if resourceURI is None:
+    def update_with_command(self, resource_uri, restype,
+                            command, attr=None):
+        """Update resource at resource_uri with new attributes."""
+        if resource_uri is None:
             return None
-        resourceURI = normalize(resourceURI)
-        # print(payload)
-        payload = resourcepayload % (attr)
-        print payload
-        if name is None:
-            self.headers['X-M2M-NM'] = None
-        else:
-            self.headers['X-M2M-NM'] = name
-        self.url = self.server + ":8282/%s?%s" % (resourceURI, command)
+        resource_uri = normalize(resource_uri)
+        restype = int(restype)
+        payload = payload_map[restype]
+        payload = payload % (attr)
+        self.headers['content-type'] = 'application/vnd.onem2m-res+json'
+        self.url = self.server + ":8282/%s?%s" % (resource_uri, command)
         self.response = self.session.put(
             self.url, payload, timeout=self.timeout, headers=self.headers)
-        return self.response
 
-    def delete(self, resourceURI):
-        """Delete the resource with the provresourceURIed resourceURI."""
-        if resourceURI is None:
+    def delete(self, resource_uri):
+        """Delete the resource at the resource_uri."""
+        if resource_uri is None:
             return None
-        resourceURI = normalize(resourceURI)
-        self.url = self.server + ":8282/%s" % (resourceURI)
+        resource_uri = normalize(resource_uri)
+        self.url = self.server + ":8282/%s" % (resource_uri)
         self.headers['X-M2M-NM'] = None
+        self.headers['content-type'] = 'application/vnd.onem2m-res+json'
         self.response = self.session.delete(self.url, timeout=self.timeout,
                                             headers=self.headers)
-        return self.response
 
-    def deleteWithCommand(self, resourceURI, command):
-        """Delete the resource with the provresourceURIed resourceURI."""
-        if resourceURI is None:
+    def delete_with_command(self, resource_uri, command):
+        """Delete the resource at the resource_uri."""
+        if resource_uri is None:
             return None
-        resourceURI = normalize(resourceURI)
-        self.url = self.server + ":8282/%s?%s" % (resourceURI, command)
+        resource_uri = normalize(resource_uri)
+        self.url = self.server + ":8282/%s?%s" % (resource_uri, command)
         self.headers['X-M2M-NM'] = None
+        self.headers['content-type'] = 'application/vnd.onem2m-res+json'
         self.response = self.session.delete(self.url, timeout=self.timeout,
                                             headers=self.headers)
-        return self.response
 
     def tree(self):
         """Get the resource tree."""
         self.url = self.server + op_tree
         self.response = self.session.get(self.url)
-        return self.response
 
     def kill(self):
         """Kill the tree."""
         self.url = self.server + op_cleanup
         self.response = self.session.post(self.url)
-        return self.response