| 1239 | } |
| 1240 | |
| 1241 | func TestEcho_Start(t *testing.T) { |
| 1242 | e := New() |
| 1243 | e.GET("/", func(c *Context) error { |
| 1244 | return c.String(http.StatusTeapot, "OK") |
| 1245 | }) |
| 1246 | rndPort, err := net.Listen("tcp", ":0") |
| 1247 | if err != nil { |
| 1248 | t.Fatal(err) |
| 1249 | } |
| 1250 | defer rndPort.Close() |
| 1251 | errChan := make(chan error, 1) |
| 1252 | go func() { |
| 1253 | errChan <- e.Start(rndPort.Addr().String()) |
| 1254 | }() |
| 1255 | |
| 1256 | select { |
| 1257 | case <-time.After(250 * time.Millisecond): |
| 1258 | t.Fatal("start did not error out") |
| 1259 | case err := <-errChan: |
| 1260 | expectContains := "bind: address already in use" |
| 1261 | if runtime.GOOS == "windows" { |
| 1262 | expectContains = "bind: Only one usage of each socket address" |
| 1263 | } |
| 1264 | assert.Contains(t, err.Error(), expectContains) |
| 1265 | } |
| 1266 | } |
| 1267 | |
| 1268 | func request(method, path string, e *Echo) (int, string) { |
| 1269 | req := httptest.NewRequest(method, path, nil) |