mirror of https://github.com/poanetwork/quorum.git
145 lines
3.9 KiB
Go
145 lines
3.9 KiB
Go
package plugin
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/hashicorp/go-plugin"
|
|
testifyassert "github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func typicalPluginManager(t *testing.T) *PluginManager {
|
|
testObject, err := NewPluginManager("arbitraryName", &Settings{
|
|
Providers: map[PluginInterfaceName]PluginDefinition{
|
|
HelloWorldPluginInterfaceName: {
|
|
Name: "arbitrary-helloWorld",
|
|
Version: "1.0.0",
|
|
Config: "arbitrary config",
|
|
},
|
|
},
|
|
}, false, false, "")
|
|
|
|
testifyassert.NoError(t, err)
|
|
return testObject
|
|
}
|
|
|
|
func TestPluginManager_ProvidersPopulation(t *testing.T) {
|
|
arbitraryPluginInterfaceName := PluginInterfaceName("arbitrary")
|
|
defer func() {
|
|
delete(pluginProviders, arbitraryPluginInterfaceName)
|
|
}()
|
|
pluginProviders[arbitraryPluginInterfaceName] = pluginProvider{
|
|
pluginSet: plugin.PluginSet{},
|
|
}
|
|
|
|
testObject, err := NewPluginManager("arbitraryName", &Settings{
|
|
Providers: map[PluginInterfaceName]PluginDefinition{
|
|
HelloWorldPluginInterfaceName: {
|
|
Name: "arbitrary-helloWorld",
|
|
Version: "1.0.0",
|
|
Config: "arbitrary config",
|
|
},
|
|
arbitraryPluginInterfaceName: {
|
|
Name: "foo-bar",
|
|
Version: "2.0.0",
|
|
Config: "arbitrary config",
|
|
},
|
|
},
|
|
}, false, false, "")
|
|
|
|
testifyassert.NoError(t, err)
|
|
testifyassert.Equal(t, "arbitrary-helloWorld-1.0.0", testObject.initializedPlugins[HelloWorldPluginInterfaceName].(*basePlugin).pluginDefinition.FullName())
|
|
testifyassert.Equal(t, "foo-bar-2.0.0", testObject.initializedPlugins[arbitraryPluginInterfaceName].(*basePlugin).pluginDefinition.FullName())
|
|
}
|
|
|
|
func TestPluginManager_GetPluginTemplate_whenTypical(t *testing.T) {
|
|
assert := testifyassert.New(t)
|
|
testObject := typicalPluginManager(t)
|
|
|
|
p := new(HelloWorldPluginTemplate)
|
|
err := testObject.GetPluginTemplate(HelloWorldPluginInterfaceName, p)
|
|
|
|
assert.NoError(err)
|
|
assert.NotNil(p)
|
|
}
|
|
|
|
func TestPluginManager_GetPlugin_whenReadFromCache(t *testing.T) {
|
|
assert := testifyassert.New(t)
|
|
testObject := typicalPluginManager(t)
|
|
p := new(HelloWorldPluginTemplate)
|
|
err := testObject.GetPluginTemplate(HelloWorldPluginInterfaceName, p)
|
|
assert.NoError(err)
|
|
assert.NotNil(p)
|
|
|
|
actual, ok := testObject.getPlugin(HelloWorldPluginInterfaceName)
|
|
|
|
assert.True(ok)
|
|
assert.Equal(p, actual)
|
|
}
|
|
|
|
func TestPluginManager_GetPlugin_whenReadFromInitializedPluginsCache(t *testing.T) {
|
|
assert := testifyassert.New(t)
|
|
testObject := typicalPluginManager(t)
|
|
|
|
actual, ok := testObject.getPlugin(HelloWorldPluginInterfaceName)
|
|
|
|
assert.True(ok)
|
|
assert.IsType(new(basePlugin), actual)
|
|
}
|
|
|
|
func TestPluginManager_GetPluginTemplate_whenReadFromCache(t *testing.T) {
|
|
assert := testifyassert.New(t)
|
|
testObject := typicalPluginManager(t)
|
|
p := new(HelloWorldPluginTemplate)
|
|
err := testObject.GetPluginTemplate(HelloWorldPluginInterfaceName, p)
|
|
assert.NoError(err)
|
|
assert.NotNil(p)
|
|
|
|
actual := new(HelloWorldPluginTemplate)
|
|
err = testObject.GetPluginTemplate(HelloWorldPluginInterfaceName, actual)
|
|
|
|
assert.NoError(err)
|
|
assert.Equal(p, actual)
|
|
}
|
|
|
|
func TestPluginManager_GetPluginTemplate_whenPluginTemplateNotExtendBasePlugin(t *testing.T) {
|
|
assert := testifyassert.New(t)
|
|
testObject := typicalPluginManager(t)
|
|
|
|
invalid := new(invalidPluginTemplate)
|
|
err := testObject.GetPluginTemplate(HelloWorldPluginInterfaceName, invalid)
|
|
|
|
t.Log(err)
|
|
assert.Error(err)
|
|
}
|
|
|
|
func TestPluginManager_GetPluginTemplate_whenPluginTemplateNotExtendPointerBasePlugin(t *testing.T) {
|
|
assert := testifyassert.New(t)
|
|
testObject := typicalPluginManager(t)
|
|
|
|
invalid := new(invalidPluginTemplateNoPointer)
|
|
err := testObject.GetPluginTemplate(HelloWorldPluginInterfaceName, invalid)
|
|
|
|
t.Log(err)
|
|
assert.Error(err)
|
|
}
|
|
|
|
type invalidPluginTemplateNoPointer struct {
|
|
basePlugin
|
|
}
|
|
|
|
type invalidPluginTemplate struct {
|
|
someField int
|
|
}
|
|
|
|
func (i invalidPluginTemplate) Start() error {
|
|
panic("implement me")
|
|
}
|
|
|
|
func (i invalidPluginTemplate) Stop() error {
|
|
panic("implement me")
|
|
}
|
|
|
|
func (i invalidPluginTemplate) Info() (PluginInterfaceName, interface{}) {
|
|
panic("implement me")
|
|
}
|