OSDN Git Service

Hulk did something
[bytom/vapor.git] / vendor / github.com / sirupsen / logrus / alt_exit_test.go
1 package logrus
2
3 import (
4         "io/ioutil"
5         "log"
6         "os"
7         "os/exec"
8         "path/filepath"
9         "testing"
10         "time"
11 )
12
13 func TestRegister(t *testing.T) {
14         current := len(handlers)
15         RegisterExitHandler(func() {})
16         if len(handlers) != current+1 {
17                 t.Fatalf("expected %d handlers, got %d", current+1, len(handlers))
18         }
19 }
20
21 func TestHandler(t *testing.T) {
22         tempDir, err := ioutil.TempDir("", "test_handler")
23         if err != nil {
24                 log.Fatalf("can't create temp dir. %q", err)
25         }
26         defer os.RemoveAll(tempDir)
27
28         gofile := filepath.Join(tempDir, "gofile.go")
29         if err := ioutil.WriteFile(gofile, testprog, 0666); err != nil {
30                 t.Fatalf("can't create go file. %q", err)
31         }
32
33         outfile := filepath.Join(tempDir, "outfile.out")
34         arg := time.Now().UTC().String()
35         err = exec.Command("go", "run", gofile, outfile, arg).Run()
36         if err == nil {
37                 t.Fatalf("completed normally, should have failed")
38         }
39
40         data, err := ioutil.ReadFile(outfile)
41         if err != nil {
42                 t.Fatalf("can't read output file %s. %q", outfile, err)
43         }
44
45         if string(data) != arg {
46                 t.Fatalf("bad data. Expected %q, got %q", data, arg)
47         }
48 }
49
50 var testprog = []byte(`
51 // Test program for atexit, gets output file and data as arguments and writes
52 // data to output file in atexit handler.
53 package main
54
55 import (
56         "github.com/sirupsen/logrus"
57         "flag"
58         "fmt"
59         "io/ioutil"
60 )
61
62 var outfile = ""
63 var data = ""
64
65 func handler() {
66         ioutil.WriteFile(outfile, []byte(data), 0666)
67 }
68
69 func badHandler() {
70         n := 0
71         fmt.Println(1/n)
72 }
73
74 func main() {
75         flag.Parse()
76         outfile = flag.Arg(0)
77         data = flag.Arg(1)
78
79         logrus.RegisterExitHandler(handler)
80         logrus.RegisterExitHandler(badHandler)
81         logrus.Fatal("Bye bye")
82 }
83 `)