diff --git a/cmd/nvidia-ctk/cdi/generate/generate.go b/cmd/nvidia-ctk/cdi/generate/generate.go index cd4f52f0..23922ba7 100644 --- a/cmd/nvidia-ctk/cdi/generate/generate.go +++ b/cmd/nvidia-ctk/cdi/generate/generate.go @@ -208,7 +208,7 @@ func (m command) generateSpec(root string) (*specs.Spec, error) { deviceSpecs = append(deviceSpecs, allDevice) - allEdits := cdi.ContainerEdits{} + allEdits := edits.NewContainerEdits() ipcs, err := NewIPCDiscoverer(m.logger, root) if err != nil { @@ -316,7 +316,7 @@ func (m command) generateDeviceSpecs(devicelib device.Interface, root string) ([ // createAllDevice creates an 'all' device which combines the edits from the previous devices func createAllDevice(deviceSpecs []specs.Device) specs.Device { - edits := cdi.ContainerEdits{} + edits := edits.NewContainerEdits() for _, d := range deviceSpecs { edit := cdi.ContainerEdits{ diff --git a/internal/edits/edits.go b/internal/edits/edits.go index 3d7560d5..96d40c60 100644 --- a/internal/edits/edits.go +++ b/internal/edits/edits.go @@ -22,6 +22,7 @@ import ( "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" "github.com/NVIDIA/nvidia-container-toolkit/internal/oci" "github.com/container-orchestrated-devices/container-device-interface/pkg/cdi" + "github.com/container-orchestrated-devices/container-device-interface/specs-go" ociSpecs "github.com/opencontainers/runtime-spec/specs-go" "github.com/sirupsen/logrus" ) @@ -63,7 +64,7 @@ func FromDiscoverer(d discover.Discover) (*cdi.ContainerEdits, error) { return nil, fmt.Errorf("failed to discover hooks: %v", err) } - c := cdi.ContainerEdits{} + c := NewContainerEdits() for _, d := range devices { edits, err := device(d).toEdits() if err != nil { @@ -80,7 +81,15 @@ func FromDiscoverer(d discover.Discover) (*cdi.ContainerEdits, error) { c.Append(hook(h).toEdits()) } - return &c, nil + return c, nil +} + +// NewContainerEdits is a utility function to create a CDI ContainerEdits struct. +func NewContainerEdits() *cdi.ContainerEdits { + c := cdi.ContainerEdits{ + ContainerEdits: &specs.ContainerEdits{}, + } + return &c } // Modify applies the defined edits to the incoming OCI spec diff --git a/internal/edits/edits_test.go b/internal/edits/edits_test.go new file mode 100644 index 00000000..65211557 --- /dev/null +++ b/internal/edits/edits_test.go @@ -0,0 +1,31 @@ +/** +# Copyright (c) NVIDIA CORPORATION. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +**/ + +package edits + +import ( + "testing" + + "github.com/NVIDIA/nvidia-container-toolkit/internal/discover" + "github.com/stretchr/testify/require" +) + +func TestFromDiscovererAllowsMountsToIterate(t *testing.T) { + edits, err := FromDiscoverer(discover.None{}) + require.NoError(t, err) + + require.Empty(t, edits.Mounts) +} diff --git a/internal/modifier/discover_test.go b/internal/modifier/discover_test.go index f3523e3f..bbad61aa 100644 --- a/internal/modifier/discover_test.go +++ b/internal/modifier/discover_test.go @@ -37,8 +37,10 @@ func TestDiscoverModifier(t *testing.T) { expectedSpec *specs.Spec }{ { - description: "empty discoverer does not modify spec", - discover: &discover.DiscoverMock{}, + description: "empty discoverer does not modify spec", + spec: &specs.Spec{}, + discover: &discover.DiscoverMock{}, + expectedSpec: &specs.Spec{}, }, { description: "failed hooks discoverer returns error",