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); }
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."); } }