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 }