2016-06-24 17:23:56 +03:00
|
|
|
package logrus
|
|
|
|
|
|
|
|
import (
|
2016-06-24 17:24:56 +03:00
|
|
|
"io/ioutil"
|
|
|
|
"os/exec"
|
|
|
|
"testing"
|
|
|
|
"time"
|
2016-06-24 17:23:56 +03:00
|
|
|
)
|
|
|
|
|
|
|
|
func TestRegister(t *testing.T) {
|
2016-06-24 17:24:56 +03:00
|
|
|
current := len(handlers)
|
|
|
|
RegisterExitHandler(func() {})
|
|
|
|
if len(handlers) != current+1 {
|
2017-07-27 15:06:49 +03:00
|
|
|
t.Fatalf("expected %d handlers, got %d", current+1, len(handlers))
|
2016-06-24 17:24:56 +03:00
|
|
|
}
|
2016-06-24 17:23:56 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestHandler(t *testing.T) {
|
2016-06-24 17:24:56 +03:00
|
|
|
gofile := "/tmp/testprog.go"
|
|
|
|
if err := ioutil.WriteFile(gofile, testprog, 0666); err != nil {
|
2017-07-27 15:06:49 +03:00
|
|
|
t.Fatalf("can't create go file. %q", err)
|
2016-06-24 17:24:56 +03:00
|
|
|
}
|
2016-06-24 17:23:56 +03:00
|
|
|
|
2016-06-24 17:24:56 +03:00
|
|
|
outfile := "/tmp/testprog.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")
|
|
|
|
}
|
2016-06-24 17:23:56 +03:00
|
|
|
|
2016-06-24 17:24:56 +03:00
|
|
|
data, err := ioutil.ReadFile(outfile)
|
|
|
|
if err != nil {
|
2017-07-27 15:06:49 +03:00
|
|
|
t.Fatalf("can't read output file %s. %q", outfile, err)
|
2016-06-24 17:24:56 +03:00
|
|
|
}
|
2016-06-24 17:23:56 +03:00
|
|
|
|
2016-06-24 17:24:56 +03:00
|
|
|
if string(data) != arg {
|
2017-07-27 15:06:49 +03:00
|
|
|
t.Fatalf("bad data. Expected %q, got %q", data, arg)
|
2016-06-24 17:24:56 +03:00
|
|
|
}
|
2016-06-24 17:23:56 +03:00
|
|
|
}
|
|
|
|
|
|
|
|
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 (
|
2017-05-15 13:45:16 +03:00
|
|
|
"github.com/sirupsen/logrus"
|
2016-06-24 17:23:56 +03:00
|
|
|
"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")
|
|
|
|
}
|
|
|
|
`)
|