Skip to content

Commit

Permalink
remove polling
Browse files Browse the repository at this point in the history
  • Loading branch information
tonyhallett committed Jan 15, 2024
1 parent 9c17622 commit a6f9935
Show file tree
Hide file tree
Showing 5 changed files with 8 additions and 110 deletions.
71 changes: 3 additions & 68 deletions FineCodeCoverageTests/FCCEngine_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public void Should_Initialize_AppFolder_Then_Utils()

var openCoverMock = mocker.GetMock<ICoverageUtilManager>().Setup(openCover => openCover.Initialize(appDataFolderPath, disposalToken)).Callback(() => callOrder.Add(4));

fccEngine.Initialize(null,disposalToken);
fccEngine.Initialize(disposalToken);

Assert.AreEqual(4, callOrder.Count);
Assert.AreEqual(1, callOrder[0]);
Expand All @@ -62,7 +62,7 @@ public void Should_Set_AppDataFolderPath_From_Initialized_AppDataFolder_Director
var appDataFolderPath = "some path";
var mockAppDataFolder = mocker.GetMock<IAppDataFolder>();
mockAppDataFolder.Setup(appDataFolder => appDataFolder.DirectoryPath).Returns(appDataFolderPath);
fccEngine.Initialize(null, CancellationToken.None);
fccEngine.Initialize(CancellationToken.None);
Assert.AreEqual("some path", fccEngine.AppDataFolderPath);
}

Expand Down Expand Up @@ -101,46 +101,6 @@ public async Task Should_Log_Starting_When_Initialized()
VerifyLogsReloadCoverageStatus(ReloadCoverageStatus.Start);
}

[Test]
public async Task Should_Poll_For_Initialized()
{
var times = 5;
var initializeWait = 1000;
fccEngine.InitializeWait = initializeWait;

var mockInitializeStatusProvider = new Mock<IInitializeStatusProvider>();
mockInitializeStatusProvider.SetupProperty(i => i.InitializeStatus);
var initializeStatusProvider = mockInitializeStatusProvider.Object;

fccEngine.Initialize(initializeStatusProvider, CancellationToken.None);

fccEngine.ReloadCoverage(() => Task.FromResult(new List<ICoverageProject>()));
await Task.Delay(times * initializeWait).ContinueWith(_ =>
{
initializeStatusProvider.InitializeStatus = InitializeStatus.Initialized;
});
await fccEngine.reloadCoverageTask;
mocker.Verify<ILogger>(l => l.Log(fccEngine.GetLogReloadCoverageStatusMessage(ReloadCoverageStatus.Initializing)), Times.AtLeast(times));
}

[Test]
public async Task Should_Throw_With_initializationFailedMessagePrefix_When_Initialize_Has_Failed()
{
var mockInitializerStatusProvider = new Mock<IInitializeStatusProvider>();
mockInitializerStatusProvider.Setup(i => i.InitializeStatus).Returns(InitializeStatus.Error);
var initializeExceptionMessage = "An exception was thrown";
mockInitializerStatusProvider.Setup(i => i.InitializeExceptionMessage).Returns(initializeExceptionMessage);

fccEngine.Initialize(mockInitializerStatusProvider.Object, CancellationToken.None);

fccEngine.ReloadCoverage(() => Task.FromResult(new List<ICoverageProject>()));

await fccEngine.reloadCoverageTask;

mocker.Verify<ILogger>(l => l.Log(fccEngine.GetLogReloadCoverageStatusMessage(ReloadCoverageStatus.Error),It.Is<Exception>(exc => (FCCEngine.initializationFailedMessagePrefix + Environment.NewLine + initializeExceptionMessage) == exc.Message)));

}

[Test]
public async Task Should_Prepare_For_Coverage_Suitable_CoverageProjects()
{
Expand Down Expand Up @@ -301,14 +261,6 @@ public async Task Should_Process_ReportGenerator_Output_If_Success_Raising_Event

}

[Test]
public async Task Should_Log_Single_Exception_From_Aggregate_Exception()
{
Exception exception = null;
await ThrowException(exc => exception = exc);
mocker.Verify<ILogger>(l => l.Log(fccEngine.GetLogReloadCoverageStatusMessage(ReloadCoverageStatus.Error),exception));
}

[Test]
public async Task Should_Cancel_Running_Coverage_Logging_Cancelled_When_StopCoverage()
{
Expand Down Expand Up @@ -416,21 +368,6 @@ private async Task ThrowReadingReportHtml()

}

private async Task ThrowException(Action<Exception> exceptionCallback = null)
{
var exception = new Exception("an exception");
exceptionCallback?.Invoke(exception);
Task<List<ICoverageProject>> thrower() => Task.FromException<List<ICoverageProject>>(exception);

var mockInitializeStatusProvider = new Mock<IInitializeStatusProvider>();
mockInitializeStatusProvider.Setup(i => i.InitializeStatus).Returns(InitializeStatus.Initialized);
fccEngine.Initialize(mockInitializeStatusProvider.Object, CancellationToken.None);

fccEngine.ReloadCoverage(thrower);

await fccEngine.reloadCoverageTask;
}

