public void ShouldNotRemoveAnyImage_WhenNoImagesWereOldEnough() { var strategy = new ByDateRecyclingStrategy(5, new Matchlist(), new Matchlist("dead,exited"), new Dictionary <string, DateTime>(), ImageDeletionOrderType.ByImageCreationDate); // 5 days var images = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "A", Created = DateTime.UtcNow.AddDays(-1), // 1 day }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "B", Created = DateTime.UtcNow.AddDays(-3), // 3 days }, }, }; var imagesToBeRecycled = strategy.GetImagesToBeRecycledInOrder(images); Assert.True(imagesToBeRecycled.Count == 0); }
public void ShouldNotRemoveAnyImage_WhenNoImagesWereFound() { var strategy = new ByDateRecyclingStrategy(0, new Matchlist(), new Matchlist("dead,exited"), new Dictionary <string, DateTime>(), ImageDeletionOrderType.ByImageLastTouchDate); var imagesToBeRecycled = strategy.GetImagesToBeRecycledInOrder(new List <DockerImageNode>()); Assert.True(imagesToBeRecycled.Count == 0); }
public void ShouldRemoveImage_IfNotUsedRecently() { var strategy = new ByDateRecyclingStrategy(2, new Matchlist(), new Matchlist("dead,exited"), new Dictionary <string, DateTime>(), ImageDeletionOrderType.ByImageLastTouchDate); // 2 days var images = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "A", }, Containers = new List <ContainerInspectResponse>() { new ContainerInspectResponse() { Created = DateTime.UtcNow.AddDays(-1), // 1 days, State = new ContainerState() { Status = "dead", FinishedAt = DateTime.UtcNow.AddDays(-1).ToString(), // 1 days }, } }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "B", }, Containers = new List <ContainerInspectResponse>() { new ContainerInspectResponse() { Created = DateTime.UtcNow.AddDays(-3), // 3 days, State = new ContainerState() { Status = "dead", FinishedAt = DateTime.UtcNow.AddDays(-3).ToString(), // 3 days }, } }, }, }; var imagesToBeRecycled = strategy.GetImagesToBeRecycledInOrder(images); Assert.True(imagesToBeRecycled.Count == 1); Assert.True(imagesToBeRecycled[0].InspectResponse.ID == "B"); }
public void ShouldRemoveOldImages_WhenNoContainersWereFound() { var strategy = new ByDateRecyclingStrategy(2, new Matchlist(), new Matchlist("dead,exited"), new Dictionary <string, DateTime>(), ImageDeletionOrderType.ByImageCreationDate); // 2 days var images = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "A", Created = DateTime.UtcNow.AddDays(-1), // 1 day }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "B", Created = DateTime.UtcNow.AddDays(-3), // 3 days }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "C", Created = DateTime.UtcNow.AddDays(-5), // 5 days }, }, }; var imagesToBeRecycled = strategy.GetImagesToBeRecycledInOrder(images); Assert.True(imagesToBeRecycled.Count == 2); Assert.True(string.Equals(imagesToBeRecycled[0].InspectResponse.ID, "B")); Assert.True(string.Equals(imagesToBeRecycled[1].InspectResponse.ID, "C")); }
public void ShouldRemoveOldImages_InDependencyOrder_HaveNoRunningOrRestartingContainers_Partial() { var strategy = new ByDateRecyclingStrategy(7, new Matchlist(), new Matchlist("dead,exited"), new Dictionary <string, DateTime>(), ImageDeletionOrderType.ByImageCreationDate); //7 days var images = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "A", Created = DateTime.UtcNow.AddDays(-10), // 10 days }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "X", Created = DateTime.UtcNow.AddDays(-8), // 8 days }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "Y", Created = DateTime.UtcNow.AddDays(-5), // 5 days }, } }, }, }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "B", Created = DateTime.UtcNow.AddDays(-14), // 14 days }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "M", Created = DateTime.UtcNow.AddDays(-5), // 5 days }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "N", Created = DateTime.UtcNow.AddDays(-10), // 10 days }, }, }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "C", Created = DateTime.UtcNow.AddDays(-30), // 30 days }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "J", Created = DateTime.UtcNow.AddDays(-20), // 20 day }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "L", Created = DateTime.UtcNow.AddDays(-10), // 10 days }, } }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "K", Created = DateTime.UtcNow.AddDays(-3), // 3 days }, }, }, }, }; var imagesToBeRecycled = strategy.GetImagesToBeRecycledInOrder(images); Assert.True(imagesToBeRecycled.Count == 3); // Expected order: N,L,J Assert.True(string.Equals(imagesToBeRecycled[0].InspectResponse.ID, "N")); Assert.True(string.Equals(imagesToBeRecycled[1].InspectResponse.ID, "L")); Assert.True(string.Equals(imagesToBeRecycled[2].InspectResponse.ID, "J")); }
public void ShouldRemoveOldImages_InDependencyOrder_HaveNoRunningOrRestartingContainers_All() { var strategy = new ByDateRecyclingStrategy(0, new Matchlist(), new Matchlist("dead,exited"), new Dictionary <string, DateTime>(), ImageDeletionOrderType.ByImageCreationDate); var images = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "A", Created = DateTime.UtcNow.AddDays(-1), // 1 day }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "X", Created = DateTime.UtcNow.AddDays(-1), // 1 day }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "Y", Created = DateTime.UtcNow.AddDays(-1), // 1 days }, } }, }, }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "B", Created = DateTime.UtcNow.AddDays(-3), // 3 days }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "M", Created = DateTime.UtcNow.AddDays(-3), // 3 days }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "N", Created = DateTime.UtcNow.AddDays(-3), // 3 days }, }, }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "C", Created = DateTime.UtcNow.AddDays(-7), // 7 days }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "J", Created = DateTime.UtcNow.AddDays(-7), // 7 day }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "L", Created = DateTime.UtcNow.AddDays(-3), // 3 days }, } }, }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "K", Created = DateTime.UtcNow.AddDays(-3), // 3 days }, }, }, }, }; var imagesToBeRecycled = strategy.GetImagesToBeRecycledInOrder(images); Assert.True(imagesToBeRecycled.Count == 10); // Expected order: Y,X,A,M,N,B,L,J,K,C Assert.True(string.Equals(imagesToBeRecycled[0].InspectResponse.ID, "Y")); Assert.True(string.Equals(imagesToBeRecycled[1].InspectResponse.ID, "X")); Assert.True(string.Equals(imagesToBeRecycled[2].InspectResponse.ID, "A")); Assert.True(string.Equals(imagesToBeRecycled[3].InspectResponse.ID, "M")); Assert.True(string.Equals(imagesToBeRecycled[4].InspectResponse.ID, "N")); Assert.True(string.Equals(imagesToBeRecycled[5].InspectResponse.ID, "B")); Assert.True(string.Equals(imagesToBeRecycled[6].InspectResponse.ID, "L")); Assert.True(string.Equals(imagesToBeRecycled[7].InspectResponse.ID, "J")); Assert.True(string.Equals(imagesToBeRecycled[8].InspectResponse.ID, "K")); Assert.True(string.Equals(imagesToBeRecycled[9].InspectResponse.ID, "C")); }
public void ShouldNotRemoveImage_WhenChildImagesHaveRunningOrRestartingContainer() { var strategy = new ByDateRecyclingStrategy(0, new Matchlist(), new Matchlist("dead,exited"), new Dictionary <string, DateTime>(), ImageDeletionOrderType.ByImageCreationDate); var images = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "A", Created = DateTime.UtcNow.AddDays(-1), // 1 day }, Containers = new List <ContainerInspectResponse>() { new ContainerInspectResponse() { State = new ContainerState() { Status = "exited", FinishedAt = DateTime.UtcNow.ToString(), }, } }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "C", Created = DateTime.UtcNow.AddDays(-1), // 1 day }, Containers = new List <ContainerInspectResponse>() { new ContainerInspectResponse() { State = new ContainerState() { Status = "running", }, } }, Children = new List <DockerImageNode>() { new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "D", Created = DateTime.UtcNow.AddDays(-1), // 1 day }, }, } }, } }, new DockerImageNode() { InspectResponse = new ImageInspectResponse() { ID = "B", Created = DateTime.UtcNow.AddDays(-3), // 3 days }, Containers = new List <ContainerInspectResponse>() { new ContainerInspectResponse() { State = new ContainerState() { Status = "restarting", }, }, new ContainerInspectResponse() { State = new ContainerState() { Status = "dead", FinishedAt = DateTime.UtcNow.ToString(), }, }, new ContainerInspectResponse() { State = new ContainerState() { Status = "paused", }, } }, }, }; var imagesToBeRecycled = strategy.GetImagesToBeRecycledInOrder(images); Assert.True(imagesToBeRecycled.Count == 1); Assert.Equal(imagesToBeRecycled[0].InspectResponse.ID, "D"); }