Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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>());
        }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 5
0
        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>());
        }
Ejemplo n.º 6
0
        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?>());
        }
Ejemplo n.º 7
0
        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>();
        }
Ejemplo n.º 8
0
        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>());
        }
Ejemplo n.º 9
0
        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();
        }
Ejemplo n.º 10
0
        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>();
        }
Ejemplo n.º 11
0
        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();
        }
Ejemplo n.º 12
0
        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>();
        }
Ejemplo n.º 13
0
        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?>());
        }
Ejemplo n.º 14
0
        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>();
        }
Ejemplo n.º 15
0
 internal DockerImage(IDockerClient client, IRunCommands commandFactory, DockerImageResult imageResult)
 {
     _client         = client;
     _commandFactory = commandFactory;
     Id         = imageResult.Id;
     Repository = imageResult.Repository;
     Tag        = imageResult.Tag;
 }
Ejemplo n.º 16
0
        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);
        }
Ejemplo n.º 17
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>());
        }
Ejemplo n.º 18
0
        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>();
        }
Ejemplo n.º 19
0
        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?>());
        }