@@ -4,21 +4,101 @@ import (
44 "testing"
55
66 "github.com/stretchr/testify/assert"
7+ hermesv1 "github.com/stubbi/hermes-operator/api/v1"
78 corev1 "k8s.io/api/core/v1"
89 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
9-
10- hermesv1 "github.com/stubbi/hermes-operator/api/v1"
1110)
1211
13- func TestBuildService_DefaultsAndSelector (t * testing.T ) {
14- inst := & hermesv1.HermesInstance {
15- ObjectMeta : metav1.ObjectMeta {Name : "demo" , Namespace : "agents" },
16- }
12+ func TestBuildService_DefaultClusterIPWithGatewayPort (t * testing.T ) {
13+ t .Parallel ()
14+ inst := & hermesv1.HermesInstance {ObjectMeta : metav1.ObjectMeta {Name : "demo" , Namespace : "agents" }}
1715 svc := BuildService (inst )
1816 assert .Equal (t , "demo" , svc .Name )
19- assert .Equal (t , corev1 .ClusterIPNone , svc .Spec .ClusterIP , "headless Service for StatefulSet" )
20- assert .Equal (t , corev1 .ServiceAffinityNone , svc .Spec .SessionAffinity , "explicit k8s default" )
17+ assert .Equal (t , corev1 .ServiceTypeClusterIP , svc .Spec .Type )
18+ assert .Equal (t , corev1 .ServiceAffinityNone , svc .Spec .SessionAffinity )
2119 assert .Equal (t , "demo" , svc .Spec .Selector ["app.kubernetes.io/instance" ])
22- // Must declare at least the gateway port so the Service is valid.
23- assert .NotEmpty (t , svc .Spec .Ports )
20+ require := false
21+ for _ , p := range svc .Spec .Ports {
22+ if p .Name == "gateway" && p .Port == 8443 {
23+ require = true
24+ }
25+ }
26+ assert .True (t , require , "default gateway port on 8443" )
27+ }
28+
29+ func TestBuildService_Headless (t * testing.T ) {
30+ t .Parallel ()
31+ inst := & hermesv1.HermesInstance {
32+ ObjectMeta : metav1.ObjectMeta {Name : "demo" },
33+ Spec : hermesv1.HermesInstanceSpec {
34+ Networking : hermesv1.NetworkingSpec {
35+ Service : hermesv1.ServiceSpec {Type : corev1 .ServiceTypeClusterIP , ClusterIP : corev1 .ClusterIPNone },
36+ },
37+ },
38+ }
39+ svc := BuildService (inst )
40+ assert .Equal (t , corev1 .ClusterIPNone , svc .Spec .ClusterIP )
41+ }
42+
43+ func TestBuildService_LoadBalancerAnnotations (t * testing.T ) {
44+ t .Parallel ()
45+ inst := & hermesv1.HermesInstance {
46+ ObjectMeta : metav1.ObjectMeta {Name : "demo" },
47+ Spec : hermesv1.HermesInstanceSpec {
48+ Networking : hermesv1.NetworkingSpec {
49+ Service : hermesv1.ServiceSpec {
50+ Type : corev1 .ServiceTypeLoadBalancer ,
51+ Annotations : map [string ]string {"foo" : "bar" },
52+ ExternalTrafficPolicy : corev1 .ServiceExternalTrafficPolicyTypeLocal ,
53+ },
54+ },
55+ },
56+ }
57+ svc := BuildService (inst )
58+ assert .Equal (t , corev1 .ServiceTypeLoadBalancer , svc .Spec .Type )
59+ assert .Equal (t , "bar" , svc .Annotations ["foo" ])
60+ assert .Equal (t , corev1 .ServiceExternalTrafficPolicyTypeLocal , svc .Spec .ExternalTrafficPolicy )
61+ }
62+
63+ func TestBuildService_CustomPorts (t * testing.T ) {
64+ t .Parallel ()
65+ tp := int32 (8443 )
66+ inst := & hermesv1.HermesInstance {
67+ ObjectMeta : metav1.ObjectMeta {Name : "demo" },
68+ Spec : hermesv1.HermesInstanceSpec {
69+ Networking : hermesv1.NetworkingSpec {
70+ Service : hermesv1.ServiceSpec {
71+ Ports : []hermesv1.NamedServicePort {
72+ {Name : "gateway" , Port : 443 , TargetPort : & tp , Protocol : corev1 .ProtocolTCP },
73+ },
74+ },
75+ },
76+ Observability : hermesv1.ObservabilitySpec {
77+ Metrics : hermesv1.MetricsSpec {Enabled : Ptr (false )},
78+ },
79+ },
80+ }
81+ svc := BuildService (inst )
82+ assert .Len (t , svc .Spec .Ports , 1 )
83+ assert .Equal (t , int32 (443 ), svc .Spec .Ports [0 ].Port )
84+ }
85+
86+ func TestBuildService_AddsMetricsPortWhenEnabled (t * testing.T ) {
87+ t .Parallel ()
88+ inst := & hermesv1.HermesInstance {
89+ ObjectMeta : metav1.ObjectMeta {Name : "demo" },
90+ Spec : hermesv1.HermesInstanceSpec {
91+ Observability : hermesv1.ObservabilitySpec {
92+ Metrics : hermesv1.MetricsSpec {Enabled : Ptr (true ), Port : 9090 },
93+ },
94+ },
95+ }
96+ svc := BuildService (inst )
97+ var sawMetrics bool
98+ for _ , p := range svc .Spec .Ports {
99+ if p .Name == "metrics" && p .Port == 9090 {
100+ sawMetrics = true
101+ }
102+ }
103+ assert .True (t , sawMetrics , "metrics port emitted when Metrics.Enabled" )
24104}
0 commit comments