diff mbox series

[lttng-tools,1/2] Test: add file based synchronization point for python test app

Message ID 20170828215004.2426-1-jonathan.rajotte-julien@efficios.com
State Accepted, archived
Delegated to: Jérémie Galarneau
Headers show
Series [lttng-tools,1/2] Test: add file based synchronization point for python test app | expand

Commit Message

Jonathan Rajotte Aug. 28, 2017, 9:50 p.m. UTC
test.py is responsible for the cleanup of the "ready" file while the
cleanup of the "go" file is left to the external controller.

Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien at efficios.com>
---
 tests/regression/ust/python-logging/test.py        | 59 ++++++++++++++++------
 .../ust/python-logging/test_python_logging.in      | 11 +++-
 2 files changed, 53 insertions(+), 17 deletions(-)

Comments

Jérémie Galarneau Nov. 14, 2017, 12:26 a.m. UTC | #1
Merged, thanks!

Jérémie

On 28 August 2017 at 17:50, Jonathan Rajotte
<jonathan.rajotte-julien at efficios.com> wrote:
> test.py is responsible for the cleanup of the "ready" file while the
> cleanup of the "go" file is left to the external controller.
>
> Signed-off-by: Jonathan Rajotte <jonathan.rajotte-julien at efficios.com>
> ---
>  tests/regression/ust/python-logging/test.py        | 59 ++++++++++++++++------
>  .../ust/python-logging/test_python_logging.in      | 11 +++-
>  2 files changed, 53 insertions(+), 17 deletions(-)
>
> diff --git a/tests/regression/ust/python-logging/test.py b/tests/regression/ust/python-logging/test.py
> index d08e623c..cd6b724c 100644
> --- a/tests/regression/ust/python-logging/test.py
> +++ b/tests/regression/ust/python-logging/test.py
> @@ -18,6 +18,8 @@ from __future__ import unicode_literals, print_function
>  import logging
>  import time
>  import sys
> +import argparse
> +import os
>
>
>  def _perror(msg):
> @@ -37,23 +39,41 @@ def _main():
>
>      logging.basicConfig()
>
> -    try:
> -        nr_iter = int(sys.argv[1])
> -        wait_time = float(sys.argv[2])
> -        fire_debug_ev = False
> -        fire_second_ev = False
> -    except (IndexError) as e:
> -        _perror('missing arguments: {}'.format(e))
> -    except (ValueError) as e:
> -        _perror('invalid arguments: {}'.format(e))
> +    parser = argparse.ArgumentParser()
> +    parser.add_argument('-n', '--nr-iter', required=True)
> +    parser.add_argument('-s', '--wait', required=True)
> +    parser.add_argument('-d', '--fire-debug-event', action="store_true")
> +    parser.add_argument('-e', '--fire-second-event', action="store_true")
> +    parser.add_argument('-r', '--ready-file')
> +    parser.add_argument('-g', '--go-file')
> +    args = parser.parse_args()
>
> -    try:
> -        if len(sys.argv) > 3:
> -            fire_debug_ev = int(sys.argv[3])
> -        if len(sys.argv) > 4:
> -            fire_second_ev = int(sys.argv[4])
> -    except (ValueError) as e:
> -        _perror('invalid arguments: {}'.format(e))
> +    nr_iter = int(args.nr_iter)
> +    wait_time = float(args.wait)
> +    fire_debug_ev = args.fire_debug_event
> +    fire_second_ev = args.fire_second_event
> +
> +    ready_file = args.ready_file
> +    go_file = args.go_file
> +
> +    if ready_file is not None and os.path.exists(ready_file):
> +        raise ValueError('Ready file already exist')
> +
> +    if go_file is not None and os.path.exists(go_file):
> +        raise ValueError('Go file already exist. Review synchronization')
> +
> +    if (ready_file is None) != (go_file is None):
> +        raise ValueError('--go-file and --ready-file need each others, review'
> +                'synchronization')
> +
> +
> +    # Inform that we are ready, if necessary
> +    if ready_file is not None:
> +        open(ready_file, 'a').close()
> +
> +    # Wait for go, if necessary
> +    while go_file is not None and not os.path.exists(go_file):
> +        time.sleep(0.5)
>
>      for i in range(nr_iter):
>          ev1.info('{} fired [INFO]'.format(ev1.name))
> @@ -66,6 +86,13 @@ def _main():
>      if fire_second_ev:
>          ev2.info('{} fired [INFO]'.format(ev2.name))
>
> +    if ready_file is not None:
> +        try:
> +            os.unlink(ready_file)
> +        except:
> +            print("Unexpected error on ready file unlink:", sys.exc_info()[0])
> +            raise
> +
>
>  if __name__ == '__main__':
>      _main()
> diff --git a/tests/regression/ust/python-logging/test_python_logging.in b/tests/regression/ust/python-logging/test_python_logging.in
> index 90abc116..42c30572 100755
> --- a/tests/regression/ust/python-logging/test_python_logging.in
> +++ b/tests/regression/ust/python-logging/test_python_logging.in
> @@ -46,8 +46,17 @@ function run_app
>         local python=$1
>         local debug_tp=$2
>         local fire_second_tp=$3
> +       local opt=""
>
> -       $python $TESTAPP_PATH/$TESTAPP_BIN $NR_ITER $NR_SEC_WAIT $debug_tp $fire_second_tp
> +       if [[ -n "$debug_tp" ]] && [ "$debug_tp" -eq "1" ]; then
> +               opt="${opt} -d"
> +       fi
> +
> +       if [[ -n "$fire_second_tp" ]] && [ "$fire_second_tp" -eq "1" ]; then
> +               opt="${opt} -e"
> +       fi
> +
> +       $python $TESTAPP_PATH/$TESTAPP_BIN -n $NR_ITER -s $NR_SEC_WAIT $opt
>  }
>
>  function run_app_background
> --
> 2.11.0
>
diff mbox series

