@@ -157,6 +157,75 @@ async fn test_reregister_all_transceivers() {
157157    assert_threshold ( & mut  ctx,  1 ) . await ; 
158158} 
159159
160+ #[ tokio:: test]  
161+ async  fn  test_deregister_final_enabled_transceiver ( )  { 
162+     let  ( mut  ctx,  test_data)  = setup ( Mode :: Locking ) . await ; 
163+ 
164+     // attempt to deregister only enabled transceiver (baked-in transceiver) 
165+     let  err = deregister_transceiver ( 
166+         & good_ntt, 
167+         DeregisterTransceiver  { 
168+             owner :  test_data. program_owner . pubkey ( ) , 
169+             transceiver :  example_native_token_transfers:: ID , 
170+         } , 
171+     ) 
172+     . submit_with_signers ( & [ & test_data. program_owner ] ,  & mut  ctx) 
173+     . await 
174+     . unwrap_err ( ) ; 
175+     assert_eq ! ( 
176+         err. unwrap( ) , 
177+         TransactionError :: InstructionError ( 
178+             0 , 
179+             InstructionError :: Custom ( NTTError :: ZeroThreshold . into( ) ) 
180+         ) 
181+     ) ; 
182+ 
183+     // register arbitrary executable program as dummy transceiver 
184+     let  dummy_transceiver = wormhole_anchor_sdk:: wormhole:: program:: ID ; 
185+     register_transceiver ( 
186+         & good_ntt, 
187+         RegisterTransceiver  { 
188+             payer :  ctx. payer . pubkey ( ) , 
189+             owner :  test_data. program_owner . pubkey ( ) , 
190+             transceiver :  dummy_transceiver, 
191+         } , 
192+     ) 
193+     . submit_with_signers ( & [ & test_data. program_owner ] ,  & mut  ctx) 
194+     . await 
195+     . unwrap ( ) ; 
196+ 
197+     // deregister baked-in transceiver 
198+     deregister_transceiver ( 
199+         & good_ntt, 
200+         DeregisterTransceiver  { 
201+             owner :  test_data. program_owner . pubkey ( ) , 
202+             transceiver :  example_native_token_transfers:: ID , 
203+         } , 
204+     ) 
205+     . submit_with_signers ( & [ & test_data. program_owner ] ,  & mut  ctx) 
206+     . await 
207+     . unwrap ( ) ; 
208+ 
209+     // attempt to deregister final enabled transceiver (dummy transceiver) 
210+     let  err = deregister_transceiver ( 
211+         & good_ntt, 
212+         DeregisterTransceiver  { 
213+             owner :  test_data. program_owner . pubkey ( ) , 
214+             transceiver :  dummy_transceiver, 
215+         } , 
216+     ) 
217+     . submit_with_signers ( & [ & test_data. program_owner ] ,  & mut  ctx) 
218+     . await 
219+     . unwrap_err ( ) ; 
220+     assert_eq ! ( 
221+         err. unwrap( ) , 
222+         TransactionError :: InstructionError ( 
223+             0 , 
224+             InstructionError :: Custom ( NTTError :: ZeroThreshold . into( ) ) 
225+         ) 
226+     ) ; 
227+ } 
228+ 
160229#[ tokio:: test]  
161230async  fn  test_zero_threshold ( )  { 
162231    let  ( mut  ctx,  test_data)  = setup ( Mode :: Locking ) . await ; 
0 commit comments