144 lines
3.5 KiB
Go
144 lines
3.5 KiB
Go
package docker
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestSampleConfig(t *testing.T) {
|
|
plugin := &Docker{}
|
|
require.NotEmpty(t, plugin.SampleConfig())
|
|
}
|
|
|
|
func TestInitFail(t *testing.T) {
|
|
plugin := &Docker{}
|
|
require.ErrorContains(t, plugin.Init(), "id missing")
|
|
}
|
|
|
|
func TestPathNonExistent(t *testing.T) {
|
|
plugin := &Docker{
|
|
ID: "non_existent_path_test",
|
|
Path: "non/existent/path",
|
|
}
|
|
require.ErrorContainsf(t, plugin.Init(), "accessing directory", "accessing directory %q failed: %v", plugin.Path, plugin.Init())
|
|
}
|
|
|
|
func TestSetNotAvailable(t *testing.T) {
|
|
testdir, err := filepath.Abs("testdata")
|
|
require.NoError(t, err, "testdata cannot be found")
|
|
|
|
plugin := &Docker{
|
|
ID: "set_path_test",
|
|
Path: testdir,
|
|
}
|
|
require.NoError(t, plugin.Init())
|
|
|
|
// Try to Store the secrets, which this plugin should not let
|
|
secret := map[string]string{
|
|
"secret-file-1": "TryToSetThis",
|
|
}
|
|
for k, v := range secret {
|
|
require.ErrorContains(t, plugin.Set(k, v), "secret-store does not support creating secrets")
|
|
}
|
|
}
|
|
|
|
func TestListGet(t *testing.T) {
|
|
// secret files name and their content to compare under the `testdata` directory
|
|
secrets := map[string]string{
|
|
"secret-file-1": "IWontTell",
|
|
"secret_file_2": "SuperDuperSecret!23",
|
|
"secretFile": "foobar",
|
|
}
|
|
|
|
testdir, err := filepath.Abs("testdata")
|
|
require.NoError(t, err, "testdata cannot be found")
|
|
|
|
// Initialize the plugin
|
|
plugin := &Docker{
|
|
ID: "test_list_get",
|
|
Path: testdir,
|
|
}
|
|
require.NoError(t, plugin.Init())
|
|
|
|
// List the Secrets
|
|
keys, err := plugin.List()
|
|
require.NoError(t, err)
|
|
require.Len(t, keys, len(secrets))
|
|
// check if the returned array from List() is the same
|
|
// as the name of secret files
|
|
for secretFileName := range secrets {
|
|
require.Contains(t, keys, secretFileName)
|
|
}
|
|
|
|
// Get the secrets
|
|
for _, k := range keys {
|
|
value, err := plugin.Get(k)
|
|
require.NoError(t, err)
|
|
v, found := secrets[k]
|
|
require.Truef(t, found, "unexpected secret requested that was not found: %q", k)
|
|
require.Equal(t, v, string(value))
|
|
}
|
|
}
|
|
|
|
func TestResolver(t *testing.T) {
|
|
// Secret Value Name to Resolve
|
|
secretFileName := "secret-file-1"
|
|
// Secret Value to Resolve To
|
|
secretVal := "IWontTell"
|
|
|
|
testdir, err := filepath.Abs("testdata")
|
|
require.NoError(t, err, "testdata cannot be found")
|
|
|
|
// Initialize the plugin
|
|
plugin := &Docker{
|
|
ID: "test_resolver",
|
|
Path: testdir,
|
|
}
|
|
require.NoError(t, plugin.Init())
|
|
|
|
// Get the resolver
|
|
resolver, err := plugin.GetResolver(secretFileName)
|
|
require.NoError(t, err)
|
|
require.NotNil(t, resolver)
|
|
s, dynamic, err := resolver()
|
|
require.NoError(t, err)
|
|
require.False(t, dynamic)
|
|
require.Equal(t, secretVal, string(s))
|
|
}
|
|
|
|
func TestResolverInvalid(t *testing.T) {
|
|
testdir, err := filepath.Abs("testdata")
|
|
require.NoError(t, err, "testdata cannot be found")
|
|
|
|
// Initialize the plugin
|
|
plugin := &Docker{
|
|
ID: "test_invalid_resolver",
|
|
Path: testdir,
|
|
}
|
|
require.NoError(t, plugin.Init())
|
|
|
|
// Get the resolver
|
|
resolver, err := plugin.GetResolver("foo")
|
|
require.NoError(t, err)
|
|
require.NotNil(t, resolver)
|
|
_, _, err = resolver()
|
|
require.ErrorContains(t, err, "cannot read the secret's value under the directory:")
|
|
}
|
|
|
|
func TestGetNonExistent(t *testing.T) {
|
|
testdir, err := filepath.Abs("testdata")
|
|
require.NoError(t, err, "testdata cannot be found")
|
|
|
|
// Initialize the plugin
|
|
plugin := &Docker{
|
|
ID: "test_nonexistent_get",
|
|
Path: testdir,
|
|
}
|
|
require.NoError(t, plugin.Init())
|
|
|
|
// Get the resolver
|
|
_, err = plugin.Get("foo")
|
|
require.ErrorContains(t, err, "cannot read the secret's value under the directory")
|
|
}
|