use eidetica::sync::Address;
use super::helpers::*;
#[tokio::test]
async fn test_sync_with_http_transport() {
use eidetica::Entry;
let (_base_db, sync) = setup();
sync.enable_http_transport().unwrap();
sync.start_server_async("127.0.0.1:0").await.unwrap();
let server_addr = sync.get_server_address_async().await.unwrap();
let http_address = Address::http(&server_addr);
let entry = Entry::root_builder()
.set_subtree_data("data", r#"{"test": "value"}"#)
.build()
.expect("Entry should build successfully");
sync.send_entries_async(vec![entry], &http_address)
.await
.unwrap();
sync.stop_server_async().await.unwrap();
}
#[tokio::test]
async fn test_multiple_sync_instances_communication() {
use eidetica::Entry;
let (_base_db1, sync_server) = setup();
let (_base_db2, sync_client) = setup();
sync_server.enable_http_transport().unwrap();
sync_client.enable_http_transport().unwrap();
sync_server.start_server_async("127.0.0.1:0").await.unwrap();
let server_addr = sync_server.get_server_address_async().await.unwrap();
let entry = Entry::root_builder()
.set_subtree_data("data", r#"{"message": "hello from client"}"#)
.build()
.expect("Entry should build successfully");
let http_address = Address::http(&server_addr);
sync_client
.send_entries_async(vec![entry], &http_address)
.await
.unwrap();
sync_server.stop_server_async().await.unwrap();
}
#[tokio::test]
async fn test_send_entries_http() {
use eidetica::Entry;
let (_base_db1, sync_server) = setup();
let (_base_db2, sync_client) = setup();
sync_server.enable_http_transport().unwrap();
sync_client.enable_http_transport().unwrap();
sync_server.start_server_async("127.0.0.1:0").await.unwrap();
let server_addr = sync_server.get_server_address_async().await.unwrap();
let entry1 = Entry::root_builder()
.set_subtree_data("users", r#"{"user1": "data1"}"#)
.build()
.expect("Entry should build successfully");
let entry2 = Entry::root_builder()
.set_subtree_data("users", r#"{"user2": "data2"}"#)
.build()
.expect("Entry should build successfully");
let entries = vec![entry1, entry2];
let http_address = Address::http(&server_addr);
sync_client
.send_entries_async(entries, &http_address)
.await
.unwrap();
sync_server.stop_server_async().await.unwrap();
}
#[test]
fn test_sync_without_transport_enabled() {
use eidetica::Entry;
let (_base_db, sync) = setup();
let entry = Entry::root_builder()
.build()
.expect("Root entry should build successfully");
let result = sync.send_entries(vec![entry], &Address::http("127.0.0.1:8084"));
assert!(result.is_err());
let err = result.unwrap_err();
match err {
eidetica::Error::Sync(sync_err) => {
assert!(sync_err.is_configuration_error());
}
_ => panic!("Expected Sync error, got {err:?}"),
}
}
#[test]
fn test_sync_server_without_transport_enabled() {
let (_base_db, sync) = setup();
let result = sync.start_server("127.0.0.1:8085");
assert!(result.is_err());
let err = result.unwrap_err();
match err {
eidetica::Error::Sync(sync_err) => {
assert!(sync_err.is_configuration_error());
}
_ => panic!("Expected Sync error, got {err:?}"),
}
}
#[test]
fn test_sync_connect_to_invalid_address() {
use eidetica::Entry;
let (_base_db, sync) = setup();
sync.enable_http_transport().unwrap();
let entry = Entry::root_builder()
.build()
.expect("Root entry should build successfully");
let result = sync.send_entries(vec![entry], &Address::http("127.0.0.1:19998"));
assert!(result.is_err());
}