EnvManager: fix race condition in test
Refactor EnvManager so it takes TaskManager as an input.
This way clients can interject created tasks and install listeners.
Change-Id: Ief332060aea9e98587b43d04d68a4640717d18cd
diff --git a/core/installer/welcome/env.go b/core/installer/welcome/env.go
index 388cba3..15be0eb 100644
--- a/core/installer/welcome/env.go
+++ b/core/installer/welcome/env.go
@@ -88,7 +88,7 @@
nameGenerator installer.NameGenerator
httpClient phttp.Client
dnsClient dns.Client
- Tasks map[string]tasks.Task
+ Tasks tasks.TaskManager
envInfo map[string]template.HTML
dns map[string]installer.EnvDNS
dnsPublished map[string]struct{}
@@ -104,6 +104,7 @@
nameGenerator installer.NameGenerator,
httpClient phttp.Client,
dnsClient dns.Client,
+ tm tasks.TaskManager,
) *EnvServer {
return &EnvServer{
port,
@@ -115,7 +116,7 @@
nameGenerator,
httpClient,
dnsClient,
- make(map[string]tasks.Task),
+ tm,
make(map[string]template.HTML),
make(map[string]installer.EnvDNS),
make(map[string]struct{}),
@@ -141,9 +142,9 @@
http.Error(w, "Task key not provided", http.StatusBadRequest)
return
}
- t, ok := s.Tasks[key]
- if !ok {
- http.Error(w, "Task not found", http.StatusBadRequest)
+ t, err := s.Tasks.Get(key)
+ if err != nil {
+ http.Error(w, err.Error(), http.StatusBadRequest)
return
}
dnsRecords := ""
@@ -410,7 +411,10 @@
mgr,
infoUpdater,
)
- s.Tasks[key] = t
+ if err := s.Tasks.Add(key, t); err != nil {
+ panic(err)
+ }
+
s.dns[key] = dns
go t.Start()
http.Redirect(w, r, fmt.Sprintf("/env/%s", key), http.StatusSeeOther)