@@ -990,6 +990,13 @@ def test_transaction_annotations(node_factory, bitcoind):
990990 assert (txs [1 ]['outputs' ][fundidx ]['channel' ] == scid )
991991
992992
993+ def write_all (fd , bytestr ):
994+ """Wrapper, since os.write can do partial writes"""
995+ off = 0
996+ while off < len (bytestr ):
997+ off += os .write (fd , bytestr [off :])
998+
999+
9931000@unittest .skipIf (VALGRIND , "It does not play well with prompt and key derivation." )
9941001def test_hsm_secret_encryption (node_factory ):
9951002 l1 = node_factory .get_node (may_fail = True ) # May fail when started without key
@@ -1002,9 +1009,9 @@ def test_hsm_secret_encryption(node_factory):
10021009 l1 .daemon .opts .update ({"encrypted-hsm" : None })
10031010 l1 .daemon .start (stdin = slave_fd , wait_for_initialized = False )
10041011 l1 .daemon .wait_for_log (r'Enter hsm_secret password' )
1005- os . write (master_fd , password .encode ("utf-8" ))
1012+ write_all (master_fd , password .encode ("utf-8" ))
10061013 l1 .daemon .wait_for_log (r'Confirm hsm_secret password' )
1007- os . write (master_fd , password .encode ("utf-8" ))
1014+ write_all (master_fd , password .encode ("utf-8" ))
10081015 l1 .daemon .wait_for_log ("Server started with public key" )
10091016 id = l1 .rpc .getinfo ()["id" ]
10101017 l1 .stop ()
@@ -1019,18 +1026,18 @@ def test_hsm_secret_encryption(node_factory):
10191026 l1 .daemon .start (stdin = slave_fd , stderr = subprocess .STDOUT ,
10201027 wait_for_initialized = False )
10211028 l1 .daemon .wait_for_log (r'Enter hsm_secret password' )
1022- os . write (master_fd , password [2 :].encode ("utf-8" ))
1029+ write_all (master_fd , password [2 :].encode ("utf-8" ))
10231030 l1 .daemon .wait_for_log (r'Confirm hsm_secret password' )
1024- os . write (master_fd , password [2 :].encode ("utf-8" ))
1031+ write_all (master_fd , password [2 :].encode ("utf-8" ))
10251032 assert (l1 .daemon .proc .wait (WAIT_TIMEOUT ) == 1 )
10261033 assert (l1 .daemon .is_in_log ("Wrong password for encrypted hsm_secret." ))
10271034
10281035 # Test we can restore the same wallet with the same password
10291036 l1 .daemon .start (stdin = slave_fd , wait_for_initialized = False )
10301037 l1 .daemon .wait_for_log (r'The hsm_secret is encrypted' )
1031- os . write (master_fd , password .encode ("utf-8" ))
1038+ write_all (master_fd , password .encode ("utf-8" ))
10321039 l1 .daemon .wait_for_log (r'Confirm hsm_secret password' )
1033- os . write (master_fd , password .encode ("utf-8" ))
1040+ write_all (master_fd , password .encode ("utf-8" ))
10341041 l1 .daemon .wait_for_log ("Server started with public key" )
10351042 assert id == l1 .rpc .getinfo ()["id" ]
10361043 l1 .stop ()
@@ -1066,9 +1073,9 @@ def test_hsmtool_secret_decryption(node_factory):
10661073 l1 .daemon .opts .update ({"encrypted-hsm" : None })
10671074 l1 .daemon .start (stdin = slave_fd , wait_for_initialized = False )
10681075 l1 .daemon .wait_for_log (r'Enter hsm_secret password' )
1069- os . write (master_fd , password .encode ("utf-8" ))
1076+ write_all (master_fd , password .encode ("utf-8" ))
10701077 l1 .daemon .wait_for_log (r'Confirm hsm_secret password' )
1071- os . write (master_fd , password .encode ("utf-8" ))
1078+ write_all (master_fd , password .encode ("utf-8" ))
10721079 l1 .daemon .wait_for_log ("Server started with public key" )
10731080 node_id = l1 .rpc .getinfo ()["id" ]
10741081 l1 .stop ()
@@ -1079,7 +1086,7 @@ def test_hsmtool_secret_decryption(node_factory):
10791086 hsmtool .start (stdin = slave_fd ,
10801087 stdout = subprocess .PIPE , stderr = subprocess .PIPE )
10811088 hsmtool .wait_for_log (r"Enter hsm_secret password:" )
1082- os . write (master_fd , "A wrong pass\n \n " .encode ("utf-8" ))
1089+ write_all (master_fd , "A wrong pass\n \n " .encode ("utf-8" ))
10831090 hsmtool .proc .wait (WAIT_TIMEOUT )
10841091 hsmtool .is_in_log (r"Wrong password" )
10851092
@@ -1088,7 +1095,7 @@ def test_hsmtool_secret_decryption(node_factory):
10881095 hsmtool .start (stdin = slave_fd ,
10891096 stdout = subprocess .PIPE , stderr = subprocess .PIPE )
10901097 hsmtool .wait_for_log (r"Enter hsm_secret password:" )
1091- os . write (master_fd , password .encode ("utf-8" ))
1098+ write_all (master_fd , password .encode ("utf-8" ))
10921099 assert hsmtool .proc .wait (WAIT_TIMEOUT ) == 0
10931100 # Then test we can now start it without password
10941101 l1 .daemon .opts .pop ("encrypted-hsm" )
@@ -1102,9 +1109,9 @@ def test_hsmtool_secret_decryption(node_factory):
11021109 hsmtool .start (stdin = slave_fd ,
11031110 stdout = subprocess .PIPE , stderr = subprocess .PIPE )
11041111 hsmtool .wait_for_log (r"Enter hsm_secret password:" )
1105- os . write (master_fd , password .encode ("utf-8" ))
1112+ write_all (master_fd , password .encode ("utf-8" ))
11061113 hsmtool .wait_for_log (r"Confirm hsm_secret password:" )
1107- os . write (master_fd , password .encode ("utf-8" ))
1114+ write_all (master_fd , password .encode ("utf-8" ))
11081115 assert hsmtool .proc .wait (WAIT_TIMEOUT ) == 0
11091116 # Now we need to pass the encrypted-hsm startup option
11101117 l1 .stop ()
@@ -1117,9 +1124,9 @@ def test_hsmtool_secret_decryption(node_factory):
11171124 wait_for_initialized = False )
11181125
11191126 l1 .daemon .wait_for_log (r'The hsm_secret is encrypted' )
1120- os . write (master_fd , password .encode ("utf-8" ))
1127+ write_all (master_fd , password .encode ("utf-8" ))
11211128 l1 .daemon .wait_for_log (r'Confirm hsm_secret password' )
1122- os . write (master_fd , password .encode ("utf-8" ))
1129+ write_all (master_fd , password .encode ("utf-8" ))
11231130 l1 .daemon .wait_for_log ("Server started with public key" )
11241131 print (node_id , l1 .rpc .getinfo ()["id" ])
11251132 assert node_id == l1 .rpc .getinfo ()["id" ]
@@ -1131,7 +1138,7 @@ def test_hsmtool_secret_decryption(node_factory):
11311138 hsmtool .start (stdin = slave_fd ,
11321139 stdout = subprocess .PIPE , stderr = subprocess .PIPE )
11331140 hsmtool .wait_for_log (r"Enter hsm_secret password:" )
1134- os . write (master_fd , password .encode ("utf-8" ))
1141+ write_all (master_fd , password .encode ("utf-8" ))
11351142 assert hsmtool .proc .wait (WAIT_TIMEOUT ) == 0
11361143 l1 .daemon .opts .pop ("encrypted-hsm" )
11371144 l1 .daemon .start (stdin = slave_fd , wait_for_initialized = True )
@@ -1153,7 +1160,7 @@ def test_hsmtool_secret_decryption(node_factory):
11531160 hsmtool .start (stdin = slave_fd ,
11541161 stdout = subprocess .PIPE , stderr = subprocess .PIPE )
11551162 hsmtool .wait_for_log ("Enter hsm_secret password:" )
1156- os . write (master_fd , password .encode ("utf-8" ))
1163+ write_all (master_fd , password .encode ("utf-8" ))
11571164 hsmtool .wait_for_log ("Successfully decrypted" )
11581165 assert hsmtool .proc .wait (WAIT_TIMEOUT ) == 0
11591166
@@ -1208,12 +1215,12 @@ def test_hsmtool_generatehsm(node_factory):
12081215 hsmtool .start (stdin = slave_fd , stdout = subprocess .PIPE ,
12091216 stderr = subprocess .PIPE )
12101217 hsmtool .wait_for_log (r"Select your language:" )
1211- os . write (master_fd , "0\n " .encode ("utf-8" ))
1218+ write_all (master_fd , "0\n " .encode ("utf-8" ))
12121219 hsmtool .wait_for_log (r"Introduce your BIP39 word list" )
1213- os . write (master_fd , "ritual idle hat sunny universe pluck key alpha wing "
1214- "cake have wedding\n " .encode ("utf-8" ))
1220+ write_all (master_fd , "ritual idle hat sunny universe pluck key alpha wing "
1221+ "cake have wedding\n " .encode ("utf-8" ))
12151222 hsmtool .wait_for_log (r"Enter your passphrase:" )
1216- os . write (master_fd , "This is actually not a passphrase\n " .encode ("utf-8" ))
1223+ write_all (master_fd , "This is actually not a passphrase\n " .encode ("utf-8" ))
12171224 hsmtool .proc .wait (WAIT_TIMEOUT )
12181225 hsmtool .is_in_log (r"New hsm_secret file created" )
12191226
0 commit comments