コード例 #1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="IdentityTrigger{T}"/> class.
 /// </summary>
 /// <param name="database">
 /// The instance of the Sterling Database that is to be assigned with an IdentityTrigger
 /// </param>
 public IdentityTrigger(ISterlingDatabaseInstance database)
 {
     if (database.Query <T, int>().Any())
     {
         idx = database.Query <T, int>().Max(key => key.Key) + 1;
     }
 }
コード例 #2
0
        public void TestDatabaseDeleteByInstance()
        {
            var testModel = TestModel.MakeTestModel();

            Func <int> countKeys  = () => _databaseInstance.Query <TestModel, int>().Count();
            Func <int> countIndex =
                () => _databaseInstance.Query <TestModel, string, int>(TestDatabaseInstance.DATAINDEX).Count();

            Assert.Equal(0, countKeys());  //,"Database initialized with invalid key count.");
            Assert.Equal(0, countIndex()); //Database initialized with invalid index count.");

            var key = _databaseInstance.SaveAsync(testModel).Result;

            Assert.Equal(1, countKeys());  //Keys not updated with save.");
            Assert.Equal(1, countIndex()); //Index count not updated with save.");

            var actual = _databaseInstance.LoadAsync <TestModel>(key).Result;

            Assert.NotNull(actual); //Test model did not re-load.");

            _databaseInstance.DeleteAsync(actual).Wait();

            Assert.Equal(0, countKeys());  //Database updated with invalid key count after delete.");
            Assert.Equal(0, countIndex()); //Database updated with invalid index count after delete.");

            actual = _databaseInstance.LoadAsync <TestModel>(key).Result;

            Assert.Null(actual); //Delete failed: loaded actual value after delete.");
        }
コード例 #3
0
 public IdentityTrigger(ISterlingDatabaseInstance database)
 {
     // if a record exists, set it to the highest value plus 1
     if (database.Query <T, int>().Any())
     {
         _idx = database.Query <T, int>().Max(key => key.Key) + 1;
     }
 }
コード例 #4
0
        public void TestDescendingQuery()
        {
            var descending = from k in _databaseInstance.Query <TestModel, int>() orderby k.Key descending select k.Key;

            var idx = _modelList.Count - 1;

            foreach (var key in descending)
            {
                Assert.Equal(_modelList[idx--].Key, key); //Descending query failed: key mismatch.");
            }
        }
コード例 #5
0
        public void TestSequentialQuery()
        {
            // set up queries
            var sequential = from k in _databaseInstance.Query <TestModel, int>() orderby k.Key select k.Key;

            var idx = 0;

            foreach (var key in sequential)
            {
                Assert.AreEqual(_modelList[idx++].Key, key, "Sequential query failed: key mismatch.");
            }
        }
コード例 #6
0
        public void TestInit()
        {
            _engine = Factory.NewEngine();
            _engine.Activate();
            _databaseInstance = _engine.SterlingDatabase.RegisterDatabase <TriggerDatabase>(TestContext.TestName, GetDriver());
            _databaseInstance.PurgeAsync().Wait();

            // get the next key in the database for auto-assignment
            var nextKey = _databaseInstance.Query <TriggerClass, int>().Any() ?
                          (from keys in _databaseInstance.Query <TriggerClass, int>()
                           select keys.Key).Max() + 1 : 1;

            _databaseInstance.RegisterTrigger(new TriggerClassTestTrigger(nextKey));
        }
コード例 #7
0
        public void TestSequentialQuery()
        {
            // set up queries
            var sequential = from k in _databaseInstance.Query <TestModel, string, int>(TestDatabaseInstance.DATAINDEX) orderby k.Index select k.Key;

            _modelList.Sort((m1, m2) => m1.Data.CompareTo(m2.Data));

            var idx = 0;

            foreach (var key in sequential)
            {
                Assert.AreEqual(_modelList[idx++].Key, key, "Sequential query failed: key mismatch.");
            }
            Assert.AreEqual(idx, _modelList.Count, "Error in query: wrong number of rows.");
        }
コード例 #8
0
        public void TestCustomSaveAndLoad()
        {
            var expectedList = new[] { TestModel.MakeTestModel(), TestModel.MakeTestModel(), TestModel.MakeTestModel() };
            var expected     = new NotSupportedClass {
                Id = 1
            };

            expected.InnerList.Add(expectedList);

            var key = DatabaseInstance.SaveAsync(expected).Result;

            // confirm the test models were saved as "foreign keys"
            var count = DatabaseInstance.Query <TestModel, int>().Count();

            Assert.AreEqual(expectedList.Length, count, "Load failed: test models were not saved independently.");

            var actual = DatabaseInstance.LoadAsync <NotSupportedClass>(key).Result;

            Assert.IsNotNull(actual, "Load failed: instance is null.");
            Assert.AreEqual(expected.Id, actual.Id, "Load failed: key mismatch.");

            // cast to list
            var actualList = new List <TestModel>(actual.InnerList);

            Assert.AreEqual(expectedList.Length, actualList.Count, "Load failed: mismatch in list.");

            foreach (var matchingItem in
                     expectedList.Select(item => (from i in actualList where i.Key.Equals(item.Key) select i.Key).FirstOrDefault()).Where(matchingItem => matchingItem < 1))
            {
                Assert.Fail("Test failed: matching models not loaded.");
            }
        }
コード例 #9
0
        public void TestDescendingQuery()
        {
            var descending = from k in _databaseInstance.Query <TestModel, string, int>(TestDatabaseInstance.DATAINDEX)
                             orderby k.Index descending
                             select k.Key;

            _modelList.Sort((m1, m2) => m2.Data.CompareTo(m1.Data));

            var idx = 0;

            foreach (var key in descending)
            {
                Assert.Equal(_modelList[idx++].Key, key); //Descending query failed: key mismatch.");
            }
            Assert.Equal(idx, _modelList.Count);          //Error in query: wrong number of rows.");
        }
