From 9c24c74264d798ff63bb2c43c7f21f57888f9b54 Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Mon, 8 Apr 2019 12:39:53 +0200 Subject: [PATCH 01/12] Fix broken assertion action. Action never threw an exception / exited with non-zero code on failed assert which means all the workflows which utilize this actions are broken aka don't fail correctly on failed assertion. --- packs/asserts/actions/object_key_string_equals.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packs/asserts/actions/object_key_string_equals.py b/packs/asserts/actions/object_key_string_equals.py index efe90c3..8a7fd22 100644 --- a/packs/asserts/actions/object_key_string_equals.py +++ b/packs/asserts/actions/object_key_string_equals.py @@ -19,4 +19,7 @@ def run(self, object, key, value): sys.stdout.write('EQUAL') else: sys.stdout.write('NOT EQUAL') + raise ValueError('Key "%s" in object %s doesn\'t equal expected value of "%s". ' + 'Expected "%s", got "%s".' % + (key, object, value, value, object[key])) return result From 1a7f6ea55d9a748abc888d6f4b71679cb5eb50ca Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Mon, 8 Apr 2019 15:45:00 +0200 Subject: [PATCH 02/12] Fix failing action. --- .../actions/chains/test_quickstart_remote_script_actions.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml b/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml index bdbf902..8626c5a 100644 --- a/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml +++ b/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml @@ -83,4 +83,4 @@ chain: params: object: "{{test_stdout_remote_script_action_sudo.localhost}}" key: "stdout" - value: "STREAM IS STDOUT. STR: foo bar\nbaz INT: 1 OBJ: {u'foo': u'bar baz'}" + value: "STREAM IS STDOUT. STR: foo bar\r\nbaz INT: 1 OBJ: {u'foo': u'bar baz'}" From a92898ad82ec702e6eaabd50d469011cfe842150 Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Mon, 8 Apr 2019 17:46:02 +0200 Subject: [PATCH 03/12] Remove change. --- .../actions/chains/test_quickstart_remote_script_actions.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml b/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml index 8626c5a..bdbf902 100644 --- a/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml +++ b/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml @@ -83,4 +83,4 @@ chain: params: object: "{{test_stdout_remote_script_action_sudo.localhost}}" key: "stdout" - value: "STREAM IS STDOUT. STR: foo bar\r\nbaz INT: 1 OBJ: {u'foo': u'bar baz'}" + value: "STREAM IS STDOUT. STR: foo bar\nbaz INT: 1 OBJ: {u'foo': u'bar baz'}" From be3b4ad1fb9d6b92320d3ae7bd9576829043acb5 Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Tue, 9 Apr 2019 11:57:10 +0200 Subject: [PATCH 04/12] Simplify exception message. --- packs/asserts/actions/object_key_string_equals.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/packs/asserts/actions/object_key_string_equals.py b/packs/asserts/actions/object_key_string_equals.py index 8a7fd22..0b511db 100644 --- a/packs/asserts/actions/object_key_string_equals.py +++ b/packs/asserts/actions/object_key_string_equals.py @@ -19,7 +19,5 @@ def run(self, object, key, value): sys.stdout.write('EQUAL') else: sys.stdout.write('NOT EQUAL') - raise ValueError('Key "%s" in object %s doesn\'t equal expected value of "%s". ' - 'Expected "%s", got "%s".' % - (key, object, value, value, object[key])) + raise ValueError('Expected "%s", got "%s". ' (value, object[key])) return result From b40ae3c1e8eb952b7f6f90dacd8c3eb064e0ac84 Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Tue, 9 Apr 2019 11:58:09 +0200 Subject: [PATCH 05/12] Also fix object key number equals assertion method to throw on failed assertion. --- packs/asserts/actions/object_key_number_equals.py | 1 + 1 file changed, 1 insertion(+) diff --git a/packs/asserts/actions/object_key_number_equals.py b/packs/asserts/actions/object_key_number_equals.py index c8a1402..a222d59 100644 --- a/packs/asserts/actions/object_key_number_equals.py +++ b/packs/asserts/actions/object_key_number_equals.py @@ -20,4 +20,5 @@ def run(self, object, key, value): else: sys.stdout.write('NOT EQUAL.') sys.stderr.write(' Expected: %s, Original: %s' % (value, object[key])) + raise ValueError('Expected "%s" got "%s". ' (value, object[key])) return result From 85e45461b9597f6af59f96ef0667eb9a12cc6bbb Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Tue, 9 Apr 2019 12:00:16 +0200 Subject: [PATCH 06/12] Key number greater should also throw on failed assertion. --- packs/asserts/actions/object_key_number_equals.py | 2 +- packs/asserts/actions/object_key_number_greater.py | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packs/asserts/actions/object_key_number_equals.py b/packs/asserts/actions/object_key_number_equals.py index a222d59..51d8d04 100644 --- a/packs/asserts/actions/object_key_number_equals.py +++ b/packs/asserts/actions/object_key_number_equals.py @@ -20,5 +20,5 @@ def run(self, object, key, value): else: sys.stdout.write('NOT EQUAL.') sys.stderr.write(' Expected: %s, Original: %s' % (value, object[key])) - raise ValueError('Expected "%s" got "%s". ' (value, object[key])) + raise ValueError('Expected "%s", got "%s". ' (value, object[key])) return result diff --git a/packs/asserts/actions/object_key_number_greater.py b/packs/asserts/actions/object_key_number_greater.py index d4ac50f..ef93297 100644 --- a/packs/asserts/actions/object_key_number_greater.py +++ b/packs/asserts/actions/object_key_number_greater.py @@ -16,7 +16,8 @@ def run(self, object, key, value): raise ValueError('Key %s doesn\'t exist in object %s' % (key, object)) result = (object[key] > value) if result: - sys.stdout.write('GREATER') + sys.stdout.write('GREATER (%s > %s)' % (object[key], value)) else: - sys.stdout.write('LESSER') + sys.stdout.write('LESSER (%s < %s)' % (object[key], value)) + raise ValueError('"%s" is not greater than "%s"' % (object[key], value)) return result From 209079d0a71dba9c310fcbea7025d8553a654494 Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Tue, 9 Apr 2019 12:04:01 +0200 Subject: [PATCH 07/12] Update error messages. --- packs/asserts/actions/object_key_number_equals.py | 2 +- packs/asserts/actions/object_key_string_equals.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packs/asserts/actions/object_key_number_equals.py b/packs/asserts/actions/object_key_number_equals.py index 51d8d04..21a8993 100644 --- a/packs/asserts/actions/object_key_number_equals.py +++ b/packs/asserts/actions/object_key_number_equals.py @@ -20,5 +20,5 @@ def run(self, object, key, value): else: sys.stdout.write('NOT EQUAL.') sys.stderr.write(' Expected: %s, Original: %s' % (value, object[key])) - raise ValueError('Expected "%s", got "%s". ' (value, object[key])) + raise ValueError('Value not equal. Expected "%s", got "%s". ' (value, object[key])) return result diff --git a/packs/asserts/actions/object_key_string_equals.py b/packs/asserts/actions/object_key_string_equals.py index 0b511db..417720f 100644 --- a/packs/asserts/actions/object_key_string_equals.py +++ b/packs/asserts/actions/object_key_string_equals.py @@ -19,5 +19,5 @@ def run(self, object, key, value): sys.stdout.write('EQUAL') else: sys.stdout.write('NOT EQUAL') - raise ValueError('Expected "%s", got "%s". ' (value, object[key])) + raise ValueError('Value not equal. Expected "%s", got "%s". ' (value, object[key])) return result From dac3b5374250eecd484e0221e20e456dd4452ce7 Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Tue, 9 Apr 2019 12:06:10 +0200 Subject: [PATCH 08/12] Fix lint. --- packs/asserts/actions/object_key_number_equals.py | 2 +- packs/asserts/actions/object_key_string_equals.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packs/asserts/actions/object_key_number_equals.py b/packs/asserts/actions/object_key_number_equals.py index 21a8993..2b70164 100644 --- a/packs/asserts/actions/object_key_number_equals.py +++ b/packs/asserts/actions/object_key_number_equals.py @@ -20,5 +20,5 @@ def run(self, object, key, value): else: sys.stdout.write('NOT EQUAL.') sys.stderr.write(' Expected: %s, Original: %s' % (value, object[key])) - raise ValueError('Value not equal. Expected "%s", got "%s". ' (value, object[key])) + raise ValueError('Value not equal. Expected "%s", got "%s". ' % (value, object[key])) return result diff --git a/packs/asserts/actions/object_key_string_equals.py b/packs/asserts/actions/object_key_string_equals.py index 417720f..b622201 100644 --- a/packs/asserts/actions/object_key_string_equals.py +++ b/packs/asserts/actions/object_key_string_equals.py @@ -19,5 +19,5 @@ def run(self, object, key, value): sys.stdout.write('EQUAL') else: sys.stdout.write('NOT EQUAL') - raise ValueError('Value not equal. Expected "%s", got "%s". ' (value, object[key])) + raise ValueError('Value not equal. Expected "%s", got "%s". ' % (value, object[key])) return result From a4c5e9a970a297d59000468dde8423fa9db00c0f Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Tue, 9 Apr 2019 13:15:50 +0200 Subject: [PATCH 09/12] Fix streamwriter action so it doesn't include "u" type prefix in the object result. This way it works consistently and correctly under Python 2 and Python 3. --- packs/fixtures/actions/scripts/streamwriter-script.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packs/fixtures/actions/scripts/streamwriter-script.py b/packs/fixtures/actions/scripts/streamwriter-script.py index 8308e58..4b6cca6 100755 --- a/packs/fixtures/actions/scripts/streamwriter-script.py +++ b/packs/fixtures/actions/scripts/streamwriter-script.py @@ -3,6 +3,7 @@ import argparse import sys import ast +import re from lib.exceptions import CustomException @@ -25,15 +26,21 @@ def main(args): stream = args.stream writer = StreamWriter() stream = writer.run(stream) + str_arg = args.str_arg int_arg = args.int_arg obj_arg = args.obj_arg + if str_arg: sys.stdout.write(' STR: %s' % str_arg) if int_arg: sys.stdout.write(' INT: %d' % int_arg) + if obj_arg: - sys.stdout.write(' OBJ: %s' % obj_arg) + # Remove any u'' so it works consistently under Python 2 and 3.x + obj_arg_str = str(obj_arg) + value = re.sub("u'(.*?)'", r"'\1'", obj_arg_str) + sys.stdout.write(' OBJ: %s' % value) if __name__ == '__main__': From 14f499d31d0007d03bb6b5549eaa542abb9bcfc9 Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Tue, 9 Apr 2019 13:17:51 +0200 Subject: [PATCH 10/12] Update affected actions. --- .../actions/chains/test_quickstart_local_script_actions.yaml | 4 ++-- .../actions/chains/test_quickstart_remote_script_actions.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packs/tests/actions/chains/test_quickstart_local_script_actions.yaml b/packs/tests/actions/chains/test_quickstart_local_script_actions.yaml index e2bf6ac..7288b04 100644 --- a/packs/tests/actions/chains/test_quickstart_local_script_actions.yaml +++ b/packs/tests/actions/chains/test_quickstart_local_script_actions.yaml @@ -16,7 +16,7 @@ chain: params: object: "{{test_stdout_local_script_action}}" key: "stdout" - value: "STREAM IS STDOUT. STR: foo bar\nbaz INT: 1 OBJ: {u'foo': u'bar baz'}" + value: "STREAM IS STDOUT. STR: foo bar\nbaz INT: 1 OBJ: {'foo': 'bar baz'}" on-success: "assert_return_code_zero_stdout_test" - name: "assert_return_code_zero_stdout_test" @@ -79,4 +79,4 @@ chain: params: object: "{{test_stdout_local_script_action_sudo}}" key: "stdout" - value: "STREAM IS STDOUT. STR: foo bar\nbaz INT: 1 OBJ: {u'foo': u'bar baz'}" + value: "STREAM IS STDOUT. STR: foo bar\nbaz INT: 1 OBJ: {'foo': 'bar baz'}" diff --git a/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml b/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml index bdbf902..2da6b82 100644 --- a/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml +++ b/packs/tests/actions/chains/test_quickstart_remote_script_actions.yaml @@ -17,7 +17,7 @@ chain: params: object: "{{test_stdout_remote_script_action.localhost}}" key: "stdout" - value: "STREAM IS STDOUT. STR: foo bar\nbaz INT: 1 OBJ: {u'foo': u'bar baz'}" + value: "STREAM IS STDOUT. STR: foo bar\nbaz INT: 1 OBJ: {'foo': 'bar baz'}" on-success: "assert_return_code_zero_stdout_test" - name: "assert_return_code_zero_stdout_test" @@ -83,4 +83,4 @@ chain: params: object: "{{test_stdout_remote_script_action_sudo.localhost}}" key: "stdout" - value: "STREAM IS STDOUT. STR: foo bar\nbaz INT: 1 OBJ: {u'foo': u'bar baz'}" + value: "STREAM IS STDOUT. STR: foo bar\nbaz INT: 1 OBJ: {'foo': 'bar baz'}" From 50f488d152300555c21ef7b1aee240bcc72b72b5 Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Tue, 9 Apr 2019 13:33:04 +0200 Subject: [PATCH 11/12] Fix broken test which wasn't failing because of the broken assertion method. --- packs/tests/actions/chains/test_quickstart_trace.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packs/tests/actions/chains/test_quickstart_trace.yaml b/packs/tests/actions/chains/test_quickstart_trace.yaml index 89efae1..254a8cf 100644 --- a/packs/tests/actions/chains/test_quickstart_trace.yaml +++ b/packs/tests/actions/chains/test_quickstart_trace.yaml @@ -75,7 +75,7 @@ ST2_AUTH_URL: "{{protocol}}://{{hostname}}:9100" ST2_API_URL: "{{protocol}}://{{hostname}}:9101" ST2_AUTH_TOKEN: "{{token}}" - cmd: "st2 trace get {{get_trace_id_for_tag.stdout | replace('\n', '')}} -j | grep execution | wc -l" + cmd: "st2 trace get {{get_trace_id_for_tag.stdout | replace('\n', '')}} -j | grep action_execution | grep type | wc -l" on-success: "assert_trace_id_has_two_executions" - name: "assert_trace_id_has_two_executions" From b77ec25af550ce4814cb6faa6b7633c9b994d707 Mon Sep 17 00:00:00 2001 From: Tomaz Muraus Date: Tue, 9 Apr 2019 13:33:54 +0200 Subject: [PATCH 12/12] Cast value to int. --- packs/asserts/actions/object_key_number_equals.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packs/asserts/actions/object_key_number_equals.py b/packs/asserts/actions/object_key_number_equals.py index 2b70164..dee5205 100644 --- a/packs/asserts/actions/object_key_number_equals.py +++ b/packs/asserts/actions/object_key_number_equals.py @@ -14,7 +14,7 @@ def run(self, object, key, value): if key not in object: sys.stderr.write('KEY %s DOESN\'T EXIST.' % key) raise ValueError('Key %s doesn\'t exist in object %s' % (key, object)) - result = (object[key] == value) + result = (int(object[key]) == int(value)) if result: sys.stdout.write('EQUAL.') else: