Skip to content

Commit 3cfc576

Browse files
committed
Add first tests for elements API
Signed-off-by: Adolfo García Veytia (Puerco) <[email protected]>
1 parent 80a2d3e commit 3cfc576

File tree

3 files changed

+4147
-0
lines changed

3 files changed

+4147
-0
lines changed

pkg/elements/metadata_test.go

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
// SPDX-FileCopyrightText: Copyright 2025 The Protobom Authors
3+
4+
package elements_test
5+
6+
import (
7+
"testing"
8+
"time"
9+
10+
"github.com/google/cel-go/common/types/ref"
11+
"github.com/protobom/protobom/pkg/sbom"
12+
"github.com/stretchr/testify/require"
13+
14+
"github.com/protobom/cel/pkg/runner"
15+
)
16+
17+
func TestMetadataGet(t *testing.T) {
18+
r, err := runner.NewRunner()
19+
require.NoError(t, err)
20+
vars, err := runner.BuildVariables(
21+
runner.WithPaths([]string{"testdata/github.spdx.json"}),
22+
)
23+
require.NoError(t, err)
24+
25+
for _, tc := range []struct {
26+
name string
27+
code string
28+
mustErr bool
29+
eval func(*testing.T, ref.Val)
30+
}{
31+
{"name", "sboms[0].metadata.id", false, func(t *testing.T, v ref.Val) {
32+
t.Helper()
33+
require.Equal(t, "https://github.com/kubernetes-sigs/bom/dependency_graph/sbom-97744edb52ba65a1#DOCUMENT", v.Value())
34+
}},
35+
{"name", "sboms[0].metadata.version", false, func(t *testing.T, v ref.Val) {
36+
t.Helper()
37+
require.Equal(t, "1", v.Value())
38+
}},
39+
{"name", "sboms[0].metadata.name", false, func(t *testing.T, v ref.Val) {
40+
t.Helper()
41+
require.Equal(t, "com.github.kubernetes-sigs/bom", v.Value())
42+
}},
43+
{"name", "sboms[0].metadata.date", false, func(t *testing.T, v ref.Val) {
44+
t.Helper()
45+
tm, err := time.Parse("2006-01-02 15:04:05 -0700", "2023-08-10 01:04:39 -0000")
46+
require.NoError(t, err)
47+
require.Equal(t, tm.UTC(), v.Value())
48+
}},
49+
// TODO(puerco): More SBOMs, test all fiuelds
50+
} {
51+
t.Run(tc.name, func(t *testing.T) {
52+
ret, err := r.Evaluate(tc.code, vars)
53+
if tc.mustErr {
54+
require.Error(t, err)
55+
return
56+
}
57+
require.NoError(t, err)
58+
t.Log(ret)
59+
tc.eval(t, ret)
60+
})
61+
}
62+
}
63+
64+
func TestGetMetadataGet(t *testing.T) {
65+
r, err := runner.NewRunner()
66+
require.NoError(t, err)
67+
vars, err := runner.BuildVariables(
68+
runner.WithPaths([]string{"testdata/github.spdx.json"}),
69+
)
70+
require.NoError(t, err)
71+
72+
for _, tc := range []struct {
73+
name string
74+
code string
75+
mustErr bool
76+
eval func(*testing.T, ref.Val)
77+
}{
78+
{"name", "sboms[0].get_metadata().id", false, func(t *testing.T, v ref.Val) {
79+
t.Helper()
80+
require.Equal(t, "https://github.com/kubernetes-sigs/bom/dependency_graph/sbom-97744edb52ba65a1#DOCUMENT", v.Value())
81+
}},
82+
{"name", "sboms[0].get_metadata().version", false, func(t *testing.T, v ref.Val) {
83+
t.Helper()
84+
require.Equal(t, "1", v.Value())
85+
}},
86+
{"name", "sboms[0].get_metadata().name", false, func(t *testing.T, v ref.Val) {
87+
t.Helper()
88+
require.Equal(t, "com.github.kubernetes-sigs/bom", v.Value())
89+
}},
90+
{"name", "sboms[0].get_metadata().date", false, func(t *testing.T, v ref.Val) {
91+
t.Helper()
92+
tm, err := time.Parse("2006-01-02 15:04:05 -0700", "2023-08-10 01:04:39 -0000")
93+
require.NoError(t, err)
94+
require.Equal(t, tm.UTC(), v.Value())
95+
}},
96+
{"name", "sboms[0].get_metadata().get_authors()", false, func(t *testing.T, v ref.Val) {
97+
t.Helper()
98+
require.NoError(t, err)
99+
docdata, ok := v.Value().([]*sbom.Person)
100+
require.True(t, ok)
101+
expect := []*sbom.Person{{
102+
Name: "Dependabot ([email protected])",
103+
}}
104+
require.Equal(t, expect[0].Name, docdata[0].Name)
105+
}},
106+
// TODO(puerco): More SBOMs, test all fiuelds
107+
} {
108+
t.Run(tc.name, func(t *testing.T) {
109+
ret, err := r.Evaluate(tc.code, vars)
110+
if tc.mustErr {
111+
require.Error(t, err)
112+
return
113+
}
114+
require.NoError(t, err)
115+
t.Log(ret)
116+
tc.eval(t, ret)
117+
})
118+
}
119+
}

