Ejemplo n.º 1
0
        public void Archivers_AppLogArchiver_Single()
        {
            // Submit a single location fix to a GeoTrackerNode configured with an AppLog archiver
            // and then verify that the fix was persisted to the archive.

            const string appConfig =
                @"
&section LillTek.GeoTracker.Server

    GeoFixArchiver = LillTek.GeoTracker.Server.AppLogGeoFixArchiver:LillTek.GeoTracker.Server.dll

    // Archiver implementation specific arguments (such as a database connection string)
    // formatted as name=value pairs separated by semicolons.

    GeoFixArchiverArgs = {{

        LogName = GeoFix
    }}

&endsection
";

            try
            {
                Helper.DeleteFile(AppLogFolder, true);
                TestInit(appConfig);

                client.SubmitEntityFix("jeff", "group", new GeoFix()
                {
                    Latitude = 10, Longitude = 20
                });
                server.Stop();

                AppLogReader logReader = AppLogReader.Open("GeoFix");
                AppLogRecord record;

                try
                {
                    record = logReader.ReadDelete();

                    Assert.IsNotNull(record);
                    Assert.AreEqual(AppLogGeoFixArchiver.SchemaName, record.SchemaName);
                    Assert.AreEqual(AppLogGeoFixArchiver.SchemaVersion, record.SchemaVersion);
                    Assert.AreEqual("jeff", record["entityID"]);
                    Assert.AreEqual("group", record["groupID"]);
                    Assert.AreEqual("10", record["Latitude"]);
                    Assert.AreEqual("20", record["Longitude"]);
                }
                finally
                {
                    logReader.Close();
                }
            }
            finally
            {
                TestCleanup();
                Helper.DeleteFile(AppLogFolder, true);
            }
        }
Ejemplo n.º 2
0
        public void AppLog_Multiple_Readers()
        {
            string config =
                @"
&section LillTek.AppLog

RootFolder         = {0}
MaxFileSize        = 4096
BufferSize         = 128K
IdleCommitInterval = 5m

&endsection
";

            string       root   = TestFolder;
            string       folder = root + "\\AppLogs";
            AppLogReader reader = null;

            Helper.CreateFolderTree(root);

            try
            {
                Config.SetConfig(string.Format(config, folder).Replace('&', '#'));
                folder += "\\Test";

                reader = AppLogReader.Open("Test");

                try
                {
                    AppLogReader.Open("Test");
                    Assert.Fail("Expected a LogException indicating multiple readers.");
                }
                catch (Exception e)
                {
                    Assert.AreEqual(typeof(LogException).Name, e.GetType().Name);
                }
            }
            finally
            {
                Config.SetConfig(null);

                if (reader != null)
                {
                    reader.Close();
                }
            }

            DeleteFolder(root);
        }
Ejemplo n.º 3
0
        public void AppLog_ReadWrite_DefaultLocation()
        {
            string       folderPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), @"LillTek\AppLogs\Test");
            AppLogWriter writer = null;
            AppLogReader reader = null;
            AppLogRecord rWrite, rRead;

            try
            {
                Helper.DeleteFile(folderPath, true);

                writer = AppLogWriter.Open("Test", "my schema", new Version("1.2.3.4"), 0);

                rWrite = new AppLogRecord();
                rWrite.Add("Foo", "Bar");
                writer.Write(rWrite);
                writer.Close();
                writer = null;

                reader = AppLogReader.Open("Test");
                rRead  = reader.Read();
                Assert.AreEqual(rWrite, rRead);
                Assert.AreEqual("my schema", rRead.SchemaName);
                Assert.AreEqual(new Version("1.2.3.4"), rRead.SchemaVersion);
                Assert.IsNull(reader.Read());
                Assert.IsNull(reader.Read());
                reader.Close();
                reader = null;

                Assert.IsTrue(Directory.Exists(folderPath));
            }
            finally
            {
                Config.SetConfig(null);

                if (writer != null)
                {
                    writer.Close();
                }

                if (reader != null)
                {
                    reader.Close();
                }

                Helper.DeleteFile(folderPath, true);
            }
        }
