160 lines
4.9 KiB
Python
160 lines
4.9 KiB
Python
# ##########################################################################
|
|
#
|
|
# #pgAdmin 4 - PostgreSQL Tools
|
|
#
|
|
# #Copyright (C) 2013 - 2016, The pgAdmin Development Team
|
|
# #This software is released under the PostgreSQL Licence
|
|
#
|
|
# ##########################################################################
|
|
|
|
import json
|
|
import os
|
|
import pickle
|
|
|
|
from regression import test_utils as utils
|
|
from regression.test_setup import pickle_path, config_data
|
|
|
|
SERVER_URL = '/browser/server/obj/'
|
|
SERVER_CONNECT_URL = 'browser/server/connect/'
|
|
|
|
|
|
def write_server_id(response_data, pickle_id_dict):
|
|
"""
|
|
This function writes the server's details to file parent_id.pkl
|
|
|
|
:param response_data: server's data
|
|
:type response_data: list of dictionary
|
|
:param pickle_id_dict: contains ids of server,database,tables etc.
|
|
:type pickle_id_dict: dict
|
|
:return: None
|
|
"""
|
|
|
|
server_id = response_data['node']['_id']
|
|
if os.path.isfile(pickle_path):
|
|
existed_server_id = open(pickle_path, 'rb')
|
|
pickle_id_dict = pickle.load(existed_server_id)
|
|
|
|
pickle_id_dict["sid"].append(str(server_id))
|
|
output = open(pickle_path, 'wb')
|
|
pickle.dump(pickle_id_dict, output)
|
|
output.close()
|
|
|
|
|
|
def add_server(tester):
|
|
"""
|
|
This function add the server in the existing server group
|
|
|
|
:param tester: test object
|
|
:type tester: flask test object
|
|
:return:None
|
|
"""
|
|
|
|
server_group, db_data, pickle_id_dict = utils.get_config_data()
|
|
url = "{0}{1}/".format(SERVER_URL, server_group)
|
|
for db_detail in db_data:
|
|
response = tester.post(url, data=json.dumps(db_detail),
|
|
content_type='html/json')
|
|
assert response.status_code == 200
|
|
response_data = json.loads(response.data.decode('utf-8'))
|
|
write_server_id(response_data, pickle_id_dict)
|
|
|
|
|
|
def get_server(tester):
|
|
"""
|
|
This function gets the added serer details
|
|
|
|
:param tester: test client object
|
|
:type tester: flask test object
|
|
:return: response_data
|
|
:rtype: list
|
|
"""
|
|
|
|
all_id = utils.get_ids()
|
|
server_ids = all_id["sid"]
|
|
for server_id in server_ids:
|
|
response = tester.get(SERVER_URL + str(utils.SERVER_GROUP) + '/' +
|
|
str(server_id),
|
|
follow_redirects=True)
|
|
assert response.status_code == 200
|
|
|
|
|
|
def connect_server(tester):
|
|
"""
|
|
This function used to connect added server
|
|
|
|
:param tester:test client object
|
|
:type tester: flask test object
|
|
:param add_db_flag: flag for db add test case
|
|
:type add_db_flag: bool
|
|
:return: server_connect, server_group, server_id
|
|
:rtype: server_connect:dict, server_group:dict, server_id:str
|
|
"""
|
|
|
|
server_connect = []
|
|
servers = []
|
|
server_config = None
|
|
|
|
srv_id = utils.get_ids()
|
|
server_ids = srv_id["sid"]
|
|
|
|
# Connect to all servers
|
|
for server_id in server_ids:
|
|
response = tester.post(SERVER_CONNECT_URL + str(utils.SERVER_GROUP) +
|
|
'/' + server_id,
|
|
data=dict(
|
|
password=config_data
|
|
['server_credentials'][0]
|
|
['db_password']),
|
|
follow_redirects=True)
|
|
server_connect_detail = json.loads(response.data.decode('utf-8'))
|
|
db_user = server_connect_detail['data']['user']['name']
|
|
server_connect_detail['tablespace_path'] = None
|
|
|
|
# Get the server config of appropriate db user
|
|
for config in config_data['server_credentials']:
|
|
if db_user == config['db_username']:
|
|
server_config = config
|
|
|
|
if "tablespace_path" in server_config:
|
|
server_connect_detail['tablespace_path'] = \
|
|
server_config['tablespace_path']
|
|
|
|
server_connect.append(server_connect_detail)
|
|
servers.append(server_id)
|
|
return server_connect, utils.SERVER_GROUP, servers
|
|
|
|
|
|
def verify_server(tester, server_group, server_id):
|
|
"""This function verifies that server is connecting or not"""
|
|
|
|
response = tester.post(
|
|
'{0}{1}/{2}'.format(SERVER_CONNECT_URL, server_group, server_id),
|
|
data=dict(password=config_data
|
|
['server_credentials'][0]
|
|
['db_password']),
|
|
follow_redirects=True)
|
|
srv_connect = json.loads(response.data.decode('utf-8'))
|
|
return srv_connect
|
|
|
|
|
|
def delete_server(tester):
|
|
"""
|
|
This function used to delete the added servers
|
|
|
|
:param tester: test client object
|
|
:return: None
|
|
"""
|
|
|
|
all_id = utils.get_ids()
|
|
server_ids = all_id["sid"]
|
|
url = SERVER_URL + str(utils.SERVER_GROUP) + "/"
|
|
|
|
if len(server_ids) == 0:
|
|
raise Exception("No server(s) to delete!!!")
|
|
|
|
# Call api to delete the servers
|
|
for server_id in server_ids:
|
|
response = tester.delete(url + str(server_id))
|
|
assert response.status_code == 200
|
|
response_data = json.loads(response.data.decode('utf-8'))
|
|
assert response_data['success'] == 1 |