1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
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)
}
}
|