Skip to content
This repository was archived by the owner on Jul 31, 2025. It is now read-only.

Commit ab0bbeb

Browse files
authored
Ensuren SDK's testing HTTP server usage are cleaned up (#2841)
Ensure HTTP servers are cleaned up during testing after no longer needed. This was creating excessive noise in testing stack traces due to the number of background goroutines active. Also updated SDK's unit tests to use verbose logging, have shorter runtime, and have a timeout fo 5m. Related to #2840
1 parent a7e6470 commit ab0bbeb

File tree

23 files changed

+256
-130
lines changed

23 files changed

+256
-130
lines changed

Makefile

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ SDK_TESTING_PKGS=./awstesting/...
2020
SDK_MODELS_PKGS=./models/...
2121
SDK_ALL_PKGS=${SDK_COMPA_PKGS} ${SDK_TESTING_PKGS} ${SDK_EXAMPLES_PKGS} ${SDK_MODELS_PKGS}
2222

23+
TEST_TIMEOUT=-timeout 5m
24+
2325
all: generate unit
2426

2527
###################
@@ -57,20 +59,18 @@ build:
5759
go build -o /dev/null -tags ${ALL_TAGS} ${SDK_ALL_PKGS}
5860

5961
unit-no-verify:
60-
@echo "go test SDK and vendor packages with no linting"
61-
go test -count=1 -tags ${UNIT_TEST_TAGS} ${SDK_ALL_PKGS}
62-
63-
unit: verify build
6462
@echo "go test SDK and vendor packages"
65-
go test -count=1 -tags ${UNIT_TEST_TAGS} ${SDK_ALL_PKGS}
63+
go test ${TEST_TIMEOUT} -v -count=1 -tags ${UNIT_TEST_TAGS} ${SDK_ALL_PKGS}
64+
65+
unit: verify build unit-no-verify
6666

6767
unit-with-race-cover: verify build
6868
@echo "go test SDK and vendor packages"
69-
go test -v -count=1 -tags ${UNIT_TEST_TAGS} -race -cpu=1,2,4 ${SDK_ALL_PKGS}
69+
go test ${TEST_TIMEOUT} -v -count=1 -tags ${UNIT_TEST_TAGS} -race -cpu=1,2,4 ${SDK_ALL_PKGS}
7070

7171
unit-old-go-race-cover:
7272
@echo "go test SDK only packages for old Go versions"
73-
go test -v -count=1 -race -cpu=1,2,4 ${SDK_COMPA_PKGS}
73+
go test ${TEST_TIMEOUT} -v -count=1 -race -cpu=1,2,4 ${SDK_COMPA_PKGS}
7474

7575
ci-test: generate unit-with-race-cover ci-test-generate-validate
7676

aws/corehandlers/handlers_1_10_test.go

Lines changed: 26 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,50 +3,42 @@
33
package corehandlers_test
44

55
import (
6-
"crypto/tls"
6+
"bytes"
7+
"io"
78
"net/http"
9+
"net/http/httptest"
810
"testing"
911

1012
"github.com/aws/aws-sdk-go/aws"
1113
"github.com/aws/aws-sdk-go/aws/credentials"
1214
"github.com/aws/aws-sdk-go/aws/request"
13-
"github.com/aws/aws-sdk-go/aws/session"
14-
"github.com/aws/aws-sdk-go/awstesting"
15+
"github.com/aws/aws-sdk-go/awstesting/unit"
1516
"github.com/aws/aws-sdk-go/service/s3"
16-
"golang.org/x/net/http2"
1717
)
1818

