| 156 | } |
| 157 | |
| 158 | func (vs *ValidationService) RunValidation( |
| 159 | ctx context.Context, |
| 160 | writer TraceWriter, |
| 161 | querier TraceQuerier, |
| 162 | searcher TraceSearcher, |
| 163 | ) ValidationResult { |
| 164 | start := vs.clock.Now() |
| 165 | |
| 166 | result := ValidationResult{ |
| 167 | TotalTraces: vs.config.Cycles, |
| 168 | Failures: make([]ValidationFailure, 0), |
| 169 | } |
| 170 | |
| 171 | traces := []traceInfo{} |
| 172 | |
| 173 | // for each cycle: do the reads and writes right away, but wait a bit for the |
| 174 | // traces to be available to search |
| 175 | for i := 0; i < vs.config.Cycles; i++ { |
| 176 | // Write the traces |
| 177 | trace, actual, err := vs.writeValidationTrace(ctx, writer) |
| 178 | if err != nil { |
| 179 | result.Failures = append(result.Failures, ValidationFailure{ |
| 180 | Phase: "write", |
| 181 | Error: err, |
| 182 | Timestamp: vs.clock.Now(), |
| 183 | }) |
| 184 | result.Duration = vs.clock.Now().Sub(start) |
| 185 | result.SuccessCount = (result.TotalTraces) - len(result.Failures) |
| 186 | return result |
| 187 | } |
| 188 | vs.logger.Info("Wrote trace", zap.String("id", trace.HexID())) |
| 189 | |
| 190 | traces = append(traces, traceInfo{ |
| 191 | id: trace.HexID(), |
| 192 | timestamp: trace.Timestamp(), |
| 193 | actualTrace: actual, |
| 194 | }) |
| 195 | |
| 196 | // Validate that we can retrieve them by trace ID. |
| 197 | readErr := vs.validateTraceRetrieval(ctx, trace, querier) |
| 198 | if readErr != nil { |
| 199 | result.Failures = append(result.Failures, ValidationFailure{ |
| 200 | Phase: "read", |
| 201 | Error: readErr, |
| 202 | Timestamp: vs.clock.Now(), |
| 203 | }) |
| 204 | } |
| 205 | |
| 206 | // sleep 1 sec to guarantee different timestamps on traces |
| 207 | if err := vs.sleepWithContext(ctx, 1*time.Second); err != nil { |
| 208 | // Context cancelled - add failure and return early |
| 209 | result.Failures = append(result.Failures, ValidationFailure{ |
| 210 | Phase: "timeout", |
| 211 | Error: err, |
| 212 | Timestamp: vs.clock.Now(), |
| 213 | }) |
| 214 | break |
| 215 | } |