Skip to content

Commit 728d1e8

Browse files
committed
Fix race condition in TestRuntimeDoneHook
Because we start the http server in the background, sometimes it's not ready when we try to call it.
1 parent fb71920 commit 728d1e8

File tree

1 file changed

+21
-0
lines changed

1 file changed

+21
-0
lines changed

internal/awslambda/extension/telemetry/server_test.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@ package telemetry
33
import (
44
"bytes"
55
"context"
6+
"fmt"
67
"net"
78
"net/http"
9+
"strings"
810
"testing"
911
"time"
1012

@@ -75,6 +77,10 @@ func TestRuntimeDoneHook(t *testing.T) {
7577
defer cancel()
7678
go s.Start(ctx)
7779

80+
if err := waitForListener(l.Addr().String(), 1*time.Second); err != nil {
81+
panic(err)
82+
}
83+
7884
res, err := http.Post(s.Endpoint(), "application/json", bytes.NewReader(p))
7985
require.NoError(t, err)
8086
defer res.Body.Close()
@@ -85,6 +91,21 @@ func TestRuntimeDoneHook(t *testing.T) {
8591
}
8692
}
8793

94+
func waitForListener(addr string, timeout time.Duration) error {
95+
stop := time.Now().Add(timeout)
96+
var err error
97+
for time.Now().Before(stop) {
98+
var c net.Conn
99+
if c, err = net.Dial("tcp", addr); err == nil {
100+
_ = c.Close()
101+
return nil
102+
} else if !strings.Contains(err.Error(), "connection refused") {
103+
return err
104+
}
105+
}
106+
return fmt.Errorf("timed out waiting for listener: %w", err)
107+
}
108+
88109
func TestServerReturnsCorrectEndpoint(t *testing.T) {
89110
t.Parallel()
90111
s := NewServer(LambdaRuntimeAvailableAddr, logrus.New(), NoopHook())

0 commit comments

Comments
 (0)