| package analyzer | 
 |  | 
 | import ( | 
 | 	"testing" | 
 |  | 
 | 	cpb "go.skia.org/infra/cabe/go/proto" | 
 |  | 
 | 	"github.com/google/go-cmp/cmp" | 
 | 	"github.com/google/go-cmp/cmp/cmpopts" | 
 | 	"google.golang.org/protobuf/testing/protocmp" | 
 |  | 
 | 	"go.chromium.org/luci/common/api/swarming/swarming/v1" | 
 |  | 
 | 	"github.com/stretchr/testify/assert" | 
 | ) | 
 |  | 
 | func TestDiagnostics_AnalysisDiagnostics(t *testing.T) { | 
 | 	d := newDiagnostics() | 
 |  | 
 | 	d.excludeSwarmingTask(&swarming.SwarmingRpcsTaskRequestMetadata{ | 
 | 		TaskId: "task-id-0", | 
 | 	}, "missing data") | 
 | 	d.excludeSwarmingTask(&swarming.SwarmingRpcsTaskRequestMetadata{ | 
 | 		TaskId: "task-id-0", | 
 | 	}, "an extra reason to exclude this same task") | 
 |  | 
 | 	d.includeSwarmingTask(&swarming.SwarmingRpcsTaskRequestMetadata{ | 
 | 		TaskId: "task-id-1", | 
 | 	}) | 
 | 	d.includeSwarmingTask(&swarming.SwarmingRpcsTaskRequestMetadata{ | 
 | 		TaskId: "task-id-3", | 
 | 	}) | 
 | 	d.includeSwarmingTask(&swarming.SwarmingRpcsTaskRequestMetadata{ | 
 | 		TaskId: "task-id-4", | 
 | 	}) | 
 |  | 
 | 	d.excludeReplica(7, pairedTasks{ | 
 | 		control: &armTask{ | 
 | 			taskID: "task-id-0", | 
 | 		}, | 
 | 		treatment: &armTask{ | 
 | 			taskID: "task-id-1", | 
 | 		}, | 
 | 	}, "bad data in one or both tasks") | 
 |  | 
 | 	d.excludeReplica(7, pairedTasks{ | 
 | 		control: &armTask{ | 
 | 			taskID: "task-id-0", | 
 | 		}, | 
 | 		treatment: &armTask{ | 
 | 			taskID: "task-id-1", | 
 | 		}, | 
 | 	}, "an extra reason to exclude this same replica") | 
 |  | 
 | 	d.includeReplica(1, pairedTasks{ | 
 | 		control: &armTask{ | 
 | 			taskID: "task-id-2", | 
 | 		}, | 
 | 		treatment: &armTask{ | 
 | 			taskID: "task-id-3", | 
 | 		}, | 
 | 	}) | 
 |  | 
 | 	ad := d.AnalysisDiagnostics() | 
 | 	assert.NotNil(t, ad) | 
 | 	diff := cmp.Diff(&cpb.AnalysisDiagnostics{ | 
 | 		ExcludedSwarmingTasks: []*cpb.SwarmingTaskDiagnostics{{ | 
 | 			Id: &cpb.SwarmingTaskId{ | 
 | 				TaskId: "task-id-0", | 
 | 			}, | 
 | 			Message: []string{"missing data", "an extra reason to exclude this same task"}, | 
 | 		}}, | 
 | 		ExcludedReplicas: []*cpb.ReplicaDiagnostics{{ | 
 | 			ReplicaNumber: int32(7), | 
 | 			ControlTask: &cpb.SwarmingTaskId{ | 
 | 				TaskId: "task-id-0", | 
 | 			}, | 
 | 			TreatmentTask: &cpb.SwarmingTaskId{ | 
 | 				TaskId: "task-id-1", | 
 | 			}, | 
 | 			Message: []string{"bad data in one or both tasks", "an extra reason to exclude this same replica"}, | 
 | 		}}, | 
 | 		IncludedSwarmingTasks: []*cpb.SwarmingTaskDiagnostics{ | 
 | 			{ | 
 | 				Id: &cpb.SwarmingTaskId{ | 
 | 					TaskId: "task-id-1", | 
 | 				}, | 
 | 			}, | 
 | 			{ | 
 | 				Id: &cpb.SwarmingTaskId{ | 
 | 					TaskId: "task-id-3", | 
 | 				}, | 
 | 			}, | 
 | 			{ | 
 | 				Id: &cpb.SwarmingTaskId{ | 
 | 					TaskId: "task-id-4", | 
 | 				}, | 
 | 			}, | 
 | 		}, | 
 | 		IncludedReplicas: []*cpb.ReplicaDiagnostics{{ | 
 | 			ReplicaNumber: int32(1), | 
 | 			ControlTask: &cpb.SwarmingTaskId{ | 
 | 				TaskId: "task-id-2", | 
 | 			}, | 
 | 			TreatmentTask: &cpb.SwarmingTaskId{ | 
 | 				TaskId: "task-id-3", | 
 | 			}, | 
 | 		}}, | 
 | 	}, | 
 | 		ad, | 
 | 		cmpopts.EquateEmpty(), | 
 | 		protocmp.Transform(), | 
 | 	) | 
 | 	assert.Equal(t, "", diff) | 
 | } |