コード例 #1
0
        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>());
            }
        }
コード例 #2
0
        public void NullRemoteStoreTest()
        {
            var settings = new DfdsServiceSettings();

            settings.LocalStore = new MemoryStore();
            var svc = new DeviceFirstDataService(settings);
        }
コード例 #3
0
        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>());
            }
        }
コード例 #4
0
        public void InvalidRegistrationTest3()
        {
            var settings = new DfdsServiceSettings();

            settings.LocalStore  = new MemoryStore();
            settings.RemoteStore = new NopRemoteStore();
            var svc = new DeviceFirstDataService(settings);

            svc.Register <Person>("    ");
        }
コード例 #5
0
        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>());
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
ファイル: LocalStoreTests.cs プロジェクト: ctacke/dfds
        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>());
        }