From db8cbd7c72aec1902a82f6b3a6ca8580aeb208a4 Mon Sep 17 00:00:00 2001 From: Raphael Meyer Date: Thu, 20 Aug 2026 12:07:47 +0200 Subject: [PATCH] test: verify main download links in unit test --- .github/workflows/ci.yml | 7 ++- features/src/instant-client/installer.go | 12 ++++-- features/src/instant-client/version_test.go | 48 +++++++++++++++++++++ 3 files changed, 62 insertions(+), 5 deletions(-) create mode 100644 features/src/instant-client/version_test.go diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 53f005d..b6c68d8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -54,7 +54,10 @@ jobs: # run unit tests unit-tests: - runs-on: ubuntu-latest + strategy: + matrix: + os: [ubuntu-latest, ubuntu-24.04-arm] + runs-on: ${{ matrix.os }} permissions: contents: read steps: @@ -66,7 +69,7 @@ jobs: go-version: ${{ env.GO_VERSION }} - name: Run unit tests - run: go test -run '' builder/installer + run: go test -v builder/... # Build Job build: diff --git a/features/src/instant-client/installer.go b/features/src/instant-client/installer.go index 4c0ed9e..ee08dde 100644 --- a/features/src/instant-client/installer.go +++ b/features/src/instant-client/installer.go @@ -17,6 +17,12 @@ import ( // Configuration ////////// +const ( + defaultDownloadUrl = "https://download.oracle.com" + defaultVersionsUrlAMD64 = "https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html" + defaultVersionsUrlArm64 = "https://www.oracle.com/database/technologies/instant-client/linux-arm-aarch64-downloads.html" +) + var versionRegexp *regexp.Regexp = regexp.MustCompile(`^(\d+).(\d+).(\d+).(\d+).(\d+)$`) var indexLineRegexp *regexp.Regexp = regexp.MustCompile(`]*href=['"]([^'"]*download\.oracle\.com[^'"]*instantclient-basic-[^'"]*-(\d+(?:\.\d+){4})\w*\.zip)['"]`) @@ -44,15 +50,15 @@ func runMain() error { } defaultVersionsUrl, err := installer.Tools.System.MapArchitecture(map[string]string{ - installer.AMD64: "https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html", - installer.ARM64: "https://www.oracle.com/database/technologies/instant-client/linux-arm-aarch64-downloads.html", + installer.AMD64: defaultVersionsUrlAMD64, + installer.ARM64: defaultVersionsUrlArm64, }) if err != nil { return err } installer.HandleOverride(versionsUrl, defaultVersionsUrl, "instant-client-versions-url") - installer.HandleOverride(downloadUrl, "https://download.oracle.com", "instant-client-download-url") + installer.HandleOverride(downloadUrl, defaultDownloadUrl, "instant-client-download-url") // Create and process the feature feature := installer.NewFeature("Oracle Instant Client", false, diff --git a/features/src/instant-client/version_test.go b/features/src/instant-client/version_test.go new file mode 100644 index 0000000..b71d8ca --- /dev/null +++ b/features/src/instant-client/version_test.go @@ -0,0 +1,48 @@ +package main + +import ( + "builder/installer" + "net/http" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func newTestInstantClientComponent() (*instantClientComponent, error) { + versionsUrl, err := installer.Tools.System.MapArchitecture(map[string]string{ + installer.AMD64: defaultVersionsUrlAMD64, + installer.ARM64: defaultVersionsUrlArm64, + }) + if err != nil { + return nil, err + } + + return &instantClientComponent{ + ComponentBase: installer.NewComponentBase("Basic Package", "latest"), + versionsUrl: versionsUrl, + downloadUrl: defaultDownloadUrl, + }, nil +} + +func TestDownloadURLForAllMainVersions(t *testing.T) { + c, err := newTestInstantClientComponent() + assert.NoError(t, err) + + versions, err := c.GetAllVersions() + assert.NoError(t, err) + assert.NotEmpty(t, versions) + + for _, version := range versions { + t.Run(version.String(), func(t *testing.T) { + url, err := c.createDownloadURLForVersion(version) + require.NoError(t, err) + + resp, err := http.Head(url) + require.NoError(t, err) + defer resp.Body.Close() + + assert.Equal(t, http.StatusOK, resp.StatusCode, "expected HTTP 200 for %s", url) + }) + } +}