Watch
1
0
Fork
You've already forked pkg-proxy
1
mirror of https://github.com/git-pkgs/proxy.git synced 2026-11-10 16:19:16 -05:00
pkg-proxy/internal/enrichment/enrichment_test.go
Andrew Nesbitt 7743417c72
Add Swift package registry support (#259)
* Add Swift package registry support

* Fix Swift archive integrity handling

* Fix Swift registry pagination and archive HEAD requests

* Canonicalize Swift package identifiers

* Handle Swift registry cache identities

* Use stored PURLs for cache lookups

* Address review: upstream-hash refetch and cache PURL cleanup

- Re-fetch instead of 502 when a cached artifact's hash disagrees with
  the upstream-declared checksum; log and discard the stale entry.
- Rename expectedHash to upstreamHash and document how the check
  differs from checkCache's stream integrity verification.
- Drop the repository_url qualifier from swift cache PURLs so cache
  entries survive an upstream.swift change, matching other ecosystems.
- Pass name to handleSourceArchiveHead instead of re-deriving it.

* Drop BulkCheckVulnerabilities coverage after #279 removed it

The rebase over #279 (dead-code cleanup) drops BulkCheckVulnerabilities;
remove the tests and helper that exercised the swift-identity-filtering
path through it, and the imports they pulled in.
2026-09-02 13:06:34 +01:00

107 lines
2.7 KiB
Go

package enrichment
import (
"context"
"log/slog"
"os"
"testing"
)
func TestNew(t *testing.T) {
logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
svc := New(logger)
if svc == nil {
t.Fatal("New() returned nil")
}
if svc.regClient == nil {
t.Error("regClient is nil")
}
if svc.vulnSource == nil {
t.Error("vulnSource is nil")
}
}
func TestSwiftRegistryIdentitySkipsPURLDependentLookups(t *testing.T) {
svc := New(slog.New(slog.NewTextHandler(os.Stdout, nil)))
ctx := context.Background()
packageInfo, err := svc.EnrichPackage(ctx, "swift", "apple/example")
if err != nil || packageInfo != nil {
t.Errorf("EnrichPackage() = %#v, %v; want nil, nil", packageInfo, err)
}
versionInfo, err := svc.EnrichVersion(ctx, "swift", "apple/example", "1.2.3")
if err != nil || versionInfo != nil {
t.Errorf("EnrichVersion() = %#v, %v; want nil, nil", versionInfo, err)
}
vulnerabilities, err := svc.CheckVulnerabilities(ctx, "swift", "apple/example", "1.2.3")
if err != nil || vulnerabilities != nil {
t.Errorf("CheckVulnerabilities() = %#v, %v; want nil, nil", vulnerabilities, err)
}
latest, err := svc.GetLatestVersion(ctx, "swift", "apple/example")
if err != nil || latest != "" {
t.Errorf("GetLatestVersion() = %q, %v; want empty string, nil", latest, err)
}
packages := []struct{ Ecosystem, Name string }{{Ecosystem: "swift", Name: "apple/example"}}
if got := svc.BulkEnrichPackages(ctx, packages); len(got) != 0 {
t.Errorf("BulkEnrichPackages() = %#v, want empty result", got)
}
}
func TestIsOutdated(t *testing.T) {
logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
svc := New(logger)
tests := []struct {
current string
latest string
expected bool
}{
{"1.0.0", "2.0.0", true},
{"2.0.0", "2.0.0", false},
{"2.0.0", "1.0.0", false},
{"1.0.0", "", false},
{"", "2.0.0", false},
{"1.2.3", "1.2.4", true},
{"1.2.4", "1.2.3", false},
}
for _, tc := range tests {
result := svc.IsOutdated(tc.current, tc.latest)
if result != tc.expected {
t.Errorf("IsOutdated(%q, %q) = %v, want %v", tc.current, tc.latest, result, tc.expected)
}
}
}
func TestCategorizeLicense(t *testing.T) {
logger := slog.New(slog.NewTextHandler(os.Stdout, nil))
svc := New(logger)
tests := []struct {
license string
expected LicenseCategory
}{
{"MIT", LicensePermissive},
{"Apache-2.0", LicensePermissive},
{"BSD-3-Clause", LicensePermissive},
{"GPL-3.0", LicenseCopyleft},
{"AGPL-3.0", LicenseCopyleft},
{"LGPL-2.1", LicenseCopyleft},
{"", LicenseUnknown},
{"Unknown", LicenseUnknown},
}
for _, tc := range tests {
result := svc.CategorizeLicense(tc.license)
if result != tc.expected {
t.Errorf("CategorizeLicense(%q) = %v, want %v", tc.license, result, tc.expected)
}
}
}