Skip to content

Commit cd3ed4b

Browse files
Use real LocalStack resources in status command integration test (#143)
1 parent b97cdeb commit cd3ed4b

3 files changed

Lines changed: 90 additions & 25 deletions

File tree

test/integration/go.mod

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,14 @@ module github.com/localstack/lstk/test/integration
33
go 1.25.6
44

55
require (
6+
github.com/aws/aws-sdk-go-v2 v1.41.4
7+
github.com/aws/aws-sdk-go-v2/config v1.32.12
8+
github.com/aws/aws-sdk-go-v2/credentials v1.19.12
9+
github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1
10+
github.com/aws/aws-sdk-go-v2/service/sqs v1.42.24
611
github.com/creack/pty v1.1.18
712
github.com/docker/docker v28.2.2+incompatible
13+
github.com/docker/go-connections v0.6.0
814
github.com/google/uuid v1.6.0
915
github.com/stretchr/testify v1.11.1
1016
github.com/zalando/go-keyring v0.2.6
@@ -13,14 +19,28 @@ require (
1319
require (
1420
al.essio.dev/pkg/shellescape v1.5.1 // indirect
1521
github.com/Microsoft/go-winio v0.4.21 // indirect
22+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 // indirect
23+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect
24+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect
25+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect
26+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect
27+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 // indirect
28+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect
29+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 // indirect
30+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect
31+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 // indirect
32+
github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect
33+
github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect
34+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect
35+
github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 // indirect
36+
github.com/aws/smithy-go v1.24.2 // indirect
1637
github.com/cespare/xxhash/v2 v2.3.0 // indirect
1738
github.com/containerd/errdefs v1.0.0 // indirect
1839
github.com/containerd/errdefs/pkg v0.3.0 // indirect
1940
github.com/containerd/log v0.1.0 // indirect
2041
github.com/danieljoos/wincred v1.2.2 // indirect
2142
github.com/davecgh/go-spew v1.1.1 // indirect
2243
github.com/distribution/reference v0.6.0 // indirect
23-
github.com/docker/go-connections v0.6.0 // indirect
2444
github.com/docker/go-units v0.5.0 // indirect
2545
github.com/felixge/httpsnoop v1.0.4 // indirect
2646
github.com/go-logr/logr v1.4.3 // indirect

test/integration/go.sum

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,46 @@ github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEK
44
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
55
github.com/Microsoft/go-winio v0.4.21 h1:+6mVbXh4wPzUrl1COX9A+ZCvEpYsOBZ6/+kwDnvLyro=
66
github.com/Microsoft/go-winio v0.4.21/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
7+
github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k=
8+
github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o=
9+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 h1:3kGOqnh1pPeddVa/E37XNTaWJ8W6vrbYV9lJEkCnhuY=
10+
github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI=
11+
github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0=
12+
github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g=
13+
github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8=
14+
github.com/aws/aws-sdk-go-v2/credentials v1.19.12/go.mod h1:U3R1RtSHx6NB0DvEQFGyf/0sbrpJrluENHdPy1j/3TE=
15+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 h1:zOgq3uezl5nznfoK3ODuqbhVg1JzAGDUhXOsU0IDCAo=
16+
github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20/go.mod h1:z/MVwUARehy6GAg/yQ1GO2IMl0k++cu1ohP9zo887wE=
17+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 h1:CNXO7mvgThFGqOFgbNAP2nol2qAWBOGfqR/7tQlvLmc=
18+
github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20/go.mod h1:oydPDJKcfMhgfcgBUZaG+toBbwy8yPWubJXBVERtI4o=
19+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDkWUbDEjGLb+raoBMFsTodcoYKw=
20+
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc=
21+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw=
22+
github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY=
23+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 h1:SwGMTMLIlvDNyhMteQ6r8IJSBPlRdXX5d4idhIGbkXA=
24+
github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21/go.mod h1:UUxgWxofmOdAMuqEsSppbDtGKLfR04HGsD0HXzvhI1k=
25+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY=
26+
github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI=
27+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 h1:qtJZ70afD3ISKWnoX3xB0J2otEqu3LqicRcDBqsj0hQ=
28+
github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12/go.mod h1:v2pNpJbRNl4vEUWEh5ytQok0zACAKfdmKS51Hotc3pQ=
29+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y=
30+
github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk=
31+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 h1:siU1A6xjUZ2N8zjTHSXFhB9L/2OY8Dqs0xXiLjF30jA=
32+
github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20/go.mod h1:4TLZCmVJDM3FOu5P5TJP0zOlu9zWgDWU7aUxWbr+rcw=
33+
github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 h1:csi9NLpFZXb9fxY7rS1xVzgPRGMt7MSNWeQ6eo247kE=
34+
github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1/go.mod h1:qXVal5H0ChqXP63t6jze5LmFalc7+ZE7wOdLtZ0LCP0=
35+
github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow=
36+
github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE=
37+
github.com/aws/aws-sdk-go-v2/service/sqs v1.42.24 h1:JP2wjWGmUp8lTCZb13Dv0Eciyc1jbO8pd0HZVMHFlrc=
38+
github.com/aws/aws-sdk-go-v2/service/sqs v1.42.24/go.mod h1:Ql9ziDutk8ERAN9HMaYANCW3lop451ppebkxEJMLCTM=
39+
github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o=
40+
github.com/aws/aws-sdk-go-v2/service/sso v1.30.13/go.mod h1:2h/xGEowcW/g38g06g3KpRWDlT+OTfxxI0o1KqayAB8=
41+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 h1:jzKAXIlhZhJbnYwHbvUQZEB8KfgAEuG0dc08Bkda7NU=
42+
github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17/go.mod h1:Al9fFsXjv4KfbzQHGe6V4NZSZQXecFcvaIF4e70FoRA=
43+
github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 h1:Cng+OOwCHmFljXIxpEVXAGMnBia8MSU6Ch5i9PgBkcU=
44+
github.com/aws/aws-sdk-go-v2/service/sts v1.41.9/go.mod h1:LrlIndBDdjA/EeXeyNBle+gyCwTlizzW5ycgWnvIxkk=
45+
github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng=
46+
github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc=
747
github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM=
848
github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
949
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=

test/integration/status_test.go

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,11 @@ import (
1010
"strings"
1111
"testing"
1212

13+
"github.com/aws/aws-sdk-go-v2/aws"
14+
awsconfig "github.com/aws/aws-sdk-go-v2/config"
15+
"github.com/aws/aws-sdk-go-v2/credentials"
16+
"github.com/aws/aws-sdk-go-v2/service/s3"
17+
"github.com/aws/aws-sdk-go-v2/service/sqs"
1318
"github.com/localstack/lstk/test/integration/env"
1419
"github.com/stretchr/testify/assert"
1520
"github.com/stretchr/testify/require"
@@ -32,44 +37,44 @@ func TestStatusCommandFailsWhenNotRunning(t *testing.T) {
3237

3338
func TestStatusCommandShowsResourcesWhenRunning(t *testing.T) {
3439
requireDocker(t)
40+
_ = env.Require(t, env.AuthToken)
3541
cleanup()
3642
t.Cleanup(cleanup)
3743

3844
ctx := testContext(t)
39-
startTestContainer(t, ctx)
4045

41-
// Mock the LocalStack HTTP API so we can test resource display without a real LocalStack instance.
42-
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
43-
switch r.URL.Path {
44-
case "/_localstack/health":
45-
w.Header().Set("Content-Type", "application/json")
46-
_, _ = fmt.Fprintln(w, `{"version": "4.14.1", "services": {}}`)
47-
case "/_localstack/resources":
48-
w.Header().Set("Content-Type", "application/x-ndjson")
49-
_, _ = fmt.Fprintln(w, `{"AWS::S3::Bucket": [{"region_name": "global", "account_id": "000000000000", "id": "my-bucket"}]}`)
50-
_, _ = fmt.Fprintln(w, `{"AWS::Lambda::Function": [{"region_name": "us-east-1", "account_id": "000000000000", "id": "my-function"}]}`)
51-
default:
52-
w.WriteHeader(http.StatusNotFound)
53-
}
54-
}))
55-
defer server.Close()
46+
mockServer := createMockLicenseServer(true)
47+
defer mockServer.Close()
5648

57-
host := strings.TrimPrefix(server.URL, "http://")
49+
_, stderr, err := runLstk(t, ctx, "", env.With(env.APIEndpoint, mockServer.URL), "start")
50+
require.NoError(t, err, "lstk start failed: %s", stderr)
51+
52+
awsCfg, err := awsconfig.LoadDefaultConfig(ctx,
53+
awsconfig.WithRegion("us-east-1"),
54+
awsconfig.WithCredentialsProvider(credentials.NewStaticCredentialsProvider("test", "test", "")),
55+
awsconfig.WithBaseEndpoint("http://localhost:4566"),
56+
)
57+
require.NoError(t, err)
58+
59+
s3Client := s3.NewFromConfig(awsCfg, func(o *s3.Options) { o.UsePathStyle = true })
60+
_, err = s3Client.CreateBucket(ctx, &s3.CreateBucketInput{Bucket: aws.String("my-test-bucket")})
61+
require.NoError(t, err, "failed to create S3 bucket")
62+
63+
sqsClient := sqs.NewFromConfig(awsCfg)
64+
_, err = sqsClient.CreateQueue(ctx, &sqs.CreateQueueInput{QueueName: aws.String("my-test-queue")})
65+
require.NoError(t, err, "failed to create SQS queue")
5866

5967
analyticsSrv, events := mockAnalyticsServer(t)
60-
stdout, stderr, err := runLstk(t, ctx, "", env.With(env.LocalStackHost, host).With(env.AnalyticsEndpoint, analyticsSrv.URL), "status")
68+
stdout, stderr, err := runLstk(t, ctx, "", env.With(env.AnalyticsEndpoint, analyticsSrv.URL), "status")
6169
require.NoError(t, err, "lstk status failed: %s", stderr)
6270
requireExitCode(t, 0, err)
6371
assert.Contains(t, stdout, "running")
64-
assert.Contains(t, stdout, "4.14.1")
65-
assert.Contains(t, stdout, "2 resources")
66-
assert.Contains(t, stdout, "2 services")
6772
assert.Contains(t, stdout, "SERVICE")
6873
assert.Contains(t, stdout, "RESOURCE")
6974
assert.Contains(t, stdout, "S3")
70-
assert.Contains(t, stdout, "my-bucket")
71-
assert.Contains(t, stdout, "Lambda")
72-
assert.Contains(t, stdout, "my-function")
75+
assert.Contains(t, stdout, "my-test-bucket")
76+
assert.Contains(t, stdout, "SQS")
77+
assert.Contains(t, stdout, "my-test-queue")
7378
assertCommandTelemetry(t, events, "status", 0)
7479
}
7580

0 commit comments

Comments
 (0)