[machineserver] Fix for crash

Change-Id: I485b9f8ae137de7fb8c99d15394c7aa05b50e8ca
Reviewed-on: https://skia-review.googlesource.com/c/buildbot/+/560800
Commit-Queue: Joe Gregorio <jcgregorio@google.com>
Reviewed-by: Erik Rose <erikrose@google.com>
diff --git a/go/taskname/task_name_schema_gen.go b/go/taskname/task_name_schema_gen.go
index 736cdf5..7bbb62b 100644
--- a/go/taskname/task_name_schema_gen.go
+++ b/go/taskname/task_name_schema_gen.go
@@ -4,6 +4,7 @@
 
 var SCHEMA_FROM_GIT = map[string]*Schema{
 	"BazelBuild":  {Keys: []string{"label", "config", "host"}, OptionalKeys: []string{"cross"}, RecurseRoles: []string(nil)},
+	"BazelTest":   {Keys: []string{"task_driver", "config", "host"}, OptionalKeys: []string{"cross"}, RecurseRoles: []string(nil)},
 	"Build":       {Keys: []string{"os", "compiler", "target_arch", "configuration"}, OptionalKeys: []string{"extra_config"}, RecurseRoles: []string(nil)},
 	"BuildStats":  {Keys: []string{"os", "compiler", "target_arch", "configuration"}, OptionalKeys: []string{"extra_config"}, RecurseRoles: []string(nil)},
 	"Canary":      {Keys: []string{"project"}, OptionalKeys: []string(nil), RecurseRoles: []string(nil)},
diff --git a/machine/go/machine/machine.go b/machine/go/machine/machine.go
index 42660d1..bda8745 100644
--- a/machine/go/machine/machine.go
+++ b/machine/go/machine/machine.go
@@ -24,7 +24,7 @@
 }
 
 func (s SwarmingDimensions) getDimensionValueOrEmptyString(key string) string {
-	if values, ok := s[key]; ok {
+	if values, ok := s[key]; ok && len(values) > 0 {
 		return values[len(values)-1]
 	}
 	return ""
diff --git a/machine/go/machine/machine_test.go b/machine/go/machine/machine_test.go
index c13ed77..dcb4094 100644
--- a/machine/go/machine/machine_test.go
+++ b/machine/go/machine/machine_test.go
@@ -69,6 +69,34 @@
 	assert.Equal(t, emptyTags, SwarmingDimensions{}.AsMetricsTags())
 }
 
+func TestAsMetricsTags_NilSlices_ReturnsEmptyTags(t *testing.T) {
+	unittest.SmallTest(t)
+	emptyTags := map[string]string{
+		DimID:         "",
+		DimOS:         "",
+		DimDeviceType: "",
+	}
+	assert.Equal(t, emptyTags, SwarmingDimensions{
+		DimID:         nil,
+		DimOS:         nil,
+		DimDeviceType: nil,
+	}.AsMetricsTags())
+}
+
+func TestAsMetricsTags_ZeroLengthSlices_ReturnsEmptyTags(t *testing.T) {
+	unittest.SmallTest(t)
+	emptyTags := map[string]string{
+		DimID:         "",
+		DimOS:         "",
+		DimDeviceType: "",
+	}
+	assert.Equal(t, emptyTags, SwarmingDimensions{
+		DimID:         {},
+		DimOS:         {},
+		DimDeviceType: {},
+	}.AsMetricsTags())
+}
+
 func TestAsMetricsTags_MultipleValues_ReturnsTagsWithMostSpecificValues(t *testing.T) {
 	unittest.SmallTest(t)
 	expected := map[string]string{