From 779604a0d2cb1ec0ce8b8050eb56a0cb92c8e3d2 Mon Sep 17 00:00:00 2001 From: Brian Cunnie Date: Wed, 17 Aug 2022 10:44:26 -0700 Subject: [PATCH] Integration tests work intenetless by default This is a convenience when I'm on a flight and feel like coding and the internet connection is spotty at best. --- src/sslip.io-dns-server/integration_test.go | 2 +- src/sslip.io-dns-server/xip/xip.go | 34 +++++++++++++++------ 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/sslip.io-dns-server/integration_test.go b/src/sslip.io-dns-server/integration_test.go index b48f6b0..a35588d 100644 --- a/src/sslip.io-dns-server/integration_test.go +++ b/src/sslip.io-dns-server/integration_test.go @@ -23,7 +23,7 @@ var serverPath, _ = Build("main.go") var _ = BeforeSuite(func() { Expect(err).ToNot(HaveOccurred()) - serverCmd = exec.Command(serverPath, "-port", strconv.Itoa(port)) + serverCmd = exec.Command(serverPath, "-port", strconv.Itoa(port), "-blocklistURL", "file://../../etc/blocklist.txt") serverSession, err = Start(serverCmd, GinkgoWriter, GinkgoWriter) Expect(err).ToNot(HaveOccurred()) // takes 0.455s to start up on macOS Big Sur 3.7 GHz Quad Core 22-nm Xeon E5-1620v2 processor (2013 Mac Pro) diff --git a/src/sslip.io-dns-server/xip/xip.go b/src/sslip.io-dns-server/xip/xip.go index 4e29adc..db59c8e 100644 --- a/src/sslip.io-dns-server/xip/xip.go +++ b/src/sslip.io-dns-server/xip/xip.go @@ -13,6 +13,7 @@ import ( "net" "net/http" "net/netip" + "os" "reflect" "regexp" "strconv" @@ -1068,16 +1069,31 @@ func (a Metrics) MostlyEquals(b Metrics) bool { } func (x *Xip) downloadBlockList(blocklistURL string) string { - resp, err := http.Get(blocklistURL) - if err != nil { - return fmt.Sprintf(`failed to download blocklist "%s": %s`, blocklistURL, err.Error()) + var err error + var blocklistReader io.ReadCloser + // file protocol's purpose is so I can run tests while flyiing with no internet + fileProtocolRE := regexp.MustCompile(`^file://`) + if fileProtocolRE.MatchString(blocklistURL) { + blocklistPath := strings.TrimPrefix(blocklistURL, "file://") + blocklistReader, err = os.Open(blocklistPath) + if err != nil { + return fmt.Sprintf(`failed to open blocklist "%s": %s`, blocklistPath, err.Error()) + } + //noinspection GoUnhandledErrorResult + defer blocklistReader.Close() + } else { + resp, err := http.Get(blocklistURL) + if err != nil { + return fmt.Sprintf(`failed to download blocklist "%s": %s`, blocklistURL, err.Error()) + } + blocklistReader = resp.Body + //noinspection GoUnhandledErrorResult + defer blocklistReader.Close() + if resp.StatusCode > 299 { + return fmt.Sprintf(`failed to download blocklist "%s", HTTP status: "%d"`, blocklistURL, resp.StatusCode) + } } - //noinspection GoUnhandledErrorResult - defer resp.Body.Close() - if resp.StatusCode > 299 { - return fmt.Sprintf(`failed to download blocklist "%s", HTTP status: "%d"`, blocklistURL, resp.StatusCode) - } - blocklistStrings, blocklistCIDRs, err := ReadBlocklist(resp.Body) + blocklistStrings, blocklistCIDRs, err := ReadBlocklist(blocklistReader) if err != nil { return fmt.Sprintf(`failed to parse blocklist "%s": %s`, blocklistURL, err.Error()) }