Skip to content

Commit 857ddea

Browse files
authored
Merge pull request #248 from elezar/schema-submodule
Create schema submodule
2 parents a76f272 + af0ba04 commit 857ddea

File tree

14 files changed

+150
-56
lines changed

14 files changed

+150
-56
lines changed

Makefile

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,13 @@ clean-schema:
103103

104104
# tests for go packages
105105
test-gopkgs:
106-
$(Q)$(GO_TEST) ./...
106+
$(Q)failures_in=""; \
107+
for mod in $$(find . -name go.mod); do \
108+
echo "Testing $$(dirname $$mod)..."; ( \
109+
cd $$(dirname $$mod) && $(GO_TEST) ./... \
110+
) || failures_in="$$failures_in\ntags.cncf.io/container-device-interface/$$(dirname $$mod)"; \
111+
done; \
112+
if [ "$$failures_in" != "" ]; then echo "\nTests failed in:$$failures_in\n"; exit 1; fi
107113

108114
# tests for CDI Spec JSON schema
109115
test-schema: bin/validate

cmd/cdi/cmd/root.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ import (
2323
"github.com/spf13/cobra"
2424

2525
"tags.cncf.io/container-device-interface/pkg/cdi"
26-
"tags.cncf.io/container-device-interface/pkg/cdi/validate"
2726
"tags.cncf.io/container-device-interface/schema"
2827
)
2928

@@ -65,7 +64,7 @@ func initSpecDirs() {
6564
fmt.Printf("failed to load JSON schema %s: %v\n", schemaName, err)
6665
os.Exit(1)
6766
}
68-
cdi.SetSpecValidator(validate.WithSchema(s))
67+
cdi.SetSpecValidator(schema.WithSchema(s))
6968

