From dd84b9d64fb98746a230cd24233ff50a562c39c9 Mon Sep 17 00:00:00 2001 From: 简律纯 Date: Fri, 28 Apr 2023 01:36:44 +0800 Subject: --- cli/internal/logstreamer/logstreamer_test.go | 114 +++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 cli/internal/logstreamer/logstreamer_test.go (limited to 'cli/internal/logstreamer/logstreamer_test.go') diff --git a/cli/internal/logstreamer/logstreamer_test.go b/cli/internal/logstreamer/logstreamer_test.go new file mode 100644 index 0000000..94d8a82 --- /dev/null +++ b/cli/internal/logstreamer/logstreamer_test.go @@ -0,0 +1,114 @@ +// Copyright (c) 2013 Kevin van Zonneveld . All rights reserved. +// Source: https://github.com/kvz/logstreamer +// SPDX-License-Identifier: MIT +package logstreamer + +import ( + "bufio" + "bytes" + "fmt" + "log" + "os" + "os/exec" + "strings" + "testing" +) + +func TestLogstreamerOk(t *testing.T) { + // Create a logger (your app probably already has one) + logger := log.New(os.Stdout, "--> ", log.Ldate|log.Ltime) + + // Setup a streamer that we'll pipe cmd.Stdout to + logStreamerOut := NewLogstreamer(logger, "stdout", false) + defer logStreamerOut.Close() + // Setup a streamer that we'll pipe cmd.Stderr to. + // We want to record/buffer anything that's written to this (3rd argument true) + logStreamerErr := NewLogstreamer(logger, "stderr", true) + defer logStreamerErr.Close() + + // Execute something that succeeds + cmd := exec.Command( + "ls", + "-al", + ) + cmd.Stderr = logStreamerErr + cmd.Stdout = logStreamerOut + + // Reset any error we recorded + logStreamerErr.FlushRecord() + + // Execute command + err := cmd.Start() + + // Failed to spawn? + if err != nil { + t.Fatal("ERROR could not spawn command.", err.Error()) + } + + // Failed to execute? + err = cmd.Wait() + if err != nil { + t.Fatal("ERROR command finished with error. ", err.Error(), logStreamerErr.FlushRecord()) + } +} + +func TestLogstreamerErr(t *testing.T) { + // Create a logger (your app probably already has one) + logger := log.New(os.Stdout, "--> ", log.Ldate|log.Ltime) + + // Setup a streamer that we'll pipe cmd.Stdout to + logStreamerOut := NewLogstreamer(logger, "stdout", false) + defer logStreamerOut.Close() + // Setup a streamer that we'll pipe cmd.Stderr to. + // We want to record/buffer anything that's written to this (3rd argument true) + logStreamerErr := NewLogstreamer(logger, "stderr", true) + defer logStreamerErr.Close() + + // Execute something that succeeds + cmd := exec.Command( + "ls", + "nonexisting", + ) + cmd.Stderr = logStreamerErr + cmd.Stdout = logStreamerOut + + // Reset any error we recorded + logStreamerErr.FlushRecord() + + // Execute command + err := cmd.Start() + + // Failed to spawn? + if err != nil { + logger.Print("ERROR could not spawn command. ") + } + + // Failed to execute? + err = cmd.Wait() + if err != nil { + fmt.Printf("Good. command finished with %s. %s. \n", err.Error(), logStreamerErr.FlushRecord()) + } else { + t.Fatal("This command should have failed") + } +} + +func TestLogstreamerFlush(t *testing.T) { + const text = "Text without newline" + + var buffer bytes.Buffer + byteWriter := bufio.NewWriter(&buffer) + + logger := log.New(byteWriter, "", 0) + logStreamerOut := NewLogstreamer(logger, "", false) + defer logStreamerOut.Close() + + logStreamerOut.Write([]byte(text)) + logStreamerOut.Flush() + byteWriter.Flush() + + s := strings.TrimSpace(buffer.String()) + + if s != text { + t.Fatalf("Expected '%s', got '%s'.", text, s) + } +} -- cgit v1.2.3-70-g09d2