installer: concurrent parent task must wait for all children

Change-Id: I1515d36cc731c6063359dd6957743d853b0255f6
diff --git a/core/installer/tasks/tasks_test.go b/core/installer/tasks/tasks_test.go
index 194be44..f914c88 100644
--- a/core/installer/tasks/tasks_test.go
+++ b/core/installer/tasks/tasks_test.go
@@ -2,7 +2,9 @@
 
 import (
 	"fmt"
+	"sync"
 	"testing"
+	"time"
 )
 
 func TestLeaf(t *testing.T) {
@@ -78,3 +80,34 @@
 		t.Fatalf("Expected two, got %s", err)
 	}
 }
+
+func TestConcurrentTaskSucceeds_WaitsForAllChildren(t *testing.T) {
+	cnt := 0
+	var m sync.Mutex
+	one := newLeafTask("one", func() error {
+		m.Lock()
+		defer m.Unlock()
+		cnt++
+		return nil
+	})
+	two := newLeafTask("two", func() error {
+		time.Sleep(1 * time.Second)
+		m.Lock()
+		defer m.Unlock()
+		cnt++
+		return nil
+	})
+	l := newConcurrentParentTask("parent", true, &one, &two)
+	done := make(chan error)
+	l.OnDone(func(err error) {
+		done <- err
+	})
+	go l.Start()
+	err := <-done
+	if err != nil {
+		t.Fatalf("Expected nil, got %s", err.Error())
+	}
+	if cnt != 2 {
+		t.Fatalf("Expected 2, got %d", cnt)
+	}
+}