mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
## 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
44 lines
1.3 KiB
Go
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))
|
|
}
|