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/tasks/manager.go b/core/installer/tasks/manager.go
new file mode 100644
index 0000000..3dddccb
--- /dev/null
+++ b/core/installer/tasks/manager.go
@@ -0,0 +1,34 @@
+package tasks
+
+import (
+	"fmt"
+)
+
+type TaskManager interface {
+	Add(name string, task Task) error
+	Get(name string) (Task, error)
+}
+
+type TaskMap struct {
+	t map[string]Task
+}
+
+func NewTaskMap() *TaskMap {
+	return &TaskMap{make(map[string]Task)}
+}
+
+func (m *TaskMap) Add(name string, task Task) error {
+	if _, ok := m.t[name]; ok {
+		return fmt.Errorf("already exists")
+	}
+	m.t[name] = task
+	return nil
+}
+
+func (m *TaskMap) Get(name string) (Task, error) {
+	if t, ok := m.t[name]; ok {
+		return t, nil
+	} else {
+		return nil, fmt.Errorf("does not exist")
+	}
+}