Skip to content

Commit b669056

Browse files
committed
Add testcase to ensure last enabled transceiver cannot be disabled
1 parent 14c658e commit b669056

File tree

1 file changed

+69
-0
lines changed
  • solana/programs/example-native-token-transfers/tests

1 file changed

+69
-0
lines changed

solana/programs/example-native-token-transfers/tests/admin.rs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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]
161230
async fn test_zero_threshold() {
162231
let (mut ctx, test_data) = setup(Mode::Locking).await;

0 commit comments

Comments
 (0)