Skip to content
This repository was archived by the owner on Mar 11, 2025. It is now read-only.

Commit 04954d0

Browse files
authored
Add delegation tests (#3316)
* Add transfer test * Add burn test * Fix formatting
1 parent fdc1df5 commit 04954d0

File tree

3 files changed

+158
-1
lines changed

3 files changed

+158
-1
lines changed

Cargo.lock

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

token/cli/Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ strum_macros = "0.24"
3636
[dev-dependencies]
3737
solana-test-validator = "=1.10.29"
3838
assert_cmd = "2.0.4"
39+
tempfile = "3.3.0"
3940

4041
[[bin]]
4142
name = "spl-token"

token/cli/src/main.rs

+156-1
Original file line numberDiff line numberDiff line change
@@ -3184,10 +3184,11 @@ mod tests {
31843184
solana_client::blockhash_query::Source,
31853185
solana_sdk::{
31863186
bpf_loader,
3187-
signature::{Keypair, Signer},
3187+
signature::{write_keypair_file, Keypair, Signer},
31883188
},
31893189
solana_test_validator::{ProgramInfo, TestValidator, TestValidatorGenesis},
31903190
std::path::PathBuf,
3191+
tempfile::NamedTempFile,
31913192
};
31923193

31933194
fn clone_keypair(keypair: &Keypair) -> Keypair {
@@ -3762,4 +3763,158 @@ mod tests {
37623763
assert_eq!(ui_account.mint, token.to_string());
37633764
assert_eq!(ui_account.owner, aux_string);
37643765
}
3766+
3767+
#[test]
3768+
fn transfer_with_account_delegate() {
3769+
let (test_validator, payer) = validator_for_test();
3770+
let config = test_config(&test_validator, &payer, &spl_token::id());
3771+
3772+
let token = create_token(&config, &payer);
3773+
let source = create_associated_account(&config, &payer, token);
3774+
let destination = create_auxiliary_account(&config, &payer, token);
3775+
let delegate = Keypair::new();
3776+
3777+
let file = NamedTempFile::new().unwrap();
3778+
write_keypair_file(&delegate, &file).unwrap();
3779+
3780+
let ui_amount = 100.0;
3781+
mint_tokens(&config, &payer, token, ui_amount, source);
3782+
3783+
let ui_account = config
3784+
.rpc_client
3785+
.get_token_account(&source)
3786+
.unwrap()
3787+
.unwrap();
3788+
assert_eq!(ui_account.token_amount.amount, "100");
3789+
assert_eq!(ui_account.delegate, None);
3790+
assert_eq!(ui_account.delegated_amount, None);
3791+
let ui_account = config
3792+
.rpc_client
3793+
.get_token_account(&destination)
3794+
.unwrap()
3795+
.unwrap();
3796+
assert_eq!(ui_account.token_amount.amount, "0");
3797+
3798+
process_test_command(
3799+
&config,
3800+
&payer,
3801+
&[
3802+
"spl-token",
3803+
CommandName::Approve.into(),
3804+
&source.to_string(),
3805+
"10",
3806+
&delegate.pubkey().to_string(),
3807+
],
3808+
)
3809+
.unwrap();
3810+
3811+
let ui_account = config
3812+
.rpc_client
3813+
.get_token_account(&source)
3814+
.unwrap()
3815+
.unwrap();
3816+
assert_eq!(ui_account.delegate.unwrap(), delegate.pubkey().to_string());
3817+
assert_eq!(ui_account.delegated_amount.unwrap().amount, "10");
3818+
3819+
let result = process_test_command(
3820+
&config,
3821+
&payer,
3822+
&[
3823+
"spl-token",
3824+
CommandName::Transfer.into(),
3825+
&token.to_string(),
3826+
"10",
3827+
&destination.to_string(),
3828+
"--from",
3829+
&source.to_string(),
3830+
"--owner",
3831+
file.path().to_str().unwrap(),
3832+
],
3833+
);
3834+
result.unwrap();
3835+
3836+
let ui_account = config
3837+
.rpc_client
3838+
.get_token_account(&source)
3839+
.unwrap()
3840+
.unwrap();
3841+
assert_eq!(ui_account.token_amount.amount, "90");
3842+
assert_eq!(ui_account.delegate, None);
3843+
assert_eq!(ui_account.delegated_amount, None);
3844+
let ui_account = config
3845+
.rpc_client
3846+
.get_token_account(&destination)
3847+
.unwrap()
3848+
.unwrap();
3849+
assert_eq!(ui_account.token_amount.amount, "10");
3850+
}
3851+
3852+
#[test]
3853+
fn burn_with_account_delegate() {
3854+
let (test_validator, payer) = validator_for_test();
3855+
let config = test_config(&test_validator, &payer, &spl_token::id());
3856+
3857+
let token = create_token(&config, &payer);
3858+
let source = create_associated_account(&config, &payer, token);
3859+
let delegate = Keypair::new();
3860+
3861+
let file = NamedTempFile::new().unwrap();
3862+
write_keypair_file(&delegate, &file).unwrap();
3863+
3864+
let ui_amount = 100.0;
3865+
mint_tokens(&config, &payer, token, ui_amount, source);
3866+
3867+
let ui_account = config
3868+
.rpc_client
3869+
.get_token_account(&source)
3870+
.unwrap()
3871+
.unwrap();
3872+
assert_eq!(ui_account.token_amount.amount, "100");
3873+
assert_eq!(ui_account.delegate, None);
3874+
assert_eq!(ui_account.delegated_amount, None);
3875+
3876+
process_test_command(
3877+
&config,
3878+
&payer,
3879+
&[
3880+
"spl-token",
3881+
CommandName::Approve.into(),
3882+
&source.to_string(),
3883+
"10",
3884+
&delegate.pubkey().to_string(),
3885+
],
3886+
)
3887+
.unwrap();
3888+
3889+
let ui_account = config
3890+
.rpc_client
3891+
.get_token_account(&source)
3892+
.unwrap()
3893+
.unwrap();
3894+
assert_eq!(ui_account.delegate.unwrap(), delegate.pubkey().to_string());
3895+
assert_eq!(ui_account.delegated_amount.unwrap().amount, "10");
3896+
3897+
let result = process_test_command(
3898+
&config,
3899+
&payer,
3900+
&[
3901+
"spl-token",
3902+
CommandName::Burn.into(),
3903+
&source.to_string(),
3904+
"10",
3905+
"--owner",
3906+
file.path().to_str().unwrap(),
3907+
],
3908+
);
3909+
result.unwrap();
3910+
3911+
let ui_account = config
3912+
.rpc_client
3913+
.get_token_account(&source)
3914+
.unwrap()
3915+
.unwrap();
3916+
assert_eq!(ui_account.token_amount.amount, "90");
3917+
assert_eq!(ui_account.delegate, None);
3918+
assert_eq!(ui_account.delegated_amount, None);
3919+
}
37653920
}

0 commit comments

Comments
 (0)