1919
func TestSendHandler_HEADNoBody(t *testing.T) {
20-
TLSBundleCertFile, TLSBundleKeyFile, TLSBundleCAFile, err := awstesting.CreateTLSBundleFiles()
21-
if err != nil {
22-
panic(err)
23-
}
24-
defer awstesting.CleanupTLSBundleFiles(TLSBundleCertFile, TLSBundleKeyFile, TLSBundleCAFile)
25-
26-
endpoint, err := awstesting.CreateTLSServer(TLSBundleCertFile, TLSBundleKeyFile, nil)
27-
if err != nil {
28-
t.Fatalf("expect no error, got %v", err)
29-
}
30-
31-
transport := http.DefaultTransport.(*http.Transport)
32-
// test server's certificate is self-signed certificate
33-
transport.TLSClientConfig = &tls.Config{InsecureSkipVerify: true}
34-
http2.ConfigureTransport(transport)
35-
36-
sess, err := session.NewSessionWithOptions(session.Options{
37-
Config: aws.Config{
38-
HTTPClient: &http.Client{},
39-
Endpoint: aws.String(endpoint),
40-
Region: aws.String("mock-region"),
41-
Credentials: credentials.AnonymousCredentials,
42-
S3ForcePathStyle: aws.Bool(true),
43-
},
20+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
21+
defer r.Body.Close()
22+
if e, a := "HEAD", r.Method; e != a {
23+
t.Errorf("expected %v method, got %v", e, a)
24+
}
25+
var buf bytes.Buffer
26+
io.Copy(&buf, r.Body)
27+
28+
if n := buf.Len(); n != 0 {
29+
t.Errorf("expect empty body, got %d", n)
30+
}
31+
32+
w.WriteHeader(http.StatusOK)
33+
}))
34+
defer server.Close()
35+
36+
svc := s3.New(unit.Session, &aws.Config{
37+
Endpoint: aws.String(server.URL),
38+
Credentials: credentials.AnonymousCredentials,
39+
S3ForcePathStyle: aws.Bool(true),
40+
DisableSSL: aws.Bool(true),
4441
})
45-
if err != nil {
46-
t.Fatalf("expect no error, got %v", err)
47-
}
48-
49-
svc := s3.New(sess)
5042

