diff --git a/cmd/nvidia-container-runtime/modifier/experimental.go b/cmd/nvidia-container-runtime/modifier/experimental.go index 46718a4c..5c72bae8 100644 --- a/cmd/nvidia-container-runtime/modifier/experimental.go +++ b/cmd/nvidia-container-runtime/modifier/experimental.go @@ -69,7 +69,7 @@ func NewExperimentalModifier(logger *logrus.Logger, cfg *config.Config, ociSpec var d discover.Discover - switch resolveAutoDiscoverMode(logger, cfg.NVIDIAContainerRuntimeConfig.DiscoverMode) { + switch info.ResolveAutoMode(logger, cfg.NVIDIAContainerRuntimeConfig.DiscoverMode) { case "legacy": legacyDiscoverer, err := discover.NewLegacyDiscoverer(logger, config) if err != nil { @@ -178,22 +178,3 @@ func checkRequirements(logger *logrus.Logger, image *image.CUDA) error { return r.Assert() } - -// resolveAutoDiscoverMode determines the correct discover mode for the specified platform if set to "auto" -func resolveAutoDiscoverMode(logger *logrus.Logger, mode string) (rmode string) { - if mode != "auto" { - return mode - } - defer func() { - logger.Infof("Auto-detected discover mode as '%v'", rmode) - }() - - isTegra, reason := info.IsTegraSystem() - logger.Debugf("Is Tegra-based system? %v: %v", isTegra, reason) - - if isTegra { - return "csv" - } - - return "legacy" -} diff --git a/cmd/nvidia-container-runtime/modifier/experimental_test.go b/cmd/nvidia-container-runtime/modifier/experimental_test.go index cd492000..d7ba0455 100644 --- a/cmd/nvidia-container-runtime/modifier/experimental_test.go +++ b/cmd/nvidia-container-runtime/modifier/experimental_test.go @@ -318,32 +318,3 @@ func TestExperimentalModifier(t *testing.T) { }) } } - -func TestResolveDiscoverMode(t *testing.T) { - logger, _ := testlog.NewNullLogger() - - testCases := []struct { - description string - mode string - expectedMode string - }{ - { - description: "non-auto resolves to input", - mode: "not-auto", - expectedMode: "not-auto", - }, - // TODO: The following test is brittle in that it will break on Tegra-based systems. - // { - // description: "auto resolves to legacy", - // mode: "auto", - // expectedMode: "legacy", - // }, - } - - for _, tc := range testCases { - t.Run(tc.description, func(t *testing.T) { - mode := resolveAutoDiscoverMode(logger, tc.mode) - require.EqualValues(t, tc.expectedMode, mode) - }) - } -} diff --git a/internal/info/auto.go b/internal/info/auto.go new file mode 100644 index 00000000..734da448 --- /dev/null +++ b/internal/info/auto.go @@ -0,0 +1,43 @@ +/** +# Copyright (c) 2022, 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 info + +// Logger is a basic interface for logging to allow these functions to be called +// from code where logrus is not used. +type Logger interface { + Infof(string, ...interface{}) + Debugf(string, ...interface{}) +} + +// ResolveAutoMode determines the correct mode for the platform if set to "auto" +func ResolveAutoMode(logger Logger, mode string) (rmode string) { + if mode != "auto" { + return mode + } + defer func() { + logger.Infof("Auto-detected mode as '%v'", rmode) + }() + + isTegra, reason := IsTegraSystem() + logger.Debugf("Is Tegra-based system? %v: %v", isTegra, reason) + + if isTegra { + return "csv" + } + + return "legacy" +} diff --git a/internal/info/auto_test.go b/internal/info/auto_test.go new file mode 100644 index 00000000..2a905c90 --- /dev/null +++ b/internal/info/auto_test.go @@ -0,0 +1,53 @@ +/** +# Copyright (c) 2022, 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 info + +import ( + "testing" + + testlog "github.com/sirupsen/logrus/hooks/test" + "github.com/stretchr/testify/require" +) + +func TestResolveAutoMode(t *testing.T) { + logger, _ := testlog.NewNullLogger() + + testCases := []struct { + description string + mode string + expectedMode string + }{ + { + description: "non-auto resolves to input", + mode: "not-auto", + expectedMode: "not-auto", + }, + // TODO: The following test is brittle in that it will break on Tegra-based systems. + // { + // description: "auto resolves to legacy", + // mode: "auto", + // expectedMode: "legacy", + // }, + } + + for _, tc := range testCases { + t.Run(tc.description, func(t *testing.T) { + mode := ResolveAutoMode(logger, tc.mode) + require.EqualValues(t, tc.expectedMode, mode) + }) + } +}