#[test_with::env(
ACCESS_KEY,
SECRET_KEY,
S3_HOST,
BUCKET_NAME,
OBJECT_NAME,
EXPECT_CONTENT
)]
#[tokio::test]
async fn test_v4_async_operation() {
use s3handler::none_blocking::primitives::S3Pool;
use std::env;
use std::fs::File;
use std::io::prelude::*;
use std::time::SystemTime;
let akey = env::var("ACCESS_KEY").unwrap();
println!("use access key: {} for async testing", akey);
let temp_test_file = "/tmp/v4-async-test";
let new_object = format!(
"{}-v4-async-{}",
env::var("OBJECT_NAME").unwrap(),
SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.unwrap_or_default()
.as_secs()
);
let s3_pool = S3Pool::new(env::var("S3_HOST").unwrap()).aws_v4(
akey.to_string(),
env::var("SECRET_KEY").unwrap(),
env::var("REGION").unwrap(),
);
let mut object_list = s3_pool
.bucket(&env::var("BUCKET_NAME").unwrap())
.list()
.await
.unwrap();
assert!(object_list.next_object().await.unwrap().is_some());
let s3_pool = S3Pool::new(env::var("S3_HOST").unwrap()).aws_v4(
akey.to_string(),
env::var("SECRET_KEY").unwrap(),
env::var("REGION").unwrap(),
);
let obj = s3_pool
.bucket(&env::var("BUCKET_NAME").unwrap())
.object(&env::var("OBJECT_NAME").unwrap());
obj.download_file(temp_test_file).await.unwrap();
let mut file = File::open(temp_test_file).unwrap();
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
assert_eq!(contents, env::var("EXPECT_CONTENT").unwrap());
let obj = S3Pool::new(env::var("S3_HOST").unwrap())
.aws_v4(
akey.to_string(),
env::var("SECRET_KEY").unwrap(),
env::var("REGION").unwrap(),
)
.bucket(&env::var("BUCKET_NAME").unwrap())
.object(&new_object);
obj.upload_file(temp_test_file).await.unwrap();
let obj = S3Pool::new(env::var("S3_HOST").unwrap())
.aws_v4(
akey.to_string(),
env::var("SECRET_KEY").unwrap(),
env::var("REGION").unwrap(),
)
.bucket(&env::var("BUCKET_NAME").unwrap())
.object(&new_object);
obj.remove().await.unwrap();
let temp_test_file = "/tmp/v4-async-7M";
let new_object = format!(
"{}-v4-async-{}",
env::var("BIG_OBJECT_NAME").unwrap(),
SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.unwrap_or_default()
.as_secs()
);
let s3_pool = S3Pool::new(env::var("S3_HOST").unwrap())
.aws_v4(
akey.to_string(),
env::var("SECRET_KEY").unwrap(),
env::var("REGION").unwrap(),
)
.part_size(env::var("PART_SIZE").unwrap().parse::<usize>().unwrap());
let obj = s3_pool
.bucket(&env::var("BUCKET_NAME").unwrap())
.object(&env::var("BIG_OBJECT_NAME").unwrap());
obj.download_file(temp_test_file).await.unwrap();
let obj = S3Pool::new(env::var("S3_HOST").unwrap())
.aws_v4(
akey.to_string(),
env::var("SECRET_KEY").unwrap(),
env::var("REGION").unwrap(),
)
.part_size(env::var("PART_SIZE").unwrap().parse::<usize>().unwrap())
.bucket(&env::var("BUCKET_NAME").unwrap())
.object(&new_object);
obj.upload_file(temp_test_file).await.unwrap();
let obj = S3Pool::new(env::var("S3_HOST").unwrap())
.aws_v4(
akey.to_string(),
env::var("SECRET_KEY").unwrap(),
env::var("REGION").unwrap(),
)
.bucket(&env::var("BUCKET_NAME").unwrap())
.object(&new_object);
obj.remove().await.unwrap();
}
#[test_with::env(
ACCESS_KEY,
SECRET_KEY,
S3_HOST,
BUCKET_NAME,
OBJECT_NAME,
EXPECT_CONTENT
)]
#[test]
fn test_v4_sync_operation() {
use std::env;
use std::fs::File;
use std::io::prelude::*;
use std::time::SystemTime;
let akey = env::var("ACCESS_KEY").unwrap();
println!("use access key: {} for sync testing", akey);
let temp_test_file = "/tmp/sync-test";
let new_object = format!(
"{}-sync-{}",
env::var("OBJECT_NAME").unwrap(),
SystemTime::now()
.duration_since(SystemTime::UNIX_EPOCH)
.unwrap_or_default()
.as_secs()
);
let config = s3handler::blocking::CredentialConfig {
host: env::var("S3_HOST").unwrap(),
access_key: env::var("ACCESS_KEY").unwrap(),
secret_key: env::var("SECRET_KEY").unwrap(),
user: None,
region: env::var("REGION").ok(),
s3_type: None,
secure: None,
};
let mut handler = s3handler::blocking::Handler::from(&config);
handler.change_auth_type("aws4");
handler
.get(
&format!(
"/{}/{}",
env::var("BUCKET_NAME").unwrap(),
env::var("OBJECT_NAME").unwrap()
),
Some(&temp_test_file),
)
.unwrap();
let mut file = File::open(temp_test_file).unwrap();
let mut contents = String::new();
file.read_to_string(&mut contents).unwrap();
assert_eq!(contents, env::var("EXPECT_CONTENT").unwrap());
handler
.put(
&temp_test_file,
&format!("/{}/{}", env::var("BUCKET_NAME").unwrap(), &new_object),
)
.unwrap();
handler
.del(&format!(
"/{}/{}",
env::var("BUCKET_NAME").unwrap(),
&new_object
))
.unwrap();
}