@@ -10,6 +10,7 @@ import (
10
10
"net"
11
11
"net/http"
12
12
"net/url"
13
+ "os"
13
14
"path"
14
15
"path/filepath"
15
16
"reflect"
@@ -22,42 +23,58 @@ import (
22
23
)
23
24
24
25
func TestServer (t * testing.T ) {
25
- docRoot := "/opt/app"
26
+ ctx , cancel := context .WithCancel (context .Background ())
27
+ defer cancel ()
28
+
29
+ var docRoot string
30
+ var fs afero.Fs
31
+ if v , ok := os .LookupEnv ("TEST_WITH_REAL_FS" ); ok && v != "" {
32
+ docRoot = v
33
+ fs = afero .NewOsFs ()
34
+ } else {
35
+ docRoot = "/opt/app"
36
+ fs = afero .NewMemMapFs ()
37
+ }
26
38
27
- fs := afero .NewMemMapFs ()
28
39
if err := fs .MkdirAll (docRoot , 0755 ); err != nil {
29
40
t .Fatalf ("failed to create document root: %v" , err )
30
41
}
31
42
if err := afero .WriteFile (fs , path .Join (docRoot , "test.txt" ), []byte ("lorem ipsum" ), 0644 ); err != nil {
32
43
t .Fatalf ("failed to create test file: %v" , err )
33
44
}
45
+ if err := fs .Mkdir (path .Join (docRoot , "foo" ), 0755 ); err != nil && ! os .IsExist (err ) {
46
+ t .Fatalf ("failed to create directory: %v" , err )
47
+ }
34
48
if err := afero .WriteFile (fs , path .Join (docRoot , "foo" , "bar.txt" ), []byte ("hello, world" ), 0644 ); err != nil {
35
49
t .Fatalf ("failed to create test file: %v" , err )
36
50
}
37
- ctx , cancel := context .WithCancel (context .Background ())
38
- defer cancel ()
39
- port , err := getAvailablePort ()
40
- if err != nil {
41
- t .Fatalf ("unable to find an available port: %v" , err )
42
- }
43
51
44
- addr := net .JoinHostPort ("127.0.0.1" , strconv .Itoa (port ))
45
- config := ServerConfig {
46
- Addr : addr ,
47
- DocumentRoot : docRoot ,
48
- EnableCORS : true ,
49
- MaxUploadSize : 16 ,
50
- ShutdownTimeout : 5000 ,
52
+ var target string
53
+ if addr , ok := os .LookupEnv ("TEST_TARGET_ADDR" ); ok && addr != "" {
54
+ target = addr
55
+ } else {
56
+ port , err := getAvailablePort ()
57
+ if err != nil {
58
+ t .Fatalf ("unable to find an available port: %v" , err )
59
+ }
60
+ target = net .JoinHostPort ("127.0.0.1" , strconv .Itoa (port ))
61
+ config := ServerConfig {
62
+ Addr : target ,
63
+ DocumentRoot : docRoot ,
64
+ EnableCORS : true ,
65
+ MaxUploadSize : 16 ,
66
+ ShutdownTimeout : 5000 ,
67
+ }
68
+ ready := make (chan struct {})
69
+ server := Server {config , afero .NewBasePathFs (fs , docRoot )}
70
+ go func () {
71
+ t .Logf ("starting server at %s" , target )
72
+ server .Start (ctx , ready ) // nolint:errcheck
73
+ }()
74
+ <- ready
51
75
}
52
- ready := make (chan struct {})
53
- server := Server {config , afero .NewBasePathFs (fs , docRoot )}
54
- go func () {
55
- t .Logf ("starting server at %s" , addr )
56
- server .Start (ctx , ready ) // nolint:errcheck
57
- }()
58
- <- ready
59
76
60
- base , err := url .Parse ("http://" + addr )
77
+ base , err := url .Parse ("http://" + target )
61
78
if err != nil {
62
79
t .Fatalf ("failed to parse base url: %v" , err )
63
80
}
0 commit comments