Skip to content

Commit 917953d

Browse files
committed
test: calc create service timeout from annotations
1 parent 0972c46 commit 917953d

3 files changed

Lines changed: 35 additions & 8 deletions

File tree

tests/e2e/cloud_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -73,7 +73,7 @@ func TestServiceLoadBalancersMinimalSetup(t *testing.T) {
7373
string(annotation.LBLocation): "nbg1",
7474
})
7575

76-
lbSvc, err = lbTest.CreateService(lbSvc, 6*time.Minute)
76+
lbSvc, err = lbTest.CreateService(lbSvc)
7777
require.NoError(t, err)
7878

7979
err = lbTest.WaitForHTTPAvailable(lbSvc.Status.LoadBalancer.Ingress[0].IP, false)
@@ -102,7 +102,7 @@ func TestServiceLoadBalancersHTTPS(t *testing.T) {
102102
string(annotation.LBSvcProtocol): "https",
103103
})
104104

105-
lbSvc, err = lbTest.CreateService(lbSvc, 6*time.Minute)
105+
lbSvc, err = lbTest.CreateService(lbSvc)
106106
require.NoError(t, err)
107107

108108
err = lbTest.WaitForHTTPAvailable(lbSvc.Status.LoadBalancer.Ingress[0].IP, true)
@@ -135,7 +135,7 @@ func TestServiceLoadBalancersHTTPSWithManagedCertificate(t *testing.T) {
135135
string(annotation.LBSvcHTTPManagedCertificateUseACMEStaging): "true",
136136
})
137137

138-
lbSvc, err = lbTest.CreateService(lbSvc, 16*time.Minute)
138+
lbSvc, err = lbTest.CreateService(lbSvc)
139139
require.NoError(t, err)
140140

141141
certs, err := testCluster.hcloud.Certificate.AllWithOpts(t.Context(), hcloud.CertificateListOpts{
@@ -171,7 +171,7 @@ func TestServiceLoadBalancersWithPrivateNetwork(t *testing.T) {
171171
string(annotation.PrivateSubnetIPRange): ipRange.String(),
172172
})
173173

174-
lbSvc, err = lbTest.CreateService(lbSvc, 8*time.Minute)
174+
lbSvc, err = lbTest.CreateService(lbSvc)
175175
require.NoError(t, err)
176176

177177
err = lbTest.WaitForHTTPAvailable(lbSvc.Status.LoadBalancer.Ingress[0].IP, false)

tests/e2e/helper_test.go

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,37 @@ import (
2424
"k8s.io/client-go/kubernetes"
2525
"k8s.io/client-go/tools/clientcmd"
2626

27+
"github.com/hetznercloud/hcloud-cloud-controller-manager/internal/annotation"
2728
"github.com/hetznercloud/hcloud-cloud-controller-manager/internal/hcops"
2829
"github.com/hetznercloud/hcloud-cloud-controller-manager/internal/testsupport"
2930
"github.com/hetznercloud/hcloud-cloud-controller-manager/internal/utils"
3031
"github.com/hetznercloud/hcloud-go/v2/hcloud"
3132
)
3233

34+
// Load Balancer creation timeouts. Services that involve certificate
35+
// provisioning take longer to become ready.
36+
const (
37+
lbCreateTimeoutDefault = 8 * time.Minute
38+
lbCreateTimeoutCert = 16 * time.Minute
39+
)
40+
41+
// lbCreateTimeoutFor returns the timeout to use when waiting for the given
42+
// Load Balancer service to become ready.
43+
func lbCreateTimeoutFor(svc *corev1.Service) time.Duration {
44+
certAnnotations := []annotation.Name{
45+
annotation.LBSvcHTTPCertificates,
46+
annotation.LBSvcHTTPCertificateType,
47+
annotation.LBSvcHTTPManagedCertificateName,
48+
annotation.LBSvcHTTPManagedCertificateDomains,
49+
}
50+
for _, a := range certAnnotations {
51+
if _, ok := svc.Annotations[string(a)]; ok {
52+
return lbCreateTimeoutCert
53+
}
54+
}
55+
return lbCreateTimeoutDefault
56+
}
57+
3358
var rng *rand.Rand
3459

3560
func init() {
@@ -291,10 +316,13 @@ func (l *lbTestHelper) ServiceDefinition(pod *corev1.Pod, annotations map[string
291316
}
292317

293318
// CreateService creates a k8s service based on the given service definition
294-
// and waits until it is "ready".
295-
func (l *lbTestHelper) CreateService(lbSvc *corev1.Service, timeout time.Duration) (*corev1.Service, error) {
319+
// and waits until it is "ready". The wait timeout is derived from the service
320+
// annotations: services that provision certificates get a longer timeout.
321+
func (l *lbTestHelper) CreateService(lbSvc *corev1.Service) (*corev1.Service, error) {
296322
l.t.Helper()
297323

324+
timeout := lbCreateTimeoutFor(lbSvc)
325+
298326
lbSvc, err := testCluster.k8sClient.CoreV1().Services(l.namespace).Create(l.t.Context(), lbSvc, metav1.CreateOptions{})
299327
if err != nil {
300328
return nil, fmt.Errorf("could not create service: %w", err)

tests/e2e/robot_test.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ package e2e
44

55
import (
66
"testing"
7-
"time"
87

98
"github.com/stretchr/testify/assert"
109
"github.com/stretchr/testify/require"
@@ -88,7 +87,7 @@ func TestServiceLoadBalancersRobot(t *testing.T) {
8887
string(annotation.LBNodeSelector): "instance.hetzner.cloud/is-root-server=true",
8988
})
9089

91-
lbSvc, err = lbTest.CreateService(lbSvc, 8*time.Minute)
90+
lbSvc, err = lbTest.CreateService(lbSvc)
9291
require.NoError(t, err)
9392

9493
err = lbTest.WaitForHTTPAvailable(lbSvc.Status.LoadBalancer.Ingress[0].IP, false)

0 commit comments

Comments
 (0)