mirror of
https://github.com/kubevela/kubevela.git
synced 2026-05-21 00:33:29 +00:00
126 lines
3.0 KiB
Go
126 lines
3.0 KiB
Go
package plugins
|
|
|
|
import (
|
|
"os"
|
|
"testing"
|
|
|
|
"github.com/cloud-native-application/rudrx/api/types"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestLocalSink(t *testing.T) {
|
|
deployment := types.Template{
|
|
Name: "deployment",
|
|
Type: types.TypeWorkload,
|
|
Alias: "deployment",
|
|
Object: map[string]interface{}{
|
|
"apiVersion": "apps/v1",
|
|
"kind": "Deployment",
|
|
},
|
|
Parameters: []types.Parameter{
|
|
{
|
|
Name: "image",
|
|
Short: "i",
|
|
Required: true,
|
|
FieldPaths: []string{"spec.containers[0].image"},
|
|
},
|
|
},
|
|
}
|
|
statefulset := types.Template{
|
|
Name: "statefulset",
|
|
Type: types.TypeWorkload,
|
|
Alias: "stateful",
|
|
Object: map[string]interface{}{
|
|
"apiVersion": "apps/v1",
|
|
"kind": "Statefulset",
|
|
},
|
|
Parameters: []types.Parameter{
|
|
{
|
|
Name: "image",
|
|
Short: "i",
|
|
Required: true,
|
|
FieldPaths: []string{"spec.containers[0].image"},
|
|
},
|
|
},
|
|
}
|
|
route := types.Template{
|
|
Name: "route",
|
|
Type: types.TypeTrait,
|
|
Alias: "route",
|
|
Object: map[string]interface{}{
|
|
"apiVersion": "apps/v1",
|
|
"kind": "Route",
|
|
},
|
|
Parameters: []types.Parameter{
|
|
{
|
|
Name: "domain",
|
|
Short: "d",
|
|
Required: true,
|
|
FieldPaths: []string{"spec.domain"},
|
|
},
|
|
},
|
|
}
|
|
|
|
cases := map[string]struct {
|
|
dir string
|
|
tmps []types.Template
|
|
Type types.DefinitionType
|
|
expDef []types.Template
|
|
}{
|
|
"Test No Templates": {
|
|
dir: "rudrx-test1",
|
|
tmps: nil,
|
|
},
|
|
"Test Only Workload": {
|
|
dir: "rudrx-test2",
|
|
tmps: []types.Template{deployment, statefulset},
|
|
Type: types.TypeWorkload,
|
|
expDef: []types.Template{deployment, statefulset},
|
|
},
|
|
"Test Only Trait": {
|
|
dir: "rudrx-test3",
|
|
tmps: []types.Template{route},
|
|
Type: types.TypeTrait,
|
|
expDef: []types.Template{route},
|
|
},
|
|
"Test Only Workload But want trait": {
|
|
dir: "rudrx-test3",
|
|
tmps: []types.Template{deployment, statefulset},
|
|
Type: types.TypeTrait,
|
|
expDef: nil,
|
|
},
|
|
"Test Both have Workload and trait But want Workload": {
|
|
dir: "rudrx-test4",
|
|
tmps: []types.Template{deployment, route, statefulset},
|
|
Type: types.TypeWorkload,
|
|
expDef: []types.Template{deployment, statefulset},
|
|
},
|
|
"Test Both have Workload and trait But want Trait": {
|
|
dir: "rudrx-test5",
|
|
tmps: []types.Template{deployment, route, statefulset},
|
|
Type: types.TypeTrait,
|
|
expDef: []types.Template{route},
|
|
},
|
|
}
|
|
for name, c := range cases {
|
|
testInDir(t, name, c.dir, c.tmps, c.expDef, c.Type)
|
|
}
|
|
}
|
|
|
|
func testInDir(t *testing.T, casename, dir string, tmps, defexp []types.Template, Type types.DefinitionType) {
|
|
err := os.MkdirAll(dir, 0755)
|
|
assert.NoError(t, err, casename)
|
|
defer os.RemoveAll(dir)
|
|
err = SinkTemp2Local(tmps, dir)
|
|
assert.NoError(t, err, casename)
|
|
gottmps, err := LoadTempFromLocal(dir)
|
|
assert.NoError(t, err, casename)
|
|
assert.Equal(t, tmps, gottmps, casename)
|
|
if Type != "" {
|
|
gotDef, err := GetDefFromLocal(dir, Type)
|
|
assert.NoError(t, err, casename)
|
|
assert.Equal(t, defexp, gotDef, casename)
|
|
}
|
|
}
|