cmd/coordinator: query list of dist tests to run

Change-Id: I9be6a50f172f08e24cd81d872e7ce8fe3ce34064
Reviewed-on: https://go-review.googlesource.com/10462
Reviewed-by: Andrew Gerrand <adg@golang.org>
diff --git a/cmd/coordinator/coordinator.go b/cmd/coordinator/coordinator.go
index 26ceed7..198d1d1 100644
--- a/cmd/coordinator/coordinator.go
+++ b/cmd/coordinator/coordinator.go
@@ -1082,6 +1082,12 @@
 				return fmt.Errorf("writeSnapshot: %v", err)
 			}
 
+			tests, err := st.distTestList()
+			if err != nil {
+				return fmt.Errorf("distTestList: %v", err)
+			}
+			fmt.Fprintf(st, "Number of dist tests to run: %d\n", len(tests))
+
 			runScript := st.conf.RunScript()
 			lastScript = runScript
 			remoteErr, err = bc.Exec(path.Join("go", runScript), buildlet.ExecOpts{
@@ -1174,6 +1180,24 @@
 	return wr.Close()
 }
 
+func (st *buildStatus) distTestList() (names []string, err error) {
+	var buf bytes.Buffer
+	remoteErr, err := st.bc.Exec(path.Join("go", "bin", "go"), buildlet.ExecOpts{
+		Output:      &buf,
+		ExtraEnv:    st.conf.Env(),
+		OnStartExec: func() { st.logEventTime("discovering_tests") },
+		Path:        []string{"$WORKDIR/go/bin", "$PATH"},
+		Args:        []string{"tool", "dist", "test", "--no-rebuild", "--list"},
+	})
+	if err != nil {
+		return nil, fmt.Errorf("Exec error: %v, %s", remoteErr, buf.Bytes())
+	}
+	if remoteErr != nil {
+		return nil, fmt.Errorf("Remote error: %v, %s", remoteErr, buf.Bytes())
+	}
+	return strings.Fields(buf.String()), nil
+}
+
 type eventAndTime struct {
 	evt string
 	t   time.Time