github.com/alibaba/ilogtail/pkg@v0.0.0-20250526110833-c53b480d046c/helper/k8smeta/k8s_meta_http_server_test.go (about)

     1  package k8smeta
     2  
     3  import (
     4  	"testing"
     5  
     6  	"github.com/stretchr/testify/assert"
     7  	corev1 "k8s.io/api/core/v1"
     8  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
     9  )
    10  
    11  func TestFindPodByServiceIPPort(t *testing.T) {
    12  	manager := GetMetaManagerInstance()
    13  	podCache := newK8sMetaCache(make(chan struct{}), POD)
    14  	podCache.metaStore.Items["default/pod1"] = &ObjectWrapper{
    15  		Raw: &corev1.Pod{
    16  			ObjectMeta: metav1.ObjectMeta{
    17  				Name:      "pod1",
    18  				Namespace: "default",
    19  				Labels: map[string]string{
    20  					"app": "test",
    21  					"env": "test",
    22  				},
    23  			},
    24  			Spec: corev1.PodSpec{
    25  				Containers: []corev1.Container{
    26  					{
    27  						Name:  "test",
    28  						Image: "test",
    29  						Ports: []corev1.ContainerPort{
    30  							{
    31  								ContainerPort: 80,
    32  							},
    33  						},
    34  					},
    35  				},
    36  			},
    37  			Status: corev1.PodStatus{
    38  				PodIP: "1.1.1.1",
    39  			},
    40  		},
    41  	}
    42  	manager.cacheMap[POD] = podCache
    43  	serviceCache := newK8sMetaCache(make(chan struct{}), SERVICE)
    44  	serviceCache.metaStore.Items["default/service1"] = &ObjectWrapper{
    45  		Raw: &corev1.Service{
    46  			ObjectMeta: metav1.ObjectMeta{
    47  				Name:      "service1",
    48  				Namespace: "default",
    49  			},
    50  			Spec: corev1.ServiceSpec{
    51  				Selector: map[string]string{
    52  					"app": "test",
    53  				},
    54  				ClusterIPs: []string{
    55  					"2.2.2.2",
    56  				},
    57  				Ports: []corev1.ServicePort{
    58  					{
    59  						Port: 80,
    60  					},
    61  				},
    62  			},
    63  		},
    64  	}
    65  	serviceCache.metaStore.Index["2.2.2.2"] = NewIndexItem()
    66  	serviceCache.metaStore.Index["2.2.2.2"].Add("default/service1")
    67  	manager.cacheMap[SERVICE] = serviceCache
    68  	handler := newMetadataHandler(GetMetaManagerInstance())
    69  	podMetadata := handler.findPodByServiceIPPort("2.2.2.2", 0)
    70  	assert.NotNil(t, podMetadata)
    71  	assert.Equal(t, "pod1", podMetadata.PodName)
    72  
    73  	podMetadata = handler.findPodByServiceIPPort("2.2.2.2", 80)
    74  	assert.NotNil(t, podMetadata)
    75  	assert.Equal(t, "pod1", podMetadata.PodName)
    76  
    77  	podMetadata = handler.findPodByServiceIPPort("2.2.2.2", 90)
    78  	assert.Nil(t, podMetadata)
    79  
    80  	podMetadata = handler.findPodByServiceIPPort("3.3.3.3", 0)
    81  	assert.Nil(t, podMetadata)
    82  }
    83  
    84  func TestFindPodByPodIPPort(t *testing.T) {
    85  	handler := newMetadataHandler(GetMetaManagerInstance())
    86  	pods := map[string][]*ObjectWrapper{
    87  		"1.1.1.1": {
    88  			{
    89  				Raw: &corev1.Pod{
    90  					ObjectMeta: metav1.ObjectMeta{
    91  						Name:      "pod1",
    92  						Namespace: "default",
    93  						Labels: map[string]string{
    94  							"app": "test",
    95  							"env": "test",
    96  						},
    97  					},
    98  					Spec: corev1.PodSpec{
    99  						Containers: []corev1.Container{
   100  							{
   101  								Name:  "test",
   102  								Image: "test",
   103  								Ports: []corev1.ContainerPort{
   104  									{
   105  										ContainerPort: 80,
   106  									},
   107  								},
   108  							},
   109  						},
   110  					},
   111  					Status: corev1.PodStatus{
   112  						PodIP: "1.1.1.1",
   113  					},
   114  				},
   115  			},
   116  		},
   117  	}
   118  
   119  	podMetadata := handler.findPodByPodIPPort("1.1.1.1", 0, pods)
   120  	assert.NotNil(t, podMetadata)
   121  	assert.Equal(t, "pod1", podMetadata.PodName)
   122  
   123  	podMetadata = handler.findPodByPodIPPort("1.1.1.1", 80, pods)
   124  	assert.NotNil(t, podMetadata)
   125  	assert.Equal(t, "pod1", podMetadata.PodName)
   126  
   127  	podMetadata = handler.findPodByPodIPPort("1.1.1.1", 90, pods)
   128  	assert.Nil(t, podMetadata)
   129  
   130  	podMetadata = handler.findPodByPodIPPort("2.2.2.2", 0, pods)
   131  	assert.Nil(t, podMetadata)
   132  }