Skip to content

Commit 35be5e6

Browse files
committed
test: added syft tests
Signed-off-by: Christian Kotzbauer <git@ckotzbauer.de>
1 parent 188dfd9 commit 35be5e6

File tree

11 files changed

+279515
-20
lines changed

11 files changed

+279515
-20
lines changed

internal/syft/fixtures/alpine.cyclonedx

Lines changed: 473 additions & 0 deletions
Large diffs are not rendered by default.

internal/syft/fixtures/alpine.json

Lines changed: 3072 additions & 0 deletions
Large diffs are not rendered by default.

internal/syft/fixtures/alpine.spdx-json

Lines changed: 1490 additions & 0 deletions
Large diffs are not rendered by default.

internal/syft/fixtures/nginx.cyclonedx

Lines changed: 4220 additions & 0 deletions
Large diffs are not rendered by default.

internal/syft/fixtures/nginx.json

Lines changed: 96272 additions & 0 deletions
Large diffs are not rendered by default.

internal/syft/fixtures/nginx.spdx-json

Lines changed: 44022 additions & 0 deletions
Large diffs are not rendered by default.

internal/syft/fixtures/node.cyclonedx

Lines changed: 8329 additions & 0 deletions
Large diffs are not rendered by default.

internal/syft/fixtures/node.json

Lines changed: 78953 additions & 0 deletions
Large diffs are not rendered by default.

internal/syft/fixtures/node.spdx-json

Lines changed: 42492 additions & 0 deletions
Large diffs are not rendered by default.

internal/syft/syft.go

Lines changed: 30 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,22 @@ import (
2121
)
2222

2323
type Syft struct {
24-
SbomFormat string
24+
sbomFormat string
25+
resolveVersion func() string
2526
}
2627

2728
func New(sbomFormat string) Syft {
2829
return Syft{
29-
SbomFormat: sbomFormat,
30+
sbomFormat: sbomFormat,
31+
resolveVersion: getSyftVersion,
3032
}
3133
}
3234

35+
func (s Syft) WithVersion(version string) Syft {
36+
s.resolveVersion = func() string { return version }
37+
return s
38+
}
39+
3340
func (s *Syft) ExecuteSyft(img kubernetes.ContainerImage) (string, error) {
3441
logrus.Infof("Processing image %s", img.ImageID)
3542

@@ -57,24 +64,12 @@ func (s *Syft) ExecuteSyft(img kubernetes.ContainerImage) (string, error) {
5764
defer cleanup()
5865
}
5966

60-
bi, ok := debug.ReadBuildInfo()
61-
if !ok {
62-
logrus.Warnf("failed to read build info")
63-
}
64-
65-
descriptor := sbom.Descriptor{
66-
Name: "syft",
67-
}
68-
69-
for _, dep := range bi.Deps {
70-
if strings.EqualFold("github.com/anchore/syft", dep.Path) {
71-
descriptor.Version = dep.Version
72-
}
73-
}
74-
7567
result := sbom.SBOM{
76-
Source: src.Metadata,
77-
Descriptor: descriptor,
68+
Source: src.Metadata,
69+
Descriptor: sbom.Descriptor{
70+
Name: "syft",
71+
Version: s.resolveVersion(),
72+
},
7873
// TODO: we should have helper functions for getting this built from exported library functions
7974
}
8075

@@ -91,7 +86,7 @@ func (s *Syft) ExecuteSyft(img kubernetes.ContainerImage) (string, error) {
9186
result.Relationships = relationships
9287

9388
// you can use other formats such as format.CycloneDxJSONOption or format.SPDXJSONOption ...
94-
b, err := syft.Encode(result, format.Option(s.SbomFormat))
89+
b, err := syft.Encode(result, format.Option(s.sbomFormat))
9590
if err != nil {
9691
logrus.WithError(err).Error("Encoding of result failed")
9792
return "", err
@@ -121,3 +116,18 @@ func GetFileName(sbomFormat string) string {
121116
return "sbom.json"
122117
}
123118
}
119+
120+
func getSyftVersion() string {
121+
bi, ok := debug.ReadBuildInfo()
122+
if !ok {
123+
logrus.Warnf("failed to read build info")
124+
}
125+
126+
for _, dep := range bi.Deps {
127+
if strings.EqualFold("github.com/anchore/syft", dep.Path) {
128+
return dep.Version
129+
}
130+
}
131+
132+
return ""
133+
}

0 commit comments

Comments
 (0)