Patch

diff --git a/tests/regression/ust/python-logging/test.py b/tests/regression/ust/python-logging/test.py
index d08e623c..cd6b724c 100644
--- a/tests/regression/ust/python-logging/test.py
+++ b/tests/regression/ust/python-logging/test.py
@@ -18,6 +18,8 @@  from __future__ import unicode_literals, print_function
 import logging
 import time
 import sys
+import argparse
+import os
 
 
 def _perror(msg):
@@ -37,23 +39,41 @@  def _main():
 
     logging.basicConfig()
 
-    try:
-        nr_iter = int(sys.argv[1])
-        wait_time = float(sys.argv[2])
-        fire_debug_ev = False
-        fire_second_ev = False
-    except (IndexError) as e:
-        _perror('missing arguments: {}'.format(e))
-    except (ValueError) as e:
-        _perror('invalid arguments: {}'.format(e))
+    parser = argparse.ArgumentParser()
+    parser.add_argument('-n', '--nr-iter', required=True)
+    parser.add_argument('-s', '--wait', required=True)
+    parser.add_argument('-d', '--fire-debug-event', action="store_true")
+    parser.add_argument('-e', '--fire-second-event', action="store_true")
+    parser.add_argument('-r', '--ready-file')
+    parser.add_argument('-g', '--go-file')
+    args = parser.parse_args()
 
-    try:
-        if len(sys.argv) > 3:
-            fire_debug_ev = int(sys.argv[3])
-        if len(sys.argv) > 4:
-            fire_second_ev = int(sys.argv[4])
-    except (ValueError) as e:
-        _perror('invalid arguments: {}'.format(e))
+    nr_iter = int(args.nr_iter)
+    wait_time = float(args.wait)
+    fire_debug_ev = args.fire_debug_event
+    fire_second_ev = args.fire_second_event
+
+    ready_file = args.ready_file
+    go_file = args.go_file
+
+    if ready_file is not None and os.path.exists(ready_file):
+        raise ValueError('Ready file already exist')
+
+    if go_file is not None and os.path.exists(go_file):
+        raise ValueError('Go file already exist. Review synchronization')
+
+    if (ready_file is None) != (go_file is None):
+        raise ValueError('--go-file and --ready-file need each others, review'
+                'synchronization')
+
+
+    # Inform that we are ready, if necessary
+    if ready_file is not None:
+        open(ready_file, 'a').close()
+
+    # Wait for go, if necessary
+    while go_file is not None and not os.path.exists(go_file):
+        time.sleep(0.5)
 
     for i in range(nr_iter):
         ev1.info('{} fired [INFO]'.format(ev1.name))
@@ -66,6 +86,13 @@  def _main():
     if fire_second_ev:
         ev2.info('{} fired [INFO]'.format(ev2.name))
 
+    if ready_file is not None:
+        try:
+            os.unlink(ready_file)
+        except:
+            print("Unexpected error on ready file unlink:", sys.exc_info()[0])
+            raise
+
 
 if __name__ == '__main__':
     _main()
diff --git a/tests/regression/ust/python-logging/test_python_logging.in b/tests/regression/ust/python-logging/test_python_logging.in
index 90abc116..42c30572 100755
--- a/tests/regression/ust/python-logging/test_python_logging.in
+++ b/tests/regression/ust/python-logging/test_python_logging.in
@@ -46,8 +46,17 @@  function run_app
 	local python=$1
 	local debug_tp=$2
 	local fire_second_tp=$3
+	local opt=""
 
-	$python $TESTAPP_PATH/$TESTAPP_BIN $NR_ITER $NR_SEC_WAIT $debug_tp $fire_second_tp
+	if [[ -n "$debug_tp" ]] && [ "$debug_tp" -eq "1" ]; then
+		opt="${opt} -d"
+	fi
+
+	if [[ -n "$fire_second_tp" ]] && [ "$fire_second_tp" -eq "1" ]; then
+		opt="${opt} -e"
+	fi
+
+	$python $TESTAPP_PATH/$TESTAPP_BIN -n $NR_ITER -s $NR_SEC_WAIT $opt
 }
 
 function run_app_background