@@ -27,6 +27,7 @@ import (
2727 "github.com/stretchr/testify/mock"
2828 "github.com/stretchr/testify/require"
2929 corev1 "k8s.io/api/core/v1"
30+ v1 "k8s.io/api/core/v1"
3031 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3132 corev1lister "k8s.io/client-go/listers/core/v1"
3233 "k8s.io/client-go/tools/cache"
@@ -997,3 +998,147 @@ func nodesFixturesIPv4() []*corev1.Node {
997998 },
998999 }
9991000}
1001+
1002+ func TestPodTransformerInPodSource (t * testing.T ) {
1003+ t .Run ("transformer set" , func (t * testing.T ) {
1004+ ctx := t .Context ()
1005+ fakeClient := fake .NewClientset ()
1006+
1007+ pod := & v1.Pod {
1008+ Spec : v1.PodSpec {
1009+ Containers : []v1.Container {{
1010+ Name : "test" ,
1011+ }},
1012+ Hostname : "test-hostname" ,
1013+ NodeName : "test-node" ,
1014+ HostNetwork : true ,
1015+ },
1016+ ObjectMeta : metav1.ObjectMeta {
1017+ Namespace : "test-ns" ,
1018+ Name : "test-name" ,
1019+ Labels : map [string ]string {
1020+ "label1" : "value1" ,
1021+ "label2" : "value2" ,
1022+ "label3" : "value3" ,
1023+ },
1024+ Annotations : map [string ]string {
1025+ "user-annotation" : "value" ,
1026+ "external-dns.alpha.kubernetes.io/hostname" : "test-hostname" ,
1027+ "external-dns.alpha.kubernetes.io/random" : "value" ,
1028+ "other/annotation" : "value" ,
1029+ },
1030+ UID : "someuid" ,
1031+ },
1032+ Status : v1.PodStatus {
1033+ PodIP : "127.0.0.1" ,
1034+ HostIP : "127.0.0.2" ,
1035+ Conditions : []v1.PodCondition {{
1036+ Type : v1 .PodReady ,
1037+ Status : v1 .ConditionTrue ,
1038+ }, {
1039+ Type : v1 .ContainersReady ,
1040+ Status : v1 .ConditionFalse ,
1041+ }},
1042+ },
1043+ }
1044+
1045+ _ , err := fakeClient .CoreV1 ().Pods (pod .Namespace ).Create (context .Background (), pod , metav1.CreateOptions {})
1046+ require .NoError (t , err )
1047+
1048+ // Should not error when creating the source
1049+ src , err := NewPodSource (ctx , fakeClient , "" , "" , false , "" , "" , false , "" , nil )
1050+ require .NoError (t , err )
1051+ ps , ok := src .(* podSource )
1052+ require .True (t , ok )
1053+
1054+ retrieved , err := ps .podInformer .Lister ().Pods ("test-ns" ).Get ("test-name" )
1055+ require .NoError (t , err )
1056+
1057+ // Metadata
1058+ assert .Equal (t , "test-name" , retrieved .Name )
1059+ assert .Equal (t , "test-ns" , retrieved .Namespace )
1060+ assert .Empty (t , retrieved .UID )
1061+ assert .Empty (t , retrieved .Labels )
1062+ // Filtered
1063+ assert .Equal (t , map [string ]string {
1064+ "user-annotation" : "value" ,
1065+ "external-dns.alpha.kubernetes.io/hostname" : "test-hostname" ,
1066+ "external-dns.alpha.kubernetes.io/random" : "value" ,
1067+ "other/annotation" : "value" ,
1068+ }, retrieved .Annotations )
1069+
1070+ // Spec
1071+ assert .Empty (t , retrieved .Spec .Containers )
1072+ assert .Empty (t , retrieved .Spec .Hostname )
1073+ assert .Equal (t , "test-node" , retrieved .Spec .NodeName )
1074+ assert .True (t , retrieved .Spec .HostNetwork )
1075+
1076+ // Status
1077+ assert .Empty (t , retrieved .Status .ContainerStatuses )
1078+ assert .Empty (t , retrieved .Status .InitContainerStatuses )
1079+ assert .Empty (t , retrieved .Status .HostIP )
1080+ assert .Equal (t , "127.0.0.1" , retrieved .Status .PodIP )
1081+ assert .Empty (t , retrieved .Status .Conditions )
1082+ })
1083+
1084+ t .Run ("transformer is not used when fqdnTemplate is set" , func (t * testing.T ) {
1085+ ctx := t .Context ()
1086+ fakeClient := fake .NewClientset ()
1087+
1088+ pod := & v1.Pod {
1089+ Spec : v1.PodSpec {
1090+ Containers : []v1.Container {{
1091+ Name : "test" ,
1092+ }},
1093+ Hostname : "test-hostname" ,
1094+ NodeName : "test-node" ,
1095+ HostNetwork : true ,
1096+ },
1097+ ObjectMeta : metav1.ObjectMeta {
1098+ Namespace : "test-ns" ,
1099+ Name : "test-name" ,
1100+ Labels : map [string ]string {
1101+ "label1" : "value1" ,
1102+ "label2" : "value2" ,
1103+ "label3" : "value3" ,
1104+ },
1105+ Annotations : map [string ]string {
1106+ "user-annotation" : "value" ,
1107+ "external-dns.alpha.kubernetes.io/hostname" : "test-hostname" ,
1108+ "external-dns.alpha.kubernetes.io/random" : "value" ,
1109+ "other/annotation" : "value" ,
1110+ },
1111+ UID : "someuid" ,
1112+ },
1113+ Status : v1.PodStatus {
1114+ PodIP : "127.0.0.1" ,
1115+ HostIP : "127.0.0.2" ,
1116+ Conditions : []v1.PodCondition {{
1117+ Type : v1 .PodReady ,
1118+ Status : v1 .ConditionTrue ,
1119+ }, {
1120+ Type : v1 .ContainersReady ,
1121+ Status : v1 .ConditionFalse ,
1122+ }},
1123+ },
1124+ }
1125+
1126+ _ , err := fakeClient .CoreV1 ().Pods (pod .Namespace ).Create (context .Background (), pod , metav1.CreateOptions {})
1127+ require .NoError (t , err )
1128+
1129+ // Should not error when creating the source
1130+ src , err := NewPodSource (ctx , fakeClient , "" , "" , false , "" , "template" , false , "" , nil )
1131+ require .NoError (t , err )
1132+ ps , ok := src .(* podSource )
1133+ require .True (t , ok )
1134+
1135+ retrieved , err := ps .podInformer .Lister ().Pods ("test-ns" ).Get ("test-name" )
1136+ require .NoError (t , err )
1137+
1138+ // Metadata
1139+ assert .Equal (t , "test-name" , retrieved .Name )
1140+ assert .Equal (t , "test-ns" , retrieved .Namespace )
1141+ assert .NotEmpty (t , retrieved .UID )
1142+ assert .NotEmpty (t , retrieved .Labels )
1143+ })
1144+ }
0 commit comments