Пример #1
0
        public void SerializedPacket_WriteRead_ComplexPacket()
        {
            DataBuffer       buffer = new DataBuffer();
            TestComplexModel model  = new TestComplexModel();

            model.Data         = Guid.NewGuid().ToString();
            model.Value        = random.Next();
            model.Model1       = new TestModel();
            model.Model2       = new TestModel();
            model.Model1.Data  = Guid.NewGuid().ToString();
            model.Model2.Data  = Guid.NewGuid().ToString();
            model.Model1.Value = random.Next();
            model.Model2.Value = random.Next();

            model.WriteTo(buffer);
            buffer.Seek(0);

            TestComplexModel result = new TestComplexModel();

            result.ReadFrom(buffer);

            Assert.AreEqual(result.Data, model.Data);
            Assert.AreEqual(result.Value, model.Value);
            Assert.AreEqual(result.Model1.Data, model.Model1.Data);
            Assert.AreEqual(result.Model2.Data, model.Model2.Data);
            Assert.AreEqual(result.Model1.Value, model.Model1.Value);
            Assert.AreEqual(result.Model2.Value, model.Model2.Value);
        }
Пример #2
0
        public void TestSaveShutdownReInitialize()
        {
            _databaseInstance.PurgeAsync().Wait();

            // test saving and reloading
            var expected1 = TestModel.MakeTestModel();
            var expected2 = TestModel.MakeTestModel();

            expected2.GuidNullable = null;

            var expectedComplex = new TestComplexModel
            {
                Id     = 5,
                Dict   = new Dictionary <string, string>(),
                Models = new ObservableCollection <TestModel>()
            };

            for (var x = 0; x < 10; x++)
            {
                expectedComplex.Dict.Add(Guid.NewGuid().ToString(), Guid.NewGuid().ToString());
                expectedComplex.Models.Add(TestModel.MakeTestModel());
            }

            _databaseInstance.SaveAsync(expected1).Wait();
            _databaseInstance.SaveAsync(expected2).Wait();
            _databaseInstance.SaveAsync(expectedComplex).Wait();

            _databaseInstance.FlushAsync().Wait();

            // shut it down

            _engine.Dispose();
            var driver = _databaseInstance.Driver;

            _databaseInstance = null;

            // bring it back up
            _engine = Factory.NewEngine();
            _engine.Activate();
            _databaseInstance =
                _engine.SterlingDatabase.RegisterDatabase <TestDatabaseInstance>(TestContext.TestName, driver);

            var actual1 = _databaseInstance.LoadAsync <TestModel>(expected1.Key).Result;
            var actual2 = _databaseInstance.LoadAsync <TestModel>(expected2.Key).Result;

            Assert.NotNull(actual1);                                    //Load failed for 1.");
            Assert.Equal(expected1.Key, actual1.Key);                   //Load failed (1): key mismatch.");
            Assert.Equal(expected1.Data, actual1.Data);                 //Load failed(1): data mismatch.");
            Assert.NotNull(actual1.SubClass);                           //Load failed (1): sub class is null.");
            Assert.Equal(expected1.SubClass.NestedText,
                         actual1.SubClass.NestedText);                  //Load failed (1): sub class text mismtach.");
            Assert.Equal(expected1.GuidNullable, actual1.GuidNullable); //Load failed (1): nullable Guid mismtach.");

            Assert.NotNull(actual2);                                    //Load failed for 2.");
            Assert.Equal(expected2.Key, actual2.Key);                   //Load failed (2): key mismatch.");
            Assert.Equal(expected2.Data, actual2.Data);                 //Load failed (2): data mismatch.");
            Assert.NotNull(actual2.SubClass);                           //Load failed (2): sub class is null.");
            Assert.Equal(expected2.SubClass.NestedText,
                         actual2.SubClass.NestedText);                  //Load failed (2): sub class text mismatch.");
            Assert.Null(expected2.GuidNullable);                        //Load failed (2): nullable Guid was not loaded as null.");

            //insert a third
            var expected3 = TestModel.MakeTestModel();

            _databaseInstance.SaveAsync(expected3).Wait();

            actual1 = _databaseInstance.LoadAsync <TestModel>(expected1.Key).Result;
            actual2 = _databaseInstance.LoadAsync <TestModel>(expected2.Key).Result;
            var actual3 = _databaseInstance.LoadAsync <TestModel>(expected3.Key).Result;

            Assert.NotNull(actual1);                    //Load failed for 1.");
            Assert.Equal(expected1.Key, actual1.Key);   //Load failed (1): key mismatch.");
            Assert.Equal(expected1.Data, actual1.Data); //Load failed(1): data mismatch.");
            Assert.NotNull(actual1.SubClass);           //Load failed (1): sub class is null.");
            Assert.Equal(expected1.SubClass.NestedText,
                         actual1.SubClass.NestedText);  //Load failed (1): sub class text mismtach.");

            Assert.NotNull(actual2);                    //Load failed for 2.");
            Assert.Equal(expected2.Key, actual2.Key);   //Load failed (2): key mismatch.");
            Assert.Equal(expected2.Data, actual2.Data); //Load failed (2): data mismatch.");
            Assert.NotNull(actual2.SubClass);           //Load failed (2): sub class is null.");
            Assert.Equal(expected2.SubClass.NestedText,
                         actual2.SubClass.NestedText);  //Load failed (2): sub class text mismtach.");

            Assert.NotNull(actual3);                    //Load failed for 3.");
            Assert.Equal(expected3.Key, actual3.Key);   //Load failed (3): key mismatch.");
            Assert.Equal(expected3.Data, actual3.Data); //Load failed (3): data mismatch.");
            Assert.NotNull(actual3.SubClass);           //Load failed (3): sub class is null.");
            Assert.Equal(expected3.SubClass.NestedText,
                         actual3.SubClass.NestedText);  //Load failed (3): sub class text mismtach.");

            // load the complex
            var actualComplex = _databaseInstance.LoadAsync <TestComplexModel>(5).Result;

            Assert.NotNull(actualComplex);      //Load failed (complex): object is null.");
            Assert.Equal(5, actualComplex.Id);  //Load failed: id mismatch.");
            Assert.NotNull(actualComplex.Dict); //Load failed: dictionary is null.");
            foreach (var key in expectedComplex.Dict.Keys)
            {
                var value = expectedComplex.Dict[key];
                Assert.True(actualComplex.Dict.Contains(key)); //Load failed: dictionary is missing key.");
                Assert.Equal(value, actualComplex.Dict[key]);  //Load failed: dictionary has invalid value.");
            }

            Assert.NotNull(actualComplex.Models); //Load failed: complex missing the model collection.");

            foreach (var model in expectedComplex.Models)
            {
                var targetModel = actualComplex.Models.Where(m => m.Key.Equals(model.Key)).FirstOrDefault();
                Assert.NotNull(targetModel);                   //Load failed for nested model.");
                Assert.Equal(model.Key, targetModel.Key);      //Load failed for nested model: key mismatch.");
                Assert.Equal(model.Data, targetModel.Data);    //Load failed for nested model: data mismatch.");
                Assert.NotNull(targetModel.SubClass);          //Load failed for nested model: sub class is null.");
                Assert.Equal(model.SubClass.NestedText,
                             targetModel.SubClass.NestedText); //Load failed for nested model: sub class text mismtach.");
            }
        }