7069
if len(specDirs) > 0 {
7170
cache, err := cdi.NewCache(

cmd/cdi/go.mod

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ require (
99
github.com/spf13/cobra v1.6.0
1010
sigs.k8s.io/yaml v1.3.0
1111
tags.cncf.io/container-device-interface v0.0.0
12+
tags.cncf.io/container-device-interface/schema v0.0.0
1213
)
1314

1415
require (
@@ -25,6 +26,8 @@ require (
2526
tags.cncf.io/container-device-interface/specs-go v0.8.0 // indirect
2627
)
2728

28-
replace tags.cncf.io/container-device-interface => ../..
29-
30-
replace tags.cncf.io/container-device-interface/specs-go => ../../specs-go
29+
replace (
30+
tags.cncf.io/container-device-interface => ../..
31+
tags.cncf.io/container-device-interface/schema => ../../schema
32+
tags.cncf.io/container-device-interface/specs-go => ../../specs-go
33+
)

cmd/validate/go.mod

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,21 @@ module tags.cncf.io/container-device-interface/cmd/validate
22

33
go 1.20
44

5-
require tags.cncf.io/container-device-interface v0.0.0
5+
require tags.cncf.io/container-device-interface/schema v0.0.0
66

77
require (
88
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
99
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
1010
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
11+
golang.org/x/mod v0.19.0 // indirect
1112
gopkg.in/yaml.v2 v2.4.0 // indirect
1213
sigs.k8s.io/yaml v1.3.0 // indirect
14+
tags.cncf.io/container-device-interface v0.0.0 // indirect
15+
tags.cncf.io/container-device-interface/specs-go v0.8.0 // indirect
1316
)
1417

15-
replace tags.cncf.io/container-device-interface => ../..
16-
17-
replace tags.cncf.io/container-device-interface/specs-go => ../../specs-go
18+
replace (
19+
tags.cncf.io/container-device-interface => ../..
20+
tags.cncf.io/container-device-interface/schema => ../../schema
21+
tags.cncf.io/container-device-interface/specs-go => ../../specs-go
22+
)

cmd/validate/go.sum

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:
1717
github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
1818
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
1919
golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8=
20+
golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c=
2021
golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o=
2122
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
2223
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

go.mod

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ require (
77
github.com/opencontainers/runtime-spec v1.1.0
88
github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626
99
github.com/stretchr/testify v1.7.0
10-
github.com/xeipuuv/gojsonschema v1.2.0
1110
golang.org/x/sys v0.19.0
1211
sigs.k8s.io/yaml v1.3.0
1312
tags.cncf.io/container-device-interface/specs-go v0.8.0
@@ -17,8 +16,6 @@ require (
1716
github.com/davecgh/go-spew v1.1.1 // indirect
1817
github.com/pmezard/go-difflib v1.0.0 // indirect
1918
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
20-
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
21-
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
2219
golang.org/x/mod v0.19.0 // indirect
2320
gopkg.in/yaml.v2 v2.4.0 // indirect
2421
gopkg.in/yaml.v3 v3.0.1 // indirect

pkg/cdi/cache_test.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@ import (
3030
oci "github.com/opencontainers/runtime-spec/specs-go"
3131
"github.com/stretchr/testify/require"
3232
"sigs.k8s.io/yaml"
33-
"tags.cncf.io/container-device-interface/pkg/cdi/validate"
3433
cdi "tags.cncf.io/container-device-interface/specs-go"
3534
)
3635

@@ -1559,8 +1558,6 @@ containerEdits:
15591558
other *Cache
15601559
)
15611560

1562-
SetSpecValidator(validate.WithNamedSchema("builtin"))
1563-
15641561
if len(tc.invalid) != 0 {
15651562
dir, err = createSpecDirs(t, nil, nil)
15661563
require.NoError(t, err)

pkg/cdi/spec.go

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,13 @@ const (
3737
defaultSpecExt = ".yaml"
3838
)
3939

40+
type validator interface {
41+
Validate(*cdi.Spec) error
42+
}
43+
4044
var (
4145
// Externally set CDI Spec validation function.
42-
specValidator func(*cdi.Spec) error
46+
specValidator validator
4347
validatorLock sync.RWMutex
4448
)
4549

@@ -236,6 +240,9 @@ func (s *Spec) validate() (map[string]*Device, error) {
236240
}
237241
devices[d.Name] = dev
238242
}
243+
if len(devices) == 0 {
244+
return nil, fmt.Errorf("invalid spec, no devices")
245+
}
239246

240247
return devices, nil
241248
}
@@ -253,10 +260,10 @@ func ParseSpec(data []byte) (*cdi.Spec, error) {
253260
// SetSpecValidator sets a CDI Spec validator function. This function
254261
// is used for extra CDI Spec content validation whenever a Spec file
255262
// loaded (using ReadSpec() or written (using WriteSpec()).
256-
func SetSpecValidator(fn func(*cdi.Spec) error) {
263+
func SetSpecValidator(v validator) {
257264
validatorLock.Lock()
258265
defer validatorLock.Unlock()
259-
specValidator = fn
266+
specValidator = v
260267
}
261268

262269
// validateSpec validates the Spec using the external validator.
@@ -267,7 +274,7 @@ func validateSpec(raw *cdi.Spec) error {
267274
if specValidator == nil {
268275
return nil
269276
}
270-
err := specValidator(raw)
277+
err := specValidator.Validate(raw)
271278
if err != nil {
272279
return fmt.Errorf("Spec validation failed: %w", err)
273280
}

pkg/cdi/spec_test.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ import (
2626
"sigs.k8s.io/yaml"
2727

2828
"github.com/stretchr/testify/require"
29-
"tags.cncf.io/container-device-interface/pkg/cdi/validate"
3029
"tags.cncf.io/container-device-interface/pkg/parser"
31-
"tags.cncf.io/container-device-interface/schema"
3230
cdi "tags.cncf.io/container-device-interface/specs-go"
3331
)
3432

@@ -353,9 +351,6 @@ devices:
353351
dir, err := mkTestDir(t, nil)
354352
require.NoError(t, err)
355353

356-
SetSpecValidator(validate.WithDefaultSchema())
357-
defer SetSpecValidator(validate.WithSchema(schema.NopSchema()))
358-
359354
t.Run(tc.name, func(t *testing.T) {
360355
var (
361356
raw = &cdi.Spec{}

schema/go.mod

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
module tags.cncf.io/container-device-interface/schema
2+
3+
go 1.20
4+
5+
require (
6+
github.com/stretchr/testify v1.7.0
7+
github.com/xeipuuv/gojsonschema v1.2.0
8+
sigs.k8s.io/yaml v1.3.0
9+
tags.cncf.io/container-device-interface v0.0.0
10+
tags.cncf.io/container-device-interface/specs-go v0.8.0
11+
)
12+
13+
require (
14+
github.com/davecgh/go-spew v1.1.1 // indirect
15+
github.com/fsnotify/fsnotify v1.5.1 // indirect
16+
github.com/opencontainers/runtime-spec v1.1.0 // indirect
17+
github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626 // indirect
18+
github.com/pmezard/go-difflib v1.0.0 // indirect
19+
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
20+
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect
21+
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
22+
golang.org/x/mod v0.19.0 // indirect
23+
golang.org/x/sys v0.19.0 // indirect
24+
gopkg.in/yaml.v2 v2.4.0 // indirect
25+
gopkg.in/yaml.v3 v3.0.1 // indirect
26+
)
27+
28+
replace (
29+
tags.cncf.io/container-device-interface => ../
30+
tags.cncf.io/container-device-interface/specs-go => ../specs-go
31+
)

0 commit comments

Comments
 (0)