4
4
"database/sql"
5
5
"flag"
6
6
"fmt"
7
+ "net"
7
8
"os"
8
9
"os/exec"
9
10
"testing"
18
19
bin = flag .String ("gitbase-bin" , "" , "path to the gitbase binary to test" )
19
20
repos = flag .String ("gitbase-repos" , "" , "path to the gitbase repos to test" )
20
21
version = flag .String ("gitbase-version" , "" , "(optional) version of the binary" )
22
+
23
+ port int
21
24
)
22
25
23
26
func TestMain (m * testing.M ) {
@@ -42,13 +45,19 @@ func TestMain(m *testing.M) {
42
45
}
43
46
}
44
47
48
+ port , err = findPort ()
49
+ if err != nil {
50
+ fmt .Println ("unable to find an available port: " , err )
51
+ os .Exit (1 )
52
+ }
53
+
45
54
var done = make (chan error )
46
55
cmd := exec .Command (
47
56
path ,
48
57
"server" ,
49
58
"--directories=" + * repos ,
50
59
"--host=127.0.0.1" ,
51
- "--port=3308" ,
60
+ fmt . Sprintf ( "--port=%d" , port ) ,
52
61
"--index=indexes" ,
53
62
)
54
63
@@ -84,7 +93,7 @@ func TestMain(m *testing.M) {
84
93
}
85
94
86
95
func connect (t * testing.T ) (* sql.DB , func ()) {
87
- db , err := sql .Open ("mysql" , "root:@tcp(127.0.0.1:3308 )/gitbase" )
96
+ db , err := sql .Open ("mysql" , fmt . Sprintf ( "root:@tcp(127.0.0.1:%d )/gitbase" , port ) )
88
97
if err != nil {
89
98
t .Errorf ("unexpected error connecting to gitbase: %s" , err )
90
99
}
@@ -94,6 +103,23 @@ func connect(t *testing.T) (*sql.DB, func()) {
94
103
}
95
104
}
96
105
106
+ func findPort () (int , error ) {
107
+ addr , err := net .ResolveTCPAddr ("tcp" , "localhost:0" )
108
+ if err != nil {
109
+ return 0 , err
110
+ }
111
+
112
+ l , err := net .ListenTCP ("tcp" , addr )
113
+ if err != nil {
114
+ return 0 , err
115
+ }
116
+
117
+ port := l .Addr ().(* net.TCPAddr ).Port
118
+ _ = l .Close ()
119
+
120
+ return port , nil
121
+ }
122
+
97
123
func TestVersion (t * testing.T ) {
98
124
if * version == "" {
99
125
t .Skip ("no version provided, skipping" )
0 commit comments