1
1
package main
2
2
3
3
import (
4
- "fmt"
5
- "io/ioutil"
4
+ "bytes"
6
5
"os"
7
6
"os/exec"
7
+ "path/filepath"
8
8
"regexp"
9
9
"strconv"
10
10
"strings"
@@ -16,15 +16,37 @@ import (
16
16
17
17
var (
18
18
maxOpenRe = regexp .MustCompile ("Max open files\\ s+(\\ d+)" )
19
+ waitPy = "python " + abs (filepath .Join ("_testdata" , "wait.py" ))
19
20
)
20
21
22
+ func abs (p string ) string {
23
+ a , err := filepath .Abs (p )
24
+ if err != nil {
25
+ panic (err )
26
+ }
27
+ return a
28
+ }
29
+
21
30
func setLogger (t * testing.T , cfg * Config , value string ) {
22
31
cfg .Log = new (Logger )
23
32
if err := cfg .Log .Parse (value ); err != nil {
24
33
t .Fatal (err )
25
34
}
26
35
}
27
36
37
+ type bufWriter bytes.Buffer
38
+
39
+ func (w * bufWriter ) Open (_ string ) error { return nil }
40
+
41
+ func (w * bufWriter ) Close () error { return nil }
42
+
43
+ func (w * bufWriter ) Write (_ string , b []byte ) error {
44
+ (* bytes .Buffer )(w ).Write (b )
45
+ return nil
46
+ }
47
+
48
+ func (w * bufWriter ) Flush () error { return nil }
49
+
28
50
func TestService (t * testing.T ) {
29
51
cfg := & Config {
30
52
File : "/non-existant" ,
@@ -99,13 +121,17 @@ func TestExitingService(t *testing.T) {
99
121
}
100
122
101
123
func checkMaxOpenFiles (t * testing.T , s * Service , expect int ) {
102
- limitsFile := fmt .Sprintf ("/proc/%d/limits" , s .Cmd .Process .Pid )
103
- data , err := ioutil .ReadFile (limitsFile )
104
- if err != nil {
105
- t .Fatal (err )
124
+ buf := (* bytes .Buffer )(s .Config .Log .w .(* bufWriter ))
125
+ lines := strings .Split (buf .String (), "\n " )
126
+ var line string
127
+ for _ , v := range lines {
128
+ if ! strings .Contains (v , "start" ) && ! strings .Contains (v , "error" ) {
129
+ line = v
130
+ break
131
+ }
106
132
}
107
- m := maxOpenRe . FindStringSubmatch ( string ( data ) )
108
- val , err := strconv .Atoi (m [1 ])
133
+ parts := strings . Split ( line , "-" )
134
+ val , err := strconv .Atoi (strings . Trim ( parts [1 ], " \n - " ) )
109
135
if err != nil {
110
136
t .Fatal (err )
111
137
}
@@ -125,11 +151,13 @@ func getMaxOpenFiles(t *testing.T) int {
125
151
func TestServiceMaxOpenFiles (t * testing.T ) {
126
152
maxOpen1 := getMaxOpenFiles (t )
127
153
cfg := & Config {
128
- File : "/non-existant " ,
129
- Command : "sleep 5000" ,
130
- Name : "sleep " ,
154
+ File : "wait " ,
155
+ Command : waitPy ,
156
+ Name : "wait " ,
131
157
}
132
158
setLogger (t , cfg , "none" )
159
+ buf := new (bytes.Buffer )
160
+ cfg .Log .w = (* bufWriter )(buf )
133
161
s := newService (cfg )
134
162
if err := s .Start (); err != nil {
135
163
t .Fatal (err )
@@ -140,6 +168,7 @@ func TestServiceMaxOpenFiles(t *testing.T) {
140
168
}
141
169
sMaxOpen := maxOpen1 / 2
142
170
cfg .MaxOpenFiles = sMaxOpen
171
+ buf .Reset ()
143
172
if err := s .Start (); err != nil {
144
173
t .Fatal (err )
145
174
}
0 commit comments