From 691801fca00a26520ff9e1ac0b9103ecfacc2b4e Mon Sep 17 00:00:00 2001 From: Mike Kinney Date: Fri, 10 Dec 2021 20:02:01 -0800 Subject: [PATCH] add more tests; refactor due to pylint suggestion --- meshtastic/node.py | 2 +- meshtastic/tests/test_smoke1.py | 206 +++++++++++++++++++++++++++++++- 2 files changed, 201 insertions(+), 7 deletions(-) diff --git a/meshtastic/node.py b/meshtastic/node.py index cc37be1..c611e25 100644 --- a/meshtastic/node.py +++ b/meshtastic/node.py @@ -83,7 +83,7 @@ class Node: def deleteChannel(self, channelIndex): """Delete the specifed channelIndex and shift other channels up""" ch = self.channels[channelIndex] - if ch.role != channel_pb2.Channel.Role.SECONDARY: + if ch.role not in (channel_pb2.Channel.Role.SECONDARY, channel_pb2.Channel.Role.DISABLED): our_exit("Warning: Only SECONDARY channels can be deleted") # we are careful here because if we move the "admin" channel the channelIndex we need to use diff --git a/meshtastic/tests/test_smoke1.py b/meshtastic/tests/test_smoke1.py index d935908..b7f39e8 100644 --- a/meshtastic/tests/test_smoke1.py +++ b/meshtastic/tests/test_smoke1.py @@ -351,12 +351,206 @@ def test_smoke1_ch_add_and_ch_del(): assert not re.search(r'testing', out, re.MULTILINE) assert return_value == 0 -# write these tests -# TODO: add channel, show disable, show, enable, show -# TODO: try to delete primary channel -# TODO: try to enable then disable delete primary channel -# TODO: add two channels, disable/enable seccond and third ones, delete 2nd ensuring 3rd moves to 2nd -# TODO: update docs for '--ch-index 0' on ch-set, ch-del + +@pytest.mark.smoke1 +def test_smoke1_ch_enable_and_disable(): + """Test --ch-enable and --ch-disable""" + return_value, out = subprocess.getstatusoutput('meshtastic --ch-add testing') + assert re.search(r'Writing modified channels to device', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --info') + assert re.match(r'Connected to radio', out) + assert re.search(r'SECONDARY', out, re.MULTILINE) + assert re.search(r'testing', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + # ensure they need to specify a --ch-index + return_value, out = subprocess.getstatusoutput('meshtastic --ch-disable') + assert return_value == 1 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --ch-disable --ch-index 1') + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --info') + assert re.match(r'Connected to radio', out) + assert re.search(r'DISABLED', out, re.MULTILINE) + assert re.search(r'testing', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --ch-enable --ch-index 1') + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --info') + assert re.match(r'Connected to radio', out) + assert re.search(r'SECONDARY', out, re.MULTILINE) + assert re.search(r'testing', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --ch-del --ch-index 1') + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + + +@pytest.mark.smoke1 +def test_smoke1_ch_del_a_disabled_non_primary_channel(): + """Test --ch-del will work on a disabled non-primary channel.""" + return_value, out = subprocess.getstatusoutput('meshtastic --ch-add testing') + assert re.search(r'Writing modified channels to device', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --info') + assert re.match(r'Connected to radio', out) + assert re.search(r'SECONDARY', out, re.MULTILINE) + assert re.search(r'testing', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + # ensure they need to specify a --ch-index + return_value, out = subprocess.getstatusoutput('meshtastic --ch-disable') + assert return_value == 1 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --ch-del --ch-index 1') + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --info') + assert re.match(r'Connected to radio', out) + assert not re.search(r'DISABLED', out, re.MULTILINE) + assert not re.search(r'SECONDARY', out, re.MULTILINE) + assert not re.search(r'testing', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + + +@pytest.mark.smoke1 +def test_smoke1_attempt_to_delete_primary_channel(): + """Test that we cannot delete the PRIMARY channel.""" + return_value, out = subprocess.getstatusoutput('meshtastic --ch-del --ch-index 0') + assert re.search(r'Warning: Cannot delete primary channel', out, re.MULTILINE) + assert return_value == 1 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + + +@pytest.mark.smoke1 +def test_smoke1_attempt_to_disable_primary_channel(): + """Test that we cannot disable the PRIMARY channel.""" + return_value, out = subprocess.getstatusoutput('meshtastic --ch-disable --ch-index 0') + assert re.search(r'Warning: Cannot enable', out, re.MULTILINE) + assert return_value == 1 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + + +@pytest.mark.smoke1 +def test_smoke1_attempt_to_enable_primary_channel(): + """Test that we cannot enable the PRIMARY channel.""" + return_value, out = subprocess.getstatusoutput('meshtastic --ch-enable --ch-index 0') + assert re.search(r'Warning: Cannot enable', out, re.MULTILINE) + assert return_value == 1 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + + +@pytest.mark.smoke1 +def test_smoke1_ensure_ch_del_second_of_three_channels(): + """Test that when we delete the 2nd of 3 channels, that it deletes the correct channel.""" + return_value, out = subprocess.getstatusoutput('meshtastic --ch-add testing1') + assert re.match(r'Connected to radio', out) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --info') + assert re.match(r'Connected to radio', out) + assert re.search(r'SECONDARY', out, re.MULTILINE) + assert re.search(r'testing1', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --ch-add testing2') + assert re.match(r'Connected to radio', out) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --info') + assert re.match(r'Connected to radio', out) + assert re.search(r'testing2', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --ch-del --ch-index 1') + assert re.match(r'Connected to radio', out) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --info') + assert re.match(r'Connected to radio', out) + assert re.search(r'testing2', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --ch-del --ch-index 1') + assert re.match(r'Connected to radio', out) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + + +@pytest.mark.smoke1 +def test_smoke1_ensure_ch_del_third_of_three_channels(): + """Test that when we delete the 3rd of 3 channels, that it deletes the correct channel.""" + return_value, out = subprocess.getstatusoutput('meshtastic --ch-add testing1') + assert re.match(r'Connected to radio', out) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --info') + assert re.match(r'Connected to radio', out) + assert re.search(r'SECONDARY', out, re.MULTILINE) + assert re.search(r'testing1', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --ch-add testing2') + assert re.match(r'Connected to radio', out) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --info') + assert re.match(r'Connected to radio', out) + assert re.search(r'testing2', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --ch-del --ch-index 2') + assert re.match(r'Connected to radio', out) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --info') + assert re.match(r'Connected to radio', out) + assert re.search(r'testing1', out, re.MULTILINE) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + return_value, out = subprocess.getstatusoutput('meshtastic --ch-del --ch-index 1') + assert re.match(r'Connected to radio', out) + assert return_value == 0 + # pause for the radio + time.sleep(PAUSE_AFTER_COMMAND) + @pytest.mark.smoke1 def test_smoke1_ch_set_modem_config():