From 899ab31fff9b34bc125faf75b79a89e390deb2cf Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Fri, 1 Sep 2017 09:00:27 -0400 Subject: Implement experimental REST API endpoints for plugins (#7279) * Implement experimental REST API endpoints for plugins * Updates per feedback and rebase * Update tests * Further updates * Update extraction of plugins * Use OS temp dir for plugins instead of search path * Fail extraction on paths that attempt to traverse upward * Update pluginenv ActivePlugins() --- model/manifest_test.go | 130 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 130 insertions(+) create mode 100644 model/manifest_test.go (limited to 'model/manifest_test.go') diff --git a/model/manifest_test.go b/model/manifest_test.go new file mode 100644 index 000000000..237640564 --- /dev/null +++ b/model/manifest_test.go @@ -0,0 +1,130 @@ +package model + +import ( + "encoding/json" + "gopkg.in/yaml.v2" + "io/ioutil" + "os" + "path/filepath" + "strings" + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestFindManifest(t *testing.T) { + for _, tc := range []struct { + Filename string + Contents string + ExpectError bool + ExpectNotExist bool + }{ + {"foo", "bar", true, true}, + {"plugin.json", "bar", true, false}, + {"plugin.json", `{"id": "foo"}`, false, false}, + {"plugin.yaml", `id: foo`, false, false}, + {"plugin.yaml", "bar", true, false}, + {"plugin.yml", `id: foo`, false, false}, + {"plugin.yml", "bar", true, false}, + } { + dir, err := ioutil.TempDir("", "mm-plugin-test") + require.NoError(t, err) + defer os.RemoveAll(dir) + + path := filepath.Join(dir, tc.Filename) + f, err := os.Create(path) + require.NoError(t, err) + _, err = f.WriteString(tc.Contents) + f.Close() + require.NoError(t, err) + + m, mpath, err := FindManifest(dir) + assert.True(t, (err != nil) == tc.ExpectError, tc.Filename) + assert.True(t, (err != nil && os.IsNotExist(err)) == tc.ExpectNotExist, tc.Filename) + if !tc.ExpectNotExist { + assert.Equal(t, path, mpath, tc.Filename) + } else { + assert.Empty(t, mpath, tc.Filename) + } + if !tc.ExpectError { + require.NotNil(t, m, tc.Filename) + assert.NotEmpty(t, m.Id, tc.Filename) + } + } +} + +func TestManifestUnmarshal(t *testing.T) { + expected := Manifest{ + Id: "theid", + Backend: &ManifestBackend{ + Executable: "theexecutable", + }, + Webapp: &ManifestWebapp{ + BundlePath: "thebundlepath", + }, + } + + var yamlResult Manifest + require.NoError(t, yaml.Unmarshal([]byte(` +id: theid +backend: + executable: theexecutable +webapp: + bundle_path: thebundlepath +`), &yamlResult)) + assert.Equal(t, expected, yamlResult) + + var jsonResult Manifest + require.NoError(t, json.Unmarshal([]byte(`{ + "id": "theid", + "backend": { + "executable": "theexecutable" + }, + "webapp": { + "bundle_path": "thebundlepath" + } + }`), &jsonResult)) + assert.Equal(t, expected, jsonResult) +} + +func TestFindManifest_FileErrors(t *testing.T) { + for _, tc := range []string{"plugin.yaml", "plugin.json"} { + dir, err := ioutil.TempDir("", "mm-plugin-test") + require.NoError(t, err) + defer os.RemoveAll(dir) + + path := filepath.Join(dir, tc) + require.NoError(t, os.Mkdir(path, 0700)) + + m, mpath, err := FindManifest(dir) + assert.Nil(t, m) + assert.Equal(t, path, mpath) + assert.Error(t, err, tc) + assert.False(t, os.IsNotExist(err), tc) + } +} + +func TestManifestJson(t *testing.T) { + manifest := &Manifest{ + Id: "theid", + Backend: &ManifestBackend{ + Executable: "theexecutable", + }, + Webapp: &ManifestWebapp{ + BundlePath: "thebundlepath", + }, + } + + json := manifest.ToJson() + newManifest := ManifestFromJson(strings.NewReader(json)) + assert.Equal(t, newManifest, manifest) + assert.Equal(t, newManifest.ToJson(), json) + assert.Equal(t, ManifestFromJson(strings.NewReader("junk")), (*Manifest)(nil)) + + manifestList := []*Manifest{manifest} + json = ManifestListToJson(manifestList) + newManifestList := ManifestListFromJson(strings.NewReader(json)) + assert.Equal(t, newManifestList, manifestList) + assert.Equal(t, ManifestListToJson(newManifestList), json) +} -- cgit v1.2.3-1-g7c22