This is an automated email from the ASF dual-hosted git repository.

sunnianjun pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/shardingsphere-on-cloud.git


The following commit(s) were added to refs/heads/main by this push:
     new 519e61e  chore(reconcile): add unit test for 
ConstructCascadingDeployment (#70)
519e61e is described below

commit 519e61e7a05cf63f35f63c43ebce4314979b2ea8
Author: liyao <[email protected]>
AuthorDate: Fri Oct 7 23:21:29 2022 +0800

    chore(reconcile): add unit test for ConstructCascadingDeployment (#70)
    
    * fix(reconcile): add nil spec attributions handle
    
    Signed-off-by: mlycore <[email protected]>
    
    * chore(test): add unit test for ConstructCascadingDeployment
    
    Signed-off-by: mlycore <[email protected]>
---
 .../pkg/reconcile/reconcile_test.go                | 230 +++++++++++++++++++++
 shardingsphere-operator/pkg/reconcile/resource.go  |  21 +-
 2 files changed, 247 insertions(+), 4 deletions(-)

diff --git a/shardingsphere-operator/pkg/reconcile/reconcile_test.go 
b/shardingsphere-operator/pkg/reconcile/reconcile_test.go
index 55b5e35..2c97d31 100644
--- a/shardingsphere-operator/pkg/reconcile/reconcile_test.go
+++ b/shardingsphere-operator/pkg/reconcile/reconcile_test.go
@@ -18,9 +18,13 @@
 package reconcile
 
 import (
+       "fmt"
+       
"github.com/apache/shardingsphere-on-cloud/shardingsphere-operator/api/v1alpha1"
        "github.com/stretchr/testify/assert"
+       appsv1 "k8s.io/api/apps/v1"
        "k8s.io/api/core/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+       "strconv"
        "testing"
 )
 
@@ -267,3 +271,229 @@ func Test_CountingReadyPods(t *testing.T) {
                assert.Equal(t, c.exp, act, c.message)
        }
 }
+
+func Test_ConstructCascadingDeployment(t *testing.T) {
+       cases := []struct {
+               proxy   *v1alpha1.ShardingSphereProxy
+               exp     *appsv1.Deployment
+               message string
+       }{
+               {
+                       exp:     &appsv1.Deployment{},
+                       message: "Nil ShardingSphereProxy definition should 
lead to empty Deployment",
+               },
+               {
+                       proxy:   &v1alpha1.ShardingSphereProxy{},
+                       exp:     &appsv1.Deployment{},
+                       message: "Empty ShardingSphereProxy definition should 
lead to empty Deployment",
+               },
+               {
+                       proxy: &v1alpha1.ShardingSphereProxy{
+                               ObjectMeta: metav1.ObjectMeta{
+                                       Name:      "testname",
+                                       Namespace: "testnamespace",
+                               },
+                               Spec: v1alpha1.ProxySpec{
+                                       Version: "5.1.2",
+                                       // ServiceType: ServiceTypeNodePort,
+                                       Replicas:         3,
+                                       AutomaticScaling: 
&v1alpha1.AutomaticScaling{},
+                                       ImagePullSecrets: 
[]v1.LocalObjectReference{},
+                                       ProxyConfigName:  
"shardingsphere-proxy-config",
+                                       Port:             3307,
+                                       MySQLDriver:      
&v1alpha1.MySQLDriver{},
+                                       Resources:        
&v1.ResourceRequirements{},
+                                       LivenessProbe: &v1.Probe{
+                                               ProbeHandler: v1.ProbeHandler{
+                                                       TCPSocket: 
&v1.TCPSocketAction{},
+                                               },
+                                               InitialDelaySeconds: 30,
+                                               TimeoutSeconds:      3,
+                                               PeriodSeconds:       5,
+                                               SuccessThreshold:    1,
+                                               FailureThreshold:    3,
+                                       },
+                                       ReadinessProbe: &v1.Probe{
+                                               ProbeHandler: v1.ProbeHandler{
+                                                       TCPSocket: 
&v1.TCPSocketAction{},
+                                               },
+                                               InitialDelaySeconds: 30,
+                                               TimeoutSeconds:      3,
+                                               PeriodSeconds:       5,
+                                               SuccessThreshold:    1,
+                                               FailureThreshold:    3,
+                                       },
+                                       StartupProbe: &v1.Probe{
+                                               ProbeHandler: v1.ProbeHandler{
+                                                       TCPSocket: 
&v1.TCPSocketAction{},
+                                               },
+                                               InitialDelaySeconds: 30,
+                                               TimeoutSeconds:      3,
+                                               PeriodSeconds:       5,
+                                               SuccessThreshold:    1,
+                                               FailureThreshold:    3,
+                                       },
+                               },
+                       },
+                       exp: &appsv1.Deployment{
+                               ObjectMeta: metav1.ObjectMeta{
+                                       Name:      "testname",
+                                       Namespace: "testnamespace",
+                               },
+                               Spec: appsv1.DeploymentSpec{
+                                       Strategy: appsv1.DeploymentStrategy{
+                                               Type: 
appsv1.RecreateDeploymentStrategyType,
+                                       },
+                                       Selector: &metav1.LabelSelector{
+                                               MatchLabels: map[string]string{
+                                                       "apps": "testname",
+                                               },
+                                       },
+                                       Template: v1.PodTemplateSpec{
+                                               ObjectMeta: metav1.ObjectMeta{
+                                                       Labels: 
map[string]string{
+                                                               "apps": 
"testname",
+                                                       },
+                                               },
+                                               Spec: v1.PodSpec{
+                                                       Containers: 
[]v1.Container{
+                                                               {
+                                                                       Name:   
         "proxy",
+                                                                       Image:  
         fmt.Sprintf("%s:%s", "apache/shardingsphere-proxy", "5.1.2"),
+                                                                       
ImagePullPolicy: v1.PullIfNotPresent,
+                                                                       Ports: 
[]v1.ContainerPort{
+                                                                               
{
+                                                                               
        ContainerPort: 3307,
+                                                                               
},
+                                                                       },
+                                                                       Env: 
[]v1.EnvVar{
+                                                                               
{
+                                                                               
        Name:  "PORT",
+                                                                               
        Value: strconv.FormatInt(int64(3307), 10),
+                                                                               
},
+                                                                       },
+                                                                       
LivenessProbe: &v1.Probe{
+                                                                               
ProbeHandler: v1.ProbeHandler{
+                                                                               
        TCPSocket: &v1.TCPSocketAction{},
+                                                                               
},
+                                                                               
InitialDelaySeconds: 30,
+                                                                               
TimeoutSeconds:      3,
+                                                                               
PeriodSeconds:       5,
+                                                                               
SuccessThreshold:    1,
+                                                                               
FailureThreshold:    3,
+                                                                       },
+                                                                       
ReadinessProbe: &v1.Probe{
+                                                                               
ProbeHandler: v1.ProbeHandler{
+                                                                               
        TCPSocket: &v1.TCPSocketAction{},
+                                                                               
},
+                                                                               
InitialDelaySeconds: 30,
+                                                                               
TimeoutSeconds:      3,
+                                                                               
PeriodSeconds:       5,
+                                                                               
SuccessThreshold:    1,
+                                                                               
FailureThreshold:    3,
+                                                                       },
+                                                                       
StartupProbe: &v1.Probe{
+                                                                               
ProbeHandler: v1.ProbeHandler{
+                                                                               
        TCPSocket: &v1.TCPSocketAction{},
+                                                                               
},
+                                                                               
InitialDelaySeconds: 30,
+                                                                               
TimeoutSeconds:      3,
+                                                                               
PeriodSeconds:       5,
+                                                                               
SuccessThreshold:    1,
+                                                                               
FailureThreshold:    3,
+                                                                       },
+                                                                       
VolumeMounts: []v1.VolumeMount{
+                                                                               
{
+                                                                               
        Name:      "config",
+                                                                               
        MountPath: "/opt/shardingsphere-proxy/conf",
+                                                                               
},
+                                                                       },
+                                                               },
+                                                       },
+                                                       Volumes: []v1.Volume{
+                                                               {
+                                                                       Name: 
"config",
+                                                                       
VolumeSource: v1.VolumeSource{
+                                                                               
ConfigMap: &v1.ConfigMapVolumeSource{
+                                                                               
        LocalObjectReference: v1.LocalObjectReference{
+                                                                               
                Name: "shardingsphere-proxy-config",
+                                                                               
        },
+                                                                               
},
+                                                                       },
+                                                               },
+                                                       },
+                                               },
+                                       },
+                               },
+                       },
+                       message: "Normal ShardingSphereProxy definition should 
lead to normal Deployment",
+               },
+       }
+
+       for _, c := range cases {
+               act := ConstructCascadingDeployment(c.proxy)
+               assert.Equal(t, c.exp.ObjectMeta.Name, act.ObjectMeta.Name, 
c.message)
+               assert.Equal(t, c.exp.ObjectMeta.Namespace, 
act.ObjectMeta.Namespace, c.message)
+               // assert.EqualValues(t, c.exp.Spec, act.Spec, c.message)
+               if c.proxy != nil {
+                       if c.proxy.Spec.AutomaticScaling != nil {
+                               assert.Equal(t, c.exp.Spec.Replicas, 
act.Spec.Replicas, c.message)
+                       }
+                       if c.proxy.Spec.Resources != nil {
+                               assert.EqualValues(t, 
c.exp.Spec.Template.Spec.Containers[0].Resources, 
act.Spec.Template.Spec.Containers[0].Resources, c.message)
+                       }
+                       if c.proxy.Spec.LivenessProbe != nil {
+                               assert.EqualValues(t, 
c.exp.Spec.Template.Spec.Containers[0].LivenessProbe, 
act.Spec.Template.Spec.Containers[0].LivenessProbe, c.message)
+                       }
+                       if c.proxy.Spec.ReadinessProbe != nil {
+                               assert.EqualValues(t, 
c.exp.Spec.Template.Spec.Containers[0].ReadinessProbe, 
act.Spec.Template.Spec.Containers[0].ReadinessProbe, c.message)
+                       }
+                       if c.proxy.Spec.StartupProbe != nil {
+                               assert.EqualValues(t, 
c.exp.Spec.Template.Spec.Containers[0].StartupProbe, 
act.Spec.Template.Spec.Containers[0].StartupProbe, c.message)
+                       }
+                       if len(c.proxy.Spec.ImagePullSecrets) > 0 {
+                               assert.EqualValues(t, 
c.exp.Spec.Template.Spec.ImagePullSecrets, 
act.Spec.Template.Spec.ImagePullSecrets, c.message)
+                       }
+               }
+       }
+}
+
+func Test_ConstructCascadingService(t *testing.T) {
+
+}
+
+func Test_addInitContaienr(t *testing.T) {
+
+}
+
+func Test_processOptionalParameter(t *testing.T) {
+
+}
+
+func Test_ConstructCascadingConfigmap(t *testing.T) {
+
+}
+
+func Test_ConstructHPA(t *testing.T) {
+
+}
+
+func Test_ToYAML(t *testing.T) {
+
+}
+
+func Test_UpdateDeployment(t *testing.T) {
+
+}
+
+func Test_UpdateService(t *testing.T) {
+
+}
+
+func Test_UpdateHPA(t *testing.T) {
+
+}
+
+func Test_fromInt32(t *testing.T) {
+
+}
diff --git a/shardingsphere-operator/pkg/reconcile/resource.go 
b/shardingsphere-operator/pkg/reconcile/resource.go
index 4a49fcf..c7d8dd1 100644
--- a/shardingsphere-operator/pkg/reconcile/resource.go
+++ b/shardingsphere-operator/pkg/reconcile/resource.go
@@ -20,6 +20,7 @@ package reconcile
 import (
        "fmt"
        "html/template"
+       "reflect"
        "strconv"
        "strings"
 
@@ -68,6 +69,10 @@ var logback = `<?xml version="1.0"?>
 `
 
 func ConstructCascadingDeployment(proxy *v1alpha1.ShardingSphereProxy) 
*appsv1.Deployment {
+       if proxy == nil || reflect.DeepEqual(proxy, 
&v1alpha1.ShardingSphereProxy{}) {
+               return &appsv1.Deployment{}
+       }
+
        dp := &appsv1.Deployment{
                ObjectMeta: metav1.ObjectMeta{
                        Name:      proxy.Name,
@@ -135,10 +140,18 @@ func ConstructCascadingDeployment(proxy 
*v1alpha1.ShardingSphereProxy) *appsv1.D
        if proxy.Spec.AutomaticScaling == nil {
                dp.Spec.Replicas = &proxy.Spec.Replicas
        }
-       dp.Spec.Template.Spec.Containers[0].Resources = *proxy.Spec.Resources
-       dp.Spec.Template.Spec.Containers[0].LivenessProbe = 
proxy.Spec.LivenessProbe
-       dp.Spec.Template.Spec.Containers[0].ReadinessProbe = 
proxy.Spec.ReadinessProbe
-       dp.Spec.Template.Spec.Containers[0].StartupProbe = 
proxy.Spec.StartupProbe
+       if proxy.Spec.Resources != nil {
+               dp.Spec.Template.Spec.Containers[0].Resources = 
*proxy.Spec.Resources
+       }
+       if proxy.Spec.LivenessProbe != nil {
+               dp.Spec.Template.Spec.Containers[0].LivenessProbe = 
proxy.Spec.LivenessProbe
+       }
+       if proxy.Spec.ReadinessProbe != nil {
+               dp.Spec.Template.Spec.Containers[0].ReadinessProbe = 
proxy.Spec.ReadinessProbe
+       }
+       if proxy.Spec.StartupProbe != nil {
+               dp.Spec.Template.Spec.Containers[0].StartupProbe = 
proxy.Spec.StartupProbe
+       }
        if len(proxy.Spec.ImagePullSecrets) > 0 {
                dp.Spec.Template.Spec.ImagePullSecrets = 
proxy.Spec.ImagePullSecrets
        }

Reply via email to