private async Task StopCoverage()
{
var mockSuitableCoverageProject = new Mock<ICoverageProject>();
Expand Down Expand Up @@ -460,9 +397,7 @@ private void SetUpSuccessfulRunReportGenerator()
private async Task ReloadInitializedCoverage(params ICoverageProject[] coverageProjects)
{
var projectsFromTask = Task.FromResult(coverageProjects.ToList());
var mockInitializeStatusProvider = new Mock<IInitializeStatusProvider>();
mockInitializeStatusProvider.Setup(i => i.InitializeStatus).Returns(InitializeStatus.Initialized);
fccEngine.Initialize(mockInitializeStatusProvider.Object, CancellationToken.None);
fccEngine.Initialize(CancellationToken.None);
fccEngine.ReloadCoverage(() => projectsFromTask);
await fccEngine.reloadCoverageTask;
}
Expand Down
11 changes: 1 addition & 10 deletions FineCodeCoverageTests/Initializer_Tests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,7 @@ public async Task Should_Initialize_Dependencies_In_Order()
{
callOrder.Add(1);
});
mocker.GetMock<IFCCEngine>().Setup(engine => engine.Initialize(initializer, disposalToken)).Callback(() =>
mocker.GetMock<IFCCEngine>().Setup(engine => engine.Initialize(disposalToken)).Callback(() =>
{
callOrder.Add(2);
});
Expand All @@ -102,14 +102,5 @@ public async Task Should_Initialize_Dependencies_In_Order()
await initializer.InitializeAsync(disposalToken);
Assert.AreEqual(new List<int> { 1, 2, 3 }, callOrder);
}

[Test]
public async Task Should_Pass_Itself_To_FCCEngine_For_InitializeStatus()
{
var disposalToken = CancellationToken.None;
await initializer.InitializeAsync(disposalToken);
mocker.Verify<IFCCEngine>(engine => engine.Initialize(initializer, disposalToken));
}

}
}
32 changes: 2 additions & 30 deletions SharedProject/Core/FCCEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ internal class FCCEngine : IFCCEngine,IDisposable
private readonly ILogger logger;
private readonly IAppDataFolder appDataFolder;

private IInitializeStatusProvider initializeStatusProvider;
private readonly ICoverageToolOutputManager coverageOutputManager;
internal System.Threading.Tasks.Task reloadCoverageTask;
#pragma warning disable IDE0052 // Remove unread private members
Expand Down Expand Up @@ -116,10 +115,8 @@ private void LogReloadCoverageStatus(ReloadCoverageStatus reloadCoverageStatus)
logger.Log(GetLogReloadCoverageStatusMessage(reloadCoverageStatus));
}

public void Initialize(IInitializeStatusProvider initializeStatusProvider, CancellationToken cancellationToken)
public void Initialize(CancellationToken cancellationToken)
{
this.initializeStatusProvider = initializeStatusProvider;

appDataFolder.Initialize(cancellationToken);
AppDataFolderPath = appDataFolder.DirectoryPath;

Expand Down Expand Up @@ -323,29 +320,7 @@ private void RaiseReportFiles(ReportResult reportResult)
this.eventAggregator.SendMessage(new ReportFilesMessage { CoberturaFile = reportResult.CoberturaFile, HotspotsFile = reportResult.HotspotsFile });
}
}

private async System.Threading.Tasks.Task PollInitializedStatusAsync(CancellationToken cancellationToken)
{
while (true)
{
cancellationToken.ThrowIfCancellationRequested();
var InitializeStatus = initializeStatusProvider.InitializeStatus;
switch (InitializeStatus)
{
case InitializeStatus.Initialized:
return;

case InitializeStatus.Initializing:
reportGeneratorUtil.LogCoverageProcess("Initializing");
LogReloadCoverageStatus(ReloadCoverageStatus.Initializing);
await System.Threading.Tasks.Task.Delay(InitializeWait);
break;
case InitializeStatus.Error:
throw new Exception(initializationFailedMessagePrefix + Environment.NewLine + initializeStatusProvider.InitializeExceptionMessage);
}
}
}


public void RunAndProcessReport(string[] coberturaFiles, Action cleanUp = null)
{
RunCancellableCoverageTask(async (vsShutdownLinkedCancellationToken) =>
Expand All @@ -369,7 +344,6 @@ private void RunCancellableCoverageTask(
{
reloadCoverageTask = System.Threading.Tasks.Task.Run(async () =>
{
await PollInitializedStatusAsync(vsShutdownLinkedCancellationToken);
var result = await taskCreator(vsShutdownLinkedCancellationToken);
return result;

Expand All @@ -385,8 +359,6 @@ public void ReloadCoverage(Func<System.Threading.Tasks.Task<List<ICoverageProjec
{
ReportResult reportResult = new ReportResult();

await PollInitializedStatusAsync(vsShutdownLinkedCancellationToken);

reportGeneratorUtil.LogCoverageProcess("Starting coverage - full details in FCC Output Pane");
LogReloadCoverageStatus(ReloadCoverageStatus.Start);

Expand Down
2 changes: 1 addition & 1 deletion SharedProject/Core/IFCCEngine.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ namespace FineCodeCoverage.Engine
internal interface IFCCEngine
{
string AppDataFolderPath { get; }
void Initialize(IInitializeStatusProvider initializeStatusProvider, System.Threading.CancellationToken cancellationToken);
void Initialize(System.Threading.CancellationToken cancellationToken);
void StopCoverage();
void ReloadCoverage(Func<System.Threading.Tasks.Task<List<ICoverageProject>>> coverageRequestCallback);
void RunAndProcessReport(string[] coberturaFiles,Action cleanUp = null);
Expand Down
2 changes: 1 addition & 1 deletion SharedProject/Core/Initialization/Initializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public async Task InitializeAsync(CancellationToken cancellationToken)
cancellationToken.ThrowIfCancellationRequested();
coverageProjectFactory.Initialize();

fccEngine.Initialize(this, cancellationToken);
fccEngine.Initialize(cancellationToken);

cancellationToken.ThrowIfCancellationRequested();
logger.Log($"Initialized");
Expand Down

0 comments on commit a6f9935

Please sign in to comment.