1
1
#![ cfg( feature = "test-sbf" ) ]
2
2
#![ feature( type_changing_struct_update) ]
3
3
4
- use example_native_token_transfers:: { config:: Config , error:: NTTError } ;
4
+ use anchor_lang:: { prelude:: Pubkey , system_program:: System , Id } ;
5
+ use example_native_token_transfers:: {
6
+ config:: Config , error:: NTTError , registered_transceiver:: RegisteredTransceiver ,
7
+ } ;
5
8
use ntt_messages:: mode:: Mode ;
6
9
use solana_program_test:: * ;
7
10
use solana_sdk:: { instruction:: InstructionError , signer:: Signer , transaction:: TransactionError } ;
@@ -30,6 +33,47 @@ async fn assert_threshold(
30
33
assert_eq ! ( config_account. threshold, expected_threshold) ;
31
34
}
32
35
36
+ async fn assert_transceiver_id (
37
+ ctx : & mut ProgramTestContext ,
38
+ test_data : & TestData ,
39
+ transceiver : & Pubkey ,
40
+ expected_id : u8 ,
41
+ ) {
42
+ let registered_transceiver_account: RegisteredTransceiver = ctx
43
+ . get_account_data_anchor ( test_data. ntt . registered_transceiver ( transceiver) )
44
+ . await ;
45
+ assert_eq ! (
46
+ registered_transceiver_account. transceiver_address,
47
+ * transceiver
48
+ ) ;
49
+ assert_eq ! ( registered_transceiver_account. id, expected_id) ;
50
+ }
51
+
52
+ #[ tokio:: test]
53
+ async fn test_invalid_transceiver ( ) {
54
+ let ( mut ctx, test_data) = setup ( Mode :: Locking ) . await ;
55
+
56
+ // try registering system program
57
+ let err = register_transceiver (
58
+ & test_data. ntt ,
59
+ RegisterTransceiver {
60
+ payer : ctx. payer . pubkey ( ) ,
61
+ owner : test_data. program_owner . pubkey ( ) ,
62
+ transceiver : System :: id ( ) ,
63
+ } ,
64
+ )
65
+ . submit_with_signers ( & [ & test_data. program_owner ] , & mut ctx)
66
+ . await
67
+ . unwrap_err ( ) ;
68
+ assert_eq ! (
69
+ err. unwrap( ) ,
70
+ TransactionError :: InstructionError (
71
+ 0 ,
72
+ InstructionError :: Custom ( NTTError :: InvalidTransceiverProgram . into( ) )
73
+ )
74
+ ) ;
75
+ }
76
+
33
77
#[ tokio:: test]
34
78
async fn test_reregister_all_transceivers ( ) {
35
79
let ( mut ctx, test_data) = setup ( Mode :: Locking ) . await ;
@@ -43,7 +87,7 @@ async fn test_reregister_all_transceivers() {
43
87
let num_dummy_transceivers: u8 = dummy_transceivers. len ( ) . try_into ( ) . unwrap ( ) ;
44
88
45
89
// register dummy transceivers
46
- for transceiver in & dummy_transceivers {
90
+ for ( idx , transceiver) in dummy_transceivers. iter ( ) . enumerate ( ) {
47
91
register_transceiver (
48
92
& test_data. ntt ,
49
93
RegisterTransceiver {
@@ -55,6 +99,7 @@ async fn test_reregister_all_transceivers() {
55
99
. submit_with_signers ( & [ & test_data. program_owner ] , & mut ctx)
56
100
. await
57
101
. unwrap ( ) ;
102
+ assert_transceiver_id ( & mut ctx, & test_data, transceiver, idx as u8 + 1 ) . await ;
58
103
}
59
104
60
105
// set threshold = 1 (for baked-in transceiver) + num_dummy_transceivers
@@ -98,7 +143,7 @@ async fn test_reregister_all_transceivers() {
98
143
assert_threshold ( & mut ctx, & test_data, 1 ) . await ;
99
144
100
145
// reregister dummy transceiver
101
- for transceiver in & dummy_transceivers {
146
+ for ( idx , transceiver) in dummy_transceivers. iter ( ) . enumerate ( ) {
102
147
register_transceiver (
103
148
& test_data. ntt ,
104
149
RegisterTransceiver {
@@ -110,6 +155,7 @@ async fn test_reregister_all_transceivers() {
110
155
. submit_with_signers ( & [ & test_data. program_owner ] , & mut ctx)
111
156
. await
112
157
. unwrap ( ) ;
158
+ assert_transceiver_id ( & mut ctx, & test_data, transceiver, idx as u8 + 1 ) . await ;
113
159
assert_threshold ( & mut ctx, & test_data, 1 ) . await ;
114
160
}
115
161
@@ -125,6 +171,7 @@ async fn test_reregister_all_transceivers() {
125
171
. submit_with_signers ( & [ & test_data. program_owner ] , & mut ctx)
126
172
. await
127
173
. unwrap ( ) ;
174
+ assert_transceiver_id ( & mut ctx, & test_data, & example_native_token_transfers:: ID , 0 ) . await ;
128
175
assert_threshold ( & mut ctx, & test_data, 1 ) . await ;
129
176
}
130
177
0 commit comments