mirror of
https://github.com/actions/runner.git
synced 2025-12-10 20:36:49 +00:00
Initialize container manager based on whether the ContainerHooksPath is set (#2317)
* Added tests around checking if correct manager's Initialize method has been called * repaired missing initialization on container action handler
This commit is contained in:
@@ -33,8 +33,14 @@ namespace GitHub.Runner.Worker
|
|||||||
public override void Initialize(IHostContext hostContext)
|
public override void Initialize(IHostContext hostContext)
|
||||||
{
|
{
|
||||||
base.Initialize(hostContext);
|
base.Initialize(hostContext);
|
||||||
_dockerManager = HostContext.GetService<IDockerCommandManager>();
|
if (string.IsNullOrEmpty(Environment.GetEnvironmentVariable(Constants.Hooks.ContainerHooksPath)))
|
||||||
_containerHookManager = HostContext.GetService<IContainerHookManager>();
|
{
|
||||||
|
_dockerManager = HostContext.GetService<IDockerCommandManager>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
_containerHookManager = HostContext.GetService<IContainerHookManager>();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task StartContainersAsync(IExecutionContext executionContext, object data)
|
public async Task StartContainersAsync(IExecutionContext executionContext, object data)
|
||||||
|
|||||||
@@ -38,8 +38,17 @@ namespace GitHub.Runner.Worker.Handlers
|
|||||||
// Update the env dictionary.
|
// Update the env dictionary.
|
||||||
AddInputsToEnvironment();
|
AddInputsToEnvironment();
|
||||||
|
|
||||||
var dockerManager = HostContext.GetService<IDockerCommandManager>();
|
IDockerCommandManager dockerManager = null;
|
||||||
var containerHookManager = HostContext.GetService<IContainerHookManager>();
|
IContainerHookManager containerHookManager = null;
|
||||||
|
if (FeatureManager.IsContainerHooksEnabled(ExecutionContext.Global.Variables))
|
||||||
|
{
|
||||||
|
containerHookManager = HostContext.GetService<IContainerHookManager>();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
dockerManager = HostContext.GetService<IDockerCommandManager>();
|
||||||
|
}
|
||||||
|
|
||||||
string dockerFile = null;
|
string dockerFile = null;
|
||||||
|
|
||||||
// container image haven't built/pull
|
// container image haven't built/pull
|
||||||
|
|||||||
@@ -99,6 +99,46 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[Fact]
|
||||||
|
[Trait("Level", "L0")]
|
||||||
|
[Trait("Category", "Worker")]
|
||||||
|
public void InitializeWithCorrectManager()
|
||||||
|
{
|
||||||
|
containers.Add(new ContainerInfo() { ContainerImage = "ubuntu:16.04" });
|
||||||
|
_hc = new TestHostContext(this, "Test");
|
||||||
|
_ec = new Mock<IExecutionContext>();
|
||||||
|
serverQueue = new Mock<IJobServerQueue>();
|
||||||
|
pagingLogger = new Mock<IPagingLogger>();
|
||||||
|
|
||||||
|
containerOperationProvider = new ContainerOperationProvider();
|
||||||
|
|
||||||
|
_hc.SetSingleton<IJobServerQueue>(serverQueue.Object);
|
||||||
|
_hc.SetSingleton<IPagingLogger>(pagingLogger.Object);
|
||||||
|
|
||||||
|
|
||||||
|
_ec.Setup(x => x.Global).Returns(new GlobalContext());
|
||||||
|
|
||||||
|
Environment.SetEnvironmentVariable(Constants.Hooks.ContainerHooksPath, "/tmp/k8s/index.js");
|
||||||
|
_dockerManager = new Mock<IDockerCommandManager>();
|
||||||
|
_dockerManager.Setup(x => x.Initialize(_hc)).Throws(new Exception("Docker manager's Initialize should not be called"));
|
||||||
|
|
||||||
|
_containerHookManager = new Mock<IContainerHookManager>();
|
||||||
|
_hc.SetSingleton<IDockerCommandManager>(_dockerManager.Object);
|
||||||
|
_hc.SetSingleton<IContainerHookManager>(_containerHookManager.Object);
|
||||||
|
|
||||||
|
containerOperationProvider.Initialize(_hc);
|
||||||
|
|
||||||
|
Environment.SetEnvironmentVariable(Constants.Hooks.ContainerHooksPath, null);
|
||||||
|
_containerHookManager = new Mock<IContainerHookManager>();
|
||||||
|
_containerHookManager.Setup(x => x.Initialize(_hc)).Throws(new Exception("Container hook manager's Initialize should not be called"));
|
||||||
|
|
||||||
|
_dockerManager = new Mock<IDockerCommandManager>();
|
||||||
|
_hc.SetSingleton<IDockerCommandManager>(_dockerManager.Object);
|
||||||
|
_hc.SetSingleton<IContainerHookManager>(_containerHookManager.Object);
|
||||||
|
|
||||||
|
containerOperationProvider.Initialize(_hc);
|
||||||
|
}
|
||||||
|
|
||||||
private void Setup([CallerMemberName] string testName = "")
|
private void Setup([CallerMemberName] string testName = "")
|
||||||
{
|
{
|
||||||
containers.Add(new ContainerInfo() { ContainerImage = "ubuntu:16.04" });
|
containers.Add(new ContainerInfo() { ContainerImage = "ubuntu:16.04" });
|
||||||
@@ -111,7 +151,6 @@ namespace GitHub.Runner.Common.Tests.Worker
|
|||||||
_containerHookManager = new Mock<IContainerHookManager>();
|
_containerHookManager = new Mock<IContainerHookManager>();
|
||||||
containerOperationProvider = new ContainerOperationProvider();
|
containerOperationProvider = new ContainerOperationProvider();
|
||||||
|
|
||||||
_hc.SetSingleton<IDockerCommandManager>(_dockerManager.Object);
|
|
||||||
_hc.SetSingleton<IJobServerQueue>(serverQueue.Object);
|
_hc.SetSingleton<IJobServerQueue>(serverQueue.Object);
|
||||||
_hc.SetSingleton<IPagingLogger>(pagingLogger.Object);
|
_hc.SetSingleton<IPagingLogger>(pagingLogger.Object);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user