in pkg/summarizer/summary.go [914:957]
func testResultLink(template *configpb.LinkTemplate, properties map[string]string, testID, target, buildID, gcsPrefix string, propertyToColumnHeader map[string]string, customColumnHeaders map[string]string) string {
// Return the result of open_test_template for the tab.
// This assumes that open_test_template uses a limited set of tokens (since it's not in the context of a browser).
// Assume that the following are valid: <gcs_prefix>, <test-name>, <workflow-id>, <workflow-name>, <test-id>, <build ID>
// TODO: Ensure workflow-id, workflow-name are added in alerts.
tokens := util.Tokens(template)
parameters := map[string]string{}
for _, token := range tokens {
switch token {
case util.GcsPrefix:
parameters[util.GcsPrefix] = gcsPrefix
case util.TestName:
parameters[util.TestName] = target
case util.WorkflowID:
if workflowID, ok := properties["workflow-id"]; ok {
parameters[util.WorkflowID] = workflowID
}
case util.WorkflowName:
if WorkflowName, ok := properties["workflow-name"]; ok {
parameters[util.WorkflowName] = WorkflowName
}
case util.TestID:
parameters[util.TestID] = testID
case util.BuildID:
parameters[util.BuildID] = buildID
case util.CustomColumnRe.FindString(token):
if v, ok := customColumnHeaders[propertyToColumnHeader[token]]; ok {
parameters[token] = v
}
default:
// Didn't match any simple tokens, check if it's a property.
trimmedToken := strings.NewReplacer("<", "", ">", "").Replace(token)
if v, ok := properties[trimmedToken]; ok {
parameters[token] = v
}
}
}
link, err := util.ExpandTemplate(template, parameters)
if err != nil {
logrus.WithError(err).WithField("template", template).WithField("parameters", parameters).Error("Error expanding link template.")
return ""
}
return link
}