public void TestReadWithNoLogFile()
 {
     var storePath = Path.Combine(BaseDirectory, "ReadWithNoLogFile");
     Directory.CreateDirectory(storePath);
     var log = new PersistentStatisticsLog(_persistenceManager, storePath);
     Assert.AreEqual(0, log.GetStatistics().Count());
 }
        public void TestAppendPredicateStats()
        {
            var storePath = Path.Combine(BaseDirectory, "AppendPredicateStats");

            Directory.CreateDirectory(storePath);
            var log = new PersistentStatisticsLog(_persistenceManager, storePath);
            var timestamp = DateTime.Now;
            var predicates = new Dictionary<string, ulong> { { "http://example.org/p1", 1 }, { "http://example.org/p2", 2 } };
            log.AppendStatistics(new StoreStatistics(1, timestamp, 3, predicates));
            Assert.IsTrue(File.Exists(Path.Combine(storePath, "stats.bs")));
            Assert.IsTrue(File.Exists(Path.Combine(storePath, "statsheaders.bs")));

            var allStats = log.GetStatistics().ToList();
            Assert.AreEqual(1, allStats.Count);

            // Create a new log instance
            log = new PersistentStatisticsLog(_persistenceManager, storePath);
            timestamp = DateTime.Now;
            predicates = new Dictionary<string, ulong>{{"http://example.org/p1", 2}, {"http://example.org/p2", 2}, {"http://example.org/p3", 3}};
            log.AppendStatistics(new StoreStatistics(2, timestamp, 7, predicates));

            // Retrieve stats via a new log instance
            log = new PersistentStatisticsLog(_persistenceManager, storePath);
            var stats = log.GetStatistics().FirstOrDefault();
            Assert.IsNotNull(stats);

            Assert.AreEqual(2UL, stats.CommitNumber);
            Assert.AreEqual(timestamp, stats.CommitTime);
            Assert.AreEqual(7UL, stats.TripleCount);
            Assert.IsTrue(stats.PredicateTripleCounts.ContainsKey("http://example.org/p1"));
            Assert.AreEqual(2UL, stats.PredicateTripleCounts["http://example.org/p1"]);
            Assert.IsTrue(stats.PredicateTripleCounts.ContainsKey("http://example.org/p2"));
            Assert.AreEqual(2UL, stats.PredicateTripleCounts["http://example.org/p2"]);
            Assert.IsTrue(stats.PredicateTripleCounts.ContainsKey("http://example.org/p3"));
            Assert.AreEqual(3UL, stats.PredicateTripleCounts["http://example.org/p3"]);
            Assert.AreEqual(3, stats.PredicateTripleCounts.Count);

        }
        public void TestCreateNewLogFile()
        {
            var storePath = Path.Combine(BaseDirectory, "CreateNewLogFile");
            Directory.CreateDirectory(storePath);
            var log = new PersistentStatisticsLog(_persistenceManager, storePath);
            var timestamp = DateTime.Now;
            var predicates = new Dictionary<string, ulong> {{"http://example.org/p1", 1}, {"http://example.org/p2", 2}};
            log.AppendStatistics(new StoreStatistics(1, timestamp, 3, predicates));
            Assert.IsTrue(File.Exists(Path.Combine(storePath, "stats.bs")));
            Assert.IsTrue(File.Exists(Path.Combine(storePath, "statsheaders.bs")));

            var allStats = log.GetStatistics().ToList();
            Assert.AreEqual(1, allStats.Count);

            Assert.AreEqual(1UL, allStats[0].CommitNumber);
            Assert.AreEqual(timestamp, allStats[0].CommitTime);
            Assert.AreEqual(3UL, allStats[0].TripleCount);
            Assert.IsTrue(allStats[0].PredicateTripleCounts.ContainsKey("http://example.org/p1"));
            Assert.AreEqual(1UL, allStats[0].PredicateTripleCounts["http://example.org/p1"]);
            Assert.IsTrue(allStats[0].PredicateTripleCounts.ContainsKey("http://example.org/p2"));
            Assert.AreEqual(2UL, allStats[0].PredicateTripleCounts["http://example.org/p2"]);
            Assert.AreEqual(2, allStats[0].PredicateTripleCounts.Count);
        }
        public void TestReadEmptyRecord()
        {
            var storePath = Path.Combine(BaseDirectory, "ReadEmptyRecord");

            Directory.CreateDirectory(storePath);
            var log = new PersistentStatisticsLog(_persistenceManager, storePath);
            var timestamp = DateTime.Now;
            var predicates = new Dictionary<string, ulong>();
            log.AppendStatistics(new StoreStatistics(1, timestamp, 0, predicates));
            Assert.IsTrue(File.Exists(Path.Combine(storePath, "stats.bs")));
            Assert.IsTrue(File.Exists(Path.Combine(storePath, "statsheaders.bs")));

            var allStats = log.GetStatistics().ToList();
            Assert.AreEqual(1, allStats.Count);

            Assert.AreEqual(1UL, allStats[0].CommitNumber);
            Assert.AreEqual(timestamp, allStats[0].CommitTime);
            Assert.AreEqual(0UL, allStats[0].TripleCount);
            Assert.AreEqual(0, allStats[0].PredicateTripleCounts.Count);
        }