From d46a4e245f441d20b04199643fe8c57a3565f56b Mon Sep 17 00:00:00 2001 From: Mateusz Bloch Date: Mon, 7 Aug 2023 15:19:28 +0200 Subject: [PATCH] corrections CI-309 --- psh/test-date.py | 155 +++++++++++++++++++++++++---------------------- 1 file changed, 81 insertions(+), 74 deletions(-) diff --git a/psh/test-date.py b/psh/test-date.py index 88ac0d1dd..108b9c157 100644 --- a/psh/test-date.py +++ b/psh/test-date.py @@ -4,8 +4,8 @@ # # psh date command test # -# Copyright 2021 Phoenix Systems -# Author: Damian Loewnau +# Copyright 2022, 2023 Phoenix Systems +# Author: Mateusz Niewiadomski, Mateusz Bloch # # This file is part of Phoenix-RTOS. # @@ -14,16 +14,8 @@ import psh.tools.psh as psh -MSG_HELP = ( - "Usage: date [-h] [-s EPOCH] [-d @EPOCH] [+FORMAT]", - " -h: shows this help message", - " -s: set system time described by EPOCH (POSIX time format)", - " -d: display time described by EPOCH (POSIX time format)", - " FORMAT: string with POSIX date formatting characters", - "NOTE: FORMAT string not supported by options: '-s', '-d'") - -DFLT_DATE_REG = r'Thu, 01 Jan 70 \d{2}:\d{2}:\d{2}\r+\n' # default date when image is flashed -SPEC_DATE_REG = r'Sun, 13 Sep 20 12:\d{2}:\d{2}\r+\n' # arbitrary deta of epoch 1600000000 GMT +DFLT_DATE_REG = r"\w{3}, \d{2} \w{3} \d{2} \d{2}:\d{2}:\d{2}\r+\n" # default date when image is flashed +SPEC_DATE_REG = r"Sun, 13 Sep 20 12:\d{2}:\d{2}\r+\n" # arbitrary deta of epoch 1600000000 GMT # Utility functions @@ -39,118 +31,133 @@ def unrec_arg(arg): return f"Unrecognized argument: {arg}" -def test_date(p, cmd, expected_cmd, expected_date, should_succeed): - # 3) 'date text' does not change date - if should_succeed: - psh.assert_cmd(p, cmd=cmd, expected=expected_cmd, msg=f"'{cmd}' does not succeeded", is_regex=True) - psh.assert_cmd(p, cmd='date', expected=expected_date, msg=f"date not amended by '{cmd}'", is_regex=True) - else: - psh.assert_cmd(p, cmd=cmd, expected=expected_cmd, msg=f"'{cmd}' does not fail") - psh.assert_cmd(p, 'date', expected_date, msg=f"date amended by '{cmd}', but should not", is_regex=True) - - # Test parts def test_corrects(p): - '''Testing correct `date` commands''' + """Testing correct `date` commands""" # Test help - psh.assert_cmd(p, 'date -h', MSG_HELP) + psh.assert_cmd(p, "date -h", expected=r"Usage(.*?)FORMAT(.*?)\r+\n", is_regex=True) # Test printing and formatting - psh.assert_cmd(p, 'date', DFLT_DATE_REG, "'date' does not print date", is_regex=True) - psh.assert_cmd(p, 'date +%Y', "1970", 'date does not process formatting properly') - psh.assert_cmd( - p, - 'date +%H:%M:%Sformat', - r'00:0\d{1}:\d{2}format\r+\n', - 'date does not process formatting properly', - is_regex=True) + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date +%Y", expected=r"\b(19|20)\d{2}\r+\n", is_regex=True) + psh.assert_cmd(p, "date +%H:%M:%Sformat", expected=r"\d{2}:\d{2}:\d{2}format\r+\n", is_regex=True) # Test setting to value - psh.assert_cmd(p, 'date -s @1600000000', SPEC_DATE_REG, is_regex=True) - psh.assert_cmd(p, 'date', SPEC_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date -s @1600000000", expected=SPEC_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date", expected=SPEC_DATE_REG, is_regex=True) # Test setting to 0 - psh.assert_cmd(p, 'date -s @0', DFLT_DATE_REG, is_regex=True) - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date -s @0", expected=r"Thu, 01 Jan 70 00:00:00\r+\n", is_regex=True) + psh.assert_cmd(p, "date", expected=r"Thu, 01 Jan 70 00:00:\d{2}\r+\n", is_regex=True) # Test date parsing - psh.assert_cmd(p, 'date -d @1600000000', SPEC_DATE_REG, is_regex=True) - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date -d @1600000000", expected=SPEC_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) + + psh.assert_cmd(p, "date -d @0", expected=r"Thu, 01 Jan 70 00:00:00\r+\n", is_regex=True) + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) def test_incorrect_dateprint(p): - '''Test incorrect or rare commandlines for printing date''' + """Test incorrect or rare commandlines for printing date""" # Incorrect FORMAT passed when printing date - psh.assert_cmd(p, 'date operand1', invalid_format("operand1")) - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date operand1", expected=invalid_format("operand1"), result="fail") + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) # Incorrect FORMAT passed when printing date - psh.assert_cmd(p, 'date +operand1', "operand1") - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date +operand1", expected="operand1") + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) # too many arguments passed to print, should print first redundant - psh.assert_cmd(p, 'date operand1 operand2 operand3', unrec_arg("operand2")) - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date operand1 operand2 operand3", expected=unrec_arg("operand2"), result="fail") + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) # nonexistent format '%k' passed to print - psh.assert_cmd(p, 'date +%Y%k%Y', "1970%k1970") - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date +%Y%k%Y", expected=r"\b(19|20)\d{2}%k(19|20)\d{2}\r+\n", is_regex=True) + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) def test_incorrect_datewrite(p): - '''Test incorrect commandlines for setting date (no edge cases)''' + """Test incorrect commandlines for setting date (no edge cases)""" # No argument passed - psh.assert_cmd(p, 'date -s', "date: option requires an argument -- s") - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date -s", expected="date: option requires an argument -- s", result="fail") + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) # invalid time value - psh.assert_cmd(p, 'date -s 123456789operand1', invalid_date("123456789operand1")) + psh.assert_cmd(p, "date -s 123456789operand1", expected=invalid_date("123456789operand1"), result="fail") # too many arguments - psh.assert_cmd(p, 'date -s 1600000000 +format operand1', unrec_arg("operand1")) - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date -s 1600000000 +format operand1", expected=unrec_arg("operand1"), result="fail") + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) + + #non integer values + # psh.assert_cmd(p, "date -s @1600000000.1234567890", expected=SPEC_DATE_REG, is_regex=True) + # psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) def test_incorrect_dateparse(p): # No argument passed - psh.assert_cmd(p, 'date -d', "date: option requires an argument -- d") - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date -d", expected="date: option requires an argument -- d", result="fail") + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) # too many arguments - psh.assert_cmd(p, 'date -d @1600000000 +format operand1', unrec_arg("operand1")) - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date -d @1600000000 +format operand1", expected=unrec_arg("operand1"), result="fail") + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) # invalid time value - psh.assert_cmd(p, 'date -d @1600000000operand1', invalid_date("@1600000000operand1")) - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date -d @1600000000operand1", expected=invalid_date("@1600000000operand1"), result="fail") + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) # no '@' sign - psh.assert_cmd(p, 'date -d 1600000000', invalid_date("1600000000")) - psh.assert_cmd(p, 'date', DFLT_DATE_REG, is_regex=True) + psh.assert_cmd(p, "date -d 1600000000", expected=invalid_date("1600000000"), result="fail") + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) + #non integer values + # psh.assert_cmd(p, "date -d @1600000000.1234567890", expected=SPEC_DATE_REG, is_regex=True) + # psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) -def test_edges_datewrite(p): - '''Test edge cases for epoch value passed to `date -s epoch''' - # set time to: - # epoch = 0x7FFFFFFFF0000000 - # epoch < max(signed long long) - psh.assert_cmd(p, 'date -s @9223372036586340352', r'Thu, 16 Apr 15 \d{2}:\d{2}:\d{2}\r+\n', is_regex=True) - psh.assert_cmd(p, 'date', r'Thu, 16 Apr 15 \d{2}:\d{2}:\d{2}\r+\n', is_regex=True) - psh.assert_cmd(p, 'date +%Y', '586515') - psh.assert_cmd(p, 'date -s @0', DFLT_DATE_REG, is_regex=True) +def test_edges(p): + """Test edge cases for epoch value passed to `date -s epoch""" + # maximum value for int32 + psh.assert_cmd(p, "date -s @2147483647", expected=r"Tue, 19 Jan 38 \d{2}:\d{2}:\d{2}\r+\n", is_regex=True) + psh.assert_cmd(p, "date", expected=r"Tue, 19 Jan 38 \d{2}:\d{2}:\d{2}\r+\n", is_regex=True) + psh.assert_cmd(p, "date +%Y", expected="2038") + psh.assert_cmd(p, "date -s @0", expected=DFLT_DATE_REG, is_regex=True) -def harness(p): - psh.init(p) + psh.assert_cmd(p, "date -d @2147483647", expected=r"Tue, 19 Jan 38 \d{2}:\d{2}:\d{2}\r+\n", is_regex=True) + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) + + # beyond int32 value + psh.assert_cmd(p, "date -s @2147483648", expected=r"Tue, 19 Jan 38 \d{2}:\d{2}:\d{2}\r+\n", is_regex=True) + psh.assert_cmd(p, "date", expected=r"Tue, 19 Jan 38 \d{2}:\d{2}:\d{2}\r+\n", is_regex=True) + psh.assert_cmd(p, "date +%Y", expected="2038") + psh.assert_cmd(p, "date -s @0", expected=DFLT_DATE_REG, is_regex=True) - psh.assert_prompt(p) + psh.assert_cmd(p, "date -d @2147483648", expected=r"Tue, 19 Jan 38 \d{2}:\d{2}:\d{2}\r+\n", is_regex=True) + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) + + # Issue: #370 https://github.com/phoenix-rtos/phoenix-rtos-project/issues/370 + return + + psh.assert_cmd(p, 'date -s @10000000000000000', expected=r'Sat, 25 Jan 55 \d{2}:\d{2}:\d{2}\r+\n', is_regex=True) + psh.assert_cmd(p, 'date', expected=r'Sat, 25 Jan 55 \d{2}:\d{2}:\d{2}\r+\n', is_regex=True) + psh.assert_cmd(p, 'date +%Y', expected='316889355') + psh.assert_cmd(p, 'date -s @0', DFLT_DATE_REG, is_regex=True) + + psh.assert_cmd(p, 'date -d @10000000000000000', expected=r'Sat, 25 Jan 55 \d{2}:\d{2}:\d{2}\r+\n', is_regex=True) + psh.assert_cmd(p, "date", expected=DFLT_DATE_REG, is_regex=True) + + +@psh.run +def harness(p): test_corrects(p) test_incorrect_dateprint(p) test_incorrect_datewrite(p) test_incorrect_dateparse(p) - test_edges_datewrite(p) + test_edges(p)