mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2025-02-25 18:55:31 -06:00
Enhanced summary output for the test suite.
This commit is contained in:
committed by
Dave Page
parent
881d2a60a4
commit
c84fd83595
@@ -29,25 +29,29 @@ class DatabaseAddTestCase(BaseTestGenerator):
|
|||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
""" This function will add database under 1st server of tree node. """
|
""" This function will add database under 1st server of tree node. """
|
||||||
|
self.db_name = ''
|
||||||
server_id = test_server_dict["server"][0]["server_id"]
|
server_id = test_server_dict["server"][0]["server_id"]
|
||||||
server_utils.connect_server(self, server_id)
|
server_response = server_utils.connect_server(self, server_id)
|
||||||
|
if server_response["info"] == "Server connected.":
|
||||||
data = database_utils.get_db_data()
|
db_owner = server_response['data']['user']['name']
|
||||||
self.db_name = data['name']
|
self.data = database_utils.get_db_data(db_owner)
|
||||||
response = self.tester.post(self.url + str(utils.SERVER_GROUP) +
|
self.db_name = self.data['name']
|
||||||
"/" + str(server_id) + "/",
|
response = self.tester.post(self.url + str(utils.SERVER_GROUP) +
|
||||||
data=json.dumps(data),
|
"/" + str(server_id) + "/",
|
||||||
content_type='html/json')
|
data=json.dumps(self.data),
|
||||||
self.assertEquals(response.status_code, 200)
|
content_type='html/json')
|
||||||
response_data = json.loads(response.data.decode('utf-8'))
|
self.assertEquals(response.status_code, 200)
|
||||||
db_id = response_data['node']['_id']
|
response_data = json.loads(response.data.decode('utf-8'))
|
||||||
db_dict = {"db_id": db_id, "db_name": self.db_name}
|
db_id = response_data['node']['_id']
|
||||||
utils.write_node_info(int(server_id), "did", db_dict)
|
db_dict = {"db_id": db_id, "db_name": self.db_name}
|
||||||
|
utils.write_node_info(int(server_id), "did", db_dict)
|
||||||
|
else:
|
||||||
|
raise Exception("Error while connecting server to add the"
|
||||||
|
" database.")
|
||||||
|
|
||||||
def tearDown(self):
|
def tearDown(self):
|
||||||
"""
|
"""
|
||||||
This function delete the database from server added in SQLite and
|
This function delete the database from server added in SQLite.
|
||||||
clears the node_info_dict
|
|
||||||
"""
|
"""
|
||||||
connection = utils.get_db_connection(self.server['db'],
|
connection = utils.get_db_connection(self.server['db'],
|
||||||
self.server['username'],
|
self.server['username'],
|
||||||
@@ -55,4 +59,3 @@ class DatabaseAddTestCase(BaseTestGenerator):
|
|||||||
self.server['host'],
|
self.server['host'],
|
||||||
self.server['port'])
|
self.server['port'])
|
||||||
utils.drop_database(connection, self.db_name)
|
utils.drop_database(connection, self.db_name)
|
||||||
utils.clear_node_info_dict()
|
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
# This software is released under the PostgreSQL Licence
|
# This software is released under the PostgreSQL Licence
|
||||||
#
|
#
|
||||||
# ##################################################################
|
# ##################################################################
|
||||||
|
import uuid
|
||||||
|
|
||||||
from pgadmin.utils.route import BaseTestGenerator
|
from pgadmin.utils.route import BaseTestGenerator
|
||||||
from regression import test_utils as utils
|
from regression import test_utils as utils
|
||||||
from regression import test_server_dict
|
from regression import test_server_dict
|
||||||
@@ -19,9 +21,9 @@ class DatabaseDeleteTestCase(BaseTestGenerator):
|
|||||||
('Check Databases Node URL', dict(url='/browser/database/obj/'))
|
('Check Databases Node URL', dict(url='/browser/database/obj/'))
|
||||||
]
|
]
|
||||||
|
|
||||||
@classmethod
|
def setUp(self):
|
||||||
def setUpClass(cls):
|
self.db_name = "db_delete_%s" % str(uuid.uuid4())[1:4],
|
||||||
cls.db_id = utils.create_database(cls.server, "test_db_delete")
|
self.db_id = utils.create_database(self.server, self.db_name)
|
||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
""" This function will delete the database."""
|
""" This function will delete the database."""
|
||||||
@@ -38,6 +40,11 @@ class DatabaseDeleteTestCase(BaseTestGenerator):
|
|||||||
raise Exception("Could not connect to server to delete the "
|
raise Exception("Could not connect to server to delete the "
|
||||||
"database.")
|
"database.")
|
||||||
|
|
||||||
@classmethod
|
def tearDown(self):
|
||||||
def tearDownClass(cls):
|
"""This function drop the added database"""
|
||||||
pass
|
connection = utils.get_db_connection(self.server['db'],
|
||||||
|
self.server['username'],
|
||||||
|
self.server['db_password'],
|
||||||
|
self.server['host'],
|
||||||
|
self.server['port'])
|
||||||
|
utils.drop_database(connection, self.db_name)
|
||||||
|
|||||||
@@ -19,30 +19,30 @@ class DatabasesGetTestCase(BaseTestGenerator):
|
|||||||
"""
|
"""
|
||||||
scenarios = [
|
scenarios = [
|
||||||
# Fetching default URL for database node.
|
# Fetching default URL for database node.
|
||||||
('Check Dat abases Node URL', dict(url='/browser/database/obj/'))
|
('Check Databases Node URL', dict(url='/browser/database/obj/'))
|
||||||
]
|
]
|
||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
""" This function will fetch added database. """
|
""" This function will fetch added database. """
|
||||||
server_data = test_server_dict["database"][0]
|
server_data = test_server_dict["database"][0]
|
||||||
server_id = server_data["server_id"]
|
self.server_id = server_data["server_id"]
|
||||||
db_id = server_data['db_id']
|
self.db_id = server_data['db_id']
|
||||||
db_con = database_utils.verify_database(self,
|
db_con = database_utils.verify_database(self,
|
||||||
utils.SERVER_GROUP,
|
utils.SERVER_GROUP,
|
||||||
server_id,
|
self.server_id,
|
||||||
db_id)
|
self.db_id)
|
||||||
if db_con["info"] == "Database connected.":
|
try:
|
||||||
try:
|
if db_con["info"] == "Database connected.":
|
||||||
response = self.tester.get(
|
response = self.tester.get(
|
||||||
self.url + str(utils.SERVER_GROUP) + '/' + str(
|
self.url + str(utils.SERVER_GROUP) + '/' + str(
|
||||||
server_id) + '/' +
|
self.server_id) + '/' +
|
||||||
str(db_id), follow_redirects=True)
|
str(self.db_id), follow_redirects=True)
|
||||||
self.assertEquals(response.status_code, 200)
|
self.assertEquals(response.status_code, 200)
|
||||||
except Exception as exception:
|
else:
|
||||||
raise Exception("Error while getting database. %s" % exception)
|
raise Exception("Could not connect to database.")
|
||||||
finally:
|
except Exception as exception:
|
||||||
# Disconnect database to delete it
|
raise Exception("Error while getting database. %s" % exception)
|
||||||
database_utils.disconnect_database(self, server_id, db_id)
|
finally:
|
||||||
|
# Disconnect database to delete it
|
||||||
else:
|
database_utils.disconnect_database(self, self.server_id,
|
||||||
raise Exception("Could not connect to database.")
|
self.db_id)
|
||||||
|
|||||||
@@ -8,11 +8,11 @@
|
|||||||
# ##################################################################
|
# ##################################################################
|
||||||
|
|
||||||
import json
|
import json
|
||||||
|
import uuid
|
||||||
|
|
||||||
from pgadmin.utils.route import BaseTestGenerator
|
from pgadmin.utils.route import BaseTestGenerator
|
||||||
from regression import test_utils as utils
|
from regression import test_utils as utils
|
||||||
from regression import test_server_dict
|
from regression import test_server_dict
|
||||||
from regression.test_setup import advanced_config_data
|
|
||||||
from . import utils as database_utils
|
from . import utils as database_utils
|
||||||
|
|
||||||
|
|
||||||
@@ -23,10 +23,9 @@ class DatabasesUpdateTestCase(BaseTestGenerator):
|
|||||||
('Check Databases Node', dict(url='/browser/database/obj/'))
|
('Check Databases Node', dict(url='/browser/database/obj/'))
|
||||||
]
|
]
|
||||||
|
|
||||||
@classmethod
|
def setUp(self):
|
||||||
def setUpClass(cls):
|
self.db_name = "test_db_put_%s" % str(uuid.uuid4())[1:8],
|
||||||
cls.db_name = "test_db_put"
|
self.db_id = utils.create_database(self.server, self.db_name)
|
||||||
cls.db_id = utils.create_database(cls.server, cls.db_name)
|
|
||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
""" This function will update the comments field of database."""
|
""" This function will update the comments field of database."""
|
||||||
@@ -39,10 +38,11 @@ class DatabasesUpdateTestCase(BaseTestGenerator):
|
|||||||
if db_con["info"] == "Database connected.":
|
if db_con["info"] == "Database connected.":
|
||||||
try:
|
try:
|
||||||
data = {
|
data = {
|
||||||
"comments": advanced_config_data["db_update_data"]["comment"],
|
"comments": "This is db update comment",
|
||||||
"id": db_id
|
"id": db_id
|
||||||
}
|
}
|
||||||
response = self.tester.put(self.url + str(utils.SERVER_GROUP) + '/' + str(
|
response = self.tester.put(
|
||||||
|
self.url + str(utils.SERVER_GROUP) + '/' + str(
|
||||||
server_id) + '/' +
|
server_id) + '/' +
|
||||||
str(db_id), data=json.dumps(data), follow_redirects=True)
|
str(db_id), data=json.dumps(data), follow_redirects=True)
|
||||||
self.assertEquals(response.status_code, 200)
|
self.assertEquals(response.status_code, 200)
|
||||||
@@ -55,16 +55,13 @@ class DatabasesUpdateTestCase(BaseTestGenerator):
|
|||||||
else:
|
else:
|
||||||
raise Exception("Error while updating database details.")
|
raise Exception("Error while updating database details.")
|
||||||
|
|
||||||
@classmethod
|
def tearDown(self):
|
||||||
def tearDownClass(cls):
|
|
||||||
"""
|
"""
|
||||||
This function delete the database from server added in SQLite and
|
This function delete the database from server added in SQLite.
|
||||||
clears the node_info_dict
|
|
||||||
"""
|
"""
|
||||||
connection = utils.get_db_connection(cls.server['db'],
|
connection = utils.get_db_connection(self.server['db'],
|
||||||
cls.server['username'],
|
self.server['username'],
|
||||||
cls.server['db_password'],
|
self.server['db_password'],
|
||||||
cls.server['host'],
|
self.server['host'],
|
||||||
cls.server['port'])
|
self.server['port'])
|
||||||
utils.drop_database(connection, cls.db_name)
|
utils.drop_database(connection, self.db_name)
|
||||||
utils.clear_node_info_dict()
|
|
||||||
|
|||||||
@@ -19,28 +19,103 @@ DATABASE_URL = '/browser/database/obj/'
|
|||||||
DATABASE_CONNECT_URL = 'browser/database/connect/'
|
DATABASE_CONNECT_URL = 'browser/database/connect/'
|
||||||
|
|
||||||
|
|
||||||
def get_db_data():
|
def get_db_data(db_owner):
|
||||||
"""This function returns the database details from json file"""
|
"""
|
||||||
data = None
|
This function returns the database details in dict format
|
||||||
if advanced_config_data['add_database_data'] is not None:
|
"""
|
||||||
adv_config_data = advanced_config_data['add_database_data']
|
data = {
|
||||||
data = {
|
"datconnlimit": -1,
|
||||||
"datacl": adv_config_data['privileges_acl'],
|
"datowner": db_owner,
|
||||||
"datconnlimit": adv_config_data['conn_limit'],
|
"deffuncacl": [
|
||||||
"datowner": adv_config_data['owner'],
|
{
|
||||||
"deffuncacl": adv_config_data['fun_acl'],
|
"grantee": db_owner,
|
||||||
"defseqacl": adv_config_data['seq_acl'],
|
"grantor": db_owner,
|
||||||
"deftblacl": adv_config_data['tbl_acl'],
|
"privileges": [
|
||||||
"deftypeacl": adv_config_data['type_acl'],
|
{
|
||||||
"encoding": adv_config_data['encoding'],
|
"privilege_type": "X",
|
||||||
"name": str(uuid.uuid4())[1:8],
|
"privilege": True,
|
||||||
"privileges": adv_config_data['privileges'],
|
"with_grant": False
|
||||||
"securities": adv_config_data['securities'],
|
}
|
||||||
"variables": adv_config_data['variables']
|
]
|
||||||
}
|
}
|
||||||
|
],
|
||||||
|
"defseqacl": [
|
||||||
|
{
|
||||||
|
"grantee": db_owner,
|
||||||
|
"grantor": db_owner,
|
||||||
|
"privileges": [
|
||||||
|
{
|
||||||
|
"privilege_type": "r",
|
||||||
|
"privilege": True,
|
||||||
|
"with_grant": False
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"privilege_type": "w",
|
||||||
|
"privilege": True,
|
||||||
|
"with_grant": False
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"privilege_type": "U",
|
||||||
|
"privilege": True,
|
||||||
|
"with_grant": False
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"deftblacl": [
|
||||||
|
{
|
||||||
|
"grantee": db_owner,
|
||||||
|
"grantor": db_owner,
|
||||||
|
"privileges": [
|
||||||
|
{
|
||||||
|
"privilege_type": "a",
|
||||||
|
"privilege": True,
|
||||||
|
"with_grant": True
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"privilege_type": "r",
|
||||||
|
"privilege": True,
|
||||||
|
"with_grant": False
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"deftypeacl": [
|
||||||
|
{
|
||||||
|
"grantee": db_owner,
|
||||||
|
"grantor": db_owner,
|
||||||
|
"privileges": [
|
||||||
|
{
|
||||||
|
"privilege_type": "U",
|
||||||
|
"privilege": True,
|
||||||
|
"with_grant": False
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"encoding": "UTF8",
|
||||||
|
"name": "db_add_%s" % str(uuid.uuid4())[1:4],
|
||||||
|
"privileges": [],
|
||||||
|
"securities": [],
|
||||||
|
"variables": []
|
||||||
|
}
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
|
||||||
|
def create_database(connection, db_name):
|
||||||
|
"""This function used to create database"""
|
||||||
|
try:
|
||||||
|
old_isolation_level = connection.isolation_level
|
||||||
|
connection.set_isolation_level(0)
|
||||||
|
pg_cursor = connection.cursor()
|
||||||
|
pg_cursor.execute("CREATE DATABASE %s" % db_name)
|
||||||
|
connection.set_isolation_level(old_isolation_level)
|
||||||
|
connection.commit()
|
||||||
|
return pg_cursor
|
||||||
|
except Exception as exception:
|
||||||
|
raise Exception("Error while creating database. %s" % exception)
|
||||||
|
|
||||||
|
|
||||||
def verify_database(self, server_group, server_id, db_id):
|
def verify_database(self, server_group, server_id, db_id):
|
||||||
"""
|
"""
|
||||||
This function verifies that database is exists and whether it connect
|
This function verifies that database is exists and whether it connect
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import json
|
|||||||
|
|
||||||
from pgadmin.utils.route import BaseTestGenerator
|
from pgadmin.utils.route import BaseTestGenerator
|
||||||
from regression import test_utils as utils
|
from regression import test_utils as utils
|
||||||
from . import utils as server_utils
|
|
||||||
|
|
||||||
|
|
||||||
class ServersAddTestCase(BaseTestGenerator):
|
class ServersAddTestCase(BaseTestGenerator):
|
||||||
@@ -22,8 +21,7 @@ class ServersAddTestCase(BaseTestGenerator):
|
|||||||
('Default Server Node url', dict(url='/browser/server/obj/'))
|
('Default Server Node url', dict(url='/browser/server/obj/'))
|
||||||
]
|
]
|
||||||
|
|
||||||
@classmethod
|
def setUp(self):
|
||||||
def setUpClass(cls):
|
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
@@ -33,14 +31,9 @@ class ServersAddTestCase(BaseTestGenerator):
|
|||||||
content_type='html/json')
|
content_type='html/json')
|
||||||
self.assertEquals(response.status_code, 200)
|
self.assertEquals(response.status_code, 200)
|
||||||
response_data = json.loads(response.data.decode('utf-8'))
|
response_data = json.loads(response.data.decode('utf-8'))
|
||||||
server_id = response_data['node']['_id']
|
self.server_id = response_data['node']['_id']
|
||||||
utils.write_node_info(int(server_id), "sid", self.server)
|
utils.write_node_info(int(self.server_id), "sid", self.server)
|
||||||
|
|
||||||
@classmethod
|
def tearDown(self):
|
||||||
def tearDownClass(cls):
|
"""This function delete the server from SQLite """
|
||||||
"""
|
utils.delete_server(self.server_id)
|
||||||
This function delete the server from SQLite & clears the node_info_dict
|
|
||||||
"""
|
|
||||||
server_id = server_utils.get_server_id()
|
|
||||||
utils.delete_server(server_id)
|
|
||||||
utils.clear_node_info_dict()
|
|
||||||
|
|||||||
@@ -6,12 +6,8 @@
|
|||||||
# This software is released under the PostgreSQL Licence
|
# This software is released under the PostgreSQL Licence
|
||||||
#
|
#
|
||||||
# ##################################################################
|
# ##################################################################
|
||||||
|
|
||||||
import json
|
|
||||||
|
|
||||||
from pgadmin.utils.route import BaseTestGenerator
|
from pgadmin.utils.route import BaseTestGenerator
|
||||||
from regression import test_utils as utils
|
from regression import test_utils as utils
|
||||||
from . import utils as server_utils
|
|
||||||
|
|
||||||
|
|
||||||
class ServerDeleteTestCase(BaseTestGenerator):
|
class ServerDeleteTestCase(BaseTestGenerator):
|
||||||
@@ -22,29 +18,19 @@ class ServerDeleteTestCase(BaseTestGenerator):
|
|||||||
('Default Server Node url', dict(url='/browser/server/obj/'))
|
('Default Server Node url', dict(url='/browser/server/obj/'))
|
||||||
]
|
]
|
||||||
|
|
||||||
@classmethod
|
def setUp(self):
|
||||||
def setUpClass(cls):
|
|
||||||
"""This function add the server to test the DELETE API"""
|
"""This function add the server to test the DELETE API"""
|
||||||
server_utils.add_server(cls.server)
|
self.server_id = utils.create_server(self.server)
|
||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
"""This function deletes the added server"""
|
"""This function deletes the added server"""
|
||||||
all_id = utils.get_node_info_dict()
|
|
||||||
servers_info = all_id["sid"]
|
|
||||||
url = self.url + str(utils.SERVER_GROUP) + "/"
|
url = self.url + str(utils.SERVER_GROUP) + "/"
|
||||||
|
if not self.server_id:
|
||||||
if len(servers_info) == 0:
|
|
||||||
raise Exception("No server to delete!!!")
|
raise Exception("No server to delete!!!")
|
||||||
|
|
||||||
# Call API to delete the servers
|
# Call API to delete the servers
|
||||||
server_id = list(servers_info[0].keys())[0]
|
response = self.tester.delete(url + str(self.server_id))
|
||||||
response = self.tester.delete(url + str(server_id))
|
|
||||||
self.assertEquals(response.status_code, 200)
|
self.assertEquals(response.status_code, 200)
|
||||||
response_data = json.loads(response.data.decode('utf-8'))
|
|
||||||
self.assertEquals(response_data['success'], 1)
|
|
||||||
|
|
||||||
@classmethod
|
def tearDown(self):
|
||||||
def tearDownClass(cls):
|
"""This function delete the server from SQLite """
|
||||||
"""This function calls the clear_node_info_dict() function to clears
|
utils.delete_server(self.server_id)
|
||||||
the node_info_dict"""
|
|
||||||
utils.clear_node_info_dict()
|
|
||||||
|
|||||||
@@ -10,7 +10,6 @@
|
|||||||
import json
|
import json
|
||||||
from pgadmin.utils.route import BaseTestGenerator
|
from pgadmin.utils.route import BaseTestGenerator
|
||||||
from regression import test_utils as utils
|
from regression import test_utils as utils
|
||||||
from . import utils as server_utils
|
|
||||||
|
|
||||||
|
|
||||||
class ServerUpdateTestCase(BaseTestGenerator):
|
class ServerUpdateTestCase(BaseTestGenerator):
|
||||||
@@ -21,37 +20,21 @@ class ServerUpdateTestCase(BaseTestGenerator):
|
|||||||
('Default Server Node url', dict(url='/browser/server/obj/'))
|
('Default Server Node url', dict(url='/browser/server/obj/'))
|
||||||
]
|
]
|
||||||
|
|
||||||
@classmethod
|
def setUp(self):
|
||||||
def setUpClass(cls):
|
|
||||||
"""This function add the server to test the PUT API"""
|
"""This function add the server to test the PUT API"""
|
||||||
server_utils.add_server(cls.server)
|
self.server_id = utils.create_server(self.server)
|
||||||
|
|
||||||
def runTest(self):
|
def runTest(self):
|
||||||
"""This function update the server details"""
|
"""This function update the server details"""
|
||||||
all_id = utils.get_node_info_dict()
|
if not self.server_id:
|
||||||
servers_info = all_id["sid"]
|
|
||||||
|
|
||||||
if len(servers_info) == 0:
|
|
||||||
raise Exception("No server to update.")
|
raise Exception("No server to update.")
|
||||||
|
data = {"comment": self.server['comment'], "id": self.server_id}
|
||||||
server_id = list(servers_info[0].keys())[0]
|
|
||||||
data = {
|
|
||||||
"comment":
|
|
||||||
server_utils.config_data['server_update_data'][0][
|
|
||||||
'comment'],
|
|
||||||
"id": server_id
|
|
||||||
}
|
|
||||||
put_response = self.tester.put(
|
put_response = self.tester.put(
|
||||||
self.url + str(utils.SERVER_GROUP) + '/' +
|
self.url + str(utils.SERVER_GROUP) + '/' +
|
||||||
str(server_id), data=json.dumps(data),
|
str(self.server_id), data=json.dumps(data),
|
||||||
content_type='html/json')
|
content_type='html/json')
|
||||||
self.assertEquals(put_response.status_code, 200)
|
self.assertEquals(put_response.status_code, 200)
|
||||||
|
|
||||||
@classmethod
|
def tearDown(self):
|
||||||
def tearDownClass(cls):
|
"""This function delete the server from SQLite"""
|
||||||
"""
|
utils.delete_server(self.server_id)
|
||||||
This function delete the server from SQLite & clears the node_info_dict
|
|
||||||
"""
|
|
||||||
server_id = server_utils.get_server_id()
|
|
||||||
utils.delete_server(server_id)
|
|
||||||
utils.clear_node_info_dict()
|
|
||||||
|
|||||||
@@ -19,17 +19,7 @@ from regression import test_utils as utils
|
|||||||
from regression.test_setup import config_data
|
from regression.test_setup import config_data
|
||||||
|
|
||||||
SERVER_URL = '/browser/server/obj/'
|
SERVER_URL = '/browser/server/obj/'
|
||||||
SERVER_CONNECT_URL = 'browser/server/connect/'
|
SERVER_CONNECT_URL = '/browser/server/connect/'
|
||||||
|
|
||||||
|
|
||||||
def get_server_id():
|
|
||||||
"""This function returns the server id from node_info_dict"""
|
|
||||||
|
|
||||||
server_id = 0
|
|
||||||
if "sid" in node_info_dict:
|
|
||||||
if node_info_dict['sid']:
|
|
||||||
server_id = list(node_info_dict['sid'][0].keys())[0]
|
|
||||||
return server_id
|
|
||||||
|
|
||||||
|
|
||||||
def connect_server(self, server_id):
|
def connect_server(self, server_id):
|
||||||
@@ -37,8 +27,8 @@ def connect_server(self, server_id):
|
|||||||
This function used to connect added server
|
This function used to connect added server
|
||||||
:param self: class object of server's test class
|
:param self: class object of server's test class
|
||||||
:type self: class
|
:type self: class
|
||||||
:param server_id: flag for db add test case
|
:param server_id: server id
|
||||||
:type server_id: bool
|
:type server_id: str
|
||||||
"""
|
"""
|
||||||
response = self.tester.post(SERVER_CONNECT_URL + str(utils.SERVER_GROUP) +
|
response = self.tester.post(SERVER_CONNECT_URL + str(utils.SERVER_GROUP) +
|
||||||
'/' + str(server_id),
|
'/' + str(server_id),
|
||||||
@@ -47,24 +37,3 @@ def connect_server(self, server_id):
|
|||||||
assert response.status_code == 200
|
assert response.status_code == 200
|
||||||
response_data = json.loads(response.data.decode('utf-8'))
|
response_data = json.loads(response.data.decode('utf-8'))
|
||||||
return response_data
|
return response_data
|
||||||
|
|
||||||
|
|
||||||
def add_server(server):
|
|
||||||
try:
|
|
||||||
conn = sqlite3.connect(config.SQLITE_PATH)
|
|
||||||
cur = conn.cursor()
|
|
||||||
server_details = (
|
|
||||||
1, utils.SERVER_GROUP, server['name'], server['host'],
|
|
||||||
server['port'], server['db'], server['username'],
|
|
||||||
server['role'], server['sslmode'],
|
|
||||||
server['comment'])
|
|
||||||
cur.execute(
|
|
||||||
'INSERT INTO server (user_id, servergroup_id, name, host, '
|
|
||||||
'port, maintenance_db, username, role, ssl_mode,'
|
|
||||||
' comment) VALUES (?,?,?,?,?,?,?,?,?,?)', server_details)
|
|
||||||
server_id = cur.lastrowid
|
|
||||||
# Add server info to node_info_dict
|
|
||||||
utils.write_node_info(int(server_id), "sid", server)
|
|
||||||
conn.commit()
|
|
||||||
except Exception as err:
|
|
||||||
raise Exception(err)
|
|
||||||
|
|||||||
@@ -28,5 +28,7 @@ node_info_dict = {
|
|||||||
global test_server_dict
|
global test_server_dict
|
||||||
test_server_dict = {
|
test_server_dict = {
|
||||||
"server": [],
|
"server": [],
|
||||||
"database": []
|
"database": [],
|
||||||
|
"tablespace": [],
|
||||||
|
"role": []
|
||||||
}
|
}
|
||||||
@@ -33,11 +33,12 @@ if sys.path[0] != root:
|
|||||||
from pgadmin import create_app
|
from pgadmin import create_app
|
||||||
import config
|
import config
|
||||||
import test_setup
|
import test_setup
|
||||||
|
import regression
|
||||||
|
|
||||||
# Execute setup.py if test SQLite database doesn't exist.
|
# Execute setup.py if test SQLite database doesn't exist.
|
||||||
if os.path.isfile(config.TEST_SQLITE_PATH):
|
if os.path.isfile(config.TEST_SQLITE_PATH):
|
||||||
print("The configuration database already exists at '%s'. "
|
print("The configuration database already existed at '%s'. "
|
||||||
"Please remove the database and re-run the test suite." %
|
"Please remove the database and again run the test suite." %
|
||||||
config.TEST_SQLITE_PATH)
|
config.TEST_SQLITE_PATH)
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
else:
|
else:
|
||||||
@@ -151,6 +152,26 @@ def sig_handler(signo, frame):
|
|||||||
test_utils.drop_objects()
|
test_utils.drop_objects()
|
||||||
|
|
||||||
|
|
||||||
|
def get_tests_result(tests):
|
||||||
|
"""This function returns the total ran and total failed test cases count"""
|
||||||
|
total_ran = tests.testsRun
|
||||||
|
failed_cases_result = []
|
||||||
|
if total_ran:
|
||||||
|
if tests.failures:
|
||||||
|
for failed_case in tests.failures:
|
||||||
|
class_name = str(failed_case[0]).split('.')[-1].split()[0].\
|
||||||
|
strip(')')
|
||||||
|
failed_cases_result.append(class_name)
|
||||||
|
if tests.errors:
|
||||||
|
for error_case in tests.errors:
|
||||||
|
class_name = str(error_case[0]).split('.')[-1].split()[0].\
|
||||||
|
strip(')')
|
||||||
|
if class_name not in failed_cases_result:
|
||||||
|
failed_cases_result.append(class_name)
|
||||||
|
|
||||||
|
return total_ran, failed_cases_result
|
||||||
|
|
||||||
|
|
||||||
class StreamToLogger(object):
|
class StreamToLogger(object):
|
||||||
def __init__(self, logger, log_level=logging.INFO):
|
def __init__(self, logger, log_level=logging.INFO):
|
||||||
self.terminal = sys.stderr
|
self.terminal = sys.stderr
|
||||||
@@ -176,6 +197,7 @@ class StreamToLogger(object):
|
|||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
test_result = dict()
|
||||||
# Register cleanup function to cleanup on exit
|
# Register cleanup function to cleanup on exit
|
||||||
atexit.register(test_utils.drop_objects)
|
atexit.register(test_utils.drop_objects)
|
||||||
# Set signal handler for cleanup
|
# Set signal handler for cleanup
|
||||||
@@ -203,7 +225,9 @@ if __name__ == '__main__':
|
|||||||
for server in servers_info:
|
for server in servers_info:
|
||||||
print("\n=============Running the test cases for '%s'============="
|
print("\n=============Running the test cases for '%s'============="
|
||||||
% server['name'], file=sys.stderr)
|
% server['name'], file=sys.stderr)
|
||||||
|
|
||||||
test_utils.create_test_server(server)
|
test_utils.create_test_server(server)
|
||||||
|
|
||||||
# Login the test client
|
# Login the test client
|
||||||
test_utils.login_tester_account(test_client)
|
test_utils.login_tester_account(test_client)
|
||||||
|
|
||||||
@@ -211,11 +235,28 @@ if __name__ == '__main__':
|
|||||||
tests = unittest.TextTestRunner(stream=sys.stderr,
|
tests = unittest.TextTestRunner(stream=sys.stderr,
|
||||||
descriptions=True,
|
descriptions=True,
|
||||||
verbosity=2).run(suite)
|
verbosity=2).run(suite)
|
||||||
|
|
||||||
|
ran_tests, failed_cases = get_tests_result(tests)
|
||||||
|
test_result[server['name']] = [ran_tests, failed_cases]
|
||||||
|
|
||||||
# Logout the test client
|
# Logout the test client
|
||||||
test_utils.logout_tester_account(test_client)
|
test_utils.logout_tester_account(test_client)
|
||||||
|
|
||||||
test_utils.delete_test_server(server)
|
test_utils.delete_test_server()
|
||||||
except SystemExit:
|
except SystemExit:
|
||||||
test_utils.drop_objects()
|
test_utils.drop_objects()
|
||||||
|
|
||||||
print("Please check output in file: %s/regression.log " % CURRENT_PATH)
|
print("\nTest Result Summary", file=sys.stderr)
|
||||||
|
print("============================", file=sys.stderr)
|
||||||
|
for server_res in test_result:
|
||||||
|
failed_cases = "\n\t".join(test_result[server_res][1])
|
||||||
|
total_failed = len(test_result[server_res][1])
|
||||||
|
total_passed = int(test_result[server_res][0]) - total_failed
|
||||||
|
|
||||||
|
print("%s: %s test%s passed, %s test%s failed %s%s" %
|
||||||
|
(server_res, total_passed, (total_passed != 1 and "s" or ""),
|
||||||
|
total_failed, (total_failed != 1 and "s" or ""),
|
||||||
|
(total_failed != 0 and ":\n\t" or ""), failed_cases), file=sys.stderr)
|
||||||
|
print("============================", file=sys.stderr)
|
||||||
|
|
||||||
|
print("\nPlease check output in file: %s/regression.log " % CURRENT_PATH)
|
||||||
|
|||||||
@@ -10,18 +10,24 @@ from __future__ import print_function
|
|||||||
|
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import uuid
|
||||||
import psycopg2
|
import psycopg2
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
|
||||||
|
import logging
|
||||||
|
|
||||||
import config
|
import config
|
||||||
|
|
||||||
import test_setup
|
import test_setup
|
||||||
import regression
|
import regression
|
||||||
|
|
||||||
SERVER_GROUP = test_setup.config_data['server_group']
|
SERVER_GROUP = test_setup.config_data['server_group']
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
file_name = os.path.basename(__file__)
|
||||||
|
|
||||||
|
|
||||||
def get_db_connection(db, username, password, host, port):
|
def get_db_connection(db, username, password, host, port):
|
||||||
"""This function retruns the connection object of psycopg"""
|
"""This function returns the connection object of psycopg"""
|
||||||
connection = psycopg2.connect(database=db,
|
connection = psycopg2.connect(database=db,
|
||||||
user=username,
|
user=username,
|
||||||
password=password,
|
password=password,
|
||||||
@@ -71,7 +77,7 @@ def get_config_data():
|
|||||||
server_data = []
|
server_data = []
|
||||||
for srv in test_setup.config_data['server_credentials']:
|
for srv in test_setup.config_data['server_credentials']:
|
||||||
data = {"name": srv['name'],
|
data = {"name": srv['name'],
|
||||||
"comment": "",
|
"comment": srv['comment'],
|
||||||
"host": srv['host'],
|
"host": srv['host'],
|
||||||
"port": srv['db_port'],
|
"port": srv['db_port'],
|
||||||
"db": srv['maintenance_db'],
|
"db": srv['maintenance_db'],
|
||||||
@@ -142,19 +148,22 @@ def create_database(server, db_name):
|
|||||||
raise Exception("Error while creating database. %s" % exception)
|
raise Exception("Error while creating database. %s" % exception)
|
||||||
|
|
||||||
|
|
||||||
def drop_database(connection, db_name):
|
def drop_database(connection, database_name):
|
||||||
"""This function used to drop the database"""
|
"""This function used to drop the database"""
|
||||||
try:
|
|
||||||
|
pg_cursor = connection.cursor()
|
||||||
|
pg_cursor.execute("SELECT * FROM pg_database db WHERE db.datname='%s'"
|
||||||
|
% database_name)
|
||||||
|
if pg_cursor.fetchall():
|
||||||
|
# Release pid if any process using database
|
||||||
|
pg_cursor.execute("select pg_terminate_backend(pid) from"
|
||||||
|
" pg_stat_activity where datname='%s'" %
|
||||||
|
database_name)
|
||||||
old_isolation_level = connection.isolation_level
|
old_isolation_level = connection.isolation_level
|
||||||
connection.set_isolation_level(0)
|
connection.set_isolation_level(0)
|
||||||
pg_cursor = connection.cursor()
|
pg_cursor.execute('''DROP DATABASE "%s"''' % database_name)
|
||||||
pg_cursor.execute('''DROP DATABASE "%s"''' % db_name)
|
|
||||||
connection.set_isolation_level(old_isolation_level)
|
connection.set_isolation_level(old_isolation_level)
|
||||||
connection.commit()
|
connection.commit()
|
||||||
connection.close()
|
|
||||||
except Exception as exception:
|
|
||||||
raise Exception("Exception while dropping the database. %s" %
|
|
||||||
exception)
|
|
||||||
|
|
||||||
|
|
||||||
def create_server(server):
|
def create_server(server):
|
||||||
@@ -181,116 +190,198 @@ def delete_server(sid):
|
|||||||
try:
|
try:
|
||||||
conn = sqlite3.connect(config.SQLITE_PATH)
|
conn = sqlite3.connect(config.SQLITE_PATH)
|
||||||
cur = conn.cursor()
|
cur = conn.cursor()
|
||||||
servers = cur.execute('SELECT * FROM server WHERE id=%s' % sid)
|
server_objects = cur.execute('SELECT * FROM server WHERE id=%s' % sid)
|
||||||
servers_count = len(servers.fetchall())
|
servers_count = len(server_objects.fetchall())
|
||||||
if servers_count:
|
if servers_count:
|
||||||
cur.execute('DELETE FROM server WHERE id=%s' % sid)
|
cur.execute('DELETE FROM server WHERE id=%s' % sid)
|
||||||
conn.commit()
|
conn.commit()
|
||||||
else:
|
conn.close()
|
||||||
print("No servers found to delete.", file=sys.stderr)
|
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
raise Exception("Error while deleting server %s" % err)
|
raise Exception("Error while deleting server %s" % err)
|
||||||
|
|
||||||
|
|
||||||
def create_test_server(server):
|
def create_tablespace(server, test_tablespace_name):
|
||||||
"""
|
try:
|
||||||
This function create the test server which will act as parent server,
|
|
||||||
the other node will add under this server
|
|
||||||
:param server: server details
|
|
||||||
:type server: dict
|
|
||||||
:return: None
|
|
||||||
"""
|
|
||||||
# Create the server
|
|
||||||
server_id = create_server(server)
|
|
||||||
|
|
||||||
# Create test database
|
|
||||||
test_db_name = "test_db"
|
|
||||||
db_id = create_database(server, test_db_name)
|
|
||||||
|
|
||||||
# Add server info to test_server_dict
|
|
||||||
regression.test_server_dict["server"].append({"server_id": server_id,
|
|
||||||
"server": server})
|
|
||||||
regression.test_server_dict["database"].append({"server_id": server_id,
|
|
||||||
"db_id": db_id,
|
|
||||||
"db_name": test_db_name})
|
|
||||||
|
|
||||||
|
|
||||||
def delete_test_server(server):
|
|
||||||
test_server_dict = regression.test_server_dict
|
|
||||||
if test_server_dict:
|
|
||||||
connection = get_db_connection(server['db'],
|
connection = get_db_connection(server['db'],
|
||||||
server['username'],
|
server['username'],
|
||||||
server['db_password'],
|
server['db_password'],
|
||||||
server['host'],
|
server['host'],
|
||||||
server['port'])
|
server['port'])
|
||||||
db_name = test_server_dict["database"][0]["db_name"]
|
old_isolation_level = connection.isolation_level
|
||||||
drop_database(connection, db_name)
|
connection.set_isolation_level(0)
|
||||||
# Delete the server
|
pg_cursor = connection.cursor()
|
||||||
server_id = test_server_dict['server'][0]["server_id"]
|
pg_cursor.execute("CREATE TABLESPACE %s LOCATION '%s'" %
|
||||||
conn = sqlite3.connect(config.SQLITE_PATH)
|
(test_tablespace_name, server['tablespace_path']))
|
||||||
cur = conn.cursor()
|
connection.set_isolation_level(old_isolation_level)
|
||||||
servers = cur.execute('SELECT * FROM server WHERE id=%s' % server_id)
|
connection.commit()
|
||||||
servers_count = len(servers.fetchall())
|
|
||||||
if servers_count:
|
|
||||||
cur.execute('DELETE FROM server WHERE id=%s' % server_id)
|
|
||||||
conn.commit()
|
|
||||||
conn.close()
|
|
||||||
server_dict = regression.test_server_dict["server"]
|
|
||||||
|
|
||||||
# Pop the server from dict if it's deleted
|
# Get 'oid' from newly created tablespace
|
||||||
server_dict = [server_dict.pop(server_dict.index(item))
|
pg_cursor.execute(
|
||||||
for item in server_dict
|
"SELECT ts.oid from pg_tablespace ts WHERE ts.spcname='%s'" %
|
||||||
if str(server_id) == str(item["server_id"])]
|
test_tablespace_name)
|
||||||
|
oid = pg_cursor.fetchone()
|
||||||
|
tspc_id = ''
|
||||||
|
if oid:
|
||||||
|
tspc_id = oid[0]
|
||||||
|
connection.close()
|
||||||
|
return tspc_id
|
||||||
|
except Exception as exception:
|
||||||
|
raise Exception("Error while creating tablespace. %s" % exception)
|
||||||
|
|
||||||
# Pop the db from dict if it's deleted
|
|
||||||
db_dict = regression.test_server_dict["database"]
|
def delete_tablespace(connection, test_tablespace_name):
|
||||||
db_dict = [db_dict.pop(db_dict.index(item)) for item in db_dict
|
try:
|
||||||
if server_id == item["server_id"]]
|
pg_cursor = connection.cursor()
|
||||||
|
pg_cursor.execute("SELECT * FROM pg_tablespace ts WHERE"
|
||||||
|
" ts.spcname='%s'" % test_tablespace_name)
|
||||||
|
tablespace_count = len(pg_cursor.fetchall())
|
||||||
|
if tablespace_count:
|
||||||
|
old_isolation_level = connection.isolation_level
|
||||||
|
connection.set_isolation_level(0)
|
||||||
|
pg_cursor.execute("DROP TABLESPACE %s" % test_tablespace_name)
|
||||||
|
connection.set_isolation_level(old_isolation_level)
|
||||||
|
connection.commit()
|
||||||
|
connection.close()
|
||||||
|
except Exception as exception:
|
||||||
|
exception = "%s: line:%s %s" % (
|
||||||
|
file_name, sys.exc_traceback.tb_lineno, exception)
|
||||||
|
print(exception, file=sys.stderr)
|
||||||
|
raise Exception(exception)
|
||||||
|
|
||||||
|
|
||||||
|
def create_test_server(server_info):
|
||||||
|
"""
|
||||||
|
This function create the test server which will act as parent server,
|
||||||
|
the other node will add under this server
|
||||||
|
:param server_info: server details
|
||||||
|
:type server_info: dict
|
||||||
|
:return: None
|
||||||
|
"""
|
||||||
|
# Create the server
|
||||||
|
srv_id = create_server(server_info)
|
||||||
|
|
||||||
|
# Create test database
|
||||||
|
test_db_name = "test_db_%s" % str(uuid.uuid4())[1:8]
|
||||||
|
db_id = create_database(server_info, test_db_name)
|
||||||
|
|
||||||
|
# TODO: Need to decide about test tablespace creation
|
||||||
|
# Create tablespace
|
||||||
|
# test_tablespace_name = "test_tablespace"
|
||||||
|
# tablespace_id = create_tablespace(server, test_tablespace_name)
|
||||||
|
|
||||||
|
# Add server info to test_server_dict
|
||||||
|
regression.test_server_dict["server"].append({"server_id": srv_id,
|
||||||
|
"server": server_info})
|
||||||
|
regression.test_server_dict["database"].append({"server_id": srv_id,
|
||||||
|
"db_id": db_id,
|
||||||
|
"db_name": test_db_name})
|
||||||
|
|
||||||
|
|
||||||
|
def delete_test_server():
|
||||||
|
test_server_dict = regression.test_server_dict
|
||||||
|
test_servers = test_server_dict["server"]
|
||||||
|
test_databases = test_server_dict["database"]
|
||||||
|
test_table_spaces = test_server_dict["tablespace"]
|
||||||
|
try:
|
||||||
|
for test_server in test_servers:
|
||||||
|
srv_id = test_server["server_id"]
|
||||||
|
servers_dict = test_server["server"]
|
||||||
|
for database in test_databases:
|
||||||
|
connection = get_db_connection(servers_dict['db'],
|
||||||
|
servers_dict['username'],
|
||||||
|
servers_dict['db_password'],
|
||||||
|
servers_dict['host'],
|
||||||
|
servers_dict['port'])
|
||||||
|
database_name = database["db_name"]
|
||||||
|
# Drop database
|
||||||
|
drop_database(connection, database_name)
|
||||||
|
|
||||||
|
# Delete server
|
||||||
|
delete_server(srv_id)
|
||||||
|
except Exception as exception:
|
||||||
|
exception = "Exception: %s: line:%s %s" % (
|
||||||
|
file_name, sys.exc_traceback.tb_lineno, exception)
|
||||||
|
print(exception)
|
||||||
|
logger.exception(exception)
|
||||||
|
|
||||||
|
# Clear test_server_dict
|
||||||
|
for item in regression.test_server_dict:
|
||||||
|
del regression.test_server_dict[item][:]
|
||||||
|
|
||||||
|
|
||||||
|
def remove_db_file():
|
||||||
|
if os.path.isfile(config.SQLITE_PATH):
|
||||||
|
os.remove(config.SQLITE_PATH)
|
||||||
|
|
||||||
|
|
||||||
def drop_objects():
|
def drop_objects():
|
||||||
"""This function use to cleanup the created the objects(servers, databases,
|
"""This function use to cleanup the created the objects(servers, databases,
|
||||||
schemas etc) during the test suite run"""
|
schemas etc) during the test suite run"""
|
||||||
|
try:
|
||||||
|
conn = sqlite3.connect(config.SQLITE_PATH)
|
||||||
|
cur = conn.cursor()
|
||||||
|
servers = cur.execute('SELECT name, host, port, maintenance_db,'
|
||||||
|
' username, id FROM server')
|
||||||
|
if servers:
|
||||||
|
all_servers = servers.fetchall()
|
||||||
|
for server_info in all_servers:
|
||||||
|
name = server_info[0]
|
||||||
|
host = server_info[1]
|
||||||
|
db_port = server_info[2]
|
||||||
|
|
||||||
# Cleanup in node_info_dict
|
server_id = server_info[5]
|
||||||
servers_info = regression.node_info_dict['sid']
|
config_servers = test_setup.config_data['server_credentials']
|
||||||
if servers_info:
|
db_password = ''
|
||||||
for server in servers_info:
|
# Get the db password from config file for appropriate server
|
||||||
server_id = server.keys()[0]
|
for srv in config_servers:
|
||||||
server = server.values()[0]
|
if (srv['name'], srv['host'], srv['db_port']) == \
|
||||||
if regression.node_info_dict['did']:
|
(name, host, db_port):
|
||||||
db_conn = get_db_connection(server['db'],
|
db_password = srv['db_password']
|
||||||
server['username'],
|
if db_password:
|
||||||
server['db_password'],
|
# Drop database
|
||||||
server['host'],
|
connection = get_db_connection(server_info[3],
|
||||||
server['port'])
|
server_info[4],
|
||||||
db_dict = regression.node_info_dict['did'][0]
|
db_password,
|
||||||
if int(server_id) in db_dict:
|
server_info[1],
|
||||||
db_name = db_dict[int(server_id)]["db_name"]
|
server_info[2])
|
||||||
drop_database(db_conn, db_name)
|
|
||||||
delete_server(server_id)
|
|
||||||
|
|
||||||
# Cleanup in test_server_dict
|
pg_cursor = connection.cursor()
|
||||||
servers = regression.test_server_dict["server"]
|
pg_cursor.execute("SELECT db.datname FROM pg_database db")
|
||||||
if servers:
|
databases = pg_cursor.fetchall()
|
||||||
for server in servers:
|
if databases:
|
||||||
server_id = server["server_id"]
|
for db in databases:
|
||||||
server = server["server"]
|
# Do not drop the default databases
|
||||||
if regression.test_server_dict["database"]:
|
if db[0] not in ["postgres", "template1",
|
||||||
db_info = regression.test_server_dict["database"]
|
"template0"]:
|
||||||
db_dict = [item for item in db_info
|
drop_database(connection, db[0])
|
||||||
if server_id == item["server_id"]]
|
connection.close()
|
||||||
if db_dict:
|
|
||||||
for db in db_dict:
|
|
||||||
db_name = db["db_name"]
|
|
||||||
db_conn = get_db_connection(server['db'],
|
|
||||||
server['username'],
|
|
||||||
server['db_password'],
|
|
||||||
server['host'],
|
|
||||||
server['port'])
|
|
||||||
drop_database(db_conn, db_name)
|
|
||||||
delete_server(server_id)
|
|
||||||
|
|
||||||
# Remove the test SQLite database
|
# Delete tablespace
|
||||||
if os.path.isfile(config.SQLITE_PATH):
|
connection = get_db_connection(server_info[3],
|
||||||
os.remove(config.SQLITE_PATH)
|
server_info[4],
|
||||||
|
db_password,
|
||||||
|
server_info[1],
|
||||||
|
server_info[2])
|
||||||
|
pg_cursor = connection.cursor()
|
||||||
|
pg_cursor.execute("SELECT * FROM pg_tablespace")
|
||||||
|
table_spaces = pg_cursor.fetchall()
|
||||||
|
if table_spaces:
|
||||||
|
for tablespace in table_spaces:
|
||||||
|
# Do not delete default table spaces
|
||||||
|
if tablespace[0] not in ["pg_default",
|
||||||
|
"pg_global"]:
|
||||||
|
tablespace_name = tablespace[0]
|
||||||
|
# Delete tablespace
|
||||||
|
delete_tablespace(connection, tablespace_name)
|
||||||
|
|
||||||
|
# Delete server
|
||||||
|
delete_server(server_id)
|
||||||
|
conn.close()
|
||||||
|
# Remove SQLite db file
|
||||||
|
remove_db_file()
|
||||||
|
except Exception as exception:
|
||||||
|
remove_db_file()
|
||||||
|
exception = "Exception: %s: line:%s %s" % (
|
||||||
|
file_name, sys.exc_traceback.tb_lineno, exception)
|
||||||
|
print(exception)
|
||||||
|
logger.exception(exception)
|
||||||
|
|||||||
Reference in New Issue
Block a user