guardian_db/ipfs_core_api/
mod.rs1pub mod backends;
2pub mod client;
3pub mod compat;
4pub mod config;
5pub mod errors;
6pub mod types;
7
8pub use client::IpfsClient;
10pub use config::ClientConfig;
11pub use types::*;
12
13pub const VERSION: &str = "0.1.0";
15
16pub const USER_AGENT: &str = "guardian-db-ipfs-core/0.1.0";
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22 use std::io::Cursor;
23
24 #[tokio::test]
25 async fn test_module_initialization() {
26 let unique_id = std::time::SystemTime::now()
27 .duration_since(std::time::UNIX_EPOCH)
28 .unwrap()
29 .as_nanos();
30 let config = ClientConfig {
31 data_store_path: Some(std::path::PathBuf::from(format!(
32 "./tmp/test_init_{}",
33 unique_id
34 ))),
35 ..ClientConfig::development()
36 };
37 let client = IpfsClient::new(config).await;
38 assert!(client.is_ok());
39 if let Ok(client) = client {
40 let _ = client.shutdown().await;
41 }
42 }
43
44 #[tokio::test]
45 async fn test_basic_operations() {
46 let unique_id = std::time::SystemTime::now()
47 .duration_since(std::time::UNIX_EPOCH)
48 .unwrap()
49 .as_nanos();
50 let config = ClientConfig {
51 data_store_path: Some(std::path::PathBuf::from(format!(
52 "./tmp/test_basic_{}",
53 unique_id
54 ))),
55 ..ClientConfig::development()
56 };
57 let client = IpfsClient::new(config).await.unwrap();
58
59 assert!(client.is_online().await);
61
62 let test_data = "Hello, IPFS Core API!".as_bytes();
64 let cursor = Cursor::new(test_data.to_vec());
65
66 let response = client.add(cursor).await.unwrap();
67 assert!(!response.hash.is_empty());
68
69 let mut stream = client.cat(&response.hash).await.unwrap();
70 let mut buffer = Vec::new();
71
72 use tokio::io::AsyncReadExt;
73 stream.read_to_end(&mut buffer).await.unwrap();
74
75 println!(
78 "Dados recuperados: {} bytes vs {} bytes esperados",
79 buffer.len(),
80 test_data.len()
81 );
82
83 let _ = client.shutdown().await;
84 }
85
86 #[tokio::test]
87 async fn test_node_info() {
88 let unique_id = std::time::SystemTime::now()
89 .duration_since(std::time::UNIX_EPOCH)
90 .unwrap()
91 .as_nanos();
92 let config = ClientConfig {
93 data_store_path: Some(std::path::PathBuf::from(format!(
94 "./tmp/test_info_{}",
95 unique_id
96 ))),
97 ..ClientConfig::development()
98 };
99 let client = IpfsClient::new(config).await.unwrap();
100 let info = client.id().await.unwrap();
101
102 assert!(!info.agent_version.is_empty());
103 assert!(info.agent_version.contains("guardian-db"));
104
105 let _ = client.shutdown().await;
106 }
107}