token_refresh/
token_refresh.rs1use baidu_netdisk_sdk::auth::AccessToken;
2use baidu_netdisk_sdk::BaiduNetDiskClient;
3use std::time::SystemTime;
4use std::time::UNIX_EPOCH;
5
6#[tokio::main]
7async fn main() -> Result<(), Box<dyn std::error::Error>> {
8 env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("debug")).init();
10
11 println!("=== Token Refresh Test ===");
12 println!();
13
14 let client = BaiduNetDiskClient::builder()
16 .auto_refresh(true)
17 .refresh_ahead_seconds(60)
18 .build()?;
19
20 println!("Client created successfully");
21 println!();
22
23 println!("Step 1: Loading token from environment...");
25 client.load_token_from_env()?;
26 println!("Token loaded successfully");
27
28 let original_token = client.get_valid_token().await?;
29 println!("Original Token: {:?}", original_token);
30 println!();
31
32 println!("Step 2: Testing manual token refresh...");
34 match client.token_provider().refresh_token().await {
35 Ok(new_token) => {
36 println!("✓ Token refreshed successfully!");
37 println!(" New Access Token: {}", new_token.access_token);
38 println!(" New Refresh Token: {}", new_token.refresh_token);
39 println!(" Expires in: {} seconds", new_token.expires_in);
40 println!();
41
42 if new_token.access_token != original_token.access_token {
44 println!("✓ Access token changed after refresh");
45 } else {
46 println!("✗ Access token remains the same");
47 }
48
49 if new_token.refresh_token != original_token.refresh_token {
51 println!("✓ Refresh token changed after refresh");
52 } else {
53 println!("Note: Refresh token remains the same (may be expected)");
54 }
55 }
56 Err(e) => {
57 println!("✗ Failed to refresh token: {}", e);
58 println!("Note: This may be due to invalid credentials or network issues");
59 }
60 }
61
62 println!();
63
64 println!("Step 3: Testing auto-refresh behavior...");
66
67 let expired_token = AccessToken {
69 access_token: "expired_access_token".to_string(),
70 expires_in: 60, refresh_token: original_token.refresh_token.clone(), scope: "basic netdisk".to_string(),
73 session_key: "".to_string(),
74 session_secret: "".to_string(),
75 acquired_at: SystemTime::now()
76 .duration_since(UNIX_EPOCH)
77 .unwrap_or_default()
78 .as_secs()
79 - 3600, };
81
82 client.set_access_token(expired_token)?;
83
84 match client.get_valid_token().await {
86 Ok(refreshed_token) => {
87 println!("✓ Auto-refresh triggered successfully!");
88 println!(" New Access Token: {}", refreshed_token.access_token);
89 println!(
90 " Expires in: {} seconds",
91 refreshed_token.remaining_seconds()
92 );
93 }
94 Err(e) => {
95 println!("✗ Auto-refresh failed: {}", e);
96 println!("Note: This may be due to invalid credentials");
97 }
98 }
99
100 println!();
101 println!("=== Refresh test completed ===");
102 Ok(())
103}