Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/ImageBuilder.Tests/BuildCommandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3525,6 +3525,7 @@ public async Task BuildCommand_MirroredImages_BaseImageTagOverride()

#nullable enable
private static BuildCommand CreateBuildCommand(
IManifestJsonService? manifestJsonService = null,
IDockerService? dockerService = null,
ILogger<BuildCommand>? loggerService = null,
IGitService? gitService = null,
Expand All @@ -3536,6 +3537,7 @@ private static BuildCommand CreateBuildCommand(
IImageCacheService? imageCacheService = null)
{
BuildCommand command = new(
manifestJsonService ?? TestHelper.CreateManifestJsonService(),
dockerService ?? Mock.Of<IDockerService>(),
loggerService ?? Mock.Of<ILogger<BuildCommand>>(),
gitService ?? Mock.Of<IGitService>(),
Expand Down
4 changes: 4 additions & 0 deletions src/ImageBuilder.Tests/CopyAcrImagesCommandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public async Task CopyAcrImagesCommand_CustomDockerfileName()
Mock<ICopyImageService> copyImageServiceMock = new();

CopyAcrImagesCommand command = new(
TestHelper.CreateManifestJsonService(),
copyImageServiceMock.Object,
Mock.Of<ILogger<CopyAcrImagesCommand>>());
command.Options.Manifest = Path.Combine(tempFolderContext.Path, "manifest.json");
Expand Down Expand Up @@ -123,6 +124,7 @@ public async Task CopyAcrImagesCommand_SharedDockerfile()
var copyImageServiceMock = new Mock<ICopyImageService>();

var command = new CopyAcrImagesCommand(
TestHelper.CreateManifestJsonService(),
copyImageServiceMock.Object,
Mock.Of<ILogger<CopyAcrImagesCommand>>());
command.Options.Manifest = Path.Combine(tempFolderContext.Path, "manifest.json");
Expand Down Expand Up @@ -223,6 +225,7 @@ public async Task CopyAcrImagesCommand_RuntimeDepsSharing()
var copyImageServiceMock = new Mock<ICopyImageService>();

var command = new CopyAcrImagesCommand(
TestHelper.CreateManifestJsonService(),
copyImageServiceMock.Object,
Mock.Of<ILogger<CopyAcrImagesCommand>>());
command.Options.Manifest = Path.Combine(tempFolderContext.Path, "manifest.json");
Expand Down Expand Up @@ -334,6 +337,7 @@ public async Task SyndicatedTags()
var copyImageServiceMock = new Mock<ICopyImageService>();

var command = new CopyAcrImagesCommand(
TestHelper.CreateManifestJsonService(),
copyImageServiceMock.Object,
Mock.Of<ILogger<CopyAcrImagesCommand>>());
command.Options.Manifest = Path.Combine(tempFolderContext.Path, "manifest.json");
Expand Down
2 changes: 2 additions & 0 deletions src/ImageBuilder.Tests/CopyBaseImagesCommandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ public async Task MultipleBaseTags()
Mock<ICopyImageService> copyImageServiceMock = new();

CopyBaseImagesCommand command = new(
TestHelper.CreateManifestJsonService(),
copyImageServiceMock.Object,
Mock.Of<ILogger<CopyBaseImagesCommand>>(),
Mock.Of<IGitService>());
Expand Down Expand Up @@ -121,6 +122,7 @@ public async Task OverridenBaseTag()
Mock<ICopyImageService> copyImageServiceMock = new();

CopyBaseImagesCommand command = new(
TestHelper.CreateManifestJsonService(),
copyImageServiceMock.Object,
Mock.Of<ILogger<CopyBaseImagesCommand>>(),
Mock.Of<IGitService>());
Expand Down
4 changes: 2 additions & 2 deletions src/ImageBuilder.Tests/GenerateBuildMatrixCommandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -256,7 +256,7 @@ public async Task FilterOutCachedImages(
SetCacheResult(imageCacheServiceMock, dockerfileRuntime2Path, ImageCacheState.NotCached);
SetCacheResult(imageCacheServiceMock, dockerfileSdk2Path, ImageCacheState.NotCached);

GenerateBuildMatrixCommand command = new(imageCacheServiceMock.Object, Mock.Of<IManifestServiceFactory>(), Mock.Of<ILogger<GenerateBuildMatrixCommand>>());
GenerateBuildMatrixCommand command = new(TestHelper.CreateManifestJsonService(), imageCacheServiceMock.Object, Mock.Of<IManifestServiceFactory>(), Mock.Of<ILogger<GenerateBuildMatrixCommand>>());
command.Options.Manifest = Path.Combine(tempFolderContext.Path, "manifest.json");
command.Options.MatrixType = MatrixType.PlatformDependencyGraph;
command.Options.ImageInfoPath = Path.Combine(tempFolderContext.Path, "imageinfo.json");
Expand Down Expand Up @@ -1547,6 +1547,6 @@ private static PlatformData CreateSimplePlatformData(string dockerfilePath, bool
}

private static GenerateBuildMatrixCommand CreateCommand() =>
new(Mock.Of<IImageCacheService>(), Mock.Of<IManifestServiceFactory>(), Mock.Of<ILogger<GenerateBuildMatrixCommand>>());
new(TestHelper.CreateManifestJsonService(), Mock.Of<IImageCacheService>(), Mock.Of<IManifestServiceFactory>(), Mock.Of<ILogger<GenerateBuildMatrixCommand>>());
}
}
4 changes: 2 additions & 2 deletions src/ImageBuilder.Tests/GenerateDockerfilesCommandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public async Task GenerateDockerfilesCommand_MismatchedTemplates()
string manifestPath = Path.Combine(tempFolderContext.Path, "manifest.json");
File.WriteAllText(manifestPath, JsonConvert.SerializeObject(manifest));

GenerateDockerfilesCommand command = new(Mock.Of<IEnvironmentService>(), Mock.Of<ILogger<GenerateDockerfilesCommand>>());
GenerateDockerfilesCommand command = new(TestHelper.CreateManifestJsonService(), Mock.Of<IEnvironmentService>(), Mock.Of<ILogger<GenerateDockerfilesCommand>>());
command.Options.Manifest = manifestPath;
command.LoadManifest();

Expand Down Expand Up @@ -266,7 +266,7 @@ private GenerateDockerfilesCommand InitializeCommand(
.Setup(o => o.Exit(1))
.Throws(_exitException);

GenerateDockerfilesCommand command = new GenerateDockerfilesCommand(_environmentServiceMock.Object, Mock.Of<ILogger<GenerateDockerfilesCommand>>());
GenerateDockerfilesCommand command = new GenerateDockerfilesCommand(TestHelper.CreateManifestJsonService(), _environmentServiceMock.Object, Mock.Of<ILogger<GenerateDockerfilesCommand>>());
command.Options.Manifest = manifestPath;
command.Options.AllowOptionalTemplates = allowOptionalTemplates;
command.Options.Validate = validate;
Expand Down
2 changes: 1 addition & 1 deletion src/ImageBuilder.Tests/GenerateReadmesCommandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ private GenerateReadmesCommand InitializeCommand(
.Setup(o => o.Exit(1))
.Throws(_exitException);

GenerateReadmesCommand command = new GenerateReadmesCommand(_environmentServiceMock.Object, Mock.Of<ILogger<GenerateReadmesCommand>>());
GenerateReadmesCommand command = new GenerateReadmesCommand(TestHelper.CreateManifestJsonService(), _environmentServiceMock.Object, Mock.Of<ILogger<GenerateReadmesCommand>>());
command.Options.Manifest = manifestPath;
command.Options.AllowOptionalTemplates = allowOptionalTemplates;
command.Options.Validate = validate;
Expand Down
2 changes: 1 addition & 1 deletion src/ImageBuilder.Tests/GetStaleImagesCommandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1768,7 +1768,7 @@ private string SerializeJsonObjectToTempFile(object jsonObject)
private GetStaleImagesCommand CreateCommand()
{
GetStaleImagesCommand command = new(
this.ManifestServiceFactoryMock.Object, this.loggerServiceMock.Object, this.octokitClientFactory, this.gitService);
this.ManifestServiceFactoryMock.Object, TestHelper.CreateManifestJsonService(), this.loggerServiceMock.Object, this.octokitClientFactory, this.gitService);
command.Options.SubscriptionOptions.SubscriptionsPath = this.subscriptionsPath;
command.Options.VariableName = VariableName;
command.Options.FilterOptions.Platform.OsType = this.osType;
Expand Down
8 changes: 8 additions & 0 deletions src/ImageBuilder.Tests/Helpers/InMemoryFileSystem.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,14 @@ public byte[] ReadAllBytes(string path)
public Task<byte[]> ReadAllBytesAsync(string path, CancellationToken cancellationToken = default) =>
Task.FromResult(ReadAllBytes(path));

public string ReadAllText(string path)
{
FilesRead.Add(path);
return _files.TryGetValue(path, out var bytes)
? Encoding.UTF8.GetString(bytes)
: throw new FileNotFoundException("File not found", path);
}

public Task<string> ReadAllTextAsync(string path, CancellationToken cancellationToken = default)
{
FilesRead.Add(path);
Expand Down
9 changes: 9 additions & 0 deletions src/ImageBuilder.Tests/Helpers/TestHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,15 @@ namespace Microsoft.DotNet.ImageBuilder.Tests.Helpers
{
public static class TestHelper
{
/// <summary>
/// Creates a real <see cref="ManifestJsonService"/> for use in tests that load
/// manifest JSON files from the filesystem (e.g., temp folder-based tests).
/// </summary>
public static IManifestJsonService CreateManifestJsonService() =>
new ManifestJsonService(
fileSystem: new FileSystem(),
logger: new LoggerFactory().CreateLogger<ManifestJsonService>());

public static TempFolderContext UseTempFolder()
{
return new TempFolderContext();
Expand Down
8 changes: 4 additions & 4 deletions src/ImageBuilder.Tests/ImageInfoHelperTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ public void LoadFromContent()
string manifestPath = Path.Combine(tempFolderContext.Path, "manifest.json");
File.WriteAllText(manifestPath, JsonHelper.SerializeObject(manifest));

ManifestInfo manifestInfo = ManifestInfo.Load(new FakeManifestOptions(manifestPath));
ManifestInfo manifestInfo = TestHelper.CreateManifestJsonService().Load(new FakeManifestOptions(manifestPath));
string expected = JsonHelper.SerializeObject(imageArtifactDetails);

ImageArtifactDetails result = ImageInfoHelper.LoadFromContent(expected, manifestInfo);
Expand Down Expand Up @@ -164,7 +164,7 @@ public void LoadFromContent_ImagesDifferByPatchVersion()
string manifestPath = Path.Combine(tempFolderContext.Path, "manifest.json");
File.WriteAllText(manifestPath, JsonHelper.SerializeObject(manifest));

ManifestInfo manifestInfo = ManifestInfo.Load(new FakeManifestOptions(manifestPath));
ManifestInfo manifestInfo = TestHelper.CreateManifestJsonService().Load(new FakeManifestOptions(manifestPath));
string expected = JsonHelper.SerializeObject(imageArtifactDetails);

ImageArtifactDetails result = ImageInfoHelper.LoadFromContent(expected, manifestInfo);
Expand Down Expand Up @@ -255,7 +255,7 @@ public void LoadFromContent_DuplicatedPlatforms()
string manifestPath = Path.Combine(tempFolderContext.Path, "manifest.json");
File.WriteAllText(manifestPath, JsonHelper.SerializeObject(manifest));

ManifestInfo manifestInfo = ManifestInfo.Load(new FakeManifestOptions(manifestPath));
ManifestInfo manifestInfo = TestHelper.CreateManifestJsonService().Load(new FakeManifestOptions(manifestPath));
string expected = JsonHelper.SerializeObject(imageArtifactDetails);

ImageArtifactDetails result = ImageInfoHelper.LoadFromContent(expected, manifestInfo);
Expand Down Expand Up @@ -1093,7 +1093,7 @@ public void Merge_SharedDockerfile_DistinctPlatform()
string manifestPath = Path.Combine(tempFolderContext.Path, "manifest.json");
File.WriteAllText(manifestPath, JsonHelper.SerializeObject(manifest));

ManifestInfo manifestInfo = ManifestInfo.Load(new FakeManifestOptions(manifestPath));
ManifestInfo manifestInfo = TestHelper.CreateManifestJsonService().Load(new FakeManifestOptions(manifestPath));

ImageArtifactDetails source = ImageInfoHelper.LoadFromContent(JsonHelper.SerializeObject(imageArtifactDetails), manifestInfo);
ImageArtifactDetails target = ImageInfoHelper.LoadFromContent(JsonHelper.SerializeObject(targetImageArtifactDetails), manifestInfo);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -283,7 +283,7 @@ private async Task ValidateExecuteAsync(
.Callback<string, string, string, string, IServiceConnection>(
(csv, _, _, table, _) => ingestedData.Add(table, csv));

IngestKustoImageInfoCommand command = new(Mock.Of<ILogger<IngestKustoImageInfoCommand>>(), kustoClientMock.Object);
IngestKustoImageInfoCommand command = new(TestHelper.CreateManifestJsonService(), Mock.Of<ILogger<IngestKustoImageInfoCommand>>(), kustoClientMock.Object);
command.Options.ImageInfoPath = imageInfoPath;
command.Options.Manifest = manifestPath;
command.Options.ImageTable = "ImageInfo";
Expand Down
4 changes: 2 additions & 2 deletions src/ImageBuilder.Tests/ManifestInfoTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ public void Load_Include_Repos()
DockerfileHelper.CreateDockerfile(s_dockerfilePath, tempFolderContext);

IManifestOptionsInfo manifestOptions = ManifestHelper.GetManifestOptions(manifestPath);
ManifestInfo manifestInfo = ManifestInfo.Load(manifestOptions);
ManifestInfo manifestInfo = TestHelper.CreateManifestJsonService().Load(manifestOptions);

Assert.Equal(3, manifestInfo.Model.Repos.Length);
Assert.Equal("testRepo1", manifestInfo.Model.Repos[0].Name);
Expand Down Expand Up @@ -167,7 +167,7 @@ private static ManifestInfo LoadManifestInfo(string manifest, string includeMani
DockerfileHelper.CreateDockerfile(s_dockerfilePath, tempFolderContext);

IManifestOptionsInfo manifestOptions = ManifestHelper.GetManifestOptions(manifestPath);
return ManifestInfo.Load(manifestOptions);
return TestHelper.CreateManifestJsonService().Load(manifestOptions);
}

private static string CreateRepo(string repoName, string dockerfilePath, string tag = "testTag") =>
Expand Down
8 changes: 4 additions & 4 deletions src/ImageBuilder.Tests/McrTagsMetadataGeneratorTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ public static void DockerfileLink(bool generateGitHubLinks, string sourceRepoBra

// Load manifest
IManifestOptionsInfo manifestOptions = ManifestHelper.GetManifestOptions(manifestPath);
ManifestInfo manifestInfo = ManifestInfo.Load(manifestOptions);
ManifestInfo manifestInfo = TestHelper.CreateManifestJsonService().Load(manifestOptions);
RepoInfo repo = manifestInfo.AllRepos.First();

Mock<IGitService> gitServiceMock = new Mock<IGitService>();
Expand Down Expand Up @@ -192,7 +192,7 @@ public void HandlesUndocumentedPlatform(bool hasSharedTag)

// Load manifest
IManifestOptionsInfo manifestOptions = ManifestHelper.GetManifestOptions(manifestPath);
ManifestInfo manifestInfo = ManifestInfo.Load(manifestOptions);
ManifestInfo manifestInfo = TestHelper.CreateManifestJsonService().Load(manifestOptions);
RepoInfo repo = manifestInfo.AllRepos.First();

Mock<IGitService> gitServiceMock = new Mock<IGitService>();
Expand Down Expand Up @@ -293,7 +293,7 @@ public void DuplicatedPlatform()

// Load manifest
IManifestOptionsInfo manifestOptions = ManifestHelper.GetManifestOptions(manifestPath);
ManifestInfo manifestInfo = ManifestInfo.Load(manifestOptions);
ManifestInfo manifestInfo = TestHelper.CreateManifestJsonService().Load(manifestOptions);
RepoInfo repo = manifestInfo.AllRepos.First();

Mock<IGitService> gitServiceMock = new Mock<IGitService>();
Expand Down Expand Up @@ -480,7 +480,7 @@ private void ValidateMetadataGeneratorOutput(IEnumerable<Platform> platforms)

// Load manifest
IManifestOptionsInfo manifestOptions = GetManifestOptions(ManifestFilePath);
ManifestInfo manifestInfo = ManifestInfo.Load(manifestOptions);
ManifestInfo manifestInfo = TestHelper.CreateManifestJsonService().Load(manifestOptions);
RepoInfo repo = manifestInfo.AllRepos.First();

// Execute tags metadata generator and deserialize its output
Expand Down
15 changes: 8 additions & 7 deletions src/ImageBuilder.Tests/MergeImageInfoFilesCommandTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
using Microsoft.DotNet.ImageBuilder.Models.Image;
using Microsoft.DotNet.ImageBuilder.Models.Manifest;
using Microsoft.DotNet.ImageBuilder.Tests.Helpers;
using Moq;
using Newtonsoft.Json;
using Shouldly;
using Xunit;
Expand Down Expand Up @@ -180,7 +181,7 @@ public async Task MergeImageInfoFilesCommand_HappyPath()
}
};

MergeImageInfoCommand command = new MergeImageInfoCommand();
MergeImageInfoCommand command = new MergeImageInfoCommand(TestHelper.CreateManifestJsonService());
command.Options.SourceImageInfoFolderPath = Path.Combine(context.Path, "image-infos");
command.Options.DestinationImageInfoPath = Path.Combine(context.Path, "output.json");
command.Options.Manifest = Path.Combine(context.Path, "manifest.json");
Expand Down Expand Up @@ -484,7 +485,7 @@ public async Task MergeImageInfoFilesCommand_DuplicateDockerfilePaths()
}
};

MergeImageInfoCommand command = new MergeImageInfoCommand();
MergeImageInfoCommand command = new MergeImageInfoCommand(TestHelper.CreateManifestJsonService());
command.Options.SourceImageInfoFolderPath = Path.Combine(context.Path, "image-infos");
command.Options.DestinationImageInfoPath = Path.Combine(context.Path, "output.json");
command.Options.Manifest = Path.Combine(context.Path, "manifest.json");
Expand Down Expand Up @@ -619,7 +620,7 @@ public async Task MergeImageInfoFilesCommand_DuplicateDockerfilePaths()
[Fact]
public async Task MergeImageInfoFilesCommand_SourceFolderPathNotFound()
{
MergeImageInfoCommand command = new MergeImageInfoCommand();
MergeImageInfoCommand command = new MergeImageInfoCommand(TestHelper.CreateManifestJsonService());
command.Options.SourceImageInfoFolderPath = "foo";
command.Options.DestinationImageInfoPath = "output.json";

Expand All @@ -642,7 +643,7 @@ public async Task MergeImageInfoFilesCommand_SourceFolderEmpty()
// Store the content in a .txt file which the command should NOT be looking for.
File.WriteAllText("image-info.txt", JsonHelper.SerializeObject(imageArtifactDetails));

MergeImageInfoCommand command = new MergeImageInfoCommand();
MergeImageInfoCommand command = new MergeImageInfoCommand(TestHelper.CreateManifestJsonService());
command.Options.SourceImageInfoFolderPath = context.Path;
command.Options.DestinationImageInfoPath = "output.json";

Expand Down Expand Up @@ -771,7 +772,7 @@ public async Task MergeImageInfoFilesCommand_Publish_ReplaceContent()
}
};

MergeImageInfoCommand command = new();
MergeImageInfoCommand command = new(TestHelper.CreateManifestJsonService());
command.Options.SourceImageInfoFolderPath = Path.Combine(tempFolderContext.Path, "image-infos");
command.Options.DestinationImageInfoPath = Path.Combine(tempFolderContext.Path, "output.json");
command.Options.Manifest = Path.Combine(tempFolderContext.Path, "manifest.json");
Expand Down Expand Up @@ -938,7 +939,7 @@ public async Task MergeImageInfoFilesCommand_Publish_RemoveOutOfDateContent()
}
};

MergeImageInfoCommand command = new();
MergeImageInfoCommand command = new(TestHelper.CreateManifestJsonService());
command.Options.SourceImageInfoFolderPath = Path.Combine(tempFolderContext.Path, "image-infos");
command.Options.DestinationImageInfoPath = Path.Combine(tempFolderContext.Path, "output.json");
command.Options.Manifest = Path.Combine(tempFolderContext.Path, "manifest.json");
Expand Down Expand Up @@ -1117,7 +1118,7 @@ public async Task MergeImageInfoFilesCommand_CommitUrlOverride()

var outputImageInfoFile = Path.Combine(context.Path, "merged-image-info.json");

MergeImageInfoCommand command = new MergeImageInfoCommand();
MergeImageInfoCommand command = new MergeImageInfoCommand(TestHelper.CreateManifestJsonService());
command.Options.SourceImageInfoFolderPath = sourceImageInfoDir;
command.Options.DestinationImageInfoPath = outputImageInfoFile;
command.Options.InitialImageInfoPath = initialImageInfoFile;
Expand Down
Loading
Loading