|
|
|
@ -16,14 +16,16 @@ import ( |
|
|
|
|
// Test if the service is disabled
|
|
|
|
|
func TestService_IsDisabled(t *testing.T) { |
|
|
|
|
// Create a new service
|
|
|
|
|
s := ProvideService( |
|
|
|
|
s, err := ProvideService( |
|
|
|
|
&setting.Cfg{ |
|
|
|
|
InstallPlugins: []setting.InstallPlugin{{ID: "myplugin"}}, |
|
|
|
|
PreinstallPlugins: []setting.InstallPlugin{{ID: "myplugin"}}, |
|
|
|
|
PreinstallPluginsAsync: true, |
|
|
|
|
}, |
|
|
|
|
featuremgmt.WithFeatures(featuremgmt.FlagBackgroundPluginInstaller), |
|
|
|
|
pluginstore.New(registry.NewInMemory(), &fakes.FakeLoader{}), |
|
|
|
|
&fakes.FakePluginInstaller{}, |
|
|
|
|
) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
// Check if the service is disabled
|
|
|
|
|
if s.IsDisabled() { |
|
|
|
@ -34,9 +36,9 @@ func TestService_IsDisabled(t *testing.T) { |
|
|
|
|
func TestService_Run(t *testing.T) { |
|
|
|
|
t.Run("Installs a plugin", func(t *testing.T) { |
|
|
|
|
installed := false |
|
|
|
|
s := ProvideService( |
|
|
|
|
s, err := ProvideService( |
|
|
|
|
&setting.Cfg{ |
|
|
|
|
InstallPlugins: []setting.InstallPlugin{{ID: "myplugin"}}, |
|
|
|
|
PreinstallPlugins: []setting.InstallPlugin{{ID: "myplugin"}}, |
|
|
|
|
}, |
|
|
|
|
featuremgmt.WithFeatures(), |
|
|
|
|
pluginstore.New(registry.NewInMemory(), &fakes.FakeLoader{}), |
|
|
|
@ -47,17 +49,19 @@ func TestService_Run(t *testing.T) { |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
err := s.Run(context.Background()) |
|
|
|
|
err = s.Run(context.Background()) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.True(t, installed) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
t.Run("Install a plugin with version", func(t *testing.T) { |
|
|
|
|
installed := false |
|
|
|
|
s := ProvideService( |
|
|
|
|
s, err := ProvideService( |
|
|
|
|
&setting.Cfg{ |
|
|
|
|
InstallPlugins: []setting.InstallPlugin{{ID: "myplugin", Version: "1.0.0"}}, |
|
|
|
|
PreinstallPlugins: []setting.InstallPlugin{{ID: "myplugin", Version: "1.0.0"}}, |
|
|
|
|
PreinstallPluginsAsync: true, |
|
|
|
|
}, |
|
|
|
|
featuremgmt.WithFeatures(), |
|
|
|
|
pluginstore.New(registry.NewInMemory(), &fakes.FakeLoader{}), |
|
|
|
@ -70,8 +74,9 @@ func TestService_Run(t *testing.T) { |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
err := s.Run(context.Background()) |
|
|
|
|
err = s.Run(context.Background()) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.True(t, installed) |
|
|
|
|
}) |
|
|
|
@ -84,9 +89,10 @@ func TestService_Run(t *testing.T) { |
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
s := ProvideService( |
|
|
|
|
s, err := ProvideService( |
|
|
|
|
&setting.Cfg{ |
|
|
|
|
InstallPlugins: []setting.InstallPlugin{{ID: "myplugin"}}, |
|
|
|
|
PreinstallPlugins: []setting.InstallPlugin{{ID: "myplugin"}}, |
|
|
|
|
PreinstallPluginsAsync: true, |
|
|
|
|
}, |
|
|
|
|
featuremgmt.WithFeatures(), |
|
|
|
|
pluginstore.New(preg, &fakes.FakeLoader{}), |
|
|
|
@ -97,6 +103,7 @@ func TestService_Run(t *testing.T) { |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
err = s.Run(context.Background()) |
|
|
|
|
require.NoError(t, err) |
|
|
|
@ -114,9 +121,10 @@ func TestService_Run(t *testing.T) { |
|
|
|
|
}, |
|
|
|
|
}) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
s := ProvideService( |
|
|
|
|
s, err := ProvideService( |
|
|
|
|
&setting.Cfg{ |
|
|
|
|
InstallPlugins: []setting.InstallPlugin{{ID: "myplugin", Version: "2.0.0"}}, |
|
|
|
|
PreinstallPlugins: []setting.InstallPlugin{{ID: "myplugin", Version: "2.0.0"}}, |
|
|
|
|
PreinstallPluginsAsync: true, |
|
|
|
|
}, |
|
|
|
|
featuremgmt.WithFeatures(), |
|
|
|
|
pluginstore.New(preg, &fakes.FakeLoader{}), |
|
|
|
@ -127,6 +135,7 @@ func TestService_Run(t *testing.T) { |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
err = s.Run(context.Background()) |
|
|
|
|
require.NoError(t, err) |
|
|
|
@ -135,9 +144,10 @@ func TestService_Run(t *testing.T) { |
|
|
|
|
|
|
|
|
|
t.Run("Install multiple plugins", func(t *testing.T) { |
|
|
|
|
installed := 0 |
|
|
|
|
s := ProvideService( |
|
|
|
|
s, err := ProvideService( |
|
|
|
|
&setting.Cfg{ |
|
|
|
|
InstallPlugins: []setting.InstallPlugin{{ID: "myplugin1"}, {ID: "myplugin2"}}, |
|
|
|
|
PreinstallPlugins: []setting.InstallPlugin{{ID: "myplugin1"}, {ID: "myplugin2"}}, |
|
|
|
|
PreinstallPluginsAsync: true, |
|
|
|
|
}, |
|
|
|
|
featuremgmt.WithFeatures(), |
|
|
|
|
pluginstore.New(registry.NewInMemory(), &fakes.FakeLoader{}), |
|
|
|
@ -148,17 +158,19 @@ func TestService_Run(t *testing.T) { |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
|
|
|
|
|
err := s.Run(context.Background()) |
|
|
|
|
err = s.Run(context.Background()) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.Equal(t, 2, installed) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
t.Run("Fails to install a plugin but install the rest", func(t *testing.T) { |
|
|
|
|
installed := 0 |
|
|
|
|
s := ProvideService( |
|
|
|
|
s, err := ProvideService( |
|
|
|
|
&setting.Cfg{ |
|
|
|
|
InstallPlugins: []setting.InstallPlugin{{ID: "myplugin1"}, {ID: "myplugin2"}}, |
|
|
|
|
PreinstallPlugins: []setting.InstallPlugin{{ID: "myplugin1"}, {ID: "myplugin2"}}, |
|
|
|
|
PreinstallPluginsAsync: true, |
|
|
|
|
}, |
|
|
|
|
featuremgmt.WithFeatures(), |
|
|
|
|
pluginstore.New(registry.NewInMemory(), &fakes.FakeLoader{}), |
|
|
|
@ -172,8 +184,46 @@ func TestService_Run(t *testing.T) { |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
err := s.Run(context.Background()) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
err = s.Run(context.Background()) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.Equal(t, 1, installed) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
t.Run("Install a blocking plugin", func(t *testing.T) { |
|
|
|
|
installed := false |
|
|
|
|
_, err := ProvideService( |
|
|
|
|
&setting.Cfg{ |
|
|
|
|
PreinstallPlugins: []setting.InstallPlugin{{ID: "myplugin"}}, |
|
|
|
|
PreinstallPluginsAsync: false, |
|
|
|
|
}, |
|
|
|
|
featuremgmt.WithFeatures(), |
|
|
|
|
pluginstore.New(registry.NewInMemory(), &fakes.FakeLoader{}), |
|
|
|
|
&fakes.FakePluginInstaller{ |
|
|
|
|
AddFunc: func(ctx context.Context, pluginID string, version string, opts plugins.CompatOpts) error { |
|
|
|
|
installed = true |
|
|
|
|
return nil |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
require.NoError(t, err) |
|
|
|
|
require.True(t, installed) |
|
|
|
|
}) |
|
|
|
|
|
|
|
|
|
t.Run("Fails to install a blocking plugin", func(t *testing.T) { |
|
|
|
|
_, err := ProvideService( |
|
|
|
|
&setting.Cfg{ |
|
|
|
|
PreinstallPlugins: []setting.InstallPlugin{{ID: "myplugin"}}, |
|
|
|
|
PreinstallPluginsAsync: false, |
|
|
|
|
}, |
|
|
|
|
featuremgmt.WithFeatures(), |
|
|
|
|
pluginstore.New(registry.NewInMemory(), &fakes.FakeLoader{}), |
|
|
|
|
&fakes.FakePluginInstaller{ |
|
|
|
|
AddFunc: func(ctx context.Context, pluginID string, version string, opts plugins.CompatOpts) error { |
|
|
|
|
return plugins.NotFoundError{} |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
) |
|
|
|
|
require.ErrorAs(t, err, &plugins.NotFoundError{}) |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|