EnvManager: Add Stop method and shutdown server using it in tests
Change-Id: I552db6dc1487ed880bce897c7cec85a89a15355d
diff --git a/core/installer/welcome/env.go b/core/installer/welcome/env.go
index 82fb3d5..31264fe 100644
--- a/core/installer/welcome/env.go
+++ b/core/installer/welcome/env.go
@@ -1,6 +1,7 @@
package welcome
import (
+ "context"
"embed"
"encoding/json"
"errors"
@@ -8,7 +9,6 @@
"html/template"
"io"
"io/fs"
- "log"
"net"
"net/http"
"net/netip"
@@ -79,6 +79,7 @@
}
type EnvServer struct {
+ srv *http.Server
port int
ss soft.Client
repo soft.RepoIO
@@ -111,6 +112,7 @@
tm tasks.TaskManager,
) *EnvServer {
return &EnvServer{
+ nil,
port,
ss,
repo,
@@ -129,7 +131,7 @@
}
}
-func (s *EnvServer) Start() {
+func (s *EnvServer) Start() error {
r := mux.NewRouter()
r.PathPrefix("/stat/").Handler(cachingHandler{http.FileServer(http.FS(statAssets))})
r.Path("/env/{key}").Methods("GET").HandlerFunc(s.monitorTask)
@@ -137,8 +139,19 @@
r.Path("/").Methods("GET").HandlerFunc(s.createEnvForm)
r.Path("/").Methods("POST").HandlerFunc(s.createEnv)
r.Path("/create-invitation").Methods("GET").HandlerFunc(s.createInvitation)
- http.Handle("/", r)
- log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", s.port), nil))
+ srv := &http.Server{
+ Addr: fmt.Sprintf(":%d", s.port),
+ Handler: r,
+ }
+ s.srv = srv
+ if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
+ return err
+ }
+ return nil
+}
+
+func (s *EnvServer) Stop() error {
+ return s.srv.Shutdown(context.Background())
}
func (s *EnvServer) monitorTask(w http.ResponseWriter, r *http.Request) {
diff --git a/core/installer/welcome/env_test.go b/core/installer/welcome/env_test.go
index 448f221..cec2458 100644
--- a/core/installer/welcome/env_test.go
+++ b/core/installer/welcome/env_test.go
@@ -386,6 +386,9 @@
if len(httpClient.counts) != 6 {
t.Fatal(httpClient.counts)
}
+ if err := s.Stop(); err != nil {
+ t.Fatal(err)
+ }
}
func debugFS(bfs billy.Filesystem, t *testing.T, files ...string) {