public async Task StartDownloadForUnix_2Times() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { "https://exiftool.org/checksums.txt", new StringContent(ExampleCheckSum) }, { "https://exiftool.org/Image-ExifTool-11.99.tar.gz", new ByteArrayContent(CreateAnExifToolTarGz.Bytes) } }); _appSettings.Verbose = true; var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var result = await new ExifToolDownload(httpClientHelper, _appSettings, new FakeIWebLogger()).StartDownloadForUnix(); Assert.IsTrue(result); // And run again // ByteArray content is Disposed afterwards var fakeIHttpProvider2 = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { "https://exiftool.org/checksums.txt", new StringContent(ExampleCheckSum) }, { "https://exiftool.org/Image-ExifTool-11.99.tar.gz", new ByteArrayContent(CreateAnExifToolTarGz.Bytes) } }); var httpClientHelper2 = new HttpClientHelper(fakeIHttpProvider2, _serviceScopeFactory, new FakeIWebLogger()); var result2 = await new ExifToolDownload(httpClientHelper2, _appSettings, new FakeIWebLogger()).StartDownloadForUnix(); Assert.IsTrue(result2); _hostFileSystem.FolderDelete(ExifToolUnixTempPath); }
public async Task IsUpdateNeeded_CacheIsFilled() { var provider = new ServiceCollection() .AddMemoryCache() .BuildServiceProvider(); var memoryCache = provider.GetService <IMemoryCache>(); var replace = ExamplePublicReleases.Replace("vtest__remove_this_version", "v0.9"); var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { CheckForUpdates.GithubApi, new StringContent(replace) }, }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); await new CheckForUpdates(httpClientHelper, new AppSettings(), memoryCache).IsUpdateNeeded(); memoryCache.TryGetValue(CheckForUpdates.QueryCheckForUpdatesCacheName, out var cacheResult); var results = ((List <ReleaseModel>)cacheResult); Assert.IsNotNull(results); Assert.AreEqual("v0.9", results.FirstOrDefault().TagName); Assert.AreEqual("v0.4.0-beta.1", results[1].TagName); Assert.AreEqual(false, results[0].PreRelease); Assert.AreEqual(true, results[1].PreRelease); }
public async Task GeoCliInput_AbsolutePath_HappyFlow() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { "/test.jpg" }, new List <byte[]> { CreateAnImage.Bytes }); var appSettings = new AppSettings { Verbose = true }; var geoWrite = new FakeIGeoLocationWrite(); var geoLookup = new FakeIGeoReverseLookup(); var console = new FakeConsoleWrapper(); var geoCli = new GeoCli(geoLookup, geoWrite, new FakeSelectorStorage(storage), appSettings, console, new FakeIGeoFileDownload(), new FakeExifToolDownload()); await geoCli.CommandLineAsync(new List <string> { "-p", "/test" }.ToArray()); Assert.AreEqual(appSettings.StorageFolder, "/test" + Path.DirectorySeparatorChar); Assert.AreEqual(1, geoLookup.Count); Assert.IsTrue(storage.ExistFile("/test.jpg")); }
public async Task RunChmodOnExifToolUnixExe_TempFolderWithSpace_UnixOnly() { if (_appSettings.IsWindows) { Console.WriteLine("This test is for unix only"); return; } var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { "https://exiftool.org/checksums.txt", new StringContent(ExampleCheckSum) }, { "https://exiftool.org/exiftool-11.99.zip", new ByteArrayContent(CreateAnExifToolWindows.Bytes) }, { "https://exiftool.org/Image-ExifTool-11.99.tar.gz", new ByteArrayContent(CreateAnExifToolTarGz.Bytes) }, }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var appSettings = await CreateTempFolderWithExifTool(); Console.WriteLine(appSettings.TempFolder); var exifToolDownload = new ExifToolDownload(httpClientHelper, appSettings, new FakeIWebLogger()); var result = await exifToolDownload.RunChmodOnExifToolUnixExe(); Assert.IsTrue(result); var lsLah = await Command.Run("ls", "-lah", Path.Combine(appSettings.TempFolder, "exiftool-unix", "exiftool")).Task; Console.WriteLine(lsLah.StandardOutput); Assert.IsTrue(lsLah.StandardOutput.StartsWith("-rwxr-xr-x")); Directory.Delete(appSettings.TempFolder, true); }
public async Task RunChmodOnExifToolUnixExe_Chmod644_UnixOnly() { if (_appSettings.IsWindows) { Console.WriteLine("This test is for unix only"); return; } var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { "https://exiftool.org/checksums.txt", new StringContent(ExampleCheckSum) }, { "https://exiftool.org/exiftool-11.99.zip", new ByteArrayContent(CreateAnExifToolWindows.Bytes) }, { "https://exiftool.org/Image-ExifTool-11.99.tar.gz", new ByteArrayContent(CreateAnExifToolTarGz.Bytes) }, }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); await CreateTempFolderWithExifTool("temp"); // make NOT executable 644 await Command.Run("chmod", "644", Path.Combine(_appSettings.TempFolder, "exiftool-unix", "exiftool")).Task; var exifToolDownload = new ExifToolDownload(httpClientHelper, _appSettings, new FakeIWebLogger()); var result = await exifToolDownload.RunChmodOnExifToolUnixExe(); Assert.IsTrue(result); Directory.Delete(_appSettings.TempFolder, true); }
public void GetSystemDataTest() { var httpProvider = new FakeIHttpProvider(); var appSettings = new AppSettings(); var httpClientHelper = new HttpClientHelper(httpProvider, null !, new FakeIWebLogger()); var packageTelemetry = new PackageTelemetry(httpClientHelper, new AppSettings(), new FakeIWebLogger(), new FakeIQuery()); var systemData = packageTelemetry.GetSystemData(); Assert.IsTrue(systemData.Any(p => p.Key == "AppVersion")); Assert.AreEqual(systemData.FirstOrDefault(p => p.Key == "AppVersion").Value, appSettings.AppVersion); Assert.IsTrue(systemData.Any(p => p.Key == "NetVersion")); Assert.AreEqual(systemData.FirstOrDefault(p => p.Key == "NetVersion").Value, RuntimeInformation.FrameworkDescription); Assert.IsTrue(systemData.Any(p => p.Key == "OSArchitecture")); Assert.AreEqual(systemData.FirstOrDefault(p => p.Key == "OSArchitecture").Value, RuntimeInformation.OSArchitecture.ToString()); Assert.IsTrue(systemData.Any(p => p.Key == "OSVersion")); Assert.IsTrue(systemData.Any(p => p.Key == "OSDescriptionLong")); Assert.IsTrue(systemData.Any(p => p.Key == "OSPlatform")); Assert.IsTrue(systemData.Any(p => p.Key == "DockerContainer")); Assert.IsTrue(systemData.Any(p => p.Key == "CurrentCulture")); Assert.IsTrue(systemData.Any(p => p.Key == "AspNetCoreEnvironment")); }
public async Task GeoCliInput_Default_HappyFlow() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { "/test.jpg" }, new List <byte[]> { CreateAnImage.Bytes }); var hash = (await new FileHash(storage).GetHashCodeAsync("/test.jpg")).Key; storage.FileCopy("/test.jpg", $"/{hash}.jpg"); var geoWrite = new FakeIGeoLocationWrite(); var geoLookup = new FakeIGeoReverseLookup(); var console = new FakeConsoleWrapper(); var geoCli = new GeoCli(geoLookup, geoWrite, new FakeSelectorStorage(storage), new AppSettings(), console, new FakeIGeoFileDownload(), new FakeExifToolDownload()); await geoCli.CommandLineAsync(new List <string> { "-p", }.ToArray()); Assert.AreEqual(1, geoLookup.Count); Assert.IsTrue(storage.ExistFile($"/{hash}.jpg")); Assert.IsTrue(storage.ExistFile("/test.jpg")); }
public async Task QueryIsUpdateNeeded_NotFound() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent>()); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var results = await new CheckForUpdates(httpClientHelper, new AppSettings(), null).QueryIsUpdateNeededAsync(); Assert.AreEqual(0, results.Count); }
public void AddAppSettingsData() { var httpProvider = new FakeIHttpProvider(); var appSettings = new AppSettings(); var httpClientHelper = new HttpClientHelper(httpProvider, null !, new FakeIWebLogger()); var packageTelemetry = new PackageTelemetry(httpClientHelper, appSettings, new FakeIWebLogger(), new FakeIQuery()); var result = packageTelemetry.AddAppSettingsData(new List <KeyValuePair <string, string> >()); Assert.IsTrue(result.Any(p => p.Key == "AppSettingsName")); }
public async Task PackageTelemetrySend_Disabled() { var httpProvider = new FakeIHttpProvider(); var appSettings = new AppSettings { EnablePackageTelemetry = false }; var httpClientHelper = new HttpClientHelper(httpProvider, null !, new FakeIWebLogger()); var packageTelemetry = new PackageTelemetry(httpClientHelper, appSettings, new FakeIWebLogger(), new FakeIQuery()); var result = await packageTelemetry.PackageTelemetrySend(); Assert.IsNull(result); }
public async Task StartDownloadForUnix_Fail() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { "https://exiftool.org/checksums.txt", new StringContent(ExampleCheckSum) }, }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); await new ExifToolDownload(httpClientHelper, _appSettings, new FakeIWebLogger()). StartDownloadForUnix(); }
public async Task DownloadCheckSums_BothServicesAreDown() { // Main & Mirror source are down var fakeIHttpProvider = new FakeIHttpProvider(); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); // Main & Mirror source are down var result = await new ExifToolDownload(httpClientHelper, _appSettings, new FakeIWebLogger()) .DownloadCheckSums(); Assert.AreEqual(null, result); }
public async Task StartDownloadForUnix_WrongHash() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { "https://exiftool.org/checksums.txt", new StringContent(ExampleCheckSum) }, { "https://exiftool.org/Image-ExifTool-11.99.tar.gz", new StringContent("FAIL") } }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var result = await new ExifToolDownload(httpClientHelper, _appSettings, new FakeIWebLogger()).StartDownloadForUnix(); Assert.IsFalse(result); }
public async Task PackageTelemetrySend_False_EnablePackageTelemetryDebug() { var httpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { "https://" + PackageTelemetry.PackageTelemetryUrl, new StringContent(string.Empty) } }); var appSettings = new AppSettings { EnablePackageTelemetry = true, EnablePackageTelemetryDebug = true }; var httpClientHelper = new HttpClientHelper(httpProvider, null !, new FakeIWebLogger()); var packageTelemetry = new PackageTelemetry(httpClientHelper, appSettings, new FakeIWebLogger(), new FakeIQuery()); var result = await packageTelemetry.PackageTelemetrySend(); Assert.IsNull(result); }
public async Task DownloadCheckSums_BaseChecksumDoesExist() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { "https://exiftool.org/checksums.txt", new StringContent(ExampleCheckSum) }, }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); // Happy flow var result = await new ExifToolDownload(httpClientHelper, _appSettings, new FakeIWebLogger()) .DownloadCheckSums(); Assert.AreEqual(ExampleCheckSum, result.Value.Value); Assert.AreEqual(true, result.Value.Key); }
public async Task DownloadCheckSums_BaseChecksumDoesNotExist() { // Main source is down, but mirror is up var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { "https://qdraw.nl/special/mirror/exiftool/checksums.txt", new StringContent(ExampleCheckSum) }, }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); // Main source is down, but mirror is up var result = await new ExifToolDownload(httpClientHelper, _appSettings, new FakeIWebLogger()) .DownloadCheckSums(); Assert.AreEqual(ExampleCheckSum, result.Value.Value); Assert.AreEqual(false, result.Value.Key); }
public async Task IsUpdateNeeded_CacheIsNull() { var replace = ExamplePublicReleases.Replace("vtest__remove_this_version", "test"); var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { CheckForUpdates.GithubApi, new StringContent(replace) }, }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var results = await new CheckForUpdates(httpClientHelper, new AppSettings { AddMemoryCache = true }, null).IsUpdateNeeded(); Assert.IsNotNull(results); Assert.AreEqual(UpdateStatus.NoReleasesFound, results.Key); }
public async Task GeoCliInput_Notfound() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var console = new FakeConsoleWrapper(); var geoCli = new GeoCli(new FakeIGeoReverseLookup(), new FakeIGeoLocationWrite(), new FakeSelectorStorage(new FakeIStorage(new List <string> { })), new AppSettings(), console, new FakeIGeoFileDownload(), new FakeExifToolDownload()); await geoCli.CommandLineAsync(new List <string> { "-p", }.ToArray()); Assert.IsTrue(console.WrittenLines.LastOrDefault().Contains("not found")); }
public async Task QueryIsUpdateNeeded() { var replace = ExamplePublicReleases.Replace("vtest__remove_this_version", "v0.9"); var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { CheckForUpdates.GithubApi, new StringContent(replace) }, }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var results = await new CheckForUpdates(httpClientHelper, new AppSettings(), null).QueryIsUpdateNeededAsync(); Assert.AreEqual("v0.9", results.FirstOrDefault().TagName); Assert.AreEqual("v0.4.0-beta.1", results[1].TagName); Assert.AreEqual(false, results[0].PreRelease); Assert.AreEqual(true, results[1].PreRelease); Assert.AreEqual(2, results.Count); }
public void GetChecksumsFromTextFile_Good() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent>()); var example = "SHA1(Image-ExifTool-12.40.tar.gz)= 09f3bee6491251390028580eb8af990e79674ada\n" + "SHA1(exiftool-12.40.zip)= 9428bb167512a8eec5891d3b8d2341427688f2f8\n" + "SHA1(ExifTool-12.40.dmg)= e20ed19da096807774b68cf8c15e29f1903ca641\n" + "MD5 (Image-ExifTool-12.40.tar.gz) = 72b40d69cf518edebbf5b661465950e7\n" + "MD5 (exiftool-12.40.zip) = fc834fd43d79da19fcb6461fb791b275\n" + "MD5 (ExifTool-12.40.dmg) = b30e391a4b53564de60a72f4347cade4\n"; var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var exifToolDownload = new ExifToolDownload(httpClientHelper, new AppSettings(), new FakeIWebLogger(), new FakeIStorage()); var result = exifToolDownload.GetChecksumsFromTextFile(example); Assert.AreEqual(3, result.Length); }
public async Task IsUpdateNeeded_CacheExistButDisableInSettings() { var provider = new ServiceCollection() .AddMemoryCache() .BuildServiceProvider(); var memoryCache = provider.GetService <IMemoryCache>(); var replace = ExamplePublicReleases.Replace("vtest__remove_this_version", "test"); var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { CheckForUpdates.GithubApi, new StringContent(replace) }, }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var results = await new CheckForUpdates(httpClientHelper, new AppSettings { AddMemoryCache = false }, memoryCache).IsUpdateNeeded(); Assert.IsNotNull(results); Assert.AreEqual(UpdateStatus.NoReleasesFound, results.Key); }
public void GetSystemDataTestDocker() { var httpProvider = new FakeIHttpProvider(); var httpClientHelper = new HttpClientHelper(httpProvider, null !, new FakeIWebLogger()); var packageTelemetry = new PackageTelemetry(httpClientHelper, new AppSettings(), new FakeIWebLogger(), new FakeIQuery()); var sourceValue = Environment.GetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER"); Environment.SetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER", "true"); var systemData = packageTelemetry.GetSystemData(OSPlatform.Linux); Assert.AreEqual("True", systemData.FirstOrDefault(p => p.Key == "DockerContainer").Value); Environment.SetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER", "false"); var systemDataFalse = packageTelemetry.GetSystemData(OSPlatform.Linux); Assert.AreEqual("False", systemDataFalse.FirstOrDefault(p => p.Key == "DockerContainer").Value); Environment.SetEnvironmentVariable("DOTNET_RUNNING_IN_CONTAINER", sourceValue); }
public async Task GetExifToolByOs() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { "https://exiftool.org/checksums.txt", new StringContent(ExampleCheckSum) }, { "https://exiftool.org/exiftool-11.99.zip", new ByteArrayContent(CreateAnExifToolWindows.Bytes) }, { "https://exiftool.org/Image-ExifTool-11.99.tar.gz", new ByteArrayContent(CreateAnExifToolTarGz.Bytes) }, }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var result = await new ExifToolDownload(httpClientHelper, _appSettings, new FakeIWebLogger()).DownloadExifTool(_appSettings.IsWindows); Assert.IsTrue(result); if (_hostFileSystem.ExistFolder(ExifToolWindowsTempPath)) { _hostFileSystem.FolderDelete(ExifToolWindowsTempPath); } if (_hostFileSystem.ExistFolder(ExifToolUnixTempPath)) { _hostFileSystem.FolderDelete(ExifToolUnixTempPath); } }
public async Task DownloadForWindows_FromMirrorInsteadOfMainSource() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { { "https://qdraw.nl/special/mirror/exiftool/exiftool-11.99.zip", new StringContent("FAIL") }, { "https://qdraw.nl/special/mirror/exiftool/Image-ExifTool-11.99.tar.gz", new StringContent("FAIL") } }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); try { await new ExifToolDownload(httpClientHelper, _appSettings, new FakeIWebLogger()) .DownloadForWindows("exiftool-11.99.zip", new List <string>().ToArray(), true); } catch (HttpRequestException httpRequestException) { // Expected:<checksum for ---/Debug/netcoreapp3.1/temp/exiftool.tar.gz is not valid Assert.IsTrue(httpRequestException.Message.Contains("checksum for ")); Assert.IsTrue(httpRequestException.Message.Contains("is not valid")); return; } throw new HttpRequestException("This test should hit the catch"); }
public async Task GeoCliInput_RelativeUrl_HappyFlow() { var fakeIHttpProvider = new FakeIHttpProvider(new Dictionary <string, HttpContent> { }); var httpClientHelper = new HttpClientHelper(fakeIHttpProvider, _serviceScopeFactory, new FakeIWebLogger()); var relativeParentFolder = new AppSettings().DatabasePathToFilePath( new StructureService(new FakeIStorage(), new AppSettings().Structure) .ParseSubfolders(0), false); var storage = new FakeIStorage(new List <string> { "/" }, new List <string> { "/test.jpg" }, new List <byte[]> { CreateAnImage.Bytes }); var appSettings = new AppSettings(); var geoWrite = new FakeIGeoLocationWrite(); var geoLookup = new FakeIGeoReverseLookup(); var console = new FakeConsoleWrapper(); var geoCli = new GeoCli(geoLookup, geoWrite, new FakeSelectorStorage(storage), appSettings, console, new FakeIGeoFileDownload(), new FakeExifToolDownload()); await geoCli.CommandLineAsync(new List <string> { "-g", "0" }.ToArray()); Assert.AreEqual(appSettings.StorageFolder, relativeParentFolder + Path.DirectorySeparatorChar); Assert.AreEqual(1, geoLookup.Count); Assert.IsTrue(storage.ExistFile("/test.jpg")); }