| package logrus |
| |
| import ( |
| "io/ioutil" |
| "log" |
| "os" |
| "os/exec" |
| "path/filepath" |
| "testing" |
| "time" |
| ) |
| |
| func TestRegister(t *testing.T) { |
| current := len(handlers) |
| RegisterExitHandler(func() {}) |
| if len(handlers) != current+1 { |
| t.Fatalf("expected %d handlers, got %d", current+1, len(handlers)) |
| } |
| } |
| |
| func TestHandler(t *testing.T) { |
| tempDir, err := ioutil.TempDir("", "test_handler") |
| if err != nil { |
| log.Fatalf("can't create temp dir. %q", err) |
| } |
| defer os.RemoveAll(tempDir) |
| |
| gofile := filepath.Join(tempDir, "gofile.go") |
| if err := ioutil.WriteFile(gofile, testprog, 0666); err != nil { |
| t.Fatalf("can't create go file. %q", err) |
| } |
| |
| outfile := filepath.Join(tempDir, "outfile.out") |
| arg := time.Now().UTC().String() |
| err = exec.Command("go", "run", gofile, outfile, arg).Run() |
| if err == nil { |
| t.Fatalf("completed normally, should have failed") |
| } |
| |
| data, err := ioutil.ReadFile(outfile) |
| if err != nil { |
| t.Fatalf("can't read output file %s. %q", outfile, err) |
| } |
| |
| if string(data) != arg { |
| t.Fatalf("bad data. Expected %q, got %q", data, arg) |
| } |
| } |
| |
| var testprog = []byte(` |
| // Test program for atexit, gets output file and data as arguments and writes |
| // data to output file in atexit handler. |
| package main |
| |
| import ( |
| "github.com/sirupsen/logrus" |
| "flag" |
| "fmt" |
| "io/ioutil" |
| ) |
| |
| var outfile = "" |
| var data = "" |
| |
| func handler() { |
| ioutil.WriteFile(outfile, []byte(data), 0666) |
| } |
| |
| func badHandler() { |
| n := 0 |
| fmt.Println(1/n) |
| } |
| |
| func main() { |
| flag.Parse() |
| outfile = flag.Arg(0) |
| data = flag.Arg(1) |
| |
| logrus.RegisterExitHandler(handler) |
| logrus.RegisterExitHandler(badHandler) |
| logrus.Fatal("Bye bye") |
| } |
| `) |