diff options
author | Chris <ccbrown112@gmail.com> | 2017-08-16 17:23:38 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-08-16 17:23:38 -0500 |
commit | f80d50adbddf55a043dfcab5b47d7c1e22749b7d (patch) | |
tree | 5deb606debb6322716c9cdcc6c58be4f68b74223 /plugin/manifest_test.go | |
parent | 4f85ed985d478ddf6692fa4f7d8d98d2a412d18c (diff) | |
download | chat-f80d50adbddf55a043dfcab5b47d7c1e22749b7d.tar.gz chat-f80d50adbddf55a043dfcab5b47d7c1e22749b7d.tar.bz2 chat-f80d50adbddf55a043dfcab5b47d7c1e22749b7d.zip |
PLT-7407: Back-end plugin mechanism (#7177)
* begin backend plugin wip
* flesh out rpcplugin. everything done except for minor supervisor stubs
* done with basic plugin infrastructure
* simplify tests
* remove unused test lines
Diffstat (limited to 'plugin/manifest_test.go')
-rw-r--r-- | plugin/manifest_test.go | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/plugin/manifest_test.go b/plugin/manifest_test.go new file mode 100644 index 000000000..5dae4fbaa --- /dev/null +++ b/plugin/manifest_test.go @@ -0,0 +1,97 @@ +package plugin + +import ( + "encoding/json" + "gopkg.in/yaml.v2" + "io/ioutil" + "os" + "path/filepath" + "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", + }, + } + + var yamlResult Manifest + require.NoError(t, yaml.Unmarshal([]byte(` +id: theid +backend: + executable: theexecutable +`), &yamlResult)) + assert.Equal(t, expected, yamlResult) + + var jsonResult Manifest + require.NoError(t, json.Unmarshal([]byte(`{ + "id": "theid", + "backend": { + "executable": "theexecutable" + } + }`), &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) + } +} |