/* # Copyright (c) 2021, 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 oci import ( "fmt" "testing" testlog "github.com/sirupsen/logrus/hooks/test" "github.com/stretchr/testify/require" ) func TestPathRuntimeConstructor(t *testing.T) { logger, _ := testlog.NewNullLogger() r, err := NewRuntimeForPath(logger, "////an/invalid/path") require.Error(t, err) require.Nil(t, r) r, err = NewRuntimeForPath(logger, "/tmp") require.Error(t, err) require.Nil(t, r) r, err = NewRuntimeForPath(logger, "/dev/null") require.Error(t, err) require.Nil(t, r) r, err = NewRuntimeForPath(logger, "/bin/sh") require.NoError(t, err) f, ok := r.(*pathRuntime) require.True(t, ok) require.Equal(t, "/bin/sh", f.path) } func TestPathRuntimeForwardsArgs(t *testing.T) { logger, _ := testlog.NewNullLogger() testCases := []struct { execRuntimeError error args []string }{ {}, { args: []string{"shouldBeReplaced"}, }, { args: []string{"shouldBeReplaced", "arg1"}, }, { execRuntimeError: fmt.Errorf("exec error"), }, } for _, tc := range testCases { mockedRuntime := &RuntimeMock{ ExecFunc: func(strings []string) error { return tc.execRuntimeError }, } r := pathRuntime{ logger: logger, path: "runtime", execRuntime: mockedRuntime, } err := r.Exec(tc.args) require.ErrorIs(t, err, tc.execRuntimeError) calls := mockedRuntime.ExecCalls() require.Len(t, calls, 1) numArgs := len(tc.args) if numArgs == 0 { numArgs = 1 } require.Len(t, calls[0].Strings, numArgs) require.Equal(t, "runtime", calls[0].Strings[0]) if numArgs > 1 { require.EqualValues(t, tc.args[1:], calls[0].Strings[1:]) } } }