Example #1
0
        public async Task LiveLogCanBeRewritten(TestAppInstance app)
        {
            var testLog = app.ModelObjects.TempFilesManager.GenerateNewName();

            using (var stream = new FileStream(testLog,
                                               FileMode.CreateNew, FileAccess.ReadWrite, FileShare.ReadWrite))
            {
                using (var logWriter = new StreamWriter(stream, Encoding.ASCII, 1024, leaveOpen: true))
                {
                    Log(logWriter, "test1");
                    Log(logWriter, "test2");

                    await app.EmulateFileDragAndDrop(testLog);

                    await app.WaitForLogDisplayed("test1\ntest2");
                }

                stream.SetLength(0);
                stream.Position = 0;

                using (var logWriter = new StreamWriter(stream, Encoding.ASCII, 1024, leaveOpen: true))
                {
                    Log(logWriter, "test4");

                    await app.WaitForLogDisplayed("test4");
                }
            }
        }
Example #2
0
        public async Task LiveLogCanBeDeletedAndRecreated(TestAppInstance app)
        {
            var testLog = app.ModelObjects.TempFilesManager.GenerateNewName();

            using (var logWriter = new StreamWriter(testLog, append: false))
            {
                Log(logWriter, "test1");
                Log(logWriter, "test2");
                Log(logWriter, "test3");

                await app.EmulateFileDragAndDrop(testLog);

                await app.WaitForLogDisplayed("test1\ntest2\ntest3");
            }

            File.Delete(testLog);

            await app.WaitForLogDisplayed("");

            using (var logWriter = new StreamWriter(testLog, append: false))
            {
                Log(logWriter, "test4");
                Log(logWriter, "test5");
                Log(logWriter, "test6");

                await app.WaitForLogDisplayed("test4\ntest5\ntest6");
            }
        }
Example #3
0
        public async Task CanRemoveBothLogsFromContainer(TestAppInstance app)
        {
            await ExpandContainer();

            app.ViewModel.SourcesList.OnSelectionChange(new[] {
                (IViewItem)ListRoot.Children[0].Children[0],
                (IViewItem)ListRoot.Children[0].Children[1]
            });
            await app.WaitFor(() =>
                              ListRoot.Children[0].Children[0].IsSelected &&
                              ListRoot.Children[0].Children[1].IsSelected
                              );

            Check.That(app.ViewModel.SourcesManager.DeleteSelectedSourcesButtonEnabled).IsTrue();
            Check.That(app.ViewModel.SourcesManager.PropertiesButtonEnabled).IsFalse();

            app.PresentationObjects.AlertPopup.ShowPopupAsync(null, null, UI.Presenters.AlertFlags.None).ReturnsForAnyArgs(UI.Presenters.AlertFlags.Yes);
            app.ViewModel.SourcesManager.OnDeleteSelectedLogSourcesButtonClicked();

            await app.PresentationObjects.AlertPopup.Received(1).ShowPopupAsync("Delete", "Are you sure you want to close 2 log (s)", UI.Presenters.AlertFlags.YesNoCancel);

            await app.WaitFor(() => ListRoot.Children.Count == 0);

            Check.That(app.ViewModel.SourcesManager.DeleteSelectedSourcesButtonEnabled).IsFalse();
            Check.That(app.ViewModel.SourcesManager.PropertiesButtonEnabled).IsFalse();

            await app.WaitForLogDisplayed("");
        }
Example #4
0
        public async Task CanRemoveOneLogFromContainer(TestAppInstance app)
        {
            await ExpandContainer();

            app.ViewModel.SourcesList.OnSelectionChange(
                new[] { (IViewItem)ListRoot.Children[0].Children[0] });
            await app.WaitFor(() => ListRoot.Children[0].Children[0].IsSelected);

            Check.That(app.ViewModel.SourcesManager.DeleteSelectedSourcesButtonEnabled).IsTrue();
            Check.That(app.ViewModel.SourcesManager.PropertiesButtonEnabled).IsTrue();

            app.PresentationObjects.AlertPopup.ShowPopupAsync(null, null, UI.Presenters.AlertFlags.None).ReturnsForAnyArgs(UI.Presenters.AlertFlags.Yes);
            app.ViewModel.SourcesManager.OnDeleteSelectedLogSourcesButtonClicked();

            await app.PresentationObjects.AlertPopup.Received(1).ShowPopupAsync("Delete", "Are you sure you want to close 1 log (s)", UI.Presenters.AlertFlags.YesNoCancel);

            await app.WaitFor(() =>
                              ListRoot.Children.Count == 1 &&
                              ListRoot.Children[0].Children.Count == 0 &&
                              ListRoot.Children[0].IsSelected == false);

            Check.That(app.ViewModel.SourcesManager.DeleteSelectedSourcesButtonEnabled).IsFalse();
            Check.That(app.ViewModel.SourcesManager.PropertiesButtonEnabled).IsFalse();

            await app.WaitForLogDisplayed(
                @"No free data file found. Going sleep.
Searching for data files
No free data file found. Going sleep.
File cannot be open which means that it was handled
Timestamp parsed and ignored
Test frame
"
                );
        }
