Skip to content

Commit 5247525

Browse files
committed
Add integration test for CI and LOCALSTACK_* env var passthrough
1 parent 5ea7307 commit 5247525

1 file changed

Lines changed: 21 additions & 69 deletions

File tree

test/integration/start_test.go

Lines changed: 21 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,13 @@ package integration_test
22

33
import (
44
"context"
5-
"crypto/tls"
6-
"fmt"
75
"net"
8-
"net/http"
96
"os"
107
"path/filepath"
11-
"strconv"
128
"strings"
139
"testing"
1410

1511
"github.com/docker/docker/api/types/container"
16-
"github.com/docker/go-connections/nat"
1712
"github.com/localstack/lstk/test/integration/env"
1813
"github.com/stretchr/testify/assert"
1914
"github.com/stretchr/testify/require"
@@ -164,66 +159,34 @@ func TestStartCommandSetsUpContainerCorrectly(t *testing.T) {
164159
assert.Equal(t, containerName, envVars["MAIN_CONTAINER_NAME"])
165160
assert.NotEmpty(t, envVars["LOCALSTACK_AUTH_TOKEN"])
166161
})
162+
}
167163

168-
t.Run("docker socket mount", func(t *testing.T) {
169-
if !strings.HasPrefix(dockerClient.DaemonHost(), "unix://") {
170-
t.Skip("Docker daemon is not reachable via unix socket")
171-
}
172-
173-
assert.True(t, hasBindTarget(inspect.HostConfig.Binds, "/var/run/docker.sock"),
174-
"expected Docker socket bind mount to /var/run/docker.sock, got: %v", inspect.HostConfig.Binds)
175-
176-
envVars := containerEnvToMap(inspect.Config.Env)
177-
assert.Equal(t, "unix:///var/run/docker.sock", envVars["DOCKER_HOST"])
178-
})
164+
func TestStartCommandPassesCIAndLocalStackEnvVars(t *testing.T) {
165+
requireDocker(t)
166+
_ = env.Require(t, env.AuthToken)
179167

180-
t.Run("service port range", func(t *testing.T) {
181-
for p := 4510; p <= 4559; p++ {
182-
port := nat.Port(fmt.Sprintf("%d/tcp", p))
183-
bindings := inspect.HostConfig.PortBindings[port]
184-
if assert.NotEmpty(t, bindings, "port %d/tcp should be bound", p) {
185-
assert.Equal(t, strconv.Itoa(p), bindings[0].HostPort)
186-
}
187-
}
188-
})
168+
cleanup()
169+
t.Cleanup(cleanup)
189170

190-
t.Run("main port", func(t *testing.T) {
191-
mainBindings := inspect.HostConfig.PortBindings[nat.Port("4566/tcp")]
192-
require.NotEmpty(t, mainBindings, "port 4566/tcp should be bound")
193-
assert.Equal(t, "4566", mainBindings[0].HostPort)
194-
})
171+
t.Setenv("CI", "true")
172+
t.Setenv("LOCALSTACK_DISABLE_EVENTS", "1")
195173

196-
t.Run("https port", func(t *testing.T) {
197-
httpsBindings := inspect.HostConfig.PortBindings[nat.Port("443/tcp")]
198-
require.NotEmpty(t, httpsBindings, "port 443/tcp should be bound")
199-
assert.Equal(t, "443", httpsBindings[0].HostPort)
200-
})
174+
mockServer := createMockLicenseServer(true)
175+
defer mockServer.Close()
201176

202-
t.Run("volume mount", func(t *testing.T) {
203-
assert.True(t, hasBindTarget(inspect.HostConfig.Binds, "/var/lib/localstack"),
204-
"expected volume bind mount to /var/lib/localstack, got: %v", inspect.HostConfig.Binds)
205-
})
177+
ctx := testContext(t)
178+
_, stderr, err := runLstk(t, ctx, "", env.With(env.APIEndpoint, mockServer.URL), "start")
179+
require.NoError(t, err, "lstk start failed: %s", stderr)
180+
requireExitCode(t, 0, err)
206181

207-
t.Run("http health endpoint", func(t *testing.T) {
208-
resp, err := http.Get("http://localhost.localstack.cloud:4566/_localstack/health")
209-
require.NoError(t, err)
210-
defer func() { _ = resp.Body.Close() }()
211-
assert.Equal(t, http.StatusOK, resp.StatusCode)
212-
})
182+
inspect, err := dockerClient.ContainerInspect(ctx, containerName)
183+
require.NoError(t, err, "failed to inspect container")
184+
require.True(t, inspect.State.Running)
213185

214-
t.Run("https health endpoint", func(t *testing.T) {
215-
// LS certificate is not in system trust store
216-
// But cert validity is out of scope here: use InsecureSkipVerify
217-
client := &http.Client{
218-
Transport: &http.Transport{
219-
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
220-
},
221-
}
222-
resp, err := client.Get("https://localhost.localstack.cloud/_localstack/health")
223-
require.NoError(t, err)
224-
defer func() { _ = resp.Body.Close() }()
225-
assert.Equal(t, http.StatusOK, resp.StatusCode)
226-
})
186+
envVars := containerEnvToMap(inspect.Config.Env)
187+
assert.Equal(t, "true", envVars["CI"])
188+
assert.Equal(t, "1", envVars["LOCALSTACK_DISABLE_EVENTS"])
189+
assert.NotEmpty(t, envVars["LOCALSTACK_AUTH_TOKEN"])
227190
}
228191

229192
// containerEnvToMap converts a Docker container's []string env to a map.
@@ -236,17 +199,6 @@ func containerEnvToMap(envList []string) map[string]string {
236199
return m
237200
}
238201

239-
// hasBindTarget checks if any bind mount targets the given container path.
240-
func hasBindTarget(binds []string, containerPath string) bool {
241-
for _, b := range binds {
242-
parts := strings.Split(b, ":")
243-
if len(parts) >= 2 && parts[1] == containerPath {
244-
return true
245-
}
246-
}
247-
return false
248-
}
249-
250202
func cleanup() {
251203
ctx := context.Background()
252204
_ = dockerClient.ContainerStop(ctx, containerName, container.StopOptions{})

0 commit comments

Comments
 (0)