5143
req, _ := svc.HeadObjectRequest(&s3.HeadObjectInput{
5244
Bucket: aws.String("bucketname"),
@@ -57,8 +49,7 @@ func TestSendHandler_HEADNoBody(t *testing.T) {
5749
t.Fatalf("expect %T request body, got %T", e, a)
5850
}
5951

60-
err = req.Send()
61-
if err != nil {
52+
if err := req.Send(); err != nil {
6253
t.Fatalf("expect no error, got %v", err)
6354
}
6455
if e, a := http.StatusOK, req.HTTPResponse.StatusCode; e != a {

aws/corehandlers/handlers_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,6 +239,7 @@ func TestSendWithoutFollowRedirects(t *testing.T) {
239239
t.Fatalf("expect not to redirect, but was")
240240
}
241241
}))
242+
defer server.Close()
242243

243244
svc := awstesting.NewClient(&aws.Config{
244245
DisableSSL: aws.Bool(true),
@@ -344,6 +345,7 @@ func setupContentLengthTestServer(t *testing.T, hasContentLength bool, contentLe
344345

345346
func TestBuildContentLength_ZeroBody(t *testing.T) {
346347
server := setupContentLengthTestServer(t, false, 0)
348+
defer server.Close()
347349

348350
svc := s3.New(unit.Session, &aws.Config{
349351
Endpoint: aws.String(server.URL),
@@ -362,6 +364,7 @@ func TestBuildContentLength_ZeroBody(t *testing.T) {
362364

363365
func TestBuildContentLength_NegativeBody(t *testing.T) {
364366
server := setupContentLengthTestServer(t, false, 0)
367+
defer server.Close()
365368

366369
svc := s3.New(unit.Session, &aws.Config{
367370
Endpoint: aws.String(server.URL),
@@ -382,6 +385,7 @@ func TestBuildContentLength_NegativeBody(t *testing.T) {
382385

383386
func TestBuildContentLength_WithBody(t *testing.T) {
384387
server := setupContentLengthTestServer(t, true, 1024)
388+
defer server.Close()
385389

386390
svc := s3.New(unit.Session, &aws.Config{
387391
Endpoint: aws.String(server.URL),

aws/credentials/credentials_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package credentials
22

33
import (
44
"math/rand"
5+
"sync"
56
"testing"
67
"time"
78

@@ -107,17 +108,20 @@ func TestCredentialsIsExpired_Race(t *testing.T) {
107108
creds := NewChainCredentials([]Provider{&MockProvider{}})
108109

109110
starter := make(chan struct{})
111+
var wg sync.WaitGroup
112+
wg.Add(10)
110113
for i := 0; i < 10; i++ {
111114
go func() {
115+
defer wg.Done()
112116
<-starter
113-
for {
117+
for i := 0; i < 100; i++ {
114118
creds.IsExpired()
115119
}
116120
}()
117121
}
118122
close(starter)
119123

120-
time.Sleep(10 * time.Second)
124+
wg.Wait()
121125
}
122126

123127
func TestCredentialsExpiresAt_NoExpirer(t *testing.T) {

aws/credentials/endpointcreds/provider_test.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ func TestRetrieveRefreshableCredentials(t *testing.T) {
3737
fmt.Println("failed to write out creds", err)
3838
}
3939
}))
40+
defer server.Close()
4041

4142
client := endpointcreds.NewProviderClient(*unit.Session.Config,
4243
unit.Session.Handlers,
@@ -82,6 +83,7 @@ func TestRetrieveStaticCredentials(t *testing.T) {
8283
fmt.Println("failed to write out creds", err)
8384
}
8485
}))
86+
defer server.Close()
8587

8688
client := endpointcreds.NewProviderClient(*unit.Session.Config, unit.Session.Handlers, server.URL)
8789
creds, err := client.Retrieve()
@@ -117,6 +119,7 @@ func TestFailedRetrieveCredentials(t *testing.T) {
117119
fmt.Println("failed to write error", err)
118120
}
119121
}))
122+
defer server.Close()
120123

121124
client := endpointcreds.NewProviderClient(*unit.Session.Config, unit.Session.Handlers, server.URL)
122125
creds, err := client.Retrieve()
@@ -181,6 +184,7 @@ func TestAuthorizationToken(t *testing.T) {
181184
fmt.Println("failed to write out creds", err)
182185
}
183186
}))
187+
defer server.Close()
184188

185189
client := endpointcreds.NewProviderClient(*unit.Session.Config,
186190
unit.Session.Handlers,

aws/csm/reporter_test.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717
"github.com/aws/aws-sdk-go/aws/client/metadata"
1818
"github.com/aws/aws-sdk-go/aws/csm"
1919
"github.com/aws/aws-sdk-go/aws/request"
20-
"github.com/aws/aws-sdk-go/aws/signer/v4"
20+
v4 "github.com/aws/aws-sdk-go/aws/signer/v4"
2121
"github.com/aws/aws-sdk-go/awstesting/unit"
2222
"github.com/aws/aws-sdk-go/private/protocol/jsonrpc"
2323
)
@@ -277,6 +277,7 @@ func BenchmarkWithCSM(b *testing.B) {
277277
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
278278
w.Write([]byte(fmt.Sprintf("{}")))
279279
}))
280+
defer server.Close()
280281

281282
cfg := aws.Config{
282283
Endpoint: aws.String(server.URL),
@@ -322,6 +323,7 @@ func BenchmarkWithCSMNoUDPConnection(b *testing.B) {
322323
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
323324
w.Write([]byte(fmt.Sprintf("{}")))
324325
}))
326+
defer server.Close()
325327

326328
cfg := aws.Config{
327329
Endpoint: aws.String(server.URL),
@@ -368,6 +370,7 @@ func BenchmarkWithoutCSM(b *testing.B) {
368370
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
369371
w.Write([]byte(fmt.Sprintf("{}")))
370372
}))
373+
defer server.Close()
371374

372375
cfg := aws.Config{
373376
Endpoint: aws.String(server.URL),

aws/ec2metadata/service_test.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ func TestClientOverrideDefaultHTTPClientTimeoutRace(t *testing.T) {
6262
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
6363
w.Write([]byte("us-east-1a"))
6464
}))
65+
defer server.Close()
6566

6667
cfg := aws.NewConfig().WithEndpoint(server.URL)
6768
runEC2MetadataClients(t, cfg, 100)
@@ -71,6 +72,7 @@ func TestClientOverrideDefaultHTTPClientTimeoutRaceWithTransport(t *testing.T) {
7172
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
7273
w.Write([]byte("us-east-1a"))
7374
}))
75+
defer server.Close()
7476

7577
cfg := aws.NewConfig().WithEndpoint(server.URL).WithHTTPClient(&http.Client{
7678
Transport: http.DefaultTransport,

aws/request/request_1_8_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ func TestRequest_FollowPUTRedirects(t *testing.T) {
5858
t.Fatalf("unexpected endpoint used, %q", r.URL.String())
5959
}
6060
}))
61+
defer server.Close()
6162

6263
svc := awstesting.NewClient(&aws.Config{
6364
Region: unit.Session.Config.Region,

0 commit comments

Comments
 (0)