github.com/jenkins-x/jx/v2@v2.1.155/pkg/kube/deployments_test.go (about)

     1  // +build unit
     2  
     3  package kube_test
     4  
     5  import (
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/jenkins-x/jx/v2/pkg/kube"
    10  	"github.com/stretchr/testify/assert"
    11  	appsv1 "k8s.io/api/apps/v1"
    12  	v1 "k8s.io/api/core/v1"
    13  	"k8s.io/apimachinery/pkg/api/resource"
    14  	meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    15  	kube_mocks "k8s.io/client-go/kubernetes/fake"
    16  )
    17  
    18  func TestWaitForDeploymentToBeReady(t *testing.T) {
    19  	t.Parallel()
    20  
    21  	node := &v1.Node{
    22  		ObjectMeta: meta_v1.ObjectMeta{
    23  			Name: "test-node-1",
    24  		},
    25  		Status: v1.NodeStatus{
    26  			Capacity: v1.ResourceList{
    27  				v1.ResourceCPU:    resource.MustParse("10"),
    28  				v1.ResourceMemory: resource.MustParse("10G"),
    29  			},
    30  		},
    31  	}
    32  
    33  	replicaCount := int32(1)
    34  
    35  	labels := make(map[string]string)
    36  	labels["app"] = "ians-app"
    37  
    38  	deployment := &appsv1.Deployment{
    39  		ObjectMeta: meta_v1.ObjectMeta{
    40  			Name:      "test-deployment",
    41  			Namespace: "jx-testing",
    42  			SelfLink:  "/apis/extensions/v1beta1/namespaces/jx-testing/deployments/test-deployment",
    43  		},
    44  		Spec: appsv1.DeploymentSpec{
    45  			Replicas: &replicaCount,
    46  			Selector: &meta_v1.LabelSelector{
    47  				MatchLabels: map[string]string{
    48  					"app": "ians-app",
    49  				},
    50  			},
    51  			Template: v1.PodTemplateSpec{
    52  				ObjectMeta: meta_v1.ObjectMeta{
    53  					Labels: map[string]string{
    54  						"app": "ians-app",
    55  					},
    56  				},
    57  				Spec: v1.PodSpec{
    58  					Containers: []v1.Container{
    59  						{
    60  							Name:  "web",
    61  							Image: "nginx:1.12",
    62  							Ports: []v1.ContainerPort{
    63  								{
    64  									Name:          "http",
    65  									Protocol:      v1.ProtocolTCP,
    66  									ContainerPort: 80,
    67  								},
    68  							},
    69  						},
    70  					},
    71  				},
    72  			},
    73  		},
    74  		Status: appsv1.DeploymentStatus{
    75  			Replicas:            1,
    76  			UpdatedReplicas:     1,
    77  			AvailableReplicas:   1,
    78  			UnavailableReplicas: 0,
    79  			ReadyReplicas:       1,
    80  			CollisionCount:      nil,
    81  		},
    82  	}
    83  
    84  	kubernetesInterface := kube_mocks.NewSimpleClientset(node, deployment)
    85  
    86  	err := kube.WaitForDeploymentToBeReady(kubernetesInterface, "test-deployment", "jx-testing", time.Second*5)
    87  
    88  	assert.NoError(t, err, "Should not error")
    89  
    90  }