diff options
Diffstat (limited to 'go/internal/gitlabnet/testserver')
-rw-r--r-- | go/internal/gitlabnet/testserver/testserver.go | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/go/internal/gitlabnet/testserver/testserver.go b/go/internal/gitlabnet/testserver/testserver.go new file mode 100644 index 0000000..9640fd7 --- /dev/null +++ b/go/internal/gitlabnet/testserver/testserver.go @@ -0,0 +1,56 @@ +package testserver + +import ( + "io/ioutil" + "log" + "net" + "net/http" + "os" + "path" + "path/filepath" +) + +var ( + tempDir, _ = ioutil.TempDir("", "gitlab-shell-test-api") + TestSocket = path.Join(tempDir, "internal.sock") +) + +type TestRequestHandler struct { + Path string + Handler func(w http.ResponseWriter, r *http.Request) +} + +func StartSocketHttpServer(handlers []TestRequestHandler) (func(), error) { + if err := os.MkdirAll(filepath.Dir(TestSocket), 0700); err != nil { + return nil, err + } + + socketListener, err := net.Listen("unix", TestSocket) + if err != nil { + return nil, err + } + + server := http.Server{ + Handler: buildHandler(handlers), + // We'll put this server through some nasty stuff we don't want + // in our test output + ErrorLog: log.New(ioutil.Discard, "", 0), + } + go server.Serve(socketListener) + + return cleanupSocket, nil +} + +func cleanupSocket() { + os.RemoveAll(tempDir) +} + +func buildHandler(handlers []TestRequestHandler) http.Handler { + h := http.NewServeMux() + + for _, handler := range handlers { + h.HandleFunc(handler.Path, handler.Handler) + } + + return h +} |