| // 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 fe | |
| import ( | |
| "testing" | |
| dorisv1 "github.com/apache/doris-operator/api/doris/v1" | |
| "github.com/apache/doris-operator/pkg/common/utils/resource" | |
| appv1 "k8s.io/api/apps/v1" | |
| ) | |
| func Test_safeScaleDown(t *testing.T) { | |
| fc, _ := newFeController(t) | |
| dcrs := []*dorisv1.DorisCluster{ | |
| { | |
| Spec: dorisv1.DorisClusterSpec{ | |
| FeSpec: &dorisv1.FeSpec{ | |
| BaseSpec: dorisv1.BaseSpec{ | |
| Replicas: resource.GetInt32Pointer(3), | |
| }, | |
| }, | |
| }, | |
| }, | |
| { | |
| Spec: dorisv1.DorisClusterSpec{ | |
| FeSpec: &dorisv1.FeSpec{ | |
| BaseSpec: dorisv1.BaseSpec{ | |
| Replicas: resource.GetInt32Pointer(2), | |
| }, | |
| }, | |
| }, | |
| }, | |
| { | |
| Spec: dorisv1.DorisClusterSpec{ | |
| FeSpec: &dorisv1.FeSpec{ | |
| BaseSpec: dorisv1.BaseSpec{ | |
| Replicas: resource.GetInt32Pointer(4), | |
| }, | |
| }, | |
| }, | |
| }, | |
| { | |
| Spec: dorisv1.DorisClusterSpec{ | |
| FeSpec: &dorisv1.FeSpec{ | |
| BaseSpec: dorisv1.BaseSpec{ | |
| Replicas: resource.GetInt32Pointer(1), | |
| }, | |
| }, | |
| }, | |
| }, | |
| } | |
| osts := []*appv1.StatefulSet{ | |
| { | |
| Spec: appv1.StatefulSetSpec{ | |
| Replicas: resource.GetInt32Pointer(3), | |
| }, | |
| }, | |
| { | |
| Spec: appv1.StatefulSetSpec{ | |
| Replicas: resource.GetInt32Pointer(3), | |
| }, | |
| }, | |
| { | |
| Spec: appv1.StatefulSetSpec{ | |
| Replicas: resource.GetInt32Pointer(5), | |
| }, | |
| }, | |
| { | |
| Spec: appv1.StatefulSetSpec{ | |
| Replicas: resource.GetInt32Pointer(2), | |
| }, | |
| }, | |
| } | |
| res := []int32{3, 3, 4, 2} | |
| for i := 0; i < len(dcrs); i++ { | |
| fc.safeScaleDown(dcrs[i], osts[i]) | |
| if *dcrs[i].Spec.FeSpec.Replicas != res[i] { | |
| t.Errorf("Test_safeScaleDown failed, cluster fe replicas %d, expect result %d", *dcrs[i].Spec.FeSpec.Replicas, res[i]) | |
| } | |
| } | |
| } |