diff --git a/src/Octoshift/Extensions/EnumerableExtensions.cs b/src/Octoshift/Extensions/EnumerableExtensions.cs index 0d448bc6f..b6bde1c41 100644 --- a/src/Octoshift/Extensions/EnumerableExtensions.cs +++ b/src/Octoshift/Extensions/EnumerableExtensions.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Text; using System.Threading.Tasks; namespace OctoshiftCLI.Extensions @@ -23,5 +24,7 @@ public static async Task Sum(this IEnumerable list, Func } public static IEnumerable ToEmptyEnumerableIfNull(this IEnumerable enumerable) => enumerable ?? Enumerable.Empty(); + + public static string GetString(this byte[] bytes) => Encoding.UTF8.GetString(bytes.ToArray()); } } diff --git a/src/Octoshift/Extensions/StringExtensions.cs b/src/Octoshift/Extensions/StringExtensions.cs index 73173acb6..8d323ff92 100644 --- a/src/Octoshift/Extensions/StringExtensions.cs +++ b/src/Octoshift/Extensions/StringExtensions.cs @@ -24,5 +24,7 @@ public static class StringExtensions public static string ToUnixPath(this string path) => path?.Replace("\\", "/"); public static string EscapeDataString(this string value) => Uri.EscapeDataString(value); + + public static byte[] ToBytes(this string s) => Encoding.UTF8.GetBytes(s); } } diff --git a/src/Octoshift/Services/FileSystemProvider.cs b/src/Octoshift/Services/FileSystemProvider.cs index 83369e667..de80bde9a 100644 --- a/src/Octoshift/Services/FileSystemProvider.cs +++ b/src/Octoshift/Services/FileSystemProvider.cs @@ -15,7 +15,7 @@ public class FileSystemProvider public virtual FileStream Open(string path, FileMode mode) => File.Open(path, mode); - public virtual FileStream OpenRead(string path) => File.OpenRead(path); + public virtual Stream OpenRead(string path) => File.OpenRead(path); public virtual async Task WriteAllTextAsync(string path, string contents) => await File.WriteAllTextAsync(path, contents); diff --git a/src/OctoshiftCLI.Tests/bbs2gh/Commands/MigrateRepo/MigrateRepoCommandHandlerTests.cs b/src/OctoshiftCLI.Tests/bbs2gh/Commands/MigrateRepo/MigrateRepoCommandHandlerTests.cs index a44ea8558..2a5831db2 100644 --- a/src/OctoshiftCLI.Tests/bbs2gh/Commands/MigrateRepo/MigrateRepoCommandHandlerTests.cs +++ b/src/OctoshiftCLI.Tests/bbs2gh/Commands/MigrateRepo/MigrateRepoCommandHandlerTests.cs @@ -6,6 +6,7 @@ using Moq; using OctoshiftCLI.BbsToGithub.Commands.MigrateRepo; using OctoshiftCLI.BbsToGithub.Services; +using OctoshiftCLI.Extensions; using OctoshiftCLI.Services; using Xunit; @@ -350,9 +351,9 @@ public async Task Happy_Path_Uploads_To_Github_Storage() var githubOrgDatabaseId = Guid.NewGuid().ToString(); const string gitArchiveFilePath = "./gitdata_archive"; const string gitArchiveUrl = "gei://archive/1"; + const string gitArchiveContents = "I am git archive"; - await File.WriteAllTextAsync(gitArchiveFilePath, "I am git archive"); - await using var gitContentStream = File.OpenRead(gitArchiveFilePath); + await using var gitContentStream = new MemoryStream(gitArchiveContents.ToBytes()); _mockFileSystemProvider.Setup(m => m.OpenRead(gitArchiveFilePath)).Returns(gitContentStream); @@ -360,7 +361,10 @@ public async Task Happy_Path_Uploads_To_Github_Storage() _mockGithubApi.Setup(x => x.CreateBbsMigrationSource(GITHUB_ORG_ID).Result).Returns(MIGRATION_SOURCE_ID); _mockGithubApi.Setup(x => x.GetOrganizationDatabaseId(GITHUB_ORG).Result).Returns(githubOrgDatabaseId); _mockGithubApi - .Setup(x => x.UploadArchiveToGithubStorage(githubOrgDatabaseId, It.IsAny(), gitContentStream).Result) + .Setup(x => x.UploadArchiveToGithubStorage( + githubOrgDatabaseId, + It.IsAny(), + It.Is(s => (s as MemoryStream).ToArray().GetString() == gitArchiveContents)).Result) .Returns(gitArchiveUrl); // Act diff --git a/src/OctoshiftCLI.Tests/gei/Commands/MigrateRepo/MigrateRepoCommandHandlerTests.cs b/src/OctoshiftCLI.Tests/gei/Commands/MigrateRepo/MigrateRepoCommandHandlerTests.cs index 5e4c398c9..c87bdb974 100644 --- a/src/OctoshiftCLI.Tests/gei/Commands/MigrateRepo/MigrateRepoCommandHandlerTests.cs +++ b/src/OctoshiftCLI.Tests/gei/Commands/MigrateRepo/MigrateRepoCommandHandlerTests.cs @@ -5,6 +5,7 @@ using System.Threading.Tasks; using FluentAssertions; using Moq; +using OctoshiftCLI.Extensions; using OctoshiftCLI.GithubEnterpriseImporter.Commands.MigrateRepo; using OctoshiftCLI.GithubEnterpriseImporter.Services; using OctoshiftCLI.Services; @@ -345,16 +346,13 @@ public async Task Happy_Path_UseGithubStorage(bool useGhesBlobCredentials) var metadataArchiveUrl = $"https://example.com/{metadataArchiveId}"; var uploadedGitArchiveUrl = "gei://archive/1"; var uploadedMetadataArchiveUrl = "gei://archive/2"; - var gitArchiveFilePath = "./gitdata_archive"; - var metadataArchiveFilePath = "./metadata_archive"; var gitArchiveDownloadFilePath = "git_archive_downaloded.tmp"; var metadataArchiveDownloadFilePath = "metadata_archive_downloaded.tmp"; + var gitArchiveContents = "I am git archive"; + var metadataArchiveContents = "I am metadata archive"; - File.WriteAllText(gitArchiveFilePath, "I am git archive"); - File.WriteAllText(metadataArchiveFilePath, "I am metadata archive"); - - using var gitContentStream = File.OpenRead(gitArchiveFilePath); - using var metaContentStream = File.OpenRead(metadataArchiveFilePath); + using var gitContentStream = new MemoryStream(gitArchiveContents.ToBytes()); + using var metaContentStream = new MemoryStream(metadataArchiveContents.ToBytes()); _mockFileSystemProvider .SetupSequence(m => m.GetTempFileName()) @@ -372,7 +370,6 @@ public async Task Happy_Path_UseGithubStorage(bool useGhesBlobCredentials) _mockGhesVersionChecker.Setup(m => m.AreBlobCredentialsRequired(GHES_API_URL)).ReturnsAsync(useGhesBlobCredentials); _mockTargetGithubApi.Setup(x => x.DoesOrgExist(TARGET_ORG).Result).Returns(true); - _mockTargetGithubApi.Setup(x => x.GetOrganizationId(TARGET_ORG).Result).Returns(githubOrgId); _mockTargetGithubApi.Setup(x => x.GetOrganizationDatabaseId(TARGET_ORG).Result).Returns(githubOrgDatabaseId); _mockTargetGithubApi.Setup(x => x.CreateGhecMigrationSource(githubOrgId).Result).Returns(migrationSourceId); @@ -402,11 +399,17 @@ public async Task Happy_Path_UseGithubStorage(bool useGhesBlobCredentials) _mockSourceGithubApi.Setup(x => x.GetArchiveMigrationUrl(SOURCE_ORG, metadataArchiveId).Result).Returns(metadataArchiveUrl); _mockTargetGithubApi - .Setup(x => x.UploadArchiveToGithubStorage(githubOrgDatabaseId, It.Is(a => a.EndsWith("git_archive.tar.gz")), gitContentStream).Result) + .Setup(x => x.UploadArchiveToGithubStorage( + githubOrgDatabaseId, + It.Is(a => a.EndsWith("git_archive.tar.gz")), + It.Is(s => (s as MemoryStream).ToArray().GetString() == gitArchiveContents)).Result) .Returns(uploadedGitArchiveUrl); _mockTargetGithubApi - .Setup(x => x.UploadArchiveToGithubStorage(githubOrgDatabaseId, It.Is(a => a.EndsWith("metadata_archive.tar.gz")), metaContentStream).Result) + .Setup(x => x.UploadArchiveToGithubStorage( + githubOrgDatabaseId, + It.Is(a => a.EndsWith("metadata_archive.tar.gz")), + It.Is(s => (s as MemoryStream).ToArray().GetString() == metadataArchiveContents)).Result) .Returns(uploadedMetadataArchiveUrl); var args = new MigrateRepoCommandArgs