Ejemplo n.º 4
0
 public IReliableMessenger(AppLogWriter logWriter, AppLogReader logReader, ReliableMessengerConfig config)
 {
 }
Ejemplo n.º 5
0
        public void AppLog_ReadWrite_SpecificLocation()
        {
            string config =
                @"
&section LillTek.AppLog

RootFolder         = {0}
MaxFileSize        = 4096
BufferSize         = 128K
IdleCommitInterval = 5m

&endsection
";

            string       root = TestFolder;
            string       folder = root + "\\AppLogs";
            AppLogWriter writer = null;
            AppLogReader reader = null;
            AppLogRecord rWrite, rRead;

            Helper.CreateFolderTree(root);

            try
            {
                Config.SetConfig(string.Format(config, folder).Replace('&', '#'));
                folder += "\\Test";

                writer = AppLogWriter.Open("Test", "my schema", new Version("1.2.3.4"), 0);

                rWrite = new AppLogRecord();
                rWrite.Add("Foo", "Bar");
                writer.Write(rWrite);
                writer.Close();
                writer = null;

                reader = AppLogReader.Open("Test");
                rRead  = reader.Read();
                Assert.AreEqual(rWrite, rRead);
                Assert.AreEqual("my schema", rRead.SchemaName);
                Assert.AreEqual(new Version("1.2.3.4"), rRead.SchemaVersion);
                Assert.IsNull(reader.Read());
                Assert.IsNull(reader.Read());
                reader.Close();
                reader = null;
            }
            finally
            {
                Config.SetConfig(null);

                if (writer != null)
                {
                    writer.Close();
                }

                if (reader != null)
                {
                    reader.Close();
                }
            }

            DeleteFolder(root);
        }
Ejemplo n.º 6
0
        public void AppLog_Position_END()
        {
            string config =
                @"
&section LillTek.AppLog

RootFolder         = {0}
MaxFileSize        = 4096
BufferSize         = 128K
IdleCommitInterval = 5m

&endsection
";

            string       root   = TestFolder;
            string       folder = root + "\\AppLogs";
            AppLogWriter writer = null;
            AppLogReader reader = null;
            AppLogRecord r;

            byte[] data;
            string posEnd;

            data = new byte[2048];
            for (int i = 0; i < data.Length; i++)
            {
                data[i] = (byte)i;
            }

            Helper.CreateFolderTree(root);

            try
            {
                Config.SetConfig(string.Format(config, folder).Replace('&', '#'));
                folder += "\\Test";

                writer = AppLogWriter.Open("Test", "my schema", new Version("1.2.3.4"), 0);

                for (int i = 0; i < 10; i++)
                {
                    r = new AppLogRecord();
                    r.Add("Index", i.ToString());
                    r.Add("Data", data);
                    writer.Write(r);
                }

                writer.Commit();

                Assert.AreEqual(5, Directory.GetFiles(folder, "*.log").Length);
                Assert.AreEqual(1, Directory.GetFiles(folder, "*.new").Length);
                Assert.IsTrue(File.Exists(folder + "\\Writer.lock"));

                reader = AppLogReader.Open("Test");

                for (int i = 0; i < 10; i++)
                {
                    r = reader.ReadDelete();
                    Assert.AreEqual("my schema", r.SchemaName);
                    Assert.AreEqual(new Version("1.2.3.4"), r.SchemaVersion);

                    Assert.AreEqual(i.ToString(), r["index"]);
                    CollectionAssert.AreEqual(data, (byte[])r["data"]);
                }

                Assert.IsNull(reader.ReadDelete());
                Assert.IsNull(reader.ReadDelete());

                posEnd = reader.Position;

                r = new AppLogRecord();
                r.Add("Index", "10");
                r.Add("Data", data);
                writer.Write(r);
                writer.Commit();

                Assert.AreEqual(1, Directory.GetFiles(folder, "*.log").Length);

                reader.Position = posEnd;
                r = reader.Read();
                Assert.AreEqual("10", r["index"]);
                CollectionAssert.AreEqual(data, (byte[])r["data"]);
            }
            finally
            {
                Config.SetConfig(null);

                if (writer != null)
                {
                    writer.Close();
                }

                if (reader != null)
                {
                    reader.Close();
                }
            }

            DeleteFolder(root);
        }
