Skip to content

Commit

Permalink
Add string TOML source
Browse files Browse the repository at this point in the history
Signed-off-by: Evan Lezar <[email protected]>
  • Loading branch information
elezar committed Nov 29, 2024
1 parent dcd65a6 commit 1417c51
Show file tree
Hide file tree
Showing 6 changed files with 69 additions and 23 deletions.
7 changes: 4 additions & 3 deletions pkg/config/engine/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@ package engine

// Interface defines the API for a runtime config updater.
type Interface interface {
DefaultRuntime() string
AddRuntime(string, string, bool) error
Set(string, interface{})
DefaultRuntime() string
GetRuntimeConfig(string) (RuntimeConfig, error)
RemoveRuntime(string) error
Save(string) (int64, error)
GetRuntimeConfig(string) (RuntimeConfig, error)
Set(string, interface{})
String() string
}

// RuntimeConfig defines the interface to query container runtime handler configuration
Expand Down
15 changes: 8 additions & 7 deletions pkg/config/engine/containerd/config_v1_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -200,20 +200,21 @@ func TestAddRuntimeV1(t *testing.T) {

for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
cfg, err := toml.Load(tc.config)
require.NoError(t, err)
expectedConfig, err := toml.Load(tc.expectedConfig)
require.NoError(t, err)

c := &ConfigV1{
Logger: logger,
Tree: cfg,
}
c, err := New(
WithLogger(logger),
WithConfigSource(toml.FromString(tc.config)),
WithUseLegacyConfig(true),
WithRuntimeType(""),
)
require.NoError(t, err)

err = c.AddRuntime("test", "/usr/bin/test", tc.setAsDefault)
require.NoError(t, err)

require.EqualValues(t, expectedConfig.String(), cfg.String())
require.EqualValues(t, expectedConfig.String(), c.String())
})
}
}
25 changes: 12 additions & 13 deletions pkg/config/engine/containerd/config_v2_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func TestAddRuntime(t *testing.T) {
privileged_without_host_devices = false
runtime_engine = ""
runtime_root = ""
runtime_type = ""
runtime_type = "io.containerd.runc.v2"
[plugins."io.containerd.grpc.v1.cri".containerd.runtimes.test.options]
BinaryName = "/usr/bin/test"
`,
Expand Down Expand Up @@ -199,20 +199,19 @@ func TestAddRuntime(t *testing.T) {

for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
cfg, err := toml.Load(tc.config)
require.NoError(t, err)
expectedConfig, err := toml.Load(tc.expectedConfig)
require.NoError(t, err)

c := &Config{
Logger: logger,
Tree: cfg,
}
c, err := New(
WithLogger(logger),
WithConfigSource(toml.FromString(tc.config)),
)
require.NoError(t, err)

err = c.AddRuntime("test", "/usr/bin/test", tc.setAsDefault)
require.NoError(t, err)

require.EqualValues(t, expectedConfig.String(), cfg.String())
require.EqualValues(t, expectedConfig.String(), c.String())
})
}
}
Expand Down Expand Up @@ -299,13 +298,13 @@ func TestGetRuntimeConfig(t *testing.T) {

for _, tc := range testCases {
t.Run(tc.description, func(t *testing.T) {
cfg, err := toml.Load(config)

c, err := New(
WithLogger(logger),
WithConfigSource(toml.FromString(config)),
)
require.NoError(t, err)

c := &Config{
Logger: logger,
Tree: cfg,
}
rc, err := c.GetRuntimeConfig(tc.runtime)
require.Equal(t, tc.expectedError, err)
require.Equal(t, tc.expected, rc.GetBinaryPath())
Expand Down
10 changes: 10 additions & 0 deletions pkg/config/engine/docker/docker.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,3 +166,13 @@ func (c *Config) GetRuntimeConfig(name string) (engine.RuntimeConfig, error) {
}
return &dockerRuntime{}, nil
}

// String returns the string representation of the JSON config.
func (c Config) String() string {
output, err := json.MarshalIndent(c, "", " ")
if err != nil {
return fmt.Sprintf("invalid JSON: %v", err)
}

return string(output)
}
26 changes: 26 additions & 0 deletions pkg/config/toml/source-string.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/**
# Copyright 2024 NVIDIA CORPORATION
#
# 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 toml

type tomlString string

var _ Loader = (*tomlFile)(nil)

// Load loads the contents of the specified TOML file as a map.
func (l tomlString) Load() (*Tree, error) {
return Load(string(l))
}
9 changes: 9 additions & 0 deletions pkg/config/toml/source.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,12 @@ func FromCommandLine(cmds ...string) Loader {
args: cmds[1:],
}
}

// FromString creates a TOML source for the specified contents.
// If an empty string is passed an empty toml config is used.
func FromString(contents string) Loader {
if contents == "" {
return Empty
}
return tomlString(contents)
}

0 comments on commit 1417c51

Please sign in to comment.