101 lines
2.0 KiB
Go
101 lines
2.0 KiB
Go
package dao
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"io/ioutil"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
|
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
|
)
|
|
|
|
func TestExtractMeta(t *testing.T) {
|
|
c := load(t, "dr")
|
|
m, ee := extractMeta(c)
|
|
|
|
assert.Equal(t, 0, len(ee))
|
|
assert.Equal(t, "destinationrules", m.Name)
|
|
assert.Equal(t, "destinationrule", m.SingularName)
|
|
assert.Equal(t, "DestinationRule", m.Kind)
|
|
assert.Equal(t, "networking.istio.io", m.Group)
|
|
assert.Equal(t, "v1alpha3", m.Version)
|
|
assert.Equal(t, true, m.Namespaced)
|
|
assert.Equal(t, []string{"dr"}, m.ShortNames)
|
|
var vv metav1.Verbs
|
|
assert.Equal(t, vv, m.Verbs)
|
|
}
|
|
|
|
func TestExtractSlice(t *testing.T) {
|
|
uu := map[string]struct {
|
|
m map[string]interface{}
|
|
n string
|
|
nn []string
|
|
ee []error
|
|
}{
|
|
"plain": {
|
|
m: map[string]interface{}{"shortNames": []string{"a", "b", "c"}},
|
|
n: "shortNames",
|
|
nn: []string{"a", "b", "c"},
|
|
},
|
|
"empty": {
|
|
m: map[string]interface{}{},
|
|
n: "shortNames",
|
|
},
|
|
}
|
|
|
|
var ee []error
|
|
for k := range uu {
|
|
u := uu[k]
|
|
t.Run(k, func(t *testing.T) {
|
|
ss, e := extractSlice(u.m, u.n, ee)
|
|
assert.Equal(t, u.ee, e)
|
|
assert.Equal(t, u.nn, ss)
|
|
})
|
|
}
|
|
}
|
|
|
|
func TestExtractString(t *testing.T) {
|
|
uu := map[string]struct {
|
|
m map[string]interface{}
|
|
n string
|
|
s string
|
|
ee []error
|
|
}{
|
|
"plain": {
|
|
m: map[string]interface{}{"blee": "fred"},
|
|
n: "blee",
|
|
s: "fred",
|
|
},
|
|
"missing": {
|
|
m: map[string]interface{}{},
|
|
n: "blee",
|
|
ee: []error{fmt.Errorf("failed to extract string blee")},
|
|
},
|
|
}
|
|
|
|
var ee []error
|
|
for k := range uu {
|
|
u := uu[k]
|
|
t.Run(k, func(t *testing.T) {
|
|
as, ae := extractStr(u.m, u.n, ee)
|
|
assert.Equal(t, u.ee, ae)
|
|
assert.Equal(t, u.s, as)
|
|
})
|
|
}
|
|
}
|
|
|
|
// Helpers...
|
|
|
|
func load(t *testing.T, n string) *unstructured.Unstructured {
|
|
raw, err := ioutil.ReadFile(fmt.Sprintf("assets/%s.json", n))
|
|
assert.Nil(t, err)
|
|
|
|
var o unstructured.Unstructured
|
|
err = json.Unmarshal(raw, &o)
|
|
assert.Nil(t, err)
|
|
|
|
return &o
|
|
}
|