in lib/dam/dam_integrity.go [616:669]
func runTests(ctx context.Context, cfg *pb.DamConfig, resources []string, vopts ValidateCfgOpts) *pb.GetTestResultsResponse {
t := float64(time.Now().UnixNano()) / 1e9
personas := make(map[string]*cpb.TestPersona)
results := make([]*pb.GetTestResultsResponse_TestResult, 0)
passed := int32(0)
tc := int32(0)
if resources == nil {
resources = make([]string, 0, len(cfg.Resources))
for k := range cfg.Resources {
resources = append(resources, k)
}
}
modification := &pb.ConfigModification{
TestPersonas: make(map[string]*pb.ConfigModification_PersonaModification),
}
for pname, p := range cfg.TestPersonas {
tc++
personas[pname] = &cpb.TestPersona{
Passport: p.Passport,
Access: p.Access,
}
status, got, rejectedVisas, err := testPersona(ctx, pname, resources, cfg, vopts)
e := ""
if err == nil {
passed++
} else {
e = err.Error()
}
results = append(results, &pb.GetTestResultsResponse_TestResult{
Name: pname,
Result: status,
Access: got,
RejectedVisas: makeRejectedVisas(rejectedVisas),
Error: e,
})
calculateModification(pname, p.Access, got, modification, vopts)
}
e := ""
if passed < tc {
e = fmt.Errorf("%d of %d tests passed, %d failed", passed, tc, tc-passed).Error()
}
return &pb.GetTestResultsResponse{
Version: cfg.Version,
Revision: cfg.Revision,
Timestamp: t,
Personas: personas,
TestResults: results,
Executed: tc,
Passed: passed,
Modification: modification,
Error: e,
}
}