Files
gluetun/internal/httpserver/run_test.go
2022-03-30 09:03:20 +00:00

73 lines
1.5 KiB
Go

package httpserver
import (
"context"
"regexp"
"testing"
"time"
gomock "github.com/golang/mock/gomock"
"github.com/stretchr/testify/assert"
)
func Test_Server_Run_success(t *testing.T) {
t.Parallel()
ctrl := gomock.NewController(t)
logger := NewMockLogger(ctrl)
logger.EXPECT().Info(newRegexMatcher("^http server listening on 127.0.0.1:[1-9][0-9]{0,4}$"))
const shutdownTimeout = 10 * time.Second
server := &Server{
address: "127.0.0.1:0",
addressSet: make(chan struct{}),
logger: logger,
shutdownTimeout: shutdownTimeout,
}
ctx, cancel := context.WithCancel(context.Background())
ready := make(chan struct{})
done := make(chan struct{})
go server.Run(ctx, ready, done)
addressRegex := regexp.MustCompile(`^127.0.0.1:[1-9][0-9]{0,4}$`)
address := server.GetAddress()
assert.Regexp(t, addressRegex, address)
address = server.GetAddress()
assert.Regexp(t, addressRegex, address)
<-ready
cancel()
_, ok := <-done
assert.False(t, ok)
}
func Test_Server_Run_failure(t *testing.T) {
t.Parallel()
ctrl := gomock.NewController(t)
logger := NewMockLogger(ctrl)
logger.EXPECT().Error("listen tcp: address -1: invalid port")
server := &Server{
address: "127.0.0.1:-1",
addressSet: make(chan struct{}),
logger: logger,
}
ready := make(chan struct{})
done := make(chan struct{})
go server.Run(context.Background(), ready, done)
select {
case <-ready:
t.Fatal("server should not be ready")
case _, ok := <-done:
assert.False(t, ok)
}
}