Exemplo n.º 1
0
        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));
        }
Exemplo n.º 2
0
        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);
        }