Plugins: Add preinstall_sync config - allow plugins to be preinstalled synchronously (#105292)
* feat: preinstall_sync config - process and installation logic * ref: add preinstall_sync list to preinstalled plugins of frontendsettings * fix: conf blank line for sections * ref: remove plugins async flag, and rename PreinstallPlugins * docs: default installed plugin list
This commit is contained in:
@@ -97,6 +97,56 @@ func Test_readPluginSettings(t *testing.T) {
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("when plugins.preinstall_sync is defined", func(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
rawInput string
|
||||
expected []InstallPlugin
|
||||
disablePlugins string
|
||||
disablePreinstall bool
|
||||
}{
|
||||
{
|
||||
name: "should add the plugin to the sync list - not contain default plugins like async list",
|
||||
rawInput: "plugin1",
|
||||
expected: []InstallPlugin{
|
||||
{ID: "plugin1", Version: "", URL: ""},
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "it should remove the disabled plugin",
|
||||
rawInput: "plugin1,plugin2",
|
||||
disablePlugins: "plugin1",
|
||||
expected: []InstallPlugin{{ID: "plugin2"}},
|
||||
},
|
||||
{
|
||||
name: "should not process at all when preinstall is disabled",
|
||||
rawInput: "plugin1",
|
||||
disablePreinstall: true,
|
||||
expected: nil,
|
||||
},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
cfg := NewCfg()
|
||||
sec, err := cfg.Raw.NewSection("plugins")
|
||||
require.NoError(t, err)
|
||||
_, err = sec.NewKey("preinstall_sync", tc.rawInput)
|
||||
require.NoError(t, err)
|
||||
if tc.disablePreinstall {
|
||||
_, err = sec.NewKey("preinstall_disabled", "true")
|
||||
require.NoError(t, err)
|
||||
}
|
||||
if tc.disablePlugins != "" {
|
||||
_, err = sec.NewKey("disable_plugins", tc.disablePlugins)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
err = cfg.readPluginSettings(cfg.Raw)
|
||||
require.NoError(t, err)
|
||||
assert.ElementsMatch(t, cfg.PreinstallPluginsSync, tc.expected)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("when plugins.preinstall is defined", func(t *testing.T) {
|
||||
defaultPreinstallPluginsList := make([]InstallPlugin, 0, len(defaultPreinstallPlugins))
|
||||
defaultPreinstallPluginsIDs := []string{}
|
||||
@@ -107,8 +157,10 @@ func Test_readPluginSettings(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
rawInput string
|
||||
rawInputSync string
|
||||
disablePreinstall bool
|
||||
expected []InstallPlugin
|
||||
expectedSync []InstallPlugin
|
||||
disableAsync bool
|
||||
disablePlugins string
|
||||
}{
|
||||
@@ -149,7 +201,8 @@ func Test_readPluginSettings(t *testing.T) {
|
||||
name: "should mark preinstall as sync",
|
||||
rawInput: "plugin1",
|
||||
disableAsync: true,
|
||||
expected: append(defaultPreinstallPluginsList, InstallPlugin{"plugin1", "", ""}),
|
||||
expected: nil,
|
||||
expectedSync: append(defaultPreinstallPluginsList, InstallPlugin{"plugin1", "", ""}),
|
||||
},
|
||||
{
|
||||
name: "should parse a plugin with version and URL",
|
||||
@@ -161,6 +214,29 @@ func Test_readPluginSettings(t *testing.T) {
|
||||
rawInput: "plugin1@@https://example.com/plugin1.tar.gz",
|
||||
expected: append(defaultPreinstallPluginsList, InstallPlugin{"plugin1", "", "https://example.com/plugin1.tar.gz"}),
|
||||
},
|
||||
{
|
||||
name: "when preinstall_async is false, should add all plugins to preinstall_sync",
|
||||
rawInput: "plugin1",
|
||||
rawInputSync: "plugin2",
|
||||
disableAsync: true,
|
||||
expected: nil,
|
||||
expectedSync: append(defaultPreinstallPluginsList, InstallPlugin{"plugin1", "", ""}, InstallPlugin{"plugin2", "", ""}),
|
||||
},
|
||||
{
|
||||
name: "should overwrite default when user pins a version",
|
||||
rawInput: "grafana-pyroscope-app@4.0.0",
|
||||
expected: func() []InstallPlugin {
|
||||
var plugins []InstallPlugin
|
||||
for _, p := range defaultPreinstallPlugins {
|
||||
if p.ID == "grafana-pyroscope-app" {
|
||||
plugins = append(plugins, InstallPlugin{"grafana-pyroscope-app", "4.0.0", ""})
|
||||
} else {
|
||||
plugins = append(plugins, p)
|
||||
}
|
||||
}
|
||||
return plugins
|
||||
}(),
|
||||
},
|
||||
}
|
||||
for _, tc := range tests {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
@@ -169,6 +245,10 @@ func Test_readPluginSettings(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
_, err = sec.NewKey("preinstall", tc.rawInput)
|
||||
require.NoError(t, err)
|
||||
if tc.rawInputSync != "" {
|
||||
_, err = sec.NewKey("preinstall_sync", tc.rawInputSync)
|
||||
require.NoError(t, err)
|
||||
}
|
||||
if tc.disablePreinstall {
|
||||
_, err = sec.NewKey("preinstall_disabled", "true")
|
||||
require.NoError(t, err)
|
||||
@@ -184,9 +264,9 @@ func Test_readPluginSettings(t *testing.T) {
|
||||
|
||||
err = cfg.readPluginSettings(cfg.Raw)
|
||||
require.NoError(t, err)
|
||||
assert.ElementsMatch(t, cfg.PreinstallPlugins, tc.expected)
|
||||
if tc.disableAsync {
|
||||
require.Equal(t, cfg.PreinstallPluginsAsync, false)
|
||||
assert.ElementsMatch(t, cfg.PreinstallPluginsAsync, tc.expected)
|
||||
if tc.expectedSync != nil {
|
||||
assert.ElementsMatch(t, cfg.PreinstallPluginsSync, tc.expectedSync)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user