private static Task StartFakeGithubServer(string host, int port, CancellationToken token) { var baseDir = Path.Combine(AppContext.BaseDirectory, "github_server"); Directory.CreateDirectory(baseDir); File.WriteAllText(Path.Combine(baseDir, "DemoSelfUpdateApp.exe"), "fake exe content!"); var githubServer = new SimpleGithubServer(baseDir, null) { Releases = new List <GitHubRelease> { new GitHubRelease { Name = "rel1", TagName = "v1.0.1", Prerelease = true, Assets = new List <GitHubAsset> { new GitHubAsset { Name = "DemoSelfUpdateApp.exe", BrowserDownloadUrl = $"http://{host}:{port}/DemoSelfUpdateApp.exe" } } }, new GitHubRelease { Name = "rel2", TagName = "v1.1.0", Prerelease = false, Assets = new List <GitHubAsset> { new GitHubAsset { Name = "DemoSelfUpdateApp.exe", BrowserDownloadUrl = $"http://{host}:{port}/DemoSelfUpdateApp.exe" } } }, new GitHubRelease { Name = "rel3", TagName = "v1.2.1", Prerelease = true, Assets = new List <GitHubAsset> { new GitHubAsset { Name = "DemoSelfUpdateApp.exe", BrowserDownloadUrl = $"http://{host}:{port}/DemoSelfUpdateApp.exe" } } }, new GitHubRelease { Name = "rel4", TagName = "v2.0.0", Prerelease = false, Assets = new List <GitHubAsset> { new GitHubAsset { Name = "DemoSelfUpdateApp.exe", BrowserDownloadUrl = $"http://{host}:{port}/DemoSelfUpdateApp.exe" } } }, new GitHubRelease { Name = "rel5", TagName = "v3.0.0", Prerelease = false, Assets = new List <GitHubAsset> { new GitHubAsset { Name = "DemoSelfUpdateApp.exe", BrowserDownloadUrl = $"http://{host}:{port}/DemoSelfUpdateApp.exe" } } } } }; return(HttpServer.ListenAsync(port, token, githubServer.OnHttpRequest, true)); }
public void Test() { // hostname to use // we need something different than 127.0.0.1 or localhost for the proxy! IPHostEntry hostEntry; try { hostEntry = Dns.GetHostEntry("mylocalhost"); } catch (Exception) { hostEntry = null; } var host = hostEntry == null ? "127.0.0.1" : "mylocalhost"; var baseDir = Path.Combine(TestFolder, "http"); Directory.CreateDirectory(baseDir); var githubServer = new SimpleGithubServer(baseDir, "admin"); var proxyServer = new SimpleHttpProxyServer("jucai69d", "julien caillon"); githubServer.Releases = new List <GitHubRelease> { new GitHubRelease { CreatedAt = $"{DateTime.UtcNow:s}Z" } }; var cts = new CancellationTokenSource(); var task1 = HttpServer.ListenAsync(8084, cts.Token, githubServer.OnHttpRequest, true); var task2 = HttpServer.ListenAsync(8085, cts.Token, proxyServer.OnHttpRequest, true); // do githubServer.Releases = new List <GitHubRelease> { new GitHubRelease { Name = "rel1", TagName = "v1.0.1-beta", Prerelease = true, ZipballUrl = "file.v1.0", CreatedAt = $"{DateTime.UtcNow:s}Z", Assets = new List <GitHubAsset> { new GitHubAsset { Name = "asset1" }, new GitHubAsset { Name = "asset2" } } }, new GitHubRelease { Name = "rel2", TagName = "v1.1.0", Prerelease = false }, new GitHubRelease { Name = "rel3", TagName = "v1.2.1-beta", Prerelease = true }, new GitHubRelease { Name = "rel5", TagName = "v3.0.0", Prerelease = false }, new GitHubRelease { Name = "rel4", TagName = "v2.0.0", Prerelease = false } }; var updater = new GitHubUpdater(); updater.UseAuthorizationToken("admin"); updater.UseAlternativeBaseUrl($"http://{host}:8084"); updater.UseProxy($"http://{host}:8085/", "jucai69d", "julien caillon"); updater.SetRepo("3pUser", "yolo"); updater.UseMaxNumberOfReleasesToFetch(10); var releases = updater.FetchNewReleases(UpdaterHelper.StringToVersion("0")); Assert.AreEqual(5, releases.Count); Assert.AreEqual("rel5", releases[0].Name); releases = updater.FetchNewReleases(UpdaterHelper.StringToVersion("3")); Assert.AreEqual(0, releases.Count); releases = updater.FetchNewReleases(UpdaterHelper.StringToVersion("1.2")); Assert.AreEqual(3, releases.Count); Assert.AreEqual("rel5", releases[0].Name); File.WriteAllText(Path.Combine(baseDir, "testFile"), "cc"); var countProgress = 0; var dlPath = updater.DownloadToTempFile("testFile", progress => countProgress++); Assert.IsTrue(countProgress > 0); Assert.IsTrue(File.Exists(dlPath)); Assert.AreEqual(File.ReadAllText(Path.Combine(baseDir, "testFile")), File.ReadAllText(dlPath)); File.Delete(dlPath); if (!host.Equals("127.0.0.1")) { Assert.IsTrue(proxyServer.NbRequestsHandledOk > 0); } HttpServer.Stop(cts, task1, task2); }