summaryrefslogtreecommitdiff
path: root/tests/common/pppd_process.py
diff options
context:
space:
mode:
authorxebd <xeb@mail.ru>2022-09-12 10:56:47 +0300
committerGitHub <noreply@github.com>2022-09-12 10:56:47 +0300
commit28fe4de9441aa9d0c42c010e8eef5b1a19122c9d (patch)
treeecefcafbeb9c9610ed3cf8c30a238b9168bba3bb /tests/common/pppd_process.py
parent25c72614bf8106b0e4f71e2bce70514b03858463 (diff)
parent127b1de95923fccdfdc892c20f931d364e099f4b (diff)
downloadaccel-ppp-28fe4de9441aa9d0c42c010e8eef5b1a19122c9d.tar.gz
accel-ppp-28fe4de9441aa9d0c42c010e8eef5b1a19122c9d.zip
Merge pull request #61 from svlobanov/tests2
add tests and ci workflow for running tests
Diffstat (limited to 'tests/common/pppd_process.py')
-rw-r--r--tests/common/pppd_process.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/tests/common/pppd_process.py b/tests/common/pppd_process.py
new file mode 100644
index 00000000..45844400
--- /dev/null
+++ b/tests/common/pppd_process.py
@@ -0,0 +1,43 @@
+from subprocess import Popen, PIPE
+from threading import Thread
+
+
+def pppd_thread_func(pppd_control):
+ process = pppd_control["process"]
+ print("pppd_thread_func: before communicate")
+ (out, err) = process.communicate()
+ print("pppd_thread_func: after communicate out=" + str(out) + " err=" + str(err))
+ process.wait()
+ print("pppd_thread_func: after wait")
+
+
+def start(netns, pppd, args):
+ print("pppd_start: begin")
+ print("pppd_start: args=" + str(args))
+ pppd_process = Popen(
+ ["ip", "netns", "exec", netns] + [pppd] + args, stdout=PIPE, stderr=PIPE
+ )
+ print("pppd_start: pppd_process=" + str(pppd_process))
+ pppd_control = {"process": pppd_process}
+ pppd_thread = Thread(
+ target=pppd_thread_func,
+ args=[pppd_control],
+ )
+ pppd_thread.start()
+
+ is_started = True if pppd_process.poll() is None else False
+
+ return (is_started, pppd_thread, pppd_control)
+
+
+def end(pppd_thread, pppd_control):
+ print("pppd_end: begin")
+ if pppd_control["process"].poll() is not None: # already terminated
+ print("pppd_end: already terminated. nothing to do")
+ pppd_thread.join()
+ return
+
+ print("pppd_end: kill process: " + str(pppd_control["process"]))
+ pppd_control["process"].kill() # kill -9
+ pppd_thread.join() # wait until thread is finished
+ print("pppd_end: end")