1
- #![ cfg( feature = "test-sbf" ) ]
1
+ // #![cfg(feature = "test-sbf")]
2
2
3
3
mod setup;
4
4
@@ -21,15 +21,19 @@ fn success_init_after_close_account() {
21
21
let owner = Pubkey :: new_unique ( ) ;
22
22
let mint = Pubkey :: new_unique ( ) ;
23
23
let account = Pubkey :: new_unique ( ) ;
24
+ let destination = Pubkey :: new_unique ( ) ;
24
25
let decimals = 9 ;
25
26
26
27
let owner_account = AccountSharedData :: new ( 1_000_000_000 , 0 , & system_program:: id ( ) ) ;
27
28
let mint_account = setup:: setup_mint_account ( None , None , 0 , decimals) ;
28
29
let token_account = setup:: setup_token_account ( & mint, & owner, 0 ) ;
29
30
31
+ let expected_destination_lamports = token_account. lamports ( ) ;
32
+
30
33
mollusk. process_and_validate_instruction_chain (
31
34
& [
32
- instruction:: close_account ( & spl_token:: id ( ) , & account, & owner, & owner, & [ ] ) . unwrap ( ) ,
35
+ instruction:: close_account ( & spl_token:: id ( ) , & account, & destination, & owner, & [ ] )
36
+ . unwrap ( ) ,
33
37
system_instruction:: create_account (
34
38
& owner,
35
39
& account,
@@ -43,15 +47,20 @@ fn success_init_after_close_account() {
43
47
( mint, mint_account) ,
44
48
( account, token_account) ,
45
49
( owner, owner_account) ,
50
+ ( destination, AccountSharedData :: default ( ) ) ,
46
51
mollusk. sysvars . keyed_account_for_rent_sysvar ( ) ,
47
52
] ,
48
53
& [
49
54
Check :: success ( ) ,
50
- // Account successfully initialized.
55
+ // Account successfully re- initialized.
51
56
Check :: account ( & account)
52
57
. data ( setup:: setup_token_account ( & mint, & owner, 0 ) . data ( ) )
53
58
. owner ( & spl_token:: id ( ) )
54
59
. build ( ) ,
60
+ // The destination should have the lamports from the closed account.
61
+ Check :: account ( & destination)
62
+ . lamports ( expected_destination_lamports)
63
+ . build ( ) ,
55
64
] ,
56
65
) ;
57
66
}
@@ -63,31 +72,40 @@ fn fail_init_after_close_account() {
63
72
let owner = Pubkey :: new_unique ( ) ;
64
73
let mint = Pubkey :: new_unique ( ) ;
65
74
let account = Pubkey :: new_unique ( ) ;
75
+ let destination = Pubkey :: new_unique ( ) ;
66
76
let decimals = 9 ;
67
77
68
78
let owner_account = AccountSharedData :: new ( 1_000_000_000 , 0 , & system_program:: id ( ) ) ;
69
79
let mint_account = setup:: setup_mint_account ( None , None , 0 , decimals) ;
70
80
let token_account = setup:: setup_token_account ( & mint, & owner, 0 ) ;
71
81
82
+ let expected_destination_lamports = token_account. lamports ( ) ;
83
+
72
84
mollusk. process_and_validate_instruction_chain (
73
85
& [
74
- instruction:: close_account ( & spl_token:: id ( ) , & account, & owner, & owner, & [ ] ) . unwrap ( ) ,
86
+ instruction:: close_account ( & spl_token:: id ( ) , & account, & destination, & owner, & [ ] )
87
+ . unwrap ( ) ,
75
88
system_instruction:: transfer ( & owner, & account, 1_000_000_000 ) ,
76
89
instruction:: initialize_account ( & spl_token:: id ( ) , & account, & mint, & owner) . unwrap ( ) ,
77
90
] ,
78
91
& [
79
92
( mint, mint_account) ,
80
93
( account, token_account) ,
81
94
( owner, owner_account) ,
95
+ ( destination, AccountSharedData :: default ( ) ) ,
82
96
mollusk. sysvars . keyed_account_for_rent_sysvar ( ) ,
83
97
] ,
84
98
& [
85
99
Check :: err ( ProgramError :: InvalidAccountData ) ,
86
- // Account not initialized.
100
+ // Account not re- initialized.
87
101
Check :: account ( & account)
88
102
. lamports ( 1_000_000_000 )
89
103
. owner ( & system_program:: id ( ) )
90
104
. build ( ) ,
105
+ // The destination should have the lamports from the closed account.
106
+ Check :: account ( & destination)
107
+ . lamports ( expected_destination_lamports)
108
+ . build ( ) ,
91
109
] ,
92
110
) ;
93
111
}
0 commit comments