90 lines
2.2 KiB
Go
90 lines
2.2 KiB
Go
|
//go:build darwin || linux || windows
|
||
|
|
||
|
package os
|
||
|
|
||
|
import (
|
||
|
"testing"
|
||
|
|
||
|
"github.com/stretchr/testify/require"
|
||
|
|
||
|
"github.com/influxdata/telegraf/internal/choice"
|
||
|
)
|
||
|
|
||
|
// In docker, access to the keyring is disabled by default see
|
||
|
// https://docs.docker.com/engine/security/seccomp/.
|
||
|
// You will see the following error then.
|
||
|
const dockerErr = "opening keyring failed: Specified keyring backend not available"
|
||
|
|
||
|
func TestSampleConfig(t *testing.T) {
|
||
|
plugin := &OS{}
|
||
|
require.NotEmpty(t, plugin.SampleConfig())
|
||
|
}
|
||
|
|
||
|
func TestInitFail(t *testing.T) {
|
||
|
tests := []struct {
|
||
|
name string
|
||
|
plugin *OS
|
||
|
expected string
|
||
|
}{
|
||
|
{
|
||
|
name: "invalid id",
|
||
|
plugin: &OS{},
|
||
|
expected: "id missing",
|
||
|
},
|
||
|
}
|
||
|
for _, tt := range tests {
|
||
|
t.Run(tt.name, func(t *testing.T) {
|
||
|
err := tt.plugin.Init()
|
||
|
require.ErrorContains(t, err, tt.expected)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func TestResolverInvalid(t *testing.T) {
|
||
|
plugin := &OS{ID: "test"}
|
||
|
|
||
|
// In docker, access to the keyring is disabled by default
|
||
|
// see https://docs.docker.com/engine/security/seccomp/.
|
||
|
err := plugin.Init()
|
||
|
if err != nil && err.Error() == dockerErr {
|
||
|
t.Skip("Kernel keyring not available!")
|
||
|
}
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
// Make sure the key does not exist and try to read that key
|
||
|
testKey := "foobar secret key"
|
||
|
keys, err := plugin.List()
|
||
|
require.NoError(t, err)
|
||
|
for choice.Contains(testKey, keys) {
|
||
|
testKey += "x"
|
||
|
}
|
||
|
// Get the resolver
|
||
|
resolver, err := plugin.GetResolver(testKey)
|
||
|
require.NoError(t, err)
|
||
|
require.NotNil(t, resolver)
|
||
|
_, _, err = resolver()
|
||
|
require.Error(t, err)
|
||
|
}
|
||
|
|
||
|
func TestGetNonExisting(t *testing.T) {
|
||
|
plugin := &OS{ID: "test"}
|
||
|
|
||
|
// In docker, access to the keyring is disabled by default
|
||
|
// see https://docs.docker.com/engine/security/seccomp/.
|
||
|
err := plugin.Init()
|
||
|
if err != nil && err.Error() == dockerErr {
|
||
|
t.Skip("Kernel keyring not available!")
|
||
|
}
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
// Make sure the key does not exist and try to read that key
|
||
|
testKey := "foobar secret key"
|
||
|
keys, err := plugin.List()
|
||
|
require.NoError(t, err)
|
||
|
for choice.Contains(testKey, keys) {
|
||
|
testKey += "x"
|
||
|
}
|
||
|
_, err = plugin.Get(testKey)
|
||
|
require.EqualError(t, err, "The specified item could not be found in the keyring")
|
||
|
}
|