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)