-
-
Notifications
You must be signed in to change notification settings - Fork 309
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Remove taskchampion-sync-server (#3380)
This crate has been moved to https://github.com/GothenburgBitFactory/taskchampion-sync-server. The integration-tests repo used the sync server to test integration between taskchampion and the sync-server. We should do that again, but after taskchampion moves to its own repo (#3209). In the interim, the cross-sync integration test can simply test syncing between local servers, but the snapshot test is no longer useful as the local server does not support snapshots.
- Loading branch information
Showing
20 changed files
with
73 additions
and
3,601 deletions.
There are no files selected for viewing
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,97 +1,66 @@ | ||
use actix_web::{App, HttpServer}; | ||
use pretty_assertions::assert_eq; | ||
use taskchampion::{Replica, ServerConfig, Status, StorageConfig, Uuid}; | ||
use taskchampion_sync_server::{storage::InMemoryStorage, Server}; | ||
use taskchampion::{Replica, ServerConfig, Status, StorageConfig}; | ||
use tempfile::TempDir; | ||
|
||
#[test] | ||
fn cross_sync() -> anyhow::Result<()> { | ||
// set up two replicas, and demonstrate replication between them | ||
let mut rep1 = Replica::new(StorageConfig::InMemory.into_storage()?); | ||
let mut rep2 = Replica::new(StorageConfig::InMemory.into_storage()?); | ||
|
||
let tmp_dir = TempDir::new().expect("TempDir failed"); | ||
let server_config = ServerConfig::Local { | ||
server_dir: tmp_dir.path().to_path_buf(), | ||
}; | ||
let mut server = server_config.into_server()?; | ||
|
||
// add some tasks on rep1 | ||
let t1 = rep1.new_task(Status::Pending, "test 1".into())?; | ||
let t2 = rep1.new_task(Status::Pending, "test 2".into())?; | ||
|
||
// modify t1 | ||
let mut t1 = t1.into_mut(&mut rep1); | ||
t1.start()?; | ||
let t1 = t1.into_immut(); | ||
|
||
rep1.sync(&mut server, false)?; | ||
rep2.sync(&mut server, false)?; | ||
|
||
// those tasks should exist on rep2 now | ||
let t12 = rep2 | ||
.get_task(t1.get_uuid())? | ||
.expect("expected task 1 on rep2"); | ||
let t22 = rep2 | ||
.get_task(t2.get_uuid())? | ||
.expect("expected task 2 on rep2"); | ||
|
||
assert_eq!(t12.get_description(), "test 1"); | ||
assert_eq!(t12.is_active(), true); | ||
assert_eq!(t22.get_description(), "test 2"); | ||
assert_eq!(t22.is_active(), false); | ||
|
||
// make non-conflicting changes on the two replicas | ||
let mut t2 = t2.into_mut(&mut rep1); | ||
t2.set_status(Status::Completed)?; | ||
let t2 = t2.into_immut(); | ||
|
||
let mut t12 = t12.into_mut(&mut rep2); | ||
t12.set_status(Status::Completed)?; | ||
|
||
// sync those changes back and forth | ||
rep1.sync(&mut server, false)?; // rep1 -> server | ||
rep2.sync(&mut server, false)?; // server -> rep2, rep2 -> server | ||
rep1.sync(&mut server, false)?; // server -> rep1 | ||
|
||
let t1 = rep1 | ||
.get_task(t1.get_uuid())? | ||
.expect("expected task 1 on rep1"); | ||
assert_eq!(t1.get_status(), Status::Completed); | ||
|
||
let t22 = rep2 | ||
.get_task(t2.get_uuid())? | ||
.expect("expected task 2 on rep2"); | ||
assert_eq!(t22.get_status(), Status::Completed); | ||
|
||
#[actix_rt::test] | ||
async fn cross_sync() -> anyhow::Result<()> { | ||
async fn server() -> anyhow::Result<u16> { | ||
let _ = env_logger::builder() | ||
.is_test(true) | ||
.filter_level(log::LevelFilter::Trace) | ||
.try_init(); | ||
|
||
let server = Server::new(Default::default(), Box::new(InMemoryStorage::new())); | ||
let httpserver = HttpServer::new(move || App::new().configure(|sc| server.config(sc))) | ||
.bind("0.0.0.0:0")?; | ||
|
||
// bind was to :0, so the kernel will have selected an unused port | ||
let port = httpserver.addrs()[0].port(); | ||
actix_rt::spawn(httpserver.run()); | ||
Ok(port) | ||
} | ||
|
||
fn client(port: u16) -> anyhow::Result<()> { | ||
// set up two replicas, and demonstrate replication between them | ||
let mut rep1 = Replica::new(StorageConfig::InMemory.into_storage()?); | ||
let mut rep2 = Replica::new(StorageConfig::InMemory.into_storage()?); | ||
|
||
let client_id = Uuid::new_v4(); | ||
let encryption_secret = b"abc123".to_vec(); | ||
let make_server = || { | ||
ServerConfig::Remote { | ||
origin: format!("http://127.0.0.1:{}", port), | ||
client_id, | ||
encryption_secret: encryption_secret.clone(), | ||
} | ||
.into_server() | ||
}; | ||
|
||
let mut serv1 = make_server()?; | ||
let mut serv2 = make_server()?; | ||
|
||
// add some tasks on rep1 | ||
let t1 = rep1.new_task(Status::Pending, "test 1".into())?; | ||
let t2 = rep1.new_task(Status::Pending, "test 2".into())?; | ||
|
||
// modify t1 | ||
let mut t1 = t1.into_mut(&mut rep1); | ||
t1.start()?; | ||
let t1 = t1.into_immut(); | ||
|
||
rep1.sync(&mut serv1, false)?; | ||
rep2.sync(&mut serv2, false)?; | ||
|
||
// those tasks should exist on rep2 now | ||
let t12 = rep2 | ||
.get_task(t1.get_uuid())? | ||
.expect("expected task 1 on rep2"); | ||
let t22 = rep2 | ||
.get_task(t2.get_uuid())? | ||
.expect("expected task 2 on rep2"); | ||
|
||
assert_eq!(t12.get_description(), "test 1"); | ||
assert_eq!(t12.is_active(), true); | ||
assert_eq!(t22.get_description(), "test 2"); | ||
assert_eq!(t22.is_active(), false); | ||
|
||
// make non-conflicting changes on the two replicas | ||
let mut t2 = t2.into_mut(&mut rep1); | ||
t2.set_status(Status::Completed)?; | ||
let t2 = t2.into_immut(); | ||
|
||
let mut t12 = t12.into_mut(&mut rep2); | ||
t12.set_status(Status::Completed)?; | ||
|
||
// sync those changes back and forth | ||
rep1.sync(&mut serv1, false)?; // rep1 -> server | ||
rep2.sync(&mut serv2, false)?; // server -> rep2, rep2 -> server | ||
rep1.sync(&mut serv1, false)?; // server -> rep1 | ||
|
||
let t1 = rep1 | ||
.get_task(t1.get_uuid())? | ||
.expect("expected task 1 on rep1"); | ||
assert_eq!(t1.get_status(), Status::Completed); | ||
|
||
let t22 = rep2 | ||
.get_task(t2.get_uuid())? | ||
.expect("expected task 2 on rep2"); | ||
assert_eq!(t22.get_status(), Status::Completed); | ||
|
||
Ok(()) | ||
} | ||
|
||
let port = server().await?; | ||
actix_rt::task::spawn_blocking(move || client(port)).await??; | ||
Ok(()) | ||
} |
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
Oops, something went wrong.