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

     1  // +build unit
     2  
     3  package kube_test
     4  
     5  import (
     6  	"testing"
     7  
     8  	"github.com/jenkins-x/jx/v2/pkg/kube"
     9  	"github.com/stretchr/testify/assert"
    10  	v1 "k8s.io/api/core/v1"
    11  	meta_v1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    12  )
    13  
    14  func TestGetPodConditionPodReady(t *testing.T) {
    15  	t.Parallel()
    16  
    17  	var condition v1.PodConditionType
    18  	condition = v1.PodReady
    19  
    20  	status := v1.PodStatus{
    21  		Phase: v1.PodRunning,
    22  		Conditions: []v1.PodCondition{
    23  			{
    24  				Type:   condition,
    25  				Status: v1.ConditionTrue,
    26  			},
    27  		},
    28  	}
    29  
    30  	resStatus, res := kube.GetPodCondition(&status, condition)
    31  
    32  	assert.Equal(t, 0, resStatus)
    33  	assert.Equal(t, condition, res.Type)
    34  }
    35  
    36  func TestGetPodConditionFailures(t *testing.T) {
    37  	t.Parallel()
    38  
    39  	var condition v1.PodConditionType
    40  	condition = v1.PodReady
    41  
    42  	status := v1.PodStatus{
    43  		Phase: v1.PodRunning,
    44  		Conditions: []v1.PodCondition{
    45  			{
    46  				Status: v1.ConditionTrue,
    47  			},
    48  		},
    49  	}
    50  
    51  	resStatus, _ := kube.GetPodCondition(nil, condition)
    52  	assert.Equal(t, -1, resStatus)
    53  
    54  	// Status missing type fails
    55  	resStatus, _ = kube.GetPodCondition(&status, condition)
    56  	assert.Equal(t, -1, resStatus)
    57  }
    58  
    59  func TestGetPodReadyCondition(t *testing.T) {
    60  	t.Parallel()
    61  
    62  	status := v1.PodStatus{
    63  		Phase: v1.PodRunning,
    64  		Conditions: []v1.PodCondition{
    65  			{
    66  				Type:   v1.PodReady,
    67  				Status: v1.ConditionTrue,
    68  			},
    69  		},
    70  	}
    71  
    72  	res := kube.GetPodReadyCondition(status)
    73  	assert.Equal(t, status.Conditions[0].Status, res.Status)
    74  	assert.Equal(t, status.Conditions[0].Type, res.Type)
    75  }
    76  
    77  func TestGetPodReadyConditionFailures(t *testing.T) {
    78  	t.Parallel()
    79  
    80  	status := v1.PodStatus{
    81  		Phase: v1.PodRunning,
    82  		Conditions: []v1.PodCondition{
    83  			{
    84  				Status: v1.ConditionTrue,
    85  			},
    86  		},
    87  	}
    88  
    89  	var expectedCondition *v1.PodCondition
    90  	res := kube.GetPodReadyCondition(status)
    91  	assert.Equal(t, expectedCondition, res)
    92  }
    93  
    94  func TestIsPodReadyConditionTrue(t *testing.T) {
    95  	t.Parallel()
    96  
    97  	status := v1.PodStatus{
    98  		Phase: v1.PodRunning,
    99  		Conditions: []v1.PodCondition{
   100  			{
   101  				Type:   v1.PodReady,
   102  				Status: v1.ConditionTrue,
   103  			},
   104  		},
   105  	}
   106  
   107  	res := kube.IsPodReadyConditionTrue(status)
   108  	assert.Equal(t, true, res)
   109  }
   110  
   111  func TestIsPodReadyConditionTrueFailures(t *testing.T) {
   112  	t.Parallel()
   113  
   114  	status := v1.PodStatus{
   115  		Phase: v1.PodRunning,
   116  		Conditions: []v1.PodCondition{
   117  			{
   118  				Status: v1.ConditionTrue,
   119  			},
   120  		},
   121  	}
   122  
   123  	res := kube.IsPodReadyConditionTrue(status)
   124  	assert.Equal(t, false, res)
   125  
   126  	status = v1.PodStatus{
   127  		Phase: v1.PodRunning,
   128  		Conditions: []v1.PodCondition{
   129  			{
   130  				Type: v1.PodReady,
   131  			},
   132  		},
   133  	}
   134  
   135  	res = kube.IsPodReadyConditionTrue(status)
   136  	assert.Equal(t, false, res)
   137  }
   138  
   139  func TestIsPodReady(t *testing.T) {
   140  	t.Parallel()
   141  
   142  	labels := make(map[string]string)
   143  	labels["app"] = "ians-app"
   144  
   145  	pod := &v1.Pod{
   146  		ObjectMeta: meta_v1.ObjectMeta{
   147  			Name:      "web",
   148  			Labels:    labels,
   149  			Namespace: "jx-testing",
   150  		},
   151  		Spec: v1.PodSpec{
   152  			Containers: []v1.Container{
   153  				{
   154  					Name:  "web",
   155  					Image: "nginx:1.12",
   156  					Ports: []v1.ContainerPort{
   157  						{
   158  							Name:          "http",
   159  							Protocol:      v1.ProtocolTCP,
   160  							ContainerPort: 80,
   161  						},
   162  					},
   163  				},
   164  			},
   165  		},
   166  		Status: v1.PodStatus{
   167  			Phase: v1.PodRunning,
   168  			Conditions: []v1.PodCondition{
   169  				{
   170  					Type:   v1.PodReady,
   171  					Status: v1.ConditionTrue,
   172  				},
   173  			},
   174  		},
   175  	}
   176  
   177  	res := kube.IsPodReady(pod)
   178  	assert.Equal(t, true, res)
   179  }
   180  
   181  func TestIsPodReadyFailures(t *testing.T) {
   182  	t.Parallel()
   183  
   184  	labels := make(map[string]string)
   185  	labels["app"] = "ians-app"
   186  
   187  	pod := &v1.Pod{
   188  		ObjectMeta: meta_v1.ObjectMeta{
   189  			Name:      "web",
   190  			Labels:    labels,
   191  			Namespace: "jx-testing",
   192  		},
   193  		Spec: v1.PodSpec{
   194  			Containers: []v1.Container{
   195  				{
   196  					Name:  "web",
   197  					Image: "nginx:1.12",
   198  					Ports: []v1.ContainerPort{
   199  						{
   200  							Name:          "http",
   201  							Protocol:      v1.ProtocolTCP,
   202  							ContainerPort: 80,
   203  						},
   204  					},
   205  				},
   206  			},
   207  		},
   208  		Status: v1.PodStatus{
   209  			Phase: v1.PodRunning,
   210  			Conditions: []v1.PodCondition{
   211  				{
   212  					Type:   "Something else",
   213  					Status: v1.ConditionTrue,
   214  				},
   215  			},
   216  		},
   217  	}
   218  
   219  	res := kube.IsPodReady(pod)
   220  	assert.Equal(t, false, res)
   221  
   222  	pod = &v1.Pod{
   223  		ObjectMeta: meta_v1.ObjectMeta{
   224  			Name:      "web",
   225  			Labels:    labels,
   226  			Namespace: "jx-testing",
   227  		},
   228  		Spec: v1.PodSpec{
   229  			Containers: []v1.Container{
   230  				{
   231  					Name:  "web",
   232  					Image: "nginx:1.12",
   233  					Ports: []v1.ContainerPort{
   234  						{
   235  							Name:          "http",
   236  							Protocol:      v1.ProtocolTCP,
   237  							ContainerPort: 80,
   238  						},
   239  					},
   240  				},
   241  			},
   242  		},
   243  		Status: v1.PodStatus{
   244  			Phase: v1.PodRunning,
   245  			Conditions: []v1.PodCondition{
   246  				{
   247  					Type:   v1.PodReady,
   248  					Status: "Something else",
   249  				},
   250  			},
   251  		},
   252  	}
   253  
   254  	res = kube.IsPodReady(pod)
   255  	assert.Equal(t, false, res)
   256  }