CLI: Reduce memory usage for plugin installation (#19639)

* grafana-cli: use tmp file when downloading plugin install file
This commit is contained in:
Olivier Lemasle
2019-11-06 13:42:58 +01:00
committed by Arve Knudsen
parent 46a4118461
commit b4712ec4b9
6 changed files with 115 additions and 65 deletions

View File

@ -2,7 +2,7 @@ package commands
import (
"fmt"
"io/ioutil"
"io"
"os"
"runtime"
"testing"
@ -52,10 +52,8 @@ func TestExtractFiles(t *testing.T) {
pluginDir, del := setupFakePluginsDir(t)
defer del()
body, err := ioutil.ReadFile("testdata/grafana-simple-json-datasource-ec18fa4da8096a952608a7e4c7782b4260b41bcf.zip")
assert.Nil(t, err)
err = extractFiles(body, "grafana-simple-json-datasource", pluginDir, false)
archive := "testdata/grafana-simple-json-datasource-ec18fa4da8096a952608a7e4c7782b4260b41bcf.zip"
err := extractFiles(archive, "grafana-simple-json-datasource", pluginDir, false)
assert.Nil(t, err)
//File in zip has permissions 755
@ -83,10 +81,7 @@ func TestExtractFiles(t *testing.T) {
pluginDir, del := setupFakePluginsDir(t)
defer del()
body, err := ioutil.ReadFile("testdata/plugin-with-symlink.zip")
assert.Nil(t, err)
err = extractFiles(body, "plugin-with-symlink", pluginDir, false)
err := extractFiles("testdata/plugin-with-symlink.zip", "plugin-with-symlink", pluginDir, false)
assert.Nil(t, err)
_, err = os.Stat(pluginDir + "/plugin-with-symlink/text.txt")
@ -100,10 +95,7 @@ func TestExtractFiles(t *testing.T) {
pluginDir, del := setupFakePluginsDir(t)
defer del()
body, err := ioutil.ReadFile("testdata/plugin-with-symlink.zip")
assert.Nil(t, err)
err = extractFiles(body, "plugin-with-symlink", pluginDir, true)
err := extractFiles("testdata/plugin-with-symlink.zip", "plugin-with-symlink", pluginDir, true)
assert.Nil(t, err)
_, err = os.Stat(pluginDir + "/plugin-with-symlink/symlink_to_txt")
@ -228,13 +220,15 @@ func setupPluginInstallCmd(t *testing.T, pluginDir string) utils.CommandLine {
return plugin, nil
}
client.DownloadFileFunc = func(pluginName, filePath, url string, checksum string) (content []byte, err error) {
client.DownloadFileFunc = func(pluginName string, tmpFile *os.File, url string, checksum string) (err error) {
assert.Equal(t, "test-plugin-panel", pluginName)
assert.Equal(t, "/test-plugin-panel/versions/1.0.0/download", url)
assert.Equal(t, "test", checksum)
body, err := ioutil.ReadFile("testdata/grafana-simple-json-datasource-ec18fa4da8096a952608a7e4c7782b4260b41bcf.zip")
f, err := os.Open("testdata/grafana-simple-json-datasource-ec18fa4da8096a952608a7e4c7782b4260b41bcf.zip")
assert.Nil(t, err)
return body, nil
_, err = io.Copy(tmpFile, f)
assert.Nil(t, err)
return nil
}
cmd.Client = client