package plugin import ( "io/ioutil" "os" "testing" "github.com/hashicorp/vault/helper/pluginutil" "github.com/hashicorp/vault/http" "github.com/hashicorp/vault/logical" "github.com/hashicorp/vault/logical/plugin" "github.com/hashicorp/vault/logical/plugin/mock" "github.com/hashicorp/vault/vault" ) func TestBackend(t *testing.T) { config, cleanup := testConfig(t) defer cleanup() _, err := Backend(config) if err != nil { t.Fatal(err) } } func TestBackend_Factory(t *testing.T) { config, cleanup := testConfig(t) defer cleanup() _, err := Factory(config) if err != nil { t.Fatal(err) } } func TestBackend_PluginMain(t *testing.T) { if os.Getenv(pluginutil.PluginUnwrapTokenEnv) == "" { return } content := []byte(vault.TestClusterCACert) tmpfile, err := ioutil.TempFile("", "test-cacert") if err != nil { t.Fatal(err) } defer os.Remove(tmpfile.Name()) // clean up if _, err := tmpfile.Write(content); err != nil { t.Fatal(err) } if err := tmpfile.Close(); err != nil { t.Fatal(err) } args := []string{"--ca-cert=" + tmpfile.Name()} apiClientMeta := &pluginutil.APIClientMeta{} flags := apiClientMeta.FlagSet() flags.Parse(args) tlsConfig := apiClientMeta.GetTLSConfig() tlsProviderFunc := pluginutil.VaultPluginTLSProvider(tlsConfig) err = plugin.Serve(&plugin.ServeOpts{ BackendFactoryFunc: mock.Factory, TLSProviderFunc: tlsProviderFunc, }) if err != nil { t.Fatal(err) } } func testConfig(t *testing.T) (*logical.BackendConfig, func()) { coreConfig := &vault.CoreConfig{} cluster := vault.NewTestCluster(t, coreConfig, true) cluster.StartListeners() cores := cluster.Cores cores[0].Handler.Handle("/", http.Handler(cores[0].Core)) cores[1].Handler.Handle("/", http.Handler(cores[1].Core)) cores[2].Handler.Handle("/", http.Handler(cores[2].Core)) core := cores[0] sys := vault.TestDynamicSystemView(core.Core) config := &logical.BackendConfig{ Logger: nil, System: sys, Config: map[string]string{ "plugin_name": "mock-plugin", }, } vault.TestAddTestPlugin(t, core.Core, "mock-plugin", "TestBackend_PluginMain") return config, func() { cluster.CloseListeners() } }