public async Task WhenCommandSucceeds_ItDoesNotChangeDeletedState() { // Arrange var mockDockerClient = BuildMockDockerClient(true, true); var mockCommand = MotherFor.CommandWrapper .ThatSucceeds() .WithOutput("avalidcontainerid") .Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.RunContainer(ExpectedId, null), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage); var initialDeletedState = sut.Deleted; // Act await sut.StartContainerAsync(); // Assert sut.Deleted.Should().Be(initialDeletedState); }
public async Task WhenCommandSucceeds_ResultContainsTruncatedContainerId() { // Arrange var mockDockerClient = BuildMockDockerClient(true, true); var fullContainerId = "thisislongerthantwelvecharacters"; var mockCommand = MotherFor.CommandWrapper .ThatSucceeds() .WithOutput(fullContainerId) .Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.RunContainer(ExpectedId, null), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var expectedResult = new DockerContainer(mockDockerClient, mockCommandFactory, "thisislonger", new DockerPortMapping[0]); var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act var result = await sut.StartContainerAsync(); // Assert result.Should().BeEquivalentTo(expectedResult); }
public async Task WhenCommandSucceeds_DoesNotCallImageExists() { // Arrange var mockDockerClient = BuildMockDockerClient(true, true); var mockCommand = MotherFor.CommandWrapper .ThatSucceeds() .WithOutput("avalidcontainerid") .Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.RunContainer(ExpectedId, null), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act await sut.StartContainerAsync(); // Assert await mockDockerClient.DidNotReceive().ImageExistsAsync(Arg.Any <string>()); }
public async Task WhenRemoveSucceeds_ItSetsDeleted() { // Arrange var mockDockerClient = BuildMockDockerClient(true, true); var mockCommand = MotherFor.CommandWrapper.ThatSucceeds().Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.Remove(ExpectedId), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new Dockhand.Models.DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act await sut.RemoveAsync(); // Assert sut.Deleted.Should().BeTrue(); }
public async Task WhenRemoveSucceeds_DoesNotCallImageExists() { // Arrange var mockDockerClient = BuildMockDockerClient(true, true); var mockCommand = MotherFor.CommandWrapper.ThatSucceeds().Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.Remove(ExpectedId), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new Dockhand.Models.DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act await sut.RemoveAsync(); // Assert await mockDockerClient.DidNotReceive().ImageExistsAsync(Arg.Any <string>()); }
public async Task WhenNotDeleted_CallsRemoveCommand() { // Arrange var mockDockerClient = BuildMockDockerClient(true, true); var mockCommand = MotherFor.CommandWrapper.ThatSucceeds().Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.Remove(ExpectedId), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new Dockhand.Models.DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act await sut.RemoveAsync(); // Assert mockCommandFactory.Received(1).RunCommand(DockerCommands.Image.Remove(ExpectedId), _workingDirectory, Arg.Any <CancellationToken?>()); }
public void WhenContainerCpuLimitSpecifiedIsTooHigh() { // Arrange var aboveMaxCpuCount = Environment.ProcessorCount + 0.1m; var mockDockerClient = BuildMockDockerClient(true, true); var mockCommand = MotherFor.CommandWrapper.ThatFails().WithExitCode(-1).Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.RunContainer(ExpectedId, new StartContainerOptions().WithCpuLimit(aboveMaxCpuCount)), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act var exception = Assert.CatchAsync(async() => await sut.StartContainerAsync(o => o.WithCpuLimit(aboveMaxCpuCount))); // Assert exception.Should().BeOfType <ArgumentException>(); }
public async Task WhenCommandFails_CallsImageExists() { // Arrange var mockDockerClient = BuildMockDockerClient(true, true); var mockCommand = MotherFor.CommandWrapper.ThatFails().WithExitCode(-1).Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.RunContainer(ExpectedId, null), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act Assert.CatchAsync(async() => await sut.StartContainerAsync()); // Assert await mockDockerClient.Received(1).ImageExistsAsync(Arg.Any <string>()); }
public void WhenImageExistsSucceeds_ItSetsDeletedState() { // Arrange var mockDockerClient = BuildMockDockerClient(true, false); var mockCommand = MotherFor.CommandWrapper.ThatFails().WithExitCode(-1).Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.Remove(ExpectedId), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new Dockhand.Models.DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act Assert.CatchAsync(async() => await sut.RemoveAsync()); // Assert sut.Deleted.Should().BeTrue(); }
public async Task WhenCommandSucceeds_ReturnsDockerContainer() { // Arrange var mockDockerClient = BuildMockDockerClient(true, true); var mockCommand = MotherFor.CommandWrapper .ThatSucceeds() .WithOutput("thisisacontaineridthatisover12chars") .Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.RunContainer(ExpectedId, null), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act var result = await sut.StartContainerAsync(); // Assert result.Should().BeOfType <DockerContainer>(); }
public void WhenImageExistsFails_ItDoesNotSetDeletedState() { // Arrange var mockDockerClient = BuildMockDockerClient(false, true); var mockCommand = MotherFor.CommandWrapper.ThatFails().WithExitCode(-1).Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.RunContainer(ExpectedId, null), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act Assert.CatchAsync(async() => await sut.StartContainerAsync()); // Assert sut.Deleted.Should().BeFalse(); }
public void WhenCommandSucceeds_ButNoValidContainerIdInResponse(params string[] output) { // Arrange var mockDockerClient = BuildMockDockerClient(true, true); var mockCommand = MotherFor.CommandWrapper.ThatSucceeds().WithOutput(output).Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.RunContainer(ExpectedId, null), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act var exception = Assert.CatchAsync(async() => await sut.StartContainerAsync()); // Assert exception.Should().BeOfType <DockerCommandUnexpectedOutputException>(); }
public async Task WhenNotDeleted_CallsStartContainer() { // Arrange var mockDockerClient = BuildMockDockerClient(true, true); var mockCommand = MotherFor.CommandWrapper.ThatSucceeds().WithOutput("twelvecharac").Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.RunContainer(ExpectedId, null), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act await sut.StartContainerAsync(); // Assert mockCommandFactory.Received(1).RunCommand(DockerCommands.Image.RunContainer(ExpectedId, null), _workingDirectory, Arg.Any <CancellationToken?>()); }
public void WhenCommandFails_ThrowsDockerCommandException() { // Arrange var mockDockerClient = BuildMockDockerClient(true, true); var mockCommand = MotherFor.CommandWrapper.ThatFails().WithExitCode(-1).Build(); var mockCommandFactory = MotherFor.CommandFactory .ForWorkingDirectory(_workingDirectory) .ForCommandReturn(DockerCommands.Image.RunContainer(ExpectedId, null), mockCommand) .Build(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage); // Act var exception = Assert.CatchAsync(async() => await sut.StartContainerAsync()); // Assert exception.Should().BeOfType <DockerCommandException>(); }
internal DockerImage(IDockerClient client, IRunCommands commandFactory, DockerImageResult imageResult) { _client = client; _commandFactory = commandFactory; Id = imageResult.Id; Repository = imageResult.Repository; Tag = imageResult.Tag; }
public async Task CommandsIsSuccessful_NoDockerImages() { // Arrange var imageOutput = new DockerImageResult[0]; var mockCommandFactory = BuildMockCommandFactoryForScenario(true, imageOutput); var sut = new Dockhand.Client.DockerClient(_workingDirectory, mockCommandFactory); // Act var result = await sut.GetImagesAsync(); // Assert result.Count().Should().Be(0); }
public void WhenDeleted_DoesNotCallImageExists() { // Arrange var mockDockerClient = Substitute.For <IDockerClient>(); var mockCommandFactory = Substitute.For <IRunCommands>(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage) { Deleted = true }; // Act Assert.CatchAsync(async() => await sut.StartContainerAsync()); // Assert mockDockerClient.DidNotReceive().ImageExistsAsync(Arg.Any <string>()); }
public void WhenDeleted_ThrowsDockerImageDeletedException() { // Arrange var mockDockerClient = Substitute.For <IDockerClient>(); var mockCommandFactory = Substitute.For <IRunCommands>(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new DockerImage(mockDockerClient, mockCommandFactory, dockerImage) { Deleted = true }; // Act var exception = Assert.CatchAsync(async() => await sut.StartContainerAsync()); // Assert exception.Should().BeOfType <DockerImageDeletedException>(); }
public void WhenDeleted_DoesNotCallRemoveCommand() { // Arrange var mockDockerClient = Substitute.For <IDockerClient>(); var mockCommandFactory = Substitute.For <IRunCommands>(); var dockerImage = new DockerImageResult { Id = ExpectedId, Repository = ExpectedRepository, Tag = ExpectedTag }; var sut = new Dockhand.Models.DockerImage(mockDockerClient, mockCommandFactory, dockerImage) { Deleted = true }; // Act Assert.CatchAsync(async() => await sut.RemoveAsync()); // Assert mockCommandFactory.DidNotReceive().RunCommand(Arg.Any <string>(), Arg.Any <string>(), Arg.Any <CancellationToken?>()); }