pkg/elements/node_test.go

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
// SPDX-License-Identifier: Apache-2.0
2+
// SPDX-FileCopyrightText: Copyright 2025 The Protobom Authors
3+
4+
package elements_test
5+
6+
import (
7+
"testing"
8+
9+
"github.com/google/cel-go/common/types/ref"
10+
"github.com/stretchr/testify/require"
11+
12+
"github.com/protobom/cel/pkg/runner"
13+
)
14+
15+
func TestNodeGet(t *testing.T) {
16+
r, err := runner.NewRunner()
17+
require.NoError(t, err)
18+
vars, err := runner.BuildVariables(
19+
runner.WithPaths([]string{"testdata/github.spdx.json"}),
20+
)
21+
require.NoError(t, err)
22+
23+
for _, tc := range []struct {
24+
name string
25+
code string
26+
mustErr bool
27+
eval func(*testing.T, ref.Val)
28+
}{
29+
{"name", "sboms[0].node_list.get_root_nodes()[0].name", false, func(t *testing.T, v ref.Val) {
30+
t.Helper()
31+
require.Equal(t, "com.github.kubernetes-sigs/bom", v.Value())
32+
}},
33+
{"name", "sboms[0].node_list.get_root_nodes()[0].version", false, func(t *testing.T, v ref.Val) {
34+
t.Helper()
35+
require.Equal(t, "2cc9dcc83b2867047edff143905829ff9e3b98ff", v.Value())
36+
}},
37+
{"name", "sboms[0].node_list.get_root_nodes()[0].url_download", false, func(t *testing.T, v ref.Val) {
38+
t.Helper()
39+
require.Equal(t, "git+https://github.com/kubernetes-sigs/bom@2cc9dcc83b2867047edff143905829ff9e3b98ff", v.Value())
40+
}},
41+
{"name", "sboms[0].node_list.get_root_nodes()[0].licenses", false, func(t *testing.T, v ref.Val) {
42+
t.Helper()
43+
require.Equal(t, []string{"Apache-2.0"}, v.Value())
44+
}},
45+
// TODO(puerco): More SBOMs, testa ll fiuelds
46+
} {
47+
t.Run(tc.name, func(t *testing.T) {
48+
ret, err := r.Evaluate(tc.code, vars)
49+
if tc.mustErr {
50+
require.Error(t, err)
51+
return
52+
}
53+
require.NoError(t, err)
54+
t.Log(ret)
55+
tc.eval(t, ret)
56+
})
57+
}
58+
}

0 commit comments

Comments
 (0)