Add support for synchronous plugin installation (#92129)
This commit is contained in:
@@ -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{})
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user