kubekey/pkg/variable/variable_merge_test.go
zuoxuesong-worker aaae2f6634
feature: support same key in different file (#2714)
feature: support same key in different file



feature: support same key in different file



feature: support same key in different file



feature: support same key in different file

Signed-off-by: xuesongzuo@yunify.com <xuesongzuo@yunify.com>
2025-08-20 11:10:55 +08:00

177 lines
3.1 KiB
Go

package variable
import (
"testing"
"github.com/stretchr/testify/assert"
"gopkg.in/yaml.v3"
"github.com/kubesphere/kubekey/v4/pkg/converter"
"github.com/kubesphere/kubekey/v4/pkg/variable/source"
)
func TestMergeRemoteVariable(t *testing.T) {
testcases := []struct {
name string
variable *variable
hostname string
data map[string]any
except value
}{
{
name: "success",
variable: &variable{
source: source.NewMemorySource(),
value: &value{
Hosts: map[string]host{
"n1": {},
"n2": {},
},
},
},
hostname: "n1",
data: map[string]any{
"k1": "k2",
},
except: value{
Hosts: map[string]host{
"n1": {
RemoteVars: map[string]any{
"k1": "k2",
},
},
"n2": {},
},
},
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
err := tc.variable.Merge(MergeRemoteVariable(tc.data, tc.hostname))
if err != nil {
t.Fatal(err)
}
assert.Equal(t, tc.except, *tc.variable.value)
})
}
}
func TestMergeRuntimeVariable(t *testing.T) {
testcases := []struct {
name string
variable *variable
hostname string
data map[string]any
except value
}{
{
name: "success",
variable: &variable{
source: source.NewMemorySource(),
value: &value{
Hosts: map[string]host{
"n1": {},
"n2": {},
},
},
},
hostname: "n1",
data: map[string]any{
"k1": "k2",
},
except: value{
Hosts: map[string]host{
"n1": {
RuntimeVars: map[string]any{
"k1": "k2",
},
},
"n2": {},
},
},
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
node, err := converter.ConvertMap2Node(tc.data)
if err != nil {
t.Fatal(err)
}
if err := tc.variable.Merge(MergeRuntimeVariable([]yaml.Node{node}, tc.hostname)); err != nil {
t.Fatal(err)
}
assert.Equal(t, tc.except, *tc.variable.value)
})
}
}
func TestMergeResultVariable(t *testing.T) {
testcases := []struct {
name string
host string
variable *variable
data map[string]any
except value
}{
{
name: "success",
host: "n1",
variable: &variable{
source: source.NewMemorySource(),
value: &value{
Hosts: map[string]host{
"n1": {
RuntimeVars: map[string]any{
"k1": "v1",
},
},
"n2": {
RuntimeVars: map[string]any{
"k1": "v2",
},
},
},
},
},
data: map[string]any{
"v1": "v1",
"v2": "vv",
},
except: value{
Hosts: map[string]host{
"n1": {
RuntimeVars: map[string]any{
"k1": "v1",
},
},
"n2": {
RuntimeVars: map[string]any{
"k1": "v2",
},
},
},
Result: map[string]any{
resultKey: map[string]any{
"v1": "v1",
"v2": "vv",
},
},
},
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
if err := tc.variable.Merge(MergeResultVariable(tc.data)); err != nil {
t.Fatal(err)
}
assert.Equal(t, tc.except, *tc.variable.value)
})
}
}