Skip to content
This repository was archived by the owner on Jan 3, 2024. It is now read-only.

Commit 00796e7

Browse files
committedMay 28, 2014
Use an auxiliary python program for the max open files test
This makes the test work on non-Linux platforms, like OS X or the BSD family.
1 parent b349d8b commit 00796e7

File tree

2 files changed

+50
-11
lines changed

2 files changed

+50
-11
lines changed
 

‎_testdata/wait.py

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/usr/bin/env python
2+
3+
import time
4+
import sys
5+
import resource
6+
7+
soft, hard = resource.getrlimit(resource.RLIMIT_NOFILE)
8+
print(soft)
9+
sys.stdout.flush()
10+
time.sleep(100000)

‎service_test.go

+40-11
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package main
22

33
import (
4-
"fmt"
5-
"io/ioutil"
4+
"bytes"
65
"os"
76
"os/exec"
7+
"path/filepath"
88
"regexp"
99
"strconv"
1010
"strings"
@@ -16,15 +16,37 @@ import (
1616

1717
var (
1818
maxOpenRe = regexp.MustCompile("Max open files\\s+(\\d+)")
19+
waitPy = "python " + abs(filepath.Join("_testdata", "wait.py"))
1920
)
2021

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+
2130
func setLogger(t *testing.T, cfg *Config, value string) {
2231
cfg.Log = new(Logger)
2332
if err := cfg.Log.Parse(value); err != nil {
2433
t.Fatal(err)
2534
}
2635
}
2736

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+
2850
func TestService(t *testing.T) {
2951
cfg := &Config{
3052
File: "/non-existant",
@@ -99,13 +121,17 @@ func TestExitingService(t *testing.T) {
99121
}
100122

101123
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+
}
106132
}
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- "))
109135
if err != nil {
110136
t.Fatal(err)
111137
}
@@ -125,11 +151,13 @@ func getMaxOpenFiles(t *testing.T) int {
125151
func TestServiceMaxOpenFiles(t *testing.T) {
126152
maxOpen1 := getMaxOpenFiles(t)
127153
cfg := &Config{
128-
File: "/non-existant",
129-
Command: "sleep 5000",
130-
Name: "sleep",
154+
File: "wait",
155+
Command: waitPy,
156+
Name: "wait",
131157
}
132158
setLogger(t, cfg, "none")
159+
buf := new(bytes.Buffer)
160+
cfg.Log.w = (*bufWriter)(buf)
133161
s := newService(cfg)
134162
if err := s.Start(); err != nil {
135163
t.Fatal(err)
@@ -140,6 +168,7 @@ func TestServiceMaxOpenFiles(t *testing.T) {
140168
}
141169
sMaxOpen := maxOpen1 / 2
142170
cfg.MaxOpenFiles = sMaxOpen
171+
buf.Reset()
143172
if err := s.Start(); err != nil {
144173
t.Fatal(err)
145174
}

0 commit comments

Comments
 (0)
This repository has been archived.