kubekey/pkg/executor/task_executor_test.go
liujian 2b8ea3eb46
feat: test variable store in memory (#2666)
Signed-off-by: joyceliu <joyceliu@yunify.com>
2025-07-23 11:25:08 +08:00

99 lines
2.3 KiB
Go

package executor
import (
"context"
"testing"
"time"
corev1 "k8s.io/api/core/v1"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/runtime"
kkcorev1alpha1 "github.com/kubesphere/kubekey/api/core/v1alpha1"
)
func TestTaskExecutor(t *testing.T) {
testcases := []struct {
name string
hosts []string
task *kkcorev1alpha1.Task
}{
{
name: "debug module in single host",
task: &kkcorev1alpha1.Task{
TypeMeta: metav1.TypeMeta{},
ObjectMeta: metav1.ObjectMeta{
Name: "test1",
Namespace: corev1.NamespaceDefault,
},
Spec: kkcorev1alpha1.TaskSpec{
Hosts: []string{"node1"},
Module: kkcorev1alpha1.Module{
Name: "debug",
Args: runtime.RawExtension{Raw: []byte(`{"msg":"hello"}`)},
},
},
Status: kkcorev1alpha1.TaskStatus{},
},
},
{
name: "debug module in single host with loop",
hosts: []string{"node1"},
task: &kkcorev1alpha1.Task{
TypeMeta: metav1.TypeMeta{},
ObjectMeta: metav1.ObjectMeta{
Name: "test2",
Namespace: corev1.NamespaceDefault,
},
Spec: kkcorev1alpha1.TaskSpec{
Hosts: []string{"node1"},
Module: kkcorev1alpha1.Module{
Name: "debug",
Args: runtime.RawExtension{Raw: []byte(`{"msg":"hello"}`)},
},
Loop: runtime.RawExtension{
Raw: []byte(string(`["a", "b"]`)),
},
},
Status: kkcorev1alpha1.TaskStatus{},
},
},
{
name: "debug module in multiple hosts",
task: &kkcorev1alpha1.Task{
TypeMeta: metav1.TypeMeta{},
ObjectMeta: metav1.ObjectMeta{
Name: "test3",
Namespace: corev1.NamespaceDefault,
},
Spec: kkcorev1alpha1.TaskSpec{
Hosts: []string{"node1", "n2"},
Module: kkcorev1alpha1.Module{
Name: "debug",
Args: runtime.RawExtension{Raw: []byte(`{"msg":"hello"}`)},
},
},
Status: kkcorev1alpha1.TaskStatus{},
},
},
}
for _, tc := range testcases {
t.Run(tc.name, func(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
defer cancel()
o, err := newTestOption(tc.hosts)
if err != nil {
t.Fatal(err)
}
if err := (&taskExecutor{
option: o,
task: tc.task,
taskRunTimeout: 10 * time.Second,
}).Exec(ctx); err != nil {
t.Fatal(err)
}
})
}
}