diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c81226e..23eaaab 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,5 +34,4 @@ jobs: - name: Run tests run: | curl -sSfL https://git.io/GeoLite2-City.mmdb -o /tmp/GeoLite2-City.mmdb && \ - export KEEP_GEOIP_DB=true && \ go test -v ./... diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b2040fd..43f7bb7 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -30,7 +30,6 @@ jobs: - name: Build binaries run: | curl -sSfL https://git.io/GeoLite2-City.mmdb -o /tmp/GeoLite2-City.mmdb && \ - export KEEP_GEOIP_DB=true && \ make all - name: Create SHA256 checksums run: make checksum diff --git a/internal/geoip/geoip_test.go b/internal/geoip/geoip_test.go index 4022af7..44e2928 100644 --- a/internal/geoip/geoip_test.go +++ b/internal/geoip/geoip_test.go @@ -5,8 +5,6 @@ Licensed under the MIT License, see LICENSE file in the project root for details package geoip import ( - "io" - "net/http" "net/netip" "os" "testing" @@ -15,33 +13,7 @@ import ( "github.com/stretchr/testify/assert" ) -const geoDatabasePath = "/tmp/GeoLite2-City.mmdb" -const geoDatabaseUrl = "https://git.io/GeoLite2-City.mmdb" - -func setupGeoDatabase() { - if _, err := os.Stat(geoDatabasePath); os.IsNotExist(err) { - resp, err := http.Get(geoDatabaseUrl) - if err != nil { - panic(err) - } - defer func() { - _ = resp.Body.Close() - }() - - out, err := os.Create(geoDatabasePath) - if err != nil { - panic(err) - } - defer func() { - _ = out.Close() - }() - - _, err = io.Copy(out, resp.Body) - if err != nil { - panic(err) - } - } -} +var geoDatabasePath string func newReturnsError_InvalidDatabase(t *testing.T) { _, err := NewGeoIP("../../README.md") @@ -49,6 +21,7 @@ func newReturnsError_InvalidDatabase(t *testing.T) { } func newReturnsInstance_ValidDatabase(t *testing.T) { + t.Logf("Using GeoIP database at %s", geoDatabasePath) geoIP, err := NewGeoIP(geoDatabasePath) assert.NoError(t, err) assert.NotNil(t, geoIP) @@ -86,16 +59,17 @@ func locationReturnsLocation_ResolvedIP(t *testing.T) { } func TestGeoIP(t *testing.T) { - setupGeoDatabase() + var ok bool + geoDatabasePath, ok = os.LookupEnv("CONNTRACKD_GEOIP_DATABASE") + if !ok || geoDatabasePath == "" { + geoDatabasePath = "/tmp/GeoLite2-City.mmdb" + } + if _, err := os.Stat(geoDatabasePath); os.IsNotExist(err) { + t.Skip("GeoIP database not found, skipping GeoIP tests") + } t.Run("New returns error for invalid database", newReturnsError_InvalidDatabase) t.Run("New returns instance for valid database", newReturnsInstance_ValidDatabase) t.Run("Location returns nil for unresolved IPs", locationReturnsNil_UnresolvedIP) t.Run("Location returns location for resolved IPs", locationReturnsLocation_ResolvedIP) - - skip, ok := os.LookupEnv("KEEP_GEOIP_DB") - if ok && skip == "1" || skip == "true" { - return - } - _ = os.Remove(geoDatabasePath) } diff --git a/internal/record/record_test.go b/internal/record/record_test.go index ef7aebc..359b89e 100644 --- a/internal/record/record_test.go +++ b/internal/record/record_test.go @@ -7,10 +7,8 @@ package record import ( "bytes" "encoding/json" - "io" "log/slog" "maps" - "net/http" "net/netip" "os" "slices" @@ -22,8 +20,7 @@ import ( "github.com/tschaefer/conntrackd/internal/geoip" ) -const geoDatabasePath = "/tmp/GeoLite2-City.mmdb" -const geoDatabaseUrl = "https://git.io/GeoLite2-City.mmdb" +var geoDatabasePath string var log bytes.Buffer @@ -40,31 +37,6 @@ func setupLogger() *slog.Logger { return slog.New(slog.NewJSONHandler(&log, loggerOptions)) } -func setupGeoDatabase() { - if _, err := os.Stat(geoDatabasePath); os.IsNotExist(err) { - resp, err := http.Get(geoDatabaseUrl) - if err != nil { - panic(err) - } - defer func() { - _ = resp.Body.Close() - }() - - out, err := os.Create(geoDatabasePath) - if err != nil { - panic(err) - } - defer func() { - _ = out.Close() - }() - - _, err = io.Copy(out, resp.Body) - if err != nil { - panic(err) - } - } -} - func recordLogsBasicData(t *testing.T) { logger := setupLogger() @@ -132,14 +104,15 @@ func recordLogsWithGeoIPData(t *testing.T) { } func TestRecord(t *testing.T) { - setupGeoDatabase() + var ok bool + geoDatabasePath, ok = os.LookupEnv("CONNTRACKD_GEOIP_DATABASE") + if !ok || geoDatabasePath == "" { + geoDatabasePath = "/tmp/GeoLite2-City.mmdb" + } + if _, err := os.Stat(geoDatabasePath); os.IsNotExist(err) { + t.Skip("GeoIP database not found, skipping GeoIP tests") + } t.Run("Record logs basic data", recordLogsBasicData) t.Run("Record logs with GeoIP data", recordLogsWithGeoIPData) - - skip, ok := os.LookupEnv("KEEP_GEOIP_DB") - if ok && skip == "1" || skip == "true" { - return - } - _ = os.Remove(geoDatabasePath) }