diff --git a/internal/deploy/deploy.go b/internal/deploy/deploy.go index edbe894..e7bbf20 100644 --- a/internal/deploy/deploy.go +++ b/internal/deploy/deploy.go @@ -3,6 +3,7 @@ package deploy import ( "context" "fmt" + "io" "log" "net/url" "os" @@ -34,8 +35,14 @@ func (d *SlidingSyncDeployment) SlidingSyncURL(t *testing.T) string { return d.slidingSyncURL } -func (d *SlidingSyncDeployment) Teardown() { +func (d *SlidingSyncDeployment) Teardown(writeLogs bool) { if d.slidingSync != nil { + if writeLogs { + err := writeContainerLogs(d.slidingSync, "container-sliding-sync.log") + if err != nil { + log.Printf("failed to write sliding sync logs: %s", err) + } + } if err := d.slidingSync.Terminate(context.Background()); err != nil { log.Fatalf("failed to stop sliding sync: %s", err) } @@ -148,3 +155,19 @@ func externalURL(t *testing.T, c testcontainers.Container, exposedPort string) s must.NotError(t, "failed to get mapped port", err) return fmt.Sprintf("http://%s:%s", host, mappedPort.Port()) } + +func writeContainerLogs(container testcontainers.Container, filename string) error { + w, err := os.Create(filename) + if err != nil { + return fmt.Errorf("os.Create: %s", err) + } + reader, err := container.Logs(context.Background()) + if err != nil { + return fmt.Errorf("container.Logs: %s", err) + } + _, err = io.Copy(w, reader) + if err != nil { + return fmt.Errorf("io.Copy: %s", err) + } + return nil +} diff --git a/tests/main_test.go b/tests/main_test.go index 7368406..977eb85 100644 --- a/tests/main_test.go +++ b/tests/main_test.go @@ -47,7 +47,7 @@ func TestMain(m *testing.M) { complement.TestMainWithCleanup(m, "crypto", func() { // always teardown even if panicking ssMutex.Lock() if ssDeployment != nil { - ssDeployment.Teardown() + ssDeployment.Teardown(os.Getenv("COMPLEMENT_CRYPTO_WRITE_CONTAINER_LOGS") == "1") } ssMutex.Unlock() api.WriteJSLogs()