Files
tasks/tools/testrunner/log_test.go
Sean KaneandGitHub d1834f9e54 tests: expand testrunner support to alert on panics or dataraces (#8351)
## What changed?
Expanding `testrunner` tool to add alerts for panics and data races.
Sample table with an injected data race (and real panic):

<table><tr><th><th>Tests</th><th>Passed ✅</th><th>Skipped
⏭️</th><th>Failed ❌</th></tr><tr><td>JUnit Test Report</td><td>721
ran</td><td>340 passed</td><td>370 skipped</td><td>11
failed</td></tr></table>
<table><tr><th>Test</th><th>Result</th></tr><tr><td
colspan="2"><strong>JUnit Test
Report</strong></td></tr><tr><td>functional-test (crash)</td><td>❌
failure</td></tr><tr><td>io/server/tests.TestActivityApiBatchResetClientTestSuite/TestActivityBatchReset_DataRace</td><td>❌
failure</td></tr><tr><td>io/server/tests.TestTaskQueueStats_Pri_Suite/TestNoTasks_ValidateStats</td><td>❌
failure</td></tr><tr><td>io/server/tests.TestVersioning3FunctionalSuite/TestUnpinnedQuery_NoSticky/ForceTaskForwardForcePollForwardForceAsync</td><td>❌
failure</td></tr><tr><td>io/server/tests.TestVersioningFunctionalSuite/TestDispatchQueryOld/ForceTaskForwardForcePollForwardForceAsync</td><td>❌
failure</td></tr><tr><td>io/server/tests.TestActivityApiBatchResetClientTestSuite/TestActivityBatchReset_DataRace
(retry 1)</td><td>❌
failure</td></tr><tr><td>io/server/tests.TestActivityApiBatchResetClientTestSuite/TestActivityBatchReset_DataRace
(retry 2)</td><td>❌ failure</td></tr><tr><td>func1.DATA RACE: Data race
detected — in
go.temporal.io/server/tests.(*ActivityApiBatchResetClientTestSuite).TestActivityBatchReset_DataRace.func1</td><td>❌
failure</td></tr><tr><td>PANIC: runtime error: invalid memory address or
nil pointer dereference — in
TestTaskQueueStats_Pri_Suite/TestAddMultipleTasks_MultiplePartitions_ValidateStats_Cached</td><td>❌
failure</td></tr><tr><td>func1.DATA RACE: Data race detected — in
go.temporal.io/server/tests.(*ActivityApiBatchResetClientTestSuite).TestActivityBatchReset_DataRace.func1</td><td>❌
failure</td></tr><tr><td>func1.DATA RACE: Data race detected — in
go.temporal.io/server/tests.(*ActivityApiBatchResetClientTestSuite).TestActivityBatchReset_DataRace.func1</td><td>❌
failure</td></tr></table>

Source:
https://github.com/temporalio/temporal/actions/runs/17870152469?pr=8351

## Why?
This change will help the temporal team find bugs sooner.

## How did you test it?
- [ ] built
- [ ] run locally and tested manually
- [ ] covered by existing tests
- [X] added new unit test(s)
- [ ] added new functional test(s)

## Potential risks
NA
2025-09-22 11:01:29 -06:00

44 lines
1.3 KiB
Go

package testrunner
import (
"os"
"testing"
"github.com/stretchr/testify/require"
)
func TestParseTestTimeouts(t *testing.T) {
logInput, err := os.ReadFile("testdata/timeout-input.log")
require.NoError(t, err)
logOutput, err := os.ReadFile("testdata/timeout-output.log")
require.NoError(t, err)
stacktrace, tests := parseTestTimeouts(string(logInput))
require.Equal(t, []string{
"TestActivityApiResetClientTestSuite",
"TestNDCFuncTestSuite",
"TestActivityApiStateReplicationSuite",
}, tests)
require.Equal(t, string(logOutput), stacktrace)
}
func TestParseAlerts_DataRaceAndPanic(t *testing.T) {
input, err := os.ReadFile("testdata/alerts-input.log")
require.NoError(t, err)
alerts := parseAlerts(string(input))
require.NotEmpty(t, alerts)
require.Equal(t, 2, len(alerts))
require.Contains(t, alerts[0].Details, "WARNING: DATA RACE")
require.Contains(t, alerts[0].Tests[0], "test.TestDataRaceExample")
require.Contains(t, primaryTestName(alerts[0].Tests), "test.TestDataRaceExample")
require.Contains(t, alerts[1].Details, "panic: ")
require.Contains(t, alerts[1].Tests[0], "test.TestPanicExample")
require.Contains(t, primaryTestName(alerts[1].Tests), "TestPanicExample")
// Ensure dedupe works
deduped := dedupeAlerts(append(alerts, alerts...))
require.Equal(t, len(deduped), len(alerts))
}