コード例 #10
0
ファイル: TestTruncate.cs プロジェクト: churchs19/SterlingDB
        public void TestTruncateAction()
        {
            // save a few objects
            var sample = TestModel.MakeTestModel();

            _databaseInstance.SaveAsync(sample).Wait();
            _databaseInstance.SaveAsync(TestModel.MakeTestModel()).Wait();
            _databaseInstance.SaveAsync(TestModel.MakeTestModel()).Wait();

            _databaseInstance.TruncateAsync(typeof(TestModel)).Wait();

            // query should be empty
            Assert.IsFalse(_databaseInstance.Query <TestModel, int>().Any(), "Truncate failed: key list still exists.");

            // load should be empty
            var actual = _databaseInstance.LoadAsync <TestModel>(sample.Key).Result;

            Assert.IsNull(actual, "Truncate failed: was able to load item.");
        }
コード例 #11
0
        /// <summary>
        ///     Check to see if the database has been populated. If not, populate it.
        /// </summary>
        /// <param name="database">The database instance</param>
        public static void CheckAndCreate(ISterlingDatabaseInstance database)
        {
            // register the triggers
            database.RegisterTrigger(new IdentityTrigger <ReputationModel>(database));
            database.RegisterTrigger(new IdentityTrigger <LoginCredentialModel>(database));
            database.RegisterTrigger(new IdentityTrigger <ProfileModel>(database));

            // if any are here we've already set things up because users can't delete these
            if (database.Query <ReputationModel, int>().Any())
            {
                return;
            }

            // get rid of old data
            database.Truncate(typeof(ReputationModel));
            database.Truncate(typeof(LoginCredentialModel));

            database.Flush();
        }
コード例 #12
0
        public void TestConcurrentSaveAndLoad()
        {
            var saveEvent = new ManualResetEvent(false);
            var loadEvent = new ManualResetEvent(false);

            // Initialize the DB with some data.
            foreach (var item in _modelList)
            {
                _databaseInstance.SaveAsync(item).Wait();
            }

            var savedCount = 0;

            var errorMsg = string.Empty;

            var save = new Task(() =>
            {
                try
                {
                    foreach (var item in _modelList)
                    {
                        _databaseInstance.SaveAsync(item).Wait();
                        savedCount++;
                    }

                    if (MODELS != savedCount)
                    {
                        throw new Exception("Save failed: Not all models were saved.");
                    }
                }
                catch (Exception ex)
                {
                    errorMsg = ex.AsExceptionString();
                }
                finally
                {
                    saveEvent.Set();
                }
            });

            var load = new Task(() =>
            {
                try
                {
                    var query = from key in _databaseInstance.Query <TestModel, int>()
                                select key.LazyValue.Value;
                    query.Count();

                    var list = new List <TestModel>(query);

                    if (list.Count < 1)
                    {
                        throw new Exception("Test failed: did not load any items.");
                    }
                }
                catch (Exception ex)
                {
                    errorMsg = ex.AsExceptionString();
                }
                finally
                {
                    loadEvent.Set();
                }
            });

            save.Start();
            load.Start();

            saveEvent.WaitOne(60000);
            loadEvent.WaitOne(60000);

            Assert.True(string.IsNullOrEmpty(errorMsg), string.Format("Failed concurrent load: {0}", errorMsg));
        }
コード例 #13
0
        public void TestAddBill()
        {
            _database.PurgeAsync().Wait();

            var bill = new Bill
            {
                Id   = Guid.NewGuid(),
                Name = "Test"
            };

            _database.SaveAsync(bill).Wait();

            var person1 = new Person
            {
                Id   = Guid.NewGuid(),
                Name = "Martin"
            };

            _database.SaveAsync(person1).Wait();

            var partaker1 = new Partaker
            {
                Id     = Guid.NewGuid(),
                Paid   = 42,
                Person = person1
            };

            bill.Partakers.Add(partaker1);

            _database.SaveAsync(bill).Wait();

            var person2 = new Person
            {
                Id   = Guid.NewGuid(),
                Name = "Jeremy"
            };

            _database.SaveAsync(person2).Wait();

            var partaker2 = new Partaker
            {
                Id     = Guid.NewGuid(),
                Paid   = 0,
                Person = person2
            };

            bill.Partakers.Add(partaker2);

            _database.SaveAsync(bill).Wait();

            var partaker3 = new Partaker()
            {
                Id     = Guid.NewGuid(),
                Paid   = 1,
                Person = person1
            };

            bill.Partakers.Add(partaker3);

            _database.SaveAsync(bill).Wait();

            _database.FlushAsync().Wait();

            var billKeys = _database.Query <Bill, Guid>();

            Assert.IsTrue(billKeys.Count == 1);
            Assert.AreEqual(billKeys[0].Key, bill.Id);

            var freshBill = billKeys[0].LazyValue.Value;

            Assert.IsTrue(freshBill.Partakers.Count == 3, "Bill should have exactly 3 partakers.");

            var personKeys = _database.Query <Person, Guid>();

            Assert.IsTrue(personKeys.Count == 2, "Failed to save exactly 2 persons.");

            // Compare loaded instances and verify they are equal
            var persons = (from p in freshBill.Partakers where p.Person.Id.Equals(person1.Id) select p.Person).ToList();

            // should be two of these
            Assert.AreEqual(2, persons.Count, "Failed to grab two instances of the same person.");
            Assert.AreEqual(persons[0], persons[1], "Instances were not equal.");
        }