Watch
1
0
Fork
You've already forked pkg-proxy
1
mirror of https://github.com/git-pkgs/proxy.git synced 2026-11-09 07:39:19 -05:00
pkg-proxy/internal/mirror/source_formats_test.go
Andrew Nesbitt 5dfd01ea74
Use shared sbom parser for mirror sources (#510)
* Use shared sbom parser for mirror sources

* Use sbom v0.1.7 release
2026-10-20 09:14:09 +01:00

74 lines
2.6 KiB
Go

package mirror
import (
"context"
"reflect"
"testing"
)
func TestSBOMSourcePreservesPackageIdentities(t *testing.T) {
for name, data := range map[string]string{
"CycloneDX JSON": `{"components":[
{"name":"shared","version":"1.0","purl":"pkg:npm/%40alpha/shared@1.0"},
{"name":"shared","version":"1.0","purl":"pkg:npm/%40beta/shared@1.0"}]}`,
"CycloneDX XML": `<bom xmlns="http://cyclonedx.org/schema/bom/1.6"><components>
<component type="library"><name>shared</name><version>1.0</version><purl>pkg:npm/%40alpha/shared@1.0</purl></component>
<component type="library"><name>shared</name><version>1.0</version><purl>pkg:npm/%40beta/shared@1.0</purl></component>
</components></bom>`,
"SPDX JSON": `{"spdxVersion":"SPDX-2.3","packages":[{"name":"shared","versionInfo":"1.0","externalRefs":[
{"referenceType":"purl","referenceLocator":"pkg:npm/%40alpha/shared@1.0"},
{"referenceType":"purl","referenceLocator":"pkg:npm/%40beta/shared@1.0"}]}]}`,
"SPDX tag-value": `DataLicense: CC0-1.0
SPDXVersion: SPDX-2.3
SPDXID: SPDXRef-DOCUMENT
DocumentName: example
DocumentNamespace: https://example.com/sbom
PackageName: shared
SPDXID: SPDXRef-shared
PackageVersion: 1.0
ExternalRef: PACKAGE-MANAGER purl pkg:npm/%40alpha/shared@1.0
ExternalRef: PACKAGE-MANAGER purl pkg:npm/%40beta/shared@1.0
`,
} {
t.Run(name, func(t *testing.T) {
source := &SBOMSource{Data: []byte(data), Name: name}
var got []PackageVersion
err := source.Enumerate(context.Background(), func(pv PackageVersion) error {
got = append(got, pv)
return nil
})
if err != nil {
t.Fatal(err)
}
want := []PackageVersion{
{Ecosystem: "npm", Name: "@alpha/shared", Version: "1.0"},
{Ecosystem: "npm", Name: "@beta/shared", Version: "1.0"},
}
if !reflect.DeepEqual(got, want) {
t.Errorf("Enumerate = %+v, want %+v", got, want)
}
})
}
}
func TestSBOMSourcePreservesImageOptions(t *testing.T) {
source := &SBOMSource{
Data: []byte(`{"bomFormat":"CycloneDX","components":[{"name":"alpine","purl":"pkg:docker/library/alpine@3.20?repository_url=ghcr.io&arch=arm64"}]}`),
Platforms: []string{"linux/amd64"},
}
var got []PackageVersion
if err := source.Enumerate(context.Background(), func(pv PackageVersion) error {
got = append(got, pv)
return nil
}); err != nil {
t.Fatal(err)
}
want := []PackageVersion{{
Ecosystem: "docker", Name: "library/alpine", Version: "3.20",
Qualifiers: map[string]string{"repository_url": "ghcr.io", "arch": "arm64"},
Platforms: []string{"linux/amd64"},
}}
if !reflect.DeepEqual(got, want) {
t.Errorf("Enumerate = %+v, want %+v", got, want)
}
}