@@ -123,6 +123,48 @@ def test_exit_code(self):
123123 status = chan .get_exit_status ()
124124 self .assertEqual (status , 2 )
125125
126+ def test_exit_state (self ):
127+ self ._auth ()
128+ chan = self .session .channel_new ()
129+ self .assertEqual (chan .open_session (), 0 )
130+ self .assertEqual (chan .request_exec ('exit 2' ), 0 )
131+ self .assertEqual (chan .send_eof (), 0 )
132+ self .assertEqual (chan .close (), 0 )
133+ exit_code , signal , pcore_dumped = chan .get_exit_state ()
134+ self .assertEqual (exit_code , 2 )
135+
136+ def test_exit_state_w_signal (self ):
137+ self ._auth ()
138+ chan = self .session .channel_new ()
139+ my_sig = 'TERM'
140+ chan .open_session ()
141+ chan .request_exec ('sleep 5 && exit 0' )
142+ chan .send_eof ()
143+ chan .request_send_signal (my_sig )
144+ chan .close ()
145+ exit_code , signal , pcore_dumped = chan .get_exit_state ()
146+ self .assertNotEqual (exit_code , 0 )
147+ self .assertEqual (signal , bytes (my_sig , 'utf-8' ))
148+
149+ def test_exit_state_w_signal_non_blocking (self ):
150+ self ._auth ()
151+ chan = self .session .channel_new ()
152+ my_sig = 'TERM'
153+ chan .open_session ()
154+ chan .request_exec ('sleep 5 && exit 0' )
155+ chan .send_eof ()
156+ chan .request_send_signal (my_sig )
157+ chan .close ()
158+ self .session .set_blocking (0 )
159+ exit_code , signal , pcore_dumped = chan .get_exit_state ()
160+ while exit_code == SSH_AGAIN :
161+ self .assertEqual (signal , b"" )
162+ self .assertFalse (pcore_dumped )
163+ wait_socket (self .session , self .sock )
164+ exit_code , signal , pcore_dumped = chan .get_exit_state ()
165+ self .assertNotEqual (exit_code , 0 )
166+ self .assertEqual (signal , bytes (my_sig , 'utf-8' ))
167+
126168 def test_long_running_execute (self ):
127169 self ._auth ()
128170 chan = self .session .channel_new ()
0 commit comments