Allow testing plugins to have parent plugins

This commit is contained in:
sophia 2022-05-02 16:42:40 -05:00
parent d135f24f49
commit 692dcb1b92
3 changed files with 32 additions and 14 deletions

View File

@ -10,22 +10,22 @@ import (
func TestBasisPlugins(t *testing.T) {
myguest := plugin.TestPlugin(t,
BuildTestGuestPlugin("myguest"),
BuildTestGuestPlugin("myguest", ""),
plugin.WithPluginName("myguest"),
plugin.WithPluginTypes(component.GuestType),
)
myguesttwo := plugin.TestPlugin(t,
BuildTestGuestPlugin("myguesttwo"),
BuildTestGuestPlugin("myguesttwo", ""),
plugin.WithPluginName("myguesttwo"),
plugin.WithPluginTypes(component.GuestType),
)
myhost := plugin.TestPlugin(t,
BuildTestHostPlugin("myhost"),
BuildTestHostPlugin("myhost", ""),
plugin.WithPluginName("myhost"),
plugin.WithPluginTypes(component.HostType),
)
mysf := plugin.TestPlugin(t,
BuildTestSyncedFolderPlugin(),
BuildTestSyncedFolderPlugin(""),
plugin.WithPluginName("mysf"),
plugin.WithPluginTypes(component.SyncedFolderType),
)

View File

@ -130,7 +130,7 @@ func TestMachineConfigedGuest(t *testing.T) {
pluginManager := plugin.TestManager(t,
plugin.TestPlugin(t,
BuildTestGuestPlugin("myguest"),
BuildTestGuestPlugin("myguest", ""),
plugin.WithPluginName("myguest"),
plugin.WithPluginTypes(component.GuestType),
),
@ -157,15 +157,16 @@ func TestMachineConfigedGuest(t *testing.T) {
}
func TestMachineNoConfigGuest(t *testing.T) {
guestMock := BuildTestGuestPlugin("myguest")
guestMock := BuildTestGuestPlugin("myguest", "")
guestMock.On("Detect", mock.AnythingOfType("*core.Machine")).Return(true, nil)
guestMock.On("Parent").Return("", nil)
detectingPlugin := plugin.TestPlugin(t,
guestMock,
plugin.WithPluginName("myguest"),
plugin.WithPluginTypes(component.GuestType),
)
notGuestMock := BuildTestGuestPlugin("mynondetectingguest")
notGuestMock := BuildTestGuestPlugin("mynondetectingguest", "")
notGuestMock.On("Detect", mock.AnythingOfType("*core.Machine")).Return(false, nil)
nonDetectingPlugin := plugin.TestPlugin(t,
notGuestMock,
@ -173,9 +174,9 @@ func TestMachineNoConfigGuest(t *testing.T) {
plugin.WithPluginTypes(component.GuestType),
)
guestChildMock := BuildTestGuestPlugin("myguest-child")
guestChildMock := BuildTestGuestPlugin("myguest-child", "myguest")
guestChildMock.On("Detect", mock.AnythingOfType("*core.Machine")).Return(true, nil)
guestChildMock.On("Parent").Return("myguest", nil)
guestChildMock.SetParentComponent(guestMock)
detectingChildPlugin := plugin.TestPlugin(t,
guestChildMock,
plugin.WithPluginName("myguest-child"),
@ -190,7 +191,7 @@ func TestMachineNoConfigGuest(t *testing.T) {
tests := []test{
{plugins: []*plugin.Plugin{detectingPlugin}, errors: false, expectedPluginName: "myguest"},
{plugins: []*plugin.Plugin{detectingChildPlugin}, errors: false, expectedPluginName: "myguest-child"},
{plugins: []*plugin.Plugin{detectingChildPlugin}, errors: true, expectedPluginName: "myguest-child"},
{plugins: []*plugin.Plugin{detectingChildPlugin, detectingPlugin}, errors: false, expectedPluginName: "myguest-child"},
{plugins: []*plugin.Plugin{detectingPlugin, nonDetectingPlugin}, errors: false, expectedPluginName: "myguest"},
{plugins: []*plugin.Plugin{nonDetectingPlugin}, errors: true},
@ -258,7 +259,7 @@ func TestMachineSetState(t *testing.T) {
func syncedFolderPlugin(t *testing.T, name string) *plugin.Plugin {
return plugin.TestPlugin(t,
BuildTestSyncedFolderPlugin(),
BuildTestSyncedFolderPlugin(""),
plugin.WithPluginName(name),
plugin.WithPluginTypes(component.SyncedFolderType),
)

View File

@ -16,44 +16,61 @@ import (
"github.com/stretchr/testify/require"
)
type PluginWithParent struct {
parentPlugin interface{}
}
func (p *PluginWithParent) GetParentComponent() interface{} {
return p.parentPlugin
}
func (p *PluginWithParent) SetParentComponent(in interface{}) {
p.parentPlugin = in
}
type TestGuestPlugin struct {
PluginWithParent
plugin.TestPluginWithFakeBroker
coremocks.Guest
}
type TestHostPlugin struct {
PluginWithParent
plugin.TestPluginWithFakeBroker
coremocks.Host
}
type TestSyncedFolderPlugin struct {
PluginWithParent
plugin.TestPluginWithFakeBroker
coremocks.SyncedFolder
}
func BuildTestGuestPlugin(name string) *TestGuestPlugin {
func BuildTestGuestPlugin(name string, parent string) *TestGuestPlugin {
p := &TestGuestPlugin{}
p.On("SetPluginName", mock.AnythingOfType("string")).Return(nil)
p.On("Seed", mock.AnythingOfType("*core.Seeds")).Return(nil)
p.On("Seeds").Return(core.NewSeeds(), nil)
p.On("PluginName").Return(name, nil)
p.On("Parent").Return(parent, nil)
return p
}
func BuildTestHostPlugin(name string) *TestHostPlugin {
func BuildTestHostPlugin(name string, parent string) *TestHostPlugin {
p := &TestHostPlugin{}
p.On("SetPluginName", mock.AnythingOfType("string")).Return(nil)
p.On("Seed", mock.AnythingOfType("*core.Seeds")).Return(nil)
p.On("Seeds").Return(core.NewSeeds(), nil)
p.On("PluginName").Return(name, nil)
p.On("Parent").Return(parent, nil)
return p
}
func BuildTestSyncedFolderPlugin() *TestSyncedFolderPlugin {
func BuildTestSyncedFolderPlugin(parent string) *TestSyncedFolderPlugin {
p := &TestSyncedFolderPlugin{}
p.On("SetPluginName", mock.AnythingOfType("string")).Return(nil)
p.On("Seed", mock.AnythingOfType("*core.Seeds")).Return(nil)
p.On("Seeds").Return(core.NewSeeds(), nil)
p.On("Parent").Return(parent, nil)
return p
}