Skip to content

Commit e93dba7

Browse files
committed
get rid of pg_ctl wrapper, more tests
1 parent 9bf92cf commit e93dba7

File tree

2 files changed

+57
-43
lines changed

2 files changed

+57
-43
lines changed

testgres/testgres.py

Lines changed: 48 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -499,21 +499,6 @@ def append_conf(self, filename, string):
499499

500500
return self
501501

502-
def pg_ctl(self, command, params={}, command_options=[]):
503-
"""
504-
Runs pg_ctl with specified params. This function is a workhorse
505-
for start(), stop(), reload() and status() functions.
506-
"""
507-
508-
_params = [command]
509-
510-
for key, value in six.iteritems(params):
511-
_params.append(key)
512-
if value:
513-
_params.append(value)
514-
515-
_execute_utility("pg_ctl", _params, self.utils_logname)
516-
517502
def status(self):
518503
"""
519504
Check this node's status.
@@ -523,8 +508,8 @@ def status(self):
523508
"""
524509

525510
try:
526-
_params = {"-D": self.data_dir}
527-
self.pg_ctl("status", _params)
511+
_params = ["status", "-D", self.data_dir]
512+
_execute_utility("pg_ctl", _params, self.utils_logname)
528513
return NodeStatus.Running
529514

530515
except ExecUtilException as e:
@@ -568,10 +553,13 @@ def get_control_data(self):
568553

569554
return out_data
570555

571-
def start(self, params={}):
556+
def start(self, params=[]):
572557
"""
573558
Start this node using pg_ctl.
574559
560+
Args:
561+
params: additional arguments for _execute_utility().
562+
575563
Returns:
576564
This instance of PostgresNode.
577565
"""
@@ -594,15 +582,16 @@ def start(self, params={}):
594582
# choose recovery_filename
595583
recovery_filename = os.path.join(self.data_dir, "recovery.conf")
596584

597-
_params = {
598-
"-D": self.data_dir,
599-
"-w": None,
600-
"-l": log_filename,
601-
}
602-
_params.update(params)
585+
_params = [
586+
"start",
587+
"-D{}".format(self.data_dir),
588+
"-l{}".format(log_filename),
589+
"-w"
590+
] + params
603591

604592
try:
605-
self.pg_ctl("start", _params)
593+
_execute_utility("pg_ctl", _params, self.utils_logname)
594+
606595
except ExecUtilException as e:
607596
def print_node_file(node_file):
608597
if os.path.exists(node_file):
@@ -630,48 +619,53 @@ def print_node_file(node_file):
630619

631620
return self
632621

633-
def stop(self, params={}):
622+
def stop(self, params=[]):
634623
"""
635624
Stop this node using pg_ctl.
636625
626+
Args:
627+
params: additional arguments for _execute_utility().
628+
637629
Returns:
638630
This instance of PostgresNode.
639631
"""
640632

641-
_params = {"-D": self.data_dir, "-w": None}
642-
_params.update(params)
643-
self.pg_ctl("stop", _params)
633+
_params = ["stop", "-D", self.data_dir, "-w"] + params
634+
_execute_utility("pg_ctl", _params, self.utils_logname)
644635

645636
if self.logger:
646637
self.logger.stop()
647638

648639
return self
649640

650-
def restart(self, params={}):
641+
def restart(self, params=[]):
651642
"""
652643
Restart this node using pg_ctl.
653644
645+
Args:
646+
params: additional arguments for _execute_utility().
647+
654648
Returns:
655649
This instance of PostgresNode.
656650
"""
657651

658-
_params = {"-D": self.data_dir, "-w": None}
659-
_params.update(params)
660-
self.pg_ctl("restart", _params)
652+
_params = ["restart", "-D", self.data_dir, "-w"] + params
653+
_execute_utility("pg_ctl", _params,
654+
self.utils_logname,
655+
write_to_pipe=False)
661656

662657
return self
663658

664-
def reload(self, params={}):
659+
def reload(self, params=[]):
665660
"""
666661
Reload config files using pg_ctl.
667662
668663
Returns:
669664
This instance of PostgresNode.
670665
"""
671666

672-
_params = {"-D": self.data_dir}
673-
_params.update(params)
674-
self.pg_ctl("reload", _params)
667+
_params = ["reload", "-D", self.data_dir, "-w"] + params
668+
_execute_utility("pg_ctl", _params, self.utils_logname)
675669

676670
return self
677671

@@ -958,7 +952,7 @@ def call_initdb(_data_dir):
958952
raise InitNodeException(e.message)
959953

960954

961-
def _execute_utility(util, args, logfile):
955+
def _execute_utility(util, args, logfile, write_to_pipe=True):
962956
"""
963957
Execute utility (pg_ctl, pg_dump etc) using get_bin_path().
964958
@@ -972,14 +966,25 @@ def _execute_utility(util, args, logfile):
972966
"""
973967

974968
with open(logfile, "a") as file_out:
975-
# run pg_ctl
969+
stdout_file = subprocess.DEVNULL
970+
stderr_file = subprocess.DEVNULL
971+
972+
if write_to_pipe:
973+
stdout_file = subprocess.PIPE
974+
stderr_file = subprocess.STDOUT
975+
976+
# run utility
976977
process = subprocess.Popen([get_bin_path(util)] + args,
977-
stdout=subprocess.PIPE,
978-
stderr=subprocess.STDOUT)
978+
stdout=stdout_file,
979+
stderr=stderr_file)
979980

980-
# get result of pg_ctl
981+
# get result
981982
out, _ = process.communicate()
982-
out = out.decode('utf-8')
983+
984+
if out:
985+
out = out.decode('utf-8')
986+
else:
987+
out = ""
983988

984989
# write new log entry
985990
file_out.write(''.join(map(lambda x: str(x) + ' ', [util] + args)))

tests/test_simple.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,15 @@ def test_uninitialized_start(self):
4343

4444
self.assertTrue(got_exception)
4545

46+
def test_restart(self):
47+
with get_new_node('test') as node:
48+
node.init().start()
49+
res = node.execute('postgres', 'select 1')
50+
self.assertEqual(res, [(1, )])
51+
node.restart()
52+
res = node.execute('postgres', 'select 2')
53+
self.assertEqual(res, [(2, )])
54+
4655
def test_status(self):
4756
condition_triggered = False
4857
if NodeStatus.Running:

0 commit comments

Comments
 (0)