@@ -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