public void SyncRemoteUpdate() { var serverUri = "http://localhost:8081"; SimpleServerMethods.ResetData(); using (var server = new SimpleServer(serverUri, getMethod: SimpleServerMethods.GetMultiplePeople)) { server.Start(); DfdsJsonSerializer serializer = new DfdsJsonSerializer(); var settings = new DfdsServiceSettings(); settings.DefaultSyncPeriodSeconds = 5; settings.LocalStore = new MemoryStore(); settings.RemoteStore = new RestBasedStore(serverUri, serializer); bool syncComplete = false; var svc = new DeviceFirstDataService(settings); svc.SyncCompleted += delegate { syncComplete = true; }; svc.Register <Person>("PersonID"); // local store will be empty Assert.AreEqual(0, settings.LocalStore.Count <Person>()); // when sync happens, we'll have 3 while (!syncComplete) { Thread.Sleep(500); } syncComplete = false; // get a remote store person and directly modify it var person = SimpleServerMethods.People.First(p => p.PersonID == 1); person.Name = "Billy Jean"; person.LastChanged = DateTime.Now; // wait for the change to sync while (!syncComplete) { Thread.Sleep(500); } syncComplete = false; // does the local match? var check = svc.GetSingle <Person>(1); Assert.AreEqual(person.Name, check.Name); while (!syncComplete) { Thread.Sleep(500); } Assert.AreEqual(3, settings.LocalStore.Count <Person>()); } }
public void NullRemoteStoreTest() { var settings = new DfdsServiceSettings(); settings.LocalStore = new MemoryStore(); var svc = new DeviceFirstDataService(settings); }
public void SyncLocalDeleteAll() { var serverUri = "http://localhost:8081"; SimpleServerMethods.ResetData(); using (var server = new SimpleServer(serverUri, getMethod: SimpleServerMethods.GetMultiplePeople, deleteMethod: SimpleServerMethods.DeletePerson)) { server.Start(); DfdsJsonSerializer serializer = new DfdsJsonSerializer(); var settings = new DfdsServiceSettings(); settings.DefaultSyncPeriodSeconds = 5; settings.LocalStore = new MemoryStore(); settings.RemoteStore = new RestBasedStore(serverUri, serializer); bool syncComplete = false; var svc = new DeviceFirstDataService(settings); svc.SyncCompleted += delegate { syncComplete = true; }; svc.Register <Person>("PersonID"); // local store will be empty Assert.AreEqual(0, settings.LocalStore.Count <Person>()); // when sync happens, we'll have 3 while (!syncComplete) { Thread.Sleep(500); } syncComplete = false; svc.RemoveAll <Person>(); Assert.AreEqual(0, settings.LocalStore.Count <Person>()); // wait for the change to sync while (!syncComplete) { Thread.Sleep(500); } syncComplete = false; Assert.AreEqual(0, SimpleServerMethods.People.Count()); Assert.AreEqual(0, settings.LocalStore.Count <Person>()); while (!syncComplete) { Thread.Sleep(500); } Assert.AreEqual(0, settings.LocalStore.Count <Person>()); } }
public void InvalidRegistrationTest3() { var settings = new DfdsServiceSettings(); settings.LocalStore = new MemoryStore(); settings.RemoteStore = new NopRemoteStore(); var svc = new DeviceFirstDataService(settings); svc.Register <Person>(" "); }
public void SyncLocalInsert() { var serverUri = "http://localhost:8081"; SimpleServerMethods.ResetData(); using (var server = new SimpleServer(serverUri, getMethod: SimpleServerMethods.GetMultiplePeople, postMethod: SimpleServerMethods.PostPeople)) { server.Start(); DfdsJsonSerializer serializer = new DfdsJsonSerializer(); var settings = new DfdsServiceSettings(); settings.DefaultSyncPeriodSeconds = 5; settings.LocalStore = new MemoryStore(); settings.RemoteStore = new RestBasedStore(serverUri, serializer); bool syncComplete = false; var svc = new DeviceFirstDataService(settings); svc.SyncCompleted += delegate { syncComplete = true; }; svc.Register <Person>("PersonID"); // local store will be empty Assert.AreEqual(0, settings.LocalStore.Count <Person>()); // when sync happens, we'll have 3 while (!syncComplete) { Thread.Sleep(500); } syncComplete = false; svc.Store(new Person("Lola L-O-L-A Lola")); // initial population of the store is 3 Assert.AreEqual(4, settings.LocalStore.Count <Person>()); // the query above triggers an insert on the remote, local still will be 3 while (!syncComplete) { Thread.Sleep(500); } syncComplete = false; Assert.AreEqual(4, settings.LocalStore.Count <Person>()); } }
public void TestGetMultiple() { var serverUri = "http://localhost:8081"; var server = new SimpleServer(serverUri, getMethod: GetMultipleItems); server.Start(); var serializer = new DfdsJsonSerializer(); var settings = new DfdsServiceSettings() { LocalStore = new MemoryStore(), RemoteStore = new RestBasedStore(serverUri, serializer) }; var svc = new DeviceFirstDataService(settings); // this is an internal call test - client will never actually use it var people = svc.RemoteStore.GetMultiple(typeof(Person), null); }
public async Task BasicAsyncOperationsTest() { var settings = new DfdsServiceSettings() { LocalStore = new MemoryStore(), RemoteStore = new NopRemoteStore() }; var svc = new DeviceFirstDataService(settings); svc.Register <Person>("PersonID"); var person1 = new Person("John Doe"); var person2 = new Person("Jane Doe"); var person3 = new Person("Marie Smith"); // Store var p1 = await svc.StoreAsync(person1); Assert.IsNotNull(p1); Assert.AreEqual(1, p1.PersonID); var p2 = await svc.StoreAsync(person2); Assert.IsNotNull(p2); Assert.AreEqual(2, p2.PersonID); var p3 = await svc.StoreAsync(person3); Assert.IsNotNull(p3); Assert.AreEqual(3, p3.PersonID); // retrieve all var all = await svc.GetMultipleAsync <Person>(); Assert.AreEqual(3, all.Length); // retrieve by ID var pg1 = await svc.GetSingleAsync <Person>(1); Assert.AreEqual(p1, pg1); var pg2 = await svc.GetSingleAsync <Person>(2); Assert.AreEqual(p2, pg2); var pg3 = await svc.GetSingleAsync <Person>(3); Assert.AreEqual(p3, pg3); // update var newName = "Johnathan Doe"; person1.Name = newName; await svc.StoreAsync(person1); var up1 = await svc.GetSingleAsync <Person>(person1.PersonID); Assert.AreEqual(up1.Name, newName); // delete by id Assert.AreEqual(3, svc.Count <Person>()); await svc.RemoveAsync(person2); var np2 = await svc.GetSingleAsync <Person>(2); Assert.AreEqual(2, svc.Count <Person>()); Assert.IsNull(np2); svc.Remove <Person>(3); var np3 = await svc.GetSingleAsync <Person>(3); Assert.AreEqual(1, svc.Count <Person>()); Assert.IsNull(np3); // delete all await svc.StoreAsync(person1); await svc.StoreAsync(person2); await svc.StoreAsync(person3); Assert.AreEqual(3, svc.Count <Person>()); await svc.RemoveAllAsync <Person>(); Assert.AreEqual(0, svc.Count <Person>()); }