Ejemplo n.º 7
0
        public void AppLog_Idle_Commit()
        {
            string config =
                @"
&section LillTek.AppLog

RootFolder         = {0}
MaxFileSize        = 4096
BufferSize         = 128K
IdleCommitInterval = 2s

&endsection
";

            string       root   = TestFolder;
            string       folder = root + "\\AppLogs";
            AppLogWriter writer = null;
            AppLogReader reader = null;
            AppLogRecord r;

            Helper.CreateFolderTree(root);

            try
            {
                Config.SetConfig(string.Format(config, folder).Replace('&', '#'));
                folder += "\\Test";

                writer = AppLogWriter.Open("Test", "my schema", new Version("1.2.3.4"), 0);

                r = new AppLogRecord();
                r.Add("Index", "1");
                writer.Write(r);

                Thread.Sleep(4000);     // Long enough for an idle commit
                Assert.AreEqual(1, Directory.GetFiles(folder, "*.log").Length);

                r = new AppLogRecord();
                r.Add("Index", "2");
                writer.Write(r);

                Thread.Sleep(4000);     // Long enough for an idle commit
                Assert.AreEqual(2, Directory.GetFiles(folder, "*.log").Length);

                reader = AppLogReader.Open("Test");

                r = reader.Read();
                Assert.AreEqual("1", r["index"]);

                r = reader.Read();
                Assert.AreEqual("2", r["index"]);

                Assert.IsNull(reader.Read());
                Assert.IsNull(reader.Read());
            }
            finally
            {
                Config.SetConfig(null);

                if (writer != null)
                {
                    writer.Close();
                }

                if (reader != null)
                {
                    reader.Close();
                }
            }

            DeleteFolder(root);
        }
