blob: aaebbc687d727648de0ed6324383363c147eaef2 [file] [log] [blame]
Matteo Scandolo48d3d2d2017-08-08 13:05:27 -07001
2# Copyright 2017-present Open Networking Foundation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16
You Wang2e97a012016-10-21 16:09:52 -070017#!/usr/bin/env python
Suchitra.Vemuri85220062016-10-25 10:44:11 -070018import requests, json, os, sys, time
19#sys.path.append('common-utils')
20sys.path.append(os.path.join(sys.path[0],'utils'))
You Wang2e97a012016-10-21 16:09:52 -070021from readProperties import readProperties
22
Suchitra.Vemuri85220062016-10-25 10:44:11 -070023class restApi(object):
You Wang2e97a012016-10-21 16:09:52 -070024 '''
25 Functions for testing CORD API with POST, GET, PUT, DELETE method
26 '''
Suchitra Vemuri90081442017-12-20 16:10:15 -080027 def __init__(self, propertyFile="RestApiProperties.py"):
28 self.rp = readProperties(os.path.abspath(os.path.dirname(__file__))+"/../Properties/"+ propertyFile)
You Wang2e97a012016-10-21 16:09:52 -070029 self.controllerIP = self.getValueFromProperties("SERVER_IP")
30 self.controllerPort = self.getValueFromProperties("SERVER_PORT")
Kailash Khalasi68f9f632018-04-11 08:09:19 -070031 self.user = self.getValueFromProperties("XOS_USER")
32 self.password = self.getValueFromProperties("XOS_PASSWD")
You Wang2e97a012016-10-21 16:09:52 -070033 self.jsonHeader = {'Content-Type': 'application/json'}
34
35 def getValueFromProperties(self, key):
36 '''
37 Get and return values from properties file
38 '''
Andy Bavier85ec6b92018-04-09 15:55:55 -070039 try:
40 rawValue = self.rp.getValueProperties(key)
41 value = rawValue.replace("'","")
42 except:
43 value = None
44
45 # Allow override from environment
46 if key in os.environ:
47 value = os.environ[key]
48
You Wang2e97a012016-10-21 16:09:52 -070049 return value
50
51 def getURL(self, key):
52 '''
53 Get REST API suffix from key and return the full URL
54 '''
55 urlSuffix = self.getValueFromProperties(key)
56 url = "http://" + self.controllerIP + ":" + self.controllerPort + urlSuffix
57 return url
58
59 def checkResult(self, resp, expectedStatus):
60 '''
61 Check if the status code in resp equals to the expected number.
62 Return True or False based on the check result.
63 '''
64 if resp.status_code == expectedStatus:
65 print "Test passed: " + str(resp.status_code) + ": " + resp.text
66 return True
67 else:
68 print "Test failed: " + str(resp.status_code) + ": " + resp.text
69 return False
You Wang2e97a012016-10-21 16:09:52 -070070
71 def ApiPost(self, key, jsonData):
72 url = self.getURL(key)
73 data = json.dumps(jsonData)
Suchitra.Vemuri32e03c22016-11-03 11:57:53 -070074 print "url, data..", url, data
You Wang2e97a012016-10-21 16:09:52 -070075 resp = requests.post(url, data=data, headers=self.jsonHeader, auth=(self.user, self.password))
Suchitra Vemurif7410a92017-05-16 17:04:05 -070076 print "requests.codes.....",requests.codes.created
77 passed = self.checkResult(resp, requests.codes.created) or self.checkResult(resp, requests.codes.ok)
You Wang2e97a012016-10-21 16:09:52 -070078 return passed
79
Suchitra Vemuri7dbf03c2018-04-25 23:06:23 -070080 def ApiPostReturnJson(self, key, jsonData):
81 url = self.getURL(key)
82 data = json.dumps(jsonData)
83 print "url, data..", url, data
84 resp = requests.post(url, data=data, headers=self.jsonHeader, auth=(self.user, self.password))
85 print "requests.codes.....",requests.codes.created
86 print "posted data...", resp.json()
87 passed = self.checkResult(resp, requests.codes.created) or self.checkResult(resp, requests.codes.ok)
88 return passed, resp.json()
89
You Wang2e97a012016-10-21 16:09:52 -070090 def ApiGet(self, key, urlSuffix=""):
Suchitra.Vemuri32e03c22016-11-03 11:57:53 -070091 url = self.getURL(key) + str(urlSuffix)
Suchitra Vemurif7410a92017-05-16 17:04:05 -070092 print "get url...",url
93 resp = requests.get(url, auth=(self.user, self.password))
94 passed = self.checkResult(resp, requests.codes.ok)
95 if not passed:
96 return None
97 else:
98 return resp.json()
99
100 def ApiChameleonGet(self, key, urlSuffix=""):
101 url = self.getURL(key) + "/" + str(urlSuffix)
102 print "get url...",url
You Wang2e97a012016-10-21 16:09:52 -0700103 resp = requests.get(url, auth=(self.user, self.password))
104 passed = self.checkResult(resp, requests.codes.ok)
105 if not passed:
106 return None
107 else:
108 return resp.json()
109
110 def ApiPut(self, key, jsonData, urlSuffix=""):
Suchitra.Vemuri32e03c22016-11-03 11:57:53 -0700111 print "urlSuffix....",type(urlSuffix)
112 url = self.getURL(key) + str(urlSuffix) + "/"
You Wang2e97a012016-10-21 16:09:52 -0700113 data = json.dumps(jsonData)
114 resp = requests.put(url, data=data, headers=self.jsonHeader, auth=(self.user, self.password))
115 passed = self.checkResult(resp, requests.codes.ok)
116 return passed
117
Suchitra Vemurif7410a92017-05-16 17:04:05 -0700118 def ApiChameleonPut(self, key, jsonData, urlSuffix=""):
119 print "urlSuffix....",type(urlSuffix)
120 url = self.getURL(key) + "/" + str(urlSuffix)
121 print "url", url
122 data = json.dumps(jsonData)
123 resp = requests.put(url, data=data, headers=self.jsonHeader, auth=(self.user, self.password))
124 passed = self.checkResult(resp, requests.codes.ok)
125 return passed
126
You Wang2e97a012016-10-21 16:09:52 -0700127 def ApiDelete(self, key, urlSuffix=""):
Suchitra.Vemuri32e03c22016-11-03 11:57:53 -0700128 url = self.getURL(key) + str(urlSuffix)
Suchitra.Vemuri8be18802016-11-16 16:59:54 -0800129 print "url",url
You Wang2e97a012016-10-21 16:09:52 -0700130 resp = requests.delete(url, auth=(self.user, self.password))
You Wang853c0252017-05-17 13:28:31 -0700131 passed = self.checkResult(resp, requests.codes.no_content)
Suchitra Vemurif7410a92017-05-16 17:04:05 -0700132 return passed
133
134 def ApiChameleonDelete(self, key, urlSuffix=""):
135 url = self.getURL(key) + "/" + str(urlSuffix)
136 print "url",url
137 resp = requests.delete(url, auth=(self.user, self.password))
138 #passed = self.checkResult(resp, requests.codes.no_content)
139 passed = self.checkResult(resp, requests.codes.created) or self.checkResult(resp, requests.codes.ok)
You Wang2e97a012016-10-21 16:09:52 -0700140 return passed
141