1package epazote
2
3import (
4	"bytes"
5	"fmt"
6	"io/ioutil"
7	"log"
8	"os"
9	"reflect"
10	"testing"
11)
12
13// just to cover
14func TestScanReturnFunc(t *testing.T) {
15	s := new(Epazote)
16	f := s.Scan("test")
17	ft := reflect.TypeOf(f).Kind()
18	if ft != reflect.Func {
19		t.Error("Expecting func()")
20	}
21}
22
23func TestScanSearchNonexistentRoot(t *testing.T) {
24	log.SetOutput(ioutil.Discard)
25	s := new(Epazote)
26	err := s.search("nonexistent", false)
27	if err == nil {
28		t.Error("Expecting: lstat nonexistent: no such file or directory")
29	}
30}
31
32func TestScanSearch(t *testing.T) {
33	s := new(Epazote)
34	err := s.search("test", false)
35	if err != nil {
36		t.Error(err)
37	}
38}
39
40func TestScanParseScanErr(t *testing.T) {
41	dir := "./"
42	prefix := "test-scan1-"
43
44	d, err := ioutil.TempDir(dir, prefix)
45
46	if err != nil {
47		fmt.Println(err)
48	}
49
50	defer os.RemoveAll(d)
51
52	f := []byte(`epazote
53    - bad`)
54
55	err = ioutil.WriteFile(fmt.Sprintf("%s/epazote.yml", d), f, 0644)
56
57	s := new(Epazote)
58	err = s.search(d, false)
59	if err == nil {
60		t.Error(err)
61	}
62}
63
64func TestScanParseScanSearchOk(t *testing.T) {
65	var buf bytes.Buffer
66	log.SetOutput(&buf)
67	log.SetFlags(0)
68	dir := "./"
69	prefix := "test-scan2-"
70
71	d, err := ioutil.TempDir(dir, prefix)
72
73	if err != nil {
74		fmt.Println(err)
75	}
76
77	defer os.RemoveAll(d)
78
79	f := []byte(`
80    service 1:
81        url: http://about.epazote.io
82        expect:
83           body: "123"
84`)
85
86	err = ioutil.WriteFile(fmt.Sprintf("%s/epazote.yml", d), f, 0644)
87
88	s := &Epazote{
89		Services: make(map[string]*Service),
90	}
91	s.debug = true
92	err = s.search(d, false)
93	if err != nil {
94		t.Error(err)
95	}
96	if buf.Len() == 0 {
97		t.Error("Expecting log.Println error")
98	}
99}
100
101func TestScanParseScanSearchBadRegex(t *testing.T) {
102	var buf bytes.Buffer
103	log.SetOutput(&buf)
104	log.SetFlags(0)
105	dir := "./"
106	prefix := "test-scan2-"
107
108	d, err := ioutil.TempDir(dir, prefix)
109
110	if err != nil {
111		fmt.Println(err)
112	}
113
114	defer os.RemoveAll(d)
115
116	f := []byte(`
117    service 1:
118        url: http://about.epazote.io
119        expect:
120           body: ?(),
121`)
122
123	err = ioutil.WriteFile(fmt.Sprintf("%s/epazote.yml", d), f, 0644)
124
125	s := new(Epazote)
126	s.search(d, false)
127	if err != nil {
128		t.Error(err)
129	}
130
131	if buf.Len() == 0 {
132		t.Error("Expecting log.Println error")
133	}
134	sk := GetScheduler()
135	expect(t, len(sk.Schedulers), 1)
136}
137
138func TestScanParseScanLast(t *testing.T) {
139	var buf bytes.Buffer
140	log.SetOutput(&buf)
141	log.SetFlags(0)
142	dir := "./"
143	prefix := "test-scan2-"
144
145	d, err := ioutil.TempDir(dir, prefix)
146
147	if err != nil {
148		fmt.Println(err)
149	}
150
151	defer os.RemoveAll(d)
152
153	f := []byte(`
154    service 1:
155        url: http://about.epazote.io
156        expect:
157            status: 402
158`)
159
160	err = ioutil.WriteFile(fmt.Sprintf("%s/epazote.yml", d), f, 0644)
161	s := make(Services)
162	s["service 1"] = &Service{
163		Name: "service 1",
164		Expect: Expect{
165			Status: 200,
166			IfNot: Action{
167				Notify: "yes",
168			},
169		},
170		status: 3,
171		action: &Action{Cmd: "matilde"},
172	}
173
174	ez := &Epazote{
175		Services: s,
176	}
177	ez.search(d, false)
178	if err != nil {
179		t.Error(err)
180	}
181
182	sk := GetScheduler()
183
184	expect(t, len(sk.Schedulers), 1)
185	expect(t, 402, s["service 1"].Expect.Status)
186	expect(t, 3, s["service 1"].status)
187	expect(t, "matilde", s["service 1"].action.Cmd)
188}
189