blob: 8e7007d085ef81f0577e5101d24011efcc68d5c6 [file] [log] [blame]
Matteo Scandolo48d3d2d2017-08-08 13:05:27 -07001# Copyright 2017-present Open Networking Foundation
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14
Zack Williamsc6722d52020-01-13 16:34:33 -070015from __future__ import absolute_import, print_function
Matteo Scandolo48d3d2d2017-08-08 13:05:27 -070016
Zack Williamsc6722d52020-01-13 16:34:33 -070017import requests
18import json
19import os
20
21from utils.readProperties import readProperties
22
You Wang2e97a012016-10-21 16:09:52 -070023
Suchitra.Vemuri85220062016-10-25 10:44:11 -070024class restApi(object):
Zack Williamsc6722d52020-01-13 16:34:33 -070025 """
You Wang2e97a012016-10-21 16:09:52 -070026 Functions for testing CORD API with POST, GET, PUT, DELETE method
Zack Williamsc6722d52020-01-13 16:34:33 -070027 """
28
Suchitra Vemuri90081442017-12-20 16:10:15 -080029 def __init__(self, propertyFile="RestApiProperties.py"):
Zack Williamsc6722d52020-01-13 16:34:33 -070030 self.rp = readProperties(
31 os.path.abspath(os.path.join(
32 os.path.dirname(__file__),
33 "../Properties/",
34 propertyFile,
35 ))
36 )
You Wang2e97a012016-10-21 16:09:52 -070037 self.controllerIP = self.getValueFromProperties("SERVER_IP")
38 self.controllerPort = self.getValueFromProperties("SERVER_PORT")
Kailash Khalasi68f9f632018-04-11 08:09:19 -070039 self.user = self.getValueFromProperties("XOS_USER")
40 self.password = self.getValueFromProperties("XOS_PASSWD")
Zack Williamsc6722d52020-01-13 16:34:33 -070041 self.jsonHeader = {"Content-Type": "application/json"}
You Wang2e97a012016-10-21 16:09:52 -070042
43 def getValueFromProperties(self, key):
Zack Williamsc6722d52020-01-13 16:34:33 -070044 """
You Wang2e97a012016-10-21 16:09:52 -070045 Get and return values from properties file
Zack Williamsc6722d52020-01-13 16:34:33 -070046 """
Andy Bavier85ec6b92018-04-09 15:55:55 -070047 try:
48 rawValue = self.rp.getValueProperties(key)
Zack Williamsc6722d52020-01-13 16:34:33 -070049 value = rawValue.replace("'", "")
50 except BaseException:
Andy Bavier85ec6b92018-04-09 15:55:55 -070051 value = None
52
53 # Allow override from environment
54 if key in os.environ:
55 value = os.environ[key]
56
You Wang2e97a012016-10-21 16:09:52 -070057 return value
58
59 def getURL(self, key):
Zack Williamsc6722d52020-01-13 16:34:33 -070060 """
You Wang2e97a012016-10-21 16:09:52 -070061 Get REST API suffix from key and return the full URL
Zack Williamsc6722d52020-01-13 16:34:33 -070062 """
63 urlSuffix = self.getValueFromProperties(key)
You Wang2e97a012016-10-21 16:09:52 -070064 url = "http://" + self.controllerIP + ":" + self.controllerPort + urlSuffix
65 return url
66
67 def checkResult(self, resp, expectedStatus):
Zack Williamsc6722d52020-01-13 16:34:33 -070068 """
You Wang2e97a012016-10-21 16:09:52 -070069 Check if the status code in resp equals to the expected number.
70 Return True or False based on the check result.
Zack Williamsc6722d52020-01-13 16:34:33 -070071 """
You Wang2e97a012016-10-21 16:09:52 -070072 if resp.status_code == expectedStatus:
Zack Williamsc6722d52020-01-13 16:34:33 -070073 print("Test passed: " + str(resp.status_code) + ": " + resp.text)
You Wang2e97a012016-10-21 16:09:52 -070074 return True
75 else:
Zack Williamsc6722d52020-01-13 16:34:33 -070076 print("Test failed: " + str(resp.status_code) + ": " + resp.text)
You Wang2e97a012016-10-21 16:09:52 -070077 return False
You Wang2e97a012016-10-21 16:09:52 -070078
79 def ApiPost(self, key, jsonData):
80 url = self.getURL(key)
81 data = json.dumps(jsonData)
Zack Williamsc6722d52020-01-13 16:34:33 -070082 print("url, data..", url, data)
83 resp = requests.post(
84 url, data=data, headers=self.jsonHeader, auth=(self.user, self.password)
85 )
86 print("requests.codes.....", requests.codes.created)
87 passed = self.checkResult(resp, requests.codes.created) or self.checkResult(
88 resp, requests.codes.ok
89 )
You Wang2e97a012016-10-21 16:09:52 -070090 return passed
91
Suchitra Vemuri7dbf03c2018-04-25 23:06:23 -070092 def ApiPostReturnJson(self, key, jsonData):
93 url = self.getURL(key)
94 data = json.dumps(jsonData)
Zack Williamsc6722d52020-01-13 16:34:33 -070095 print("url, data..", url, data)
96 resp = requests.post(
97 url, data=data, headers=self.jsonHeader, auth=(self.user, self.password)
98 )
99 print("requests.codes.....", requests.codes.created)
100 print("posted data...", resp.json())
101 passed = self.checkResult(resp, requests.codes.created) or self.checkResult(
102 resp, requests.codes.ok
103 )
Suchitra Vemuri7dbf03c2018-04-25 23:06:23 -0700104 return passed, resp.json()
105
You Wang2e97a012016-10-21 16:09:52 -0700106 def ApiGet(self, key, urlSuffix=""):
Suchitra.Vemuri32e03c22016-11-03 11:57:53 -0700107 url = self.getURL(key) + str(urlSuffix)
Zack Williamsc6722d52020-01-13 16:34:33 -0700108 print("get url...", url)
Suchitra Vemurif7410a92017-05-16 17:04:05 -0700109 resp = requests.get(url, auth=(self.user, self.password))
110 passed = self.checkResult(resp, requests.codes.ok)
111 if not passed:
112 return None
113 else:
114 return resp.json()
115
116 def ApiChameleonGet(self, key, urlSuffix=""):
117 url = self.getURL(key) + "/" + str(urlSuffix)
Zack Williamsc6722d52020-01-13 16:34:33 -0700118 print("get url...", url)
You Wang2e97a012016-10-21 16:09:52 -0700119 resp = requests.get(url, auth=(self.user, self.password))
120 passed = self.checkResult(resp, requests.codes.ok)
121 if not passed:
122 return None
123 else:
124 return resp.json()
125
126 def ApiPut(self, key, jsonData, urlSuffix=""):
Zack Williamsc6722d52020-01-13 16:34:33 -0700127 print("urlSuffix....", type(urlSuffix))
Suchitra.Vemuri32e03c22016-11-03 11:57:53 -0700128 url = self.getURL(key) + str(urlSuffix) + "/"
You Wang2e97a012016-10-21 16:09:52 -0700129 data = json.dumps(jsonData)
Zack Williamsc6722d52020-01-13 16:34:33 -0700130 resp = requests.put(
131 url, data=data, headers=self.jsonHeader, auth=(self.user, self.password)
132 )
You Wang2e97a012016-10-21 16:09:52 -0700133 passed = self.checkResult(resp, requests.codes.ok)
134 return passed
135
Suchitra Vemurif7410a92017-05-16 17:04:05 -0700136 def ApiChameleonPut(self, key, jsonData, urlSuffix=""):
Zack Williamsc6722d52020-01-13 16:34:33 -0700137 print("urlSuffix....", type(urlSuffix))
Suchitra Vemurif7410a92017-05-16 17:04:05 -0700138 url = self.getURL(key) + "/" + str(urlSuffix)
Zack Williamsc6722d52020-01-13 16:34:33 -0700139 print("url", url)
Suchitra Vemurif7410a92017-05-16 17:04:05 -0700140 data = json.dumps(jsonData)
Zack Williamsc6722d52020-01-13 16:34:33 -0700141 resp = requests.put(
142 url, data=data, headers=self.jsonHeader, auth=(self.user, self.password)
143 )
Suchitra Vemurif7410a92017-05-16 17:04:05 -0700144 passed = self.checkResult(resp, requests.codes.ok)
145 return passed
146
You Wang2e97a012016-10-21 16:09:52 -0700147 def ApiDelete(self, key, urlSuffix=""):
Suchitra.Vemuri32e03c22016-11-03 11:57:53 -0700148 url = self.getURL(key) + str(urlSuffix)
Zack Williamsc6722d52020-01-13 16:34:33 -0700149 print("url", url)
You Wang2e97a012016-10-21 16:09:52 -0700150 resp = requests.delete(url, auth=(self.user, self.password))
You Wang853c0252017-05-17 13:28:31 -0700151 passed = self.checkResult(resp, requests.codes.no_content)
Suchitra Vemurif7410a92017-05-16 17:04:05 -0700152 return passed
153
154 def ApiChameleonDelete(self, key, urlSuffix=""):
155 url = self.getURL(key) + "/" + str(urlSuffix)
Zack Williamsc6722d52020-01-13 16:34:33 -0700156 print("url", url)
Suchitra Vemurif7410a92017-05-16 17:04:05 -0700157 resp = requests.delete(url, auth=(self.user, self.password))
Zack Williamsc6722d52020-01-13 16:34:33 -0700158 passed = self.checkResult(resp, requests.codes.created) or self.checkResult(
159 resp, requests.codes.ok
160 )
You Wang2e97a012016-10-21 16:09:52 -0700161 return passed