-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathmain_test.go
79 lines (61 loc) · 1.25 KB
/
main_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package main
import (
"fmt"
"os"
"os/exec"
"syscall"
"testing"
"time"
"github.com/garyburd/redigo/redis"
)
var sourceServer *RedisTestServer
var destServer *RedisTestServer
func ClearRedis() {
sourceServer.conn.Do("flushdb")
destServer.conn.Do("flushdb")
}
func StartTestServers() {
fmt.Println("Starting redis...")
sourceServer = NewRedisTestServer("6377")
destServer = NewRedisTestServer("6277")
}
func StopTestServers() {
fmt.Println("Stopping redis...")
sourceServer.Stop()
destServer.Stop()
}
func NewRedisTestServer(port string) *RedisTestServer {
srv := &RedisTestServer{
port: port,
url: fmt.Sprintf("127.0.0.1:%s", port),
}
srv.Start()
return srv
}
type RedisTestServer struct {
cmd *exec.Cmd
port string
url string
conn redis.Conn
}
func (s *RedisTestServer) Start() {
args := fmt.Sprintf("--port %s", s.port)
s.cmd = exec.Command("redis-server", args)
err := s.cmd.Start()
time.Sleep(2 * time.Second)
conn, err := redis.Dial("tcp", s.url)
s.conn = conn
if err != nil {
panic("Could not start redis")
}
}
func (s *RedisTestServer) Stop() {
s.cmd.Process.Signal(syscall.SIGTERM)
s.cmd.Process.Wait()
}
func TestMain(m *testing.M) {
StartTestServers()
result := m.Run()
StopTestServers()
os.Exit(result)
}