Ejemplo n.º 8
0
        public void AppLog_Peek()
        {
            string config =
                @"
&section LillTek.AppLog

RootFolder         = {0}
MaxFileSize        = 4096
BufferSize         = 128K
IdleCommitInterval = 5m

&endsection
";

            string       root   = TestFolder;
            string       folder = root + "\\AppLogs";
            AppLogWriter writer = null;
            AppLogReader reader = null;
            AppLogRecord r;

            Helper.CreateFolderTree(root);

            try
            {
                Config.SetConfig(string.Format(config, folder).Replace('&', '#'));
                folder += "\\Test";

                writer = AppLogWriter.Open("Test", "my schema", new Version("1.2.3.4"), 0);

                r = new AppLogRecord();
                r.Add("index", "0");
                writer.Write(r);

                r = new AppLogRecord();
                r.Add("index", "1");
                writer.Write(r);

                r = new AppLogRecord();
                r.Add("index", "2");
                writer.Write(r);

                writer.Close();
                writer = null;

                //-----------------------------------------

                reader = AppLogReader.Open("Test");

                r = reader.Peek();
                Assert.AreEqual("0", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("0", (string)r["index"]);

                r = reader.Read();
                Assert.AreEqual("0", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("1", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("1", (string)r["index"]);

                r = reader.Read();
                Assert.AreEqual("1", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("2", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("2", (string)r["index"]);

                r = reader.Read();
                Assert.AreEqual("2", (string)r["index"]);

                Assert.IsNull(reader.Peek());
                Assert.IsNull(reader.Peek());
                Assert.IsNull(reader.Read());
                Assert.IsNull(reader.Read());

                reader.Close();
                reader = null;

                //-----------------------------------------

                reader          = AppLogReader.Open("Test");
                reader.Position = "BEGINNING";

                r = reader.ReadDelete();
                Assert.AreEqual("0", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("1", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("1", (string)r["index"]);

                r = reader.Read();
                Assert.AreEqual("1", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("2", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("2", (string)r["index"]);

                r = reader.Read();
                Assert.AreEqual("2", (string)r["index"]);

                Assert.IsNull(reader.Peek());
                Assert.IsNull(reader.Peek());
                Assert.IsNull(reader.Read());
                Assert.IsNull(reader.Read());

                reader.Close();
                reader = null;

                //-----------------------------------------

                reader          = AppLogReader.Open("Test");
                reader.Position = "BEGINNING";

                r = reader.Peek();
                Assert.AreEqual("1", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("1", (string)r["index"]);

                r = reader.Read();
                Assert.AreEqual("1", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("2", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("2", (string)r["index"]);

                r = reader.ReadDelete();
                Assert.AreEqual("2", (string)r["index"]);

                Assert.IsNull(reader.Peek());
                Assert.IsNull(reader.Peek());
                Assert.IsNull(reader.ReadDelete());
                Assert.IsNull(reader.ReadDelete());

                reader.Close();
                reader = null;

                //-----------------------------------------

                reader          = AppLogReader.Open("Test");
                reader.Position = "BEGINNING";

                r = reader.Peek();
                Assert.AreEqual("1", (string)r["index"]);

                r = reader.Peek();
                Assert.AreEqual("1", (string)r["index"]);

                r = reader.ReadDelete();
                Assert.AreEqual("1", (string)r["index"]);

                Assert.IsNull(reader.Peek());
                Assert.IsNull(reader.Peek());
                Assert.IsNull(reader.ReadDelete());
                Assert.IsNull(reader.ReadDelete());

                reader.Close();
                reader = null;

                //-----------------------------------------

                reader          = AppLogReader.Open("Test");
                reader.Position = "BEGINNING";

                Assert.IsNull(reader.Peek());
                Assert.IsNull(reader.Peek());
                Assert.IsNull(reader.Read());
                Assert.IsNull(reader.ReadDelete());

                reader.Close();
                reader = null;
            }
            finally
            {
                Config.SetConfig(null);

                if (writer != null)
                {
                    writer.Close();
                }

                if (reader != null)
                {
                    reader.Close();
                }
            }

            DeleteFolder(root);
        }
Ejemplo n.º 9
0
        public void AppLog_PersistReaderPos()
        {
            string config =
                @"
&section LillTek.AppLog

RootFolder         = {0}
MaxFileSize        = 4096
BufferSize         = 128K
IdleCommitInterval = 5m

&endsection
";

            string       root   = TestFolder;
            string       folder = root + "\\AppLogs";
            AppLogWriter writer = null;
            AppLogReader reader = null;
            AppLogRecord r;

            Helper.CreateFolderTree(root);

            try
            {
                Config.SetConfig(string.Format(config, folder).Replace('&', '#'));
                folder += "\\Test";

                writer = AppLogWriter.Open("Test", "my schema", new Version("1.2.3.4"), 0);

                for (int i = 0; i < 5; i++)
                {
                    r = new AppLogRecord();
                    r.Add("index", i.ToString());
                    writer.Write(r);
                }

                writer.Commit();

                for (int i = 5; i < 10; i++)
                {
                    r = new AppLogRecord();
                    r.Add("index", i.ToString());
                    writer.Write(r);
                }

                writer.Commit();

                for (int i = 0; i < 10; i++)
                {
                    reader = AppLogReader.Open("Test");

                    r = reader.Read();
                    Assert.AreEqual(i.ToString(), r["index"]);

                    reader.Close();
                    reader = null;
                }

                r = new AppLogRecord();
                r.Add("index", "10");
                writer.Write(r);
                writer.Commit();

                reader = AppLogReader.Open("Test");

                r = reader.Read();
                Assert.AreEqual("10", r["index"]);

                reader.Close();
                reader = null;

                writer.Close();
                writer = null;
            }
            finally
            {
                Config.SetConfig(null);

                if (writer != null)
                {
                    writer.Close();
                }

                if (reader != null)
                {
                    reader.Close();
                }
            }

            DeleteFolder(root);
        }
Ejemplo n.º 10
0
        public void AppLog_RecordAvailableEvent()
        {
            string config =
                @"
&section LillTek.AppLog

RootFolder         = {0}
MaxFileSize        = 4096
BufferSize         = 128K
IdleCommitInterval = 5m

&endsection
";

            string       root   = TestFolder;
            string       folder = root + "\\AppLogs";
            AppLogWriter writer = null;
            AppLogReader reader = null;
            AppLogRecord r;

            Helper.CreateFolderTree(root);

            try
            {
                Config.SetConfig(string.Format(config, folder).Replace('&', '#'));
                folder += "\\Test";

                newRecords = false;

                writer = AppLogWriter.Open("Test", "my schema", new Version("1.2.3.4"), 0);
                reader = AppLogReader.Open("Test");
                reader.RecordAvailable += new LogRecordAvailableHandler(OnRecordAvailable);

                Assert.IsNull(reader.Read());

                r = new AppLogRecord();
                r.Add("foo", "bar");
                writer.Write(r);
                writer.Commit();

                Thread.Sleep(4000);     // Give the record available event a chance to be raised
                Assert.IsTrue(newRecords);

                r = reader.Read();
                Assert.AreEqual("bar", r["foo"]);
            }
            finally
            {
                Config.SetConfig(null);

                if (writer != null)
                {
                    writer.Close();
                }

                if (reader != null)
                {
                    reader.Close();
                }
            }

            DeleteFolder(root);
        }
Ejemplo n.º 11
0
        public void Archivers_AppLogArchiver_Multiple()
        {
            // Submit a 10000 location fixes to a GeoTrackerNode configured with an AppLog archiver
            // and then verify that they were persisted to the archive.

            const string appConfig =
                @"
&section LillTek.GeoTracker.Server

    GeoFixArchiver = LillTek.GeoTracker.Server.AppLogGeoFixArchiver:LillTek.GeoTracker.Server.dll

    // Archiver implementation specific arguments (such as a database connection string)
    // formatted as name=value pairs separated by semicolons.

    GeoFixArchiverArgs = {{

        LogName       = GeoFix
        MaxSize       = 5GB
        PurgeInterval = 5m
    }}

&endsection
";
            const int cFixes = 10000;

            try
            {
                Helper.DeleteFile(AppLogFolder, true);
                TestInit(appConfig);

                for (int i = 0; i < cFixes; i++)
                {
                    client.SubmitEntityFix("E" + i.ToString(), "G" + i.ToString(), new GeoFix()
                    {
                        Latitude = 10, Longitude = 20
                    });
                }

                server.Stop();

                AppLogReader logReader = AppLogReader.Open("GeoFix");
                AppLogRecord record;

                try
                {
                    for (int i = 0; i < cFixes; i++)
                    {
                        record = logReader.ReadDelete();

                        Assert.IsNotNull(record);
                        Assert.AreEqual(AppLogGeoFixArchiver.SchemaName, record.SchemaName);
                        Assert.AreEqual(AppLogGeoFixArchiver.SchemaVersion, record.SchemaVersion);
                        Assert.AreEqual("E" + i.ToString(), record["EntityID"]);
                        Assert.AreEqual("G" + i.ToString(), record["GroupID"]);
                        Assert.AreEqual("10", record["Latitude"]);
                        Assert.AreEqual("20", record["Longitude"]);
                    }
                }
                finally
                {
                    logReader.Close();
                }
            }
            finally
            {
                TestCleanup();
                Helper.DeleteFile(AppLogFolder, true);
            }
        }