Example #5
0
        public async Task LiveLogIsFollowed()
        {
            await app.SynchronizationContext.InvokeAndAwait(async() =>
            {
                var testLog = app.Model.TempFilesManager.GenerateNewName();

                using (var logWriter = new StreamWriter(testLog, append: false))
                {
                    Log(logWriter, "initial line");

                    await app.EmulateFileDragAndDrop(testLog);

                    await app.WaitForLogDisplayed("initial line");

                    for (int i = 0; i < 10; ++i)
                    {
                        Log(logWriter, $"test {i}");

                        var expectedLog = string.Join("\n",
                                                      new[] { "initial line" }.Union(
                                                          Enumerable.Range(0, i + 1).Select(j => $"test {j}")));
                        await app.WaitForLogDisplayed(expectedLog);
                    }
                }
            });
        }
        public async Task CanToggleSourceVisibitity(TestAppInstance app)
        {
            Check.That(DialogState.VisibleCheckBox.Checked).IsEqualTo(true);
            ViewModel.OnVisibleCheckBoxChange(false);
            await app.WaitFor(() => DialogState.VisibleCheckBox.Checked == false);

            await app.WaitForLogDisplayed("");

            Check.That(((SrcListItem)app.ViewModel.SourcesList.RootItem.Children[0]).Checked).IsEqualTo(false);
        }
Example #7
0
 public async Task CanToggleSourceVisibitity()
 {
     await app.SynchronizationContext.InvokeAndAwait(async() =>
     {
         Assert.IsTrue(DialogState.VisibleCheckBox.Checked);
         ViewModel.OnVisibleCheckBoxChange(false);
         await app.WaitFor(() => DialogState.VisibleCheckBox.Checked == false);
         await app.WaitForLogDisplayed("");
         Assert.IsFalse(((SrcListItem)app.ViewModel.SourcesList.RootItem.Children[0]).Checked);
     });
 }
Example #8
0
        public async Task CanHideOneLogInContainer(TestAppInstance app)
        {
            await ExpandContainer();

            app.ViewModel.SourcesList.OnItemCheck(
                (IViewItem)ListRoot.Children[0].Children[0], false);
            await app.WaitFor(() => ((IViewItem)ListRoot.Children[0].Children[0]).Checked == false);

            await app.WaitForLogDisplayed(
                @"No free data file found. Going sleep.
Searching for data files
No free data file found. Going sleep.
File cannot be open which means that it was handled
Timestamp parsed and ignored
Test frame
"
                );

            Check.WithCustomMessage("Container must be unchecked").That(((IViewItem)ListRoot.Children[0]).Checked).IsEqualTo(false);
        }
Example #9
0
        public async Task CanMonitorAFolder(TestAppInstance app)
        {
            await app.AddTestCustomFormat();

            var testFolder = app.ModelObjects.TempFilesManager.GenerateNewName();

            Directory.CreateDirectory(testFolder);

            var format1 = (IFileBasedLogProviderFactory)app.Model.UserDefinedFormatsManager.Items.FirstOrDefault(
                i => i.FormatName == "TextWriterTraceListener");
            var format2 = (IFileBasedLogProviderFactory)app.Model.UserDefinedFormatsManager.Items.FirstOrDefault(
                i => i.FormatName == "Test123");

            File.WriteAllText(Path.Combine(testFolder, "prefix-a-1.log"),
                              $@"SampleApp Start: 0 : test001
  ProcessId=69745
  ThreadId=1
  DateTime=2021-04-25T01:01:01.0000000Z
");
            File.WriteAllText(Path.Combine(testFolder, "prefix-a-2.log"),
                              $@"SampleApp Start: 0 : test002
  ProcessId=69745
  ThreadId=1
  DateTime=2021-04-25T01:01:02.0000000Z
");

            app.Model.SourcesManager.Create(format1,
                                            format1.CreateRotatedLogParams(testFolder, new[] { "prefix-a-*.log" }));

            await app.WaitForLogDisplayed("test001\ntest002");

            // Add 3rd part after monitoring has started
            File.WriteAllText(Path.Combine(testFolder, "prefix-a-3.log"),
                              $@"SampleApp Start: 0 : test003
  ProcessId=69745
  ThreadId=1
  DateTime=2021-04-25T01:01:03.0000000Z
");
            await app.WaitForLogDisplayed("test001\ntest002\ntest003");

            // Delete the first part
            File.Delete(Path.Combine(testFolder, "prefix-a-1.log"));
            await app.WaitForLogDisplayed("test002\ntest003");

            // Start monitoring another type of logs with another prefix
            app.Model.SourcesManager.Create(format2,
                                            format2.CreateRotatedLogParams(testFolder, new[] { "prefix-b-*.log" }));


            File.WriteAllText(Path.Combine(testFolder, "prefix-b-1.log"),
                              "2021/04/26 01:01:10.000 T#1 test101\n");
            await app.WaitForLogDisplayed("test002\ntest003\ntest101");

            File.WriteAllText(Path.Combine(testFolder, "prefix-b-2.log"),
                              "2021/04/26 01:01:11.000 T#1 test102\n");
            await app.WaitForLogDisplayed("test002\ntest003\ntest101\ntest102");

            // Start monitoring second log type again with another prefix
            app.Model.SourcesManager.Create(format2,
                                            format2.CreateRotatedLogParams(testFolder, new[] { "prefix-c-*.log" }));

            File.WriteAllText(Path.Combine(testFolder, "prefix-c-1.log"),
                              "2021/04/26 01:01:10.001 T#1 test201\n");
            await app.WaitForLogDisplayed("test002\ntest003\ntest101\ntest201\ntest102");

            File.WriteAllText(Path.Combine(testFolder, "prefix-c-2.log"),
                              "2021/04/26 01:01:11.001 T#1 test202\n");
            await app.WaitForLogDisplayed("test002\ntest003\ntest101\ntest201\ntest102\ntest202");
        }