github.com/argoproj/argo-cd/v3@v3.2.1/util/kube/portforwarder_test.go (about)

     1  package kube
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/require"
     7  	corev1 "k8s.io/api/core/v1"
     8  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     9  	"k8s.io/client-go/kubernetes/fake"
    10  )
    11  
    12  func Test_selectPodForPortForward(t *testing.T) {
    13  	// Mock the Kubernetes client
    14  	client := fake.NewSimpleClientset(
    15  		&corev1.Pod{
    16  			ObjectMeta: metav1.ObjectMeta{
    17  				Name:      "test-pod",
    18  				Namespace: "default",
    19  				Labels: map[string]string{
    20  					"app": "test-app",
    21  				},
    22  			},
    23  			Status: corev1.PodStatus{
    24  				Conditions: []corev1.PodCondition{
    25  					{
    26  						Type:               corev1.PodReady,
    27  						Status:             corev1.ConditionTrue,
    28  						LastTransitionTime: metav1.Now(),
    29  					},
    30  				},
    31  				Phase: corev1.PodRunning,
    32  			},
    33  		},
    34  		&corev1.Pod{
    35  			ObjectMeta: metav1.ObjectMeta{
    36  				Name:      "test2-pod-broken",
    37  				Namespace: "default",
    38  				Labels: map[string]string{
    39  					"app": "test2",
    40  				},
    41  			},
    42  			Status: corev1.PodStatus{
    43  				Conditions: []corev1.PodCondition{
    44  					{
    45  						Type:               corev1.PodReady,
    46  						Status:             corev1.ConditionFalse,
    47  						LastTransitionTime: metav1.Now(),
    48  					},
    49  				},
    50  				Phase: corev1.PodFailed,
    51  			},
    52  		},
    53  		&corev1.Pod{
    54  			ObjectMeta: metav1.ObjectMeta{
    55  				Name:      "test2-pod-working",
    56  				Namespace: "default",
    57  				Labels: map[string]string{
    58  					"app": "test2",
    59  				},
    60  			},
    61  			Status: corev1.PodStatus{
    62  				Conditions: []corev1.PodCondition{
    63  					{
    64  						Type:               corev1.PodReady,
    65  						Status:             corev1.ConditionTrue,
    66  						LastTransitionTime: metav1.Now(),
    67  					},
    68  				},
    69  				Phase: corev1.PodRunning,
    70  			},
    71  		},
    72  	)
    73  
    74  	// Test selecting the pod
    75  	selectedPod, err := selectPodForPortForward(client, "default", "app=test-app")
    76  	require.NoError(t, err)
    77  	require.Equal(t, "test-pod", selectedPod.Name)
    78  
    79  	// Test selecting the working pod
    80  	selectedPod2, err := selectPodForPortForward(client, "default", "app=test2")
    81  	require.NoError(t, err)
    82  	require.Equal(t, "test2-pod-working", selectedPod2.Name)
    83  }