diff --git a/test/framework/common/log/buffered_log_writer.go b/test/framework/common/log/buffered_log_writer.go index dba2a2ceea..434eb12b92 100644 --- a/test/framework/common/log/buffered_log_writer.go +++ b/test/framework/common/log/buffered_log_writer.go @@ -37,31 +37,38 @@ func NewBufferedLogWriter() *BufferedLogWriter { } func (w *BufferedLogWriter) FlushToArtifactsDir(name string) { + w.mtx.Lock() + defer w.mtx.Unlock() if dir := os.Getenv("ARTIFACT_DIR"); dir != "" { if parts := strings.SplitAfter(name, "/test/"); len(parts) == 2 { name = strings.ReplaceAll(parts[1], "/", "_") fullPath := path.Join(dir, name) if file, err := os.Create(fullPath); err != nil { - w.out = os.Stdout w.log.Error(err, fmt.Sprintf("Unable to flush logs to file: %s", fullPath)) } else { w.out = file - defer errors.LogIfError(file.Close()) + w.flushLocked() + errors.LogIfError(file.Close()) + w.out = os.Stdout + return } } + } + w.flushLocked() +} +func (w *BufferedLogWriter) flushLocked() { + if _, err := w.out.Write(w.buffer); err != nil { + w.log.Error(err, "error flushing log messages") } - w.Flush() + w.buffer = []byte{} } // Flush the contents of the sink func (w *BufferedLogWriter) Flush() { w.mtx.Lock() defer w.mtx.Unlock() - if _, err := w.out.Write(w.buffer); err != nil { - w.log.Error(err, "error flushing log messages") - } - w.buffer = []byte{} + w.flushLocked() } func (w *BufferedLogWriter) Write(p []byte) (n int, err error) { diff --git a/test/functional/outputs/http/forward_to_http_test.go b/test/functional/outputs/http/forward_to_http_test.go index 5c33eda504..3cebc4c789 100644 --- a/test/functional/outputs/http/forward_to_http_test.go +++ b/test/functional/outputs/http/forward_to_http_test.go @@ -176,6 +176,7 @@ var _ = Describe("[Functional][Outputs][Http] Functional tests", func() { Context("timestamp in audit logs", func() { DescribeTable("audit log should have a valid timestamp", func(writeLog func() error, logSource obs.AuditSource) { + framework = functional.NewCollectorFunctionalFramework() obstestruntime.NewClusterLogForwarderBuilder(framework.Forwarder). FromInput(obs.InputTypeAudit). ToHttpOutput()