From 00fc172bf8cbf3c39b75a51a1124410693111d5a Mon Sep 17 00:00:00 2001 From: Xuefeng Date: Thu, 16 Apr 2015 15:41:15 -0400 Subject: [PATCH 1/8] Improve `savestate` error handling. Add better error messages for two problems. One is using savestate before having loaded at least a pubkey, and work as that identity. Another is using savestate to a write-protected file. --- command_callbacks.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/command_callbacks.py b/command_callbacks.py index 2ec095e..f7d6cdd 100644 --- a/command_callbacks.py +++ b/command_callbacks.py @@ -1754,6 +1754,12 @@ def savestate_filename(input_dict, environment_dict): environment_dict['cmdargs'], environment_dict['defaulttarget'], environment_dict['defaultkeyname'], environment_dict['autosave'], environment_dict['currentkeyname']) + except TypeError: + raise seash_exceptions.UserError("Please load at least a pubkey, and work as that identity.") + + except UnboundLocalError: + raise seash_exceptions.UserError("Don't use savestate to a write-protected file.") + except Exception, error: raise seash_exceptions.UserError("Error saving state: '" + str(error) + "'.") From a5e4d7fb21d8815cce1e5711f8d5a155e6fe05df Mon Sep 17 00:00:00 2001 From: Xuefeng Date: Thu, 16 Apr 2015 15:50:51 -0400 Subject: [PATCH 2/8] Added a unit test for savestate's error messages --- tests/ut_seash_savestate_nicermessage.py | 38 ++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 tests/ut_seash_savestate_nicermessage.py diff --git a/tests/ut_seash_savestate_nicermessage.py b/tests/ut_seash_savestate_nicermessage.py new file mode 100644 index 0000000..da3653f --- /dev/null +++ b/tests/ut_seash_savestate_nicermessage.py @@ -0,0 +1,38 @@ +""" +This unit test is to test error messages at these situations. One is using +savestate before having loaded at least a pubkey, and work as that identity. +Another is using savestate to a write-protected file. +""" + +import seash +import sys +import os +import seash_exceptions + +#pragma out Please load at least a pubkey, and work as that identity. +#pragma out Don't use savestate to a write-protected file. + +open('write_protected_file', 'w+').close() +os.system('chmod a-w write_protected_file') + +command_list = [ + 'savestate NO_KEYS_LOADED', +] + +try: + seash.command_loop(command_list) +except seash_exceptions.UserError, e: + print str(e) + +command_list = [ + 'loadkeys guest0', + 'as guest0', + 'savestate write_protected_file', +] + +try: + seash.command_loop(command_list) +except seash_exceptions.UserError, e: + print str(e) + +os.remove('write_protected_file') From 711286995a1078ce41b4de435b458a9d26e22195 Mon Sep 17 00:00:00 2001 From: Xuefeng Date: Mon, 20 Apr 2015 21:25:30 -0400 Subject: [PATCH 3/8] Added an unit test for savestate command This unit test is to test error messages when using savestate before having loaded at least a pubkey, and work as that identity. --- tests/ut_seash_savestate_nicermessageone.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tests/ut_seash_savestate_nicermessageone.py diff --git a/tests/ut_seash_savestate_nicermessageone.py b/tests/ut_seash_savestate_nicermessageone.py new file mode 100644 index 0000000..facf7b5 --- /dev/null +++ b/tests/ut_seash_savestate_nicermessageone.py @@ -0,0 +1,20 @@ +""" +This unit test is to test error messages when using savestate before +having loaded at least a pubkey, and work as that identity. +""" + +import seash +import sys +import os +import seash_exceptions + +#pragma out Please load at least a pubkey, and work as that identity. + +command_list = [ + 'savestate NO_KEYS_LOADED', +] + +try: + seash.command_loop(command_list) +except seash_exceptions.UserError, e: + print str(e) From 41857afd18eac0878f47d01282596c74482d0c58 Mon Sep 17 00:00:00 2001 From: Xuefeng Date: Mon, 20 Apr 2015 21:27:19 -0400 Subject: [PATCH 4/8] Added an unit test for savestate command This unit test is to test error messages when using savestate to a write-protected file. --- tests/ut_seash_savestate_nicermessagetwo.py | 27 +++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 tests/ut_seash_savestate_nicermessagetwo.py diff --git a/tests/ut_seash_savestate_nicermessagetwo.py b/tests/ut_seash_savestate_nicermessagetwo.py new file mode 100644 index 0000000..53eb311 --- /dev/null +++ b/tests/ut_seash_savestate_nicermessagetwo.py @@ -0,0 +1,27 @@ +""" +This unit test is to test error messages when using savestate to +a write-protected file. +""" + +import seash +import sys +import os +import seash_exceptions + +#pragma out Don't use savestate to a write-protected file. + +open('write_protected_file', 'w+').close() +os.chmod('write_protected_file', 0444) + +command_list = [ + 'loadkeys guest0', + 'as guest0', + 'savestate write_protected_file', +] + +try: + seash.command_loop(command_list) +except seash_exceptions.UserError, e: + print str(e) + +os.remove('write_protected_file') From 1ca6cc6f1d11a702349269967dc63fddc610b980 Mon Sep 17 00:00:00 2001 From: Xuefeng Date: Mon, 20 Apr 2015 21:28:04 -0400 Subject: [PATCH 5/8] Split this unit test into two unit tests --- tests/ut_seash_savestate_nicermessage.py | 38 ------------------------ 1 file changed, 38 deletions(-) delete mode 100644 tests/ut_seash_savestate_nicermessage.py diff --git a/tests/ut_seash_savestate_nicermessage.py b/tests/ut_seash_savestate_nicermessage.py deleted file mode 100644 index da3653f..0000000 --- a/tests/ut_seash_savestate_nicermessage.py +++ /dev/null @@ -1,38 +0,0 @@ -""" -This unit test is to test error messages at these situations. One is using -savestate before having loaded at least a pubkey, and work as that identity. -Another is using savestate to a write-protected file. -""" - -import seash -import sys -import os -import seash_exceptions - -#pragma out Please load at least a pubkey, and work as that identity. -#pragma out Don't use savestate to a write-protected file. - -open('write_protected_file', 'w+').close() -os.system('chmod a-w write_protected_file') - -command_list = [ - 'savestate NO_KEYS_LOADED', -] - -try: - seash.command_loop(command_list) -except seash_exceptions.UserError, e: - print str(e) - -command_list = [ - 'loadkeys guest0', - 'as guest0', - 'savestate write_protected_file', -] - -try: - seash.command_loop(command_list) -except seash_exceptions.UserError, e: - print str(e) - -os.remove('write_protected_file') From fcb0243c7a42282e6d551eed16fc90a882e402e8 Mon Sep 17 00:00:00 2001 From: Xuefeng Date: Mon, 20 Apr 2015 22:06:56 -0400 Subject: [PATCH 6/8] Change another way to raise error message --- command_callbacks.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/command_callbacks.py b/command_callbacks.py index f7d6cdd..a636c39 100644 --- a/command_callbacks.py +++ b/command_callbacks.py @@ -1743,10 +1743,14 @@ def savestate_filename(input_dict, environment_dict): input_dict = input_dict[command_key]['children'] command_key = input_dict.keys()[0] - + if not environment_dict['currentkeyname']: + raise seash_exceptions.UserError("Specify the key name by first typing 'as [username]'.") + # expand ~ fileandpath = os.path.expanduser(command_key) - + + if not os.access(fileandpath, os.W_OK): + raise seash_exceptions.UserError("Permission denied: " + fileandpath) try: seash_helper.savestate(fileandpath, environment_dict['handleinfo'], environment_dict['host'], environment_dict['port'], @@ -1754,12 +1758,6 @@ def savestate_filename(input_dict, environment_dict): environment_dict['cmdargs'], environment_dict['defaulttarget'], environment_dict['defaultkeyname'], environment_dict['autosave'], environment_dict['currentkeyname']) - except TypeError: - raise seash_exceptions.UserError("Please load at least a pubkey, and work as that identity.") - - except UnboundLocalError: - raise seash_exceptions.UserError("Don't use savestate to a write-protected file.") - except Exception, error: raise seash_exceptions.UserError("Error saving state: '" + str(error) + "'.") From 507c1b464ceea2910360c8a8616379eab6858d51 Mon Sep 17 00:00:00 2001 From: Xuefeng Date: Mon, 20 Apr 2015 22:08:42 -0400 Subject: [PATCH 7/8] Modify error message --- tests/ut_seash_savestate_nicermessageone.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ut_seash_savestate_nicermessageone.py b/tests/ut_seash_savestate_nicermessageone.py index facf7b5..83d8ae8 100644 --- a/tests/ut_seash_savestate_nicermessageone.py +++ b/tests/ut_seash_savestate_nicermessageone.py @@ -8,7 +8,7 @@ import os import seash_exceptions -#pragma out Please load at least a pubkey, and work as that identity. +#pragma out Specify the key name by first typing 'as [username]'. command_list = [ 'savestate NO_KEYS_LOADED', From 482788762277cc2c17fd58ee8fccd0683dacd660 Mon Sep 17 00:00:00 2001 From: Xuefeng Date: Mon, 20 Apr 2015 22:09:25 -0400 Subject: [PATCH 8/8] Modify error message --- tests/ut_seash_savestate_nicermessagetwo.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/ut_seash_savestate_nicermessagetwo.py b/tests/ut_seash_savestate_nicermessagetwo.py index 53eb311..66afad3 100644 --- a/tests/ut_seash_savestate_nicermessagetwo.py +++ b/tests/ut_seash_savestate_nicermessagetwo.py @@ -8,7 +8,7 @@ import os import seash_exceptions -#pragma out Don't use savestate to a write-protected file. +#pragma out Permission denied: write_protected_file open('write_protected_file', 'w+').close() os.chmod('write_protected_file', 0444)