use hedera::{
FileAppendTransaction,
FileContentsQuery,
FileCreateTransaction,
FileDeleteTransaction,
FileInfoQuery,
};
use time::Duration;
use crate::common::{
setup_nonfree,
TestEnvironment,
};
use crate::resources;
#[tokio::test]
async fn basic() -> anyhow::Result<()> {
let Some(TestEnvironment { config, client }) = setup_nonfree() else {
return Ok(());
};
let Some(op) = &config.operator else {
log::debug!("skipping test due to missing operator");
return Ok(());
};
let file_id = FileCreateTransaction::new()
.keys([op.private_key.public_key()])
.contents("[rust::e2e::file_append::1]")
.execute(&client)
.await?
.get_receipt(&client)
.await?
.file_id
.unwrap();
FileAppendTransaction::new()
.file_id(file_id)
.contents("update")
.execute(&client)
.await?
.get_receipt(&client)
.await?;
let info = FileInfoQuery::new().file_id(file_id).execute(&client).await?;
assert_eq!(info.file_id, file_id);
assert_eq!(info.size, 33);
FileDeleteTransaction::new()
.file_id(file_id)
.execute(&client)
.await?
.get_receipt(&client)
.await?;
Ok(())
}
#[tokio::test]
async fn large_contents() -> anyhow::Result<()> {
let Some(TestEnvironment { config, client }) = setup_nonfree() else {
return Ok(());
};
let Some(op) = &config.operator else {
log::debug!("skipping test due to missing operator");
return Ok(());
};
let file_id = FileCreateTransaction::new()
.keys([op.private_key.public_key()])
.contents("[rust::e2e::file_append::2]")
.execute(&client)
.await?
.get_receipt(&client)
.await?
.file_id
.unwrap();
FileAppendTransaction::new()
.file_id(file_id)
.contents(resources::BIG_CONTENTS)
.execute(&client)
.await?
.get_receipt(&client)
.await?;
let contents = FileContentsQuery::new().file_id(file_id).execute(&client).await?;
assert_eq!(
String::from_utf8(contents.contents).unwrap(),
format!("[rust::e2e::file_append::2]{}", resources::BIG_CONTENTS)
);
let info = FileInfoQuery::new().file_id(file_id).execute(&client).await?;
assert_eq!(info.file_id, file_id);
assert_eq!(info.size, 13521);
FileDeleteTransaction::new()
.file_id(file_id)
.execute(&client)
.await?
.get_receipt(&client)
.await?;
Ok(())
}
#[tokio::test]
async fn large_contents_small_valid_duration() -> anyhow::Result<()> {
let Some(TestEnvironment { config, client }) = setup_nonfree() else {
return Ok(());
};
let Some(op) = &config.operator else {
log::debug!("skipping test due to missing operator");
return Ok(());
};
let file_id = FileCreateTransaction::new()
.keys([op.private_key.public_key()])
.contents("[rust::e2e::file_append::3]")
.execute(&client)
.await?
.get_receipt(&client)
.await?
.file_id
.unwrap();
FileAppendTransaction::new()
.file_id(file_id)
.contents(resources::BIG_CONTENTS)
.transaction_valid_duration(Duration::seconds(25))
.execute(&client)
.await?
.get_receipt(&client)
.await?;
let contents = FileContentsQuery::new().file_id(file_id).execute(&client).await?;
assert_eq!(
String::from_utf8(contents.contents).unwrap(),
format!("[rust::e2e::file_append::3]{}", resources::BIG_CONTENTS)
);
let info = FileInfoQuery::new().file_id(file_id).execute(&client).await?;
assert_eq!(info.file_id, file_id);
assert_eq!(info.size, 13521);
FileDeleteTransaction::new()
.file_id(file_id)
.execute(&client)
.await?
.get_receipt(&client)
.await?;
Ok(())
}