// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements.  See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership.  The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License.  You may obtain a copy of the License at
//
//	http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied.  See the License for the
// specific language governing permissions and limitations
// under the License.
package resource

import (
	v1 "github.com/apache/doris-operator/api/doris/v1"
	appv1 "k8s.io/api/apps/v1"
	corev1 "k8s.io/api/core/v1"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"testing"
)

func Test_NewStatefulset(t *testing.T) {
	cts := []v1.ComponentType{v1.Component_FE, v1.Component_BE, v1.Component_CN, v1.Component_Broker}
	for _, ct := range cts {
		st := NewStatefulSet(dcr, map[string]interface{}{}, ct)
		t.Log(st)
	}
}

func Test_StatefulsetSetDeepEqual(t *testing.T) {
	nst := &appv1.StatefulSet{
		ObjectMeta: metav1.ObjectMeta{
			Name:      "test",
			Namespace: "default",
			Labels: map[string]string{
				"name":      "test",
				"namespace": "default",
			},
		},
		Spec: appv1.StatefulSetSpec{
			Replicas: GetInt32Pointer(1),
			Template: corev1.PodTemplateSpec{
				ObjectMeta: metav1.ObjectMeta{
					Name: "fe",
				},
				Spec: corev1.PodSpec{
					Containers: []corev1.Container{
						{
							Image: "selectdb/doris.fe-ubuntu:latest",
							Env:   buildEnvFromPod(),
							Name:  "fe",
						},
					},
				},
			},
		},
	}

	ost := nst.DeepCopy()
	envNotEqualNst := nst.DeepCopy()
	envNotEqualOst := nst.DeepCopy()
	envNotEqualOst.Spec.Template.Spec.Containers[0].Env = append(envNotEqualOst.Spec.Template.Spec.Containers[0].Env, corev1.EnvVar{
		Name:  config_env_name,
		Value: config_env_path,
	})

	annoExistEqualNst := nst.DeepCopy()
	annoExistEqualNst.Annotations = map[string]string{
		v1.ComponentResourceHash: "123456",
	}
	annoExistEqualOst := nst.DeepCopy()
	annoExistEqualOst.Annotations = map[string]string{
		v1.ComponentResourceHash: "123456",
	}

	nsts := []*appv1.StatefulSet{nst, envNotEqualNst, annoExistEqualNst}
	osts := []*appv1.StatefulSet{ost, envNotEqualOst, annoExistEqualOst}
	ress := []bool{true, false, true}
	for i := 0; i < len(nsts); i++ {
		res := StatefulSetDeepEqual(nsts[i], osts[i], false)
		if res != ress[i] {
			t.Errorf("statefulsetDeepEqual failed in index %d", i)
		}
	}
}
