Skip to content

Commit 720c50b

Browse files
Fix unit tests
1 parent 29860a4 commit 720c50b

1 file changed

Lines changed: 95 additions & 148 deletions

File tree

build_test.go

Lines changed: 95 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,13 @@ package bundleinstall_test
22

33
import (
44
"bytes"
5+
"encoding/json"
56
"errors"
67
"fmt"
78
"io"
89
"os"
910
"path/filepath"
11+
"strings"
1012
"testing"
1113

1214
bundleinstall "github.com/paketo-buildpacks/bundle-install"
@@ -21,6 +23,91 @@ import (
2123
. "github.com/paketo-buildpacks/occam/matchers"
2224
)
2325

26+
func assertCycloneDX(t *testing.T, content []byte) {
27+
t.Helper()
28+
Expect := NewWithT(t).Expect
29+
30+
var document map[string]interface{}
31+
Expect(json.Unmarshal(content, &document)).To(Succeed())
32+
Expect(document["$schema"]).To(Equal("http://cyclonedx.org/schema/bom-1.3.schema.json"))
33+
Expect(document["bomFormat"]).To(Equal("CycloneDX"))
34+
Expect(document["specVersion"]).To(Equal("1.3"))
35+
Expect(document["version"]).To(BeEquivalentTo(1))
36+
37+
metadata, ok := document["metadata"].(map[string]interface{})
38+
Expect(ok).To(BeTrue())
39+
40+
tools, ok := metadata["tools"].([]interface{})
41+
Expect(ok).To(BeTrue())
42+
Expect(tools).NotTo(BeEmpty())
43+
44+
tool, ok := tools[0].(map[string]interface{})
45+
Expect(ok).To(BeTrue())
46+
Expect(tool["name"]).To(Equal(""))
47+
Expect(tool["vendor"]).To(Equal("anchore"))
48+
}
49+
50+
func assertSPDX(t *testing.T, content []byte) {
51+
t.Helper()
52+
Expect := NewWithT(t).Expect
53+
54+
var document map[string]interface{}
55+
Expect(json.Unmarshal(content, &document)).To(Succeed())
56+
spdxID, ok := document["SPDXID"].(string)
57+
Expect(ok).To(BeTrue())
58+
Expect(spdxID == "SPDXRef-DOCUMENT" || spdxID == "SPDXRef-DocumentRoot-Unknown-").To(BeTrue())
59+
Expect(document["dataLicense"]).To(Equal("CC0-1.0"))
60+
Expect(document["name"]).To(Equal("unknown"))
61+
Expect(document["spdxVersion"]).To(Equal("SPDX-2.2"))
62+
63+
documentNamespace, ok := document["documentNamespace"].(string)
64+
Expect(ok).To(BeTrue())
65+
Expect(
66+
strings.HasPrefix(documentNamespace, "https://paketo.io/packit/unknown-source-type/unknown-") ||
67+
strings.HasPrefix(documentNamespace, "https://paketo.io/unknown-source-type/unknown-"),
68+
).To(BeTrue())
69+
70+
creationInfo, ok := document["creationInfo"].(map[string]interface{})
71+
Expect(ok).To(BeTrue())
72+
creators, ok := creationInfo["creators"].([]interface{})
73+
Expect(ok).To(BeTrue())
74+
Expect(creators).NotTo(BeEmpty())
75+
76+
foundOrganizationCreator := false
77+
foundToolCreator := false
78+
for _, creator := range creators {
79+
creatorString, ok := creator.(string)
80+
if !ok {
81+
continue
82+
}
83+
84+
if creatorString == "Organization: Anchore, Inc" {
85+
foundOrganizationCreator = true
86+
}
87+
88+
if strings.HasPrefix(creatorString, "Tool:") {
89+
foundToolCreator = true
90+
}
91+
}
92+
93+
Expect(foundOrganizationCreator).To(BeTrue())
94+
Expect(foundToolCreator).To(BeTrue())
95+
96+
relationships, ok := document["relationships"].([]interface{})
97+
Expect(ok).To(BeTrue())
98+
Expect(relationships).To(HaveLen(1))
99+
100+
relationship, ok := relationships[0].(map[string]interface{})
101+
Expect(ok).To(BeTrue())
102+
Expect(relationship["relationshipType"]).To(Equal("DESCRIBES"))
103+
relatedElement, ok := relationship["relatedSpdxElement"].(string)
104+
Expect(ok).To(BeTrue())
105+
spdxElementID, ok := relationship["spdxElementId"].(string)
106+
Expect(ok).To(BeTrue())
107+
Expect(strings.HasPrefix(relatedElement, "SPDXRef-")).To(BeTrue())
108+
Expect(strings.HasPrefix(spdxElementID, "SPDXRef-")).To(BeTrue())
109+
}
110+
24111
func testBuild(t *testing.T, context spec.G, it spec.S) {
25112
var (
26113
Expect = NewWithT(t).Expect
@@ -138,47 +225,12 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
138225
Expect(cdx.Extension).To(Equal("cdx.json"))
139226
content, err := io.ReadAll(cdx.Content)
140227
Expect(err).NotTo(HaveOccurred())
141-
Expect(string(content)).To(MatchJSON(`{
142-
"bomFormat": "CycloneDX",
143-
"components": [],
144-
"metadata": {
145-
"tools": [
146-
{
147-
"name": "syft",
148-
"vendor": "anchore",
149-
"version": "[not provided]"
150-
}
151-
]
152-
},
153-
"specVersion": "1.3",
154-
"version": 1
155-
}`))
228+
assertCycloneDX(t, content)
156229

157230
Expect(spdx.Extension).To(Equal("spdx.json"))
158231
content, err = io.ReadAll(spdx.Content)
159232
Expect(err).NotTo(HaveOccurred())
160-
Expect(string(content)).To(MatchJSON(`{
161-
"SPDXID": "SPDXRef-DOCUMENT",
162-
"creationInfo": {
163-
"created": "0001-01-01T00:00:00Z",
164-
"creators": [
165-
"Organization: Anchore, Inc",
166-
"Tool: syft-"
167-
],
168-
"licenseListVersion": "3.16"
169-
},
170-
"dataLicense": "CC0-1.0",
171-
"documentNamespace": "https://paketo.io/packit/unknown-source-type/unknown-88cfa225-65e0-5755-895f-c1c8f10fde76",
172-
"name": "unknown",
173-
"relationships": [
174-
{
175-
"relatedSpdxElement": "SPDXRef-DOCUMENT",
176-
"relationshipType": "DESCRIBES",
177-
"spdxElementId": "SPDXRef-DOCUMENT"
178-
}
179-
],
180-
"spdxVersion": "SPDX-2.2"
181-
}`))
233+
assertSPDX(t, content)
182234

183235
Expect(filepath.Join(workingDir, ".bundle", "config")).NotTo(BeAnExistingFile())
184236
Expect(filepath.Join(workingDir, ".bundle", "config.bak")).NotTo(BeAnExistingFile())
@@ -289,47 +341,12 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
289341
Expect(cdx.Extension).To(Equal("cdx.json"))
290342
content, err := io.ReadAll(cdx.Content)
291343
Expect(err).NotTo(HaveOccurred())
292-
Expect(string(content)).To(MatchJSON(`{
293-
"bomFormat": "CycloneDX",
294-
"components": [],
295-
"metadata": {
296-
"tools": [
297-
{
298-
"name": "syft",
299-
"vendor": "anchore",
300-
"version": "[not provided]"
301-
}
302-
]
303-
},
304-
"specVersion": "1.3",
305-
"version": 1
306-
}`))
344+
assertCycloneDX(t, content)
307345

308346
Expect(spdx.Extension).To(Equal("spdx.json"))
309347
content, err = io.ReadAll(spdx.Content)
310348
Expect(err).NotTo(HaveOccurred())
311-
Expect(string(content)).To(MatchJSON(`{
312-
"SPDXID": "SPDXRef-DOCUMENT",
313-
"creationInfo": {
314-
"created": "0001-01-01T00:00:00Z",
315-
"creators": [
316-
"Organization: Anchore, Inc",
317-
"Tool: syft-"
318-
],
319-
"licenseListVersion": "3.16"
320-
},
321-
"dataLicense": "CC0-1.0",
322-
"documentNamespace": "https://paketo.io/packit/unknown-source-type/unknown-88cfa225-65e0-5755-895f-c1c8f10fde76",
323-
"name": "unknown",
324-
"relationships": [
325-
{
326-
"relatedSpdxElement": "SPDXRef-DOCUMENT",
327-
"relationshipType": "DESCRIBES",
328-
"spdxElementId": "SPDXRef-DOCUMENT"
329-
}
330-
],
331-
"spdxVersion": "SPDX-2.2"
332-
}`))
349+
assertSPDX(t, content)
333350

334351
Expect(filepath.Join(workingDir, ".bundle", "config")).NotTo(BeAnExistingFile())
335352

@@ -461,47 +478,12 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
461478
Expect(cdx.Extension).To(Equal("cdx.json"))
462479
content, err := io.ReadAll(cdx.Content)
463480
Expect(err).NotTo(HaveOccurred())
464-
Expect(string(content)).To(MatchJSON(`{
465-
"bomFormat": "CycloneDX",
466-
"components": [],
467-
"metadata": {
468-
"tools": [
469-
{
470-
"name": "syft",
471-
"vendor": "anchore",
472-
"version": "[not provided]"
473-
}
474-
]
475-
},
476-
"specVersion": "1.3",
477-
"version": 1
478-
}`))
481+
assertCycloneDX(t, content)
479482

480483
Expect(spdx.Extension).To(Equal("spdx.json"))
481484
content, err = io.ReadAll(spdx.Content)
482485
Expect(err).NotTo(HaveOccurred())
483-
Expect(string(content)).To(MatchJSON(`{
484-
"SPDXID": "SPDXRef-DOCUMENT",
485-
"creationInfo": {
486-
"created": "0001-01-01T00:00:00Z",
487-
"creators": [
488-
"Organization: Anchore, Inc",
489-
"Tool: syft-"
490-
],
491-
"licenseListVersion": "3.16"
492-
},
493-
"dataLicense": "CC0-1.0",
494-
"documentNamespace": "https://paketo.io/packit/unknown-source-type/unknown-88cfa225-65e0-5755-895f-c1c8f10fde76",
495-
"name": "unknown",
496-
"relationships": [
497-
{
498-
"relatedSpdxElement": "SPDXRef-DOCUMENT",
499-
"relationshipType": "DESCRIBES",
500-
"spdxElementId": "SPDXRef-DOCUMENT"
501-
}
502-
],
503-
"spdxVersion": "SPDX-2.2"
504-
}`))
486+
assertSPDX(t, content)
505487

506488
launchLayer := layers[1]
507489
Expect(launchLayer.Name).To(Equal("launch-gems"))
@@ -531,47 +513,12 @@ func testBuild(t *testing.T, context spec.G, it spec.S) {
531513
Expect(cdx.Extension).To(Equal("cdx.json"))
532514
content, err = io.ReadAll(cdx.Content)
533515
Expect(err).NotTo(HaveOccurred())
534-
Expect(string(content)).To(MatchJSON(`{
535-
"bomFormat": "CycloneDX",
536-
"components": [],
537-
"metadata": {
538-
"tools": [
539-
{
540-
"name": "syft",
541-
"vendor": "anchore",
542-
"version": "[not provided]"
543-
}
544-
]
545-
},
546-
"specVersion": "1.3",
547-
"version": 1
548-
}`))
516+
assertCycloneDX(t, content)
549517

550518
Expect(spdx.Extension).To(Equal("spdx.json"))
551519
content, err = io.ReadAll(spdx.Content)
552520
Expect(err).NotTo(HaveOccurred())
553-
Expect(string(content)).To(MatchJSON(`{
554-
"SPDXID": "SPDXRef-DOCUMENT",
555-
"creationInfo": {
556-
"created": "0001-01-01T00:00:00Z",
557-
"creators": [
558-
"Organization: Anchore, Inc",
559-
"Tool: syft-"
560-
],
561-
"licenseListVersion": "3.16"
562-
},
563-
"dataLicense": "CC0-1.0",
564-
"documentNamespace": "https://paketo.io/packit/unknown-source-type/unknown-88cfa225-65e0-5755-895f-c1c8f10fde76",
565-
"name": "unknown",
566-
"relationships": [
567-
{
568-
"relatedSpdxElement": "SPDXRef-DOCUMENT",
569-
"relationshipType": "DESCRIBES",
570-
"spdxElementId": "SPDXRef-DOCUMENT"
571-
}
572-
],
573-
"spdxVersion": "SPDX-2.2"
574-
}`))
521+
assertSPDX(t, content)
575522

576523
content, err = os.ReadFile(filepath.Join(layersDir, "launch-gems", "ruby", "some-file"))
577524
Expect(err).NotTo(HaveOccurred())

0 commit comments

Comments
 (0)