mirror of
https://github.com/actions/runner.git
synced 2025-12-14 04:53:34 +00:00
Process snapshot tokens (#3135)
* Added Snapshot TemplateToken to AgentJobRequestMessage * WIP for processing the snapshot token * Changed snapshot post job step condition to Success, added comments * Refactored snapshot post-job step * Added evaluation of snapshot token to retrieve image name * Added snapshot to workflow schema * Fixed linter error * Migrated snapshot logic to new SnapshotOperationProvider * Fixed linter error * Fixed linter errors * Fixed linter error * Fixed linter errors * Updated L0 tests * Fixed linter errors * Added new JobExtensionL0 tests for snapshot post-job step * Added JobExtensionL0 test case for snapshot mappings * Added SnapshotOperationProviderL0 tests * Enabled nullable types for SnapshotOperationProvider and its tests * Added more assertions to SnapshotOperationProviderL0 tests * Fixed linter errors * Made sure TestHostContexts are disposed of properlyh in SnapshotOperationProviderL0 tests * Resolved PR comments * Fixed formatting * Removed redundant reference * Addressed PR comments
This commit is contained in:
78
src/Test/L0/Worker/SnapshotOperationProviderL0.cs
Normal file
78
src/Test/L0/Worker/SnapshotOperationProviderL0.cs
Normal file
@@ -0,0 +1,78 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Runtime.CompilerServices;
|
||||
using GitHub.DistributedTask.Pipelines;
|
||||
using GitHub.Runner.Sdk;
|
||||
using GitHub.Runner.Worker;
|
||||
using Moq;
|
||||
using Xunit;
|
||||
|
||||
namespace GitHub.Runner.Common.Tests.Worker;
|
||||
|
||||
public class SnapshotOperationProviderL0
|
||||
{
|
||||
private Mock<IExecutionContext>? _ec;
|
||||
private SnapshotOperationProvider? _snapshotOperationProvider;
|
||||
private string? _snapshotRequestFilePath;
|
||||
private string? _snapshotRequestDirectoryPath;
|
||||
|
||||
[Theory]
|
||||
[InlineData(true)]
|
||||
[InlineData(false)]
|
||||
[Trait("Level", "L0")]
|
||||
[Trait("Category", "Worker")]
|
||||
public async void CreateSnapshotRequestAsync(bool shouldSnapshotDirectoryAlreadyExist)
|
||||
{
|
||||
using (TestHostContext testHostContext = CreateTestHostContext())
|
||||
{
|
||||
//Arrange
|
||||
Setup(testHostContext, shouldSnapshotDirectoryAlreadyExist);
|
||||
var expectedSnapshot = new Snapshot(Guid.NewGuid().ToString());
|
||||
|
||||
//Act
|
||||
await _snapshotOperationProvider!.CreateSnapshotRequestAsync(_ec!.Object, expectedSnapshot);
|
||||
|
||||
//Assert
|
||||
var actualSnapshot = IOUtil.LoadObject<Snapshot>(_snapshotRequestFilePath);
|
||||
Assert.NotNull(actualSnapshot);
|
||||
Assert.Equal(expectedSnapshot.ImageName, actualSnapshot!.ImageName);
|
||||
_ec.Verify(ec => ec.Write(null, $"Request written to: {_snapshotRequestFilePath}"), Times.Once);
|
||||
_ec.Verify(ec => ec.Write(null, "This request will be processed after the job completes. You will not receive any feedback on the snapshot process within the workflow logs of this job."), Times.Once);
|
||||
_ec.Verify(ec => ec.Write(null, "If the snapshot process is successful, you should see a new image with the requested name in the list of available custom images when creating a new GitHub-hosted Runner."), Times.Once);
|
||||
_ec.VerifyNoOtherCalls();
|
||||
}
|
||||
}
|
||||
|
||||
private void Setup(IHostContext hostContext, bool shouldSnapshotDirectoryAlreadyExist)
|
||||
{
|
||||
_ec = new Mock<IExecutionContext>();
|
||||
_snapshotOperationProvider = new SnapshotOperationProvider();
|
||||
_snapshotOperationProvider.Initialize(hostContext);
|
||||
_snapshotRequestFilePath = Path.Combine(hostContext.GetDirectory(WellKnownDirectory.Root), ".snapshot", "request.json");
|
||||
_snapshotRequestDirectoryPath = Path.GetDirectoryName(_snapshotRequestFilePath);
|
||||
|
||||
if (_snapshotRequestDirectoryPath != null)
|
||||
{
|
||||
// Clean up any existing the snapshot directory and its contents before starting the test.
|
||||
if (Directory.Exists(_snapshotRequestDirectoryPath))
|
||||
{
|
||||
Directory.Delete(_snapshotRequestDirectoryPath, true);
|
||||
}
|
||||
|
||||
if (shouldSnapshotDirectoryAlreadyExist)
|
||||
{
|
||||
// Create a fresh snapshot directory if it's required for the test.
|
||||
Directory.CreateDirectory(_snapshotRequestDirectoryPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private TestHostContext CreateTestHostContext([CallerMemberName] string testName = "")
|
||||
{
|
||||
var testHostContext = new TestHostContext(this, testName);
|
||||
_ec = new Mock<IExecutionContext>();
|
||||
_ec.Object.Initialize(testHostContext);
|
||||
return testHostContext;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user