Skip to content

Commit cc1d62a

Browse files
authored
test: harden flaky restart and startup checks (#57)
1 parent 352394b commit cc1d62a

3 files changed

Lines changed: 36 additions & 16 deletions

File tree

internal/embeddedstore/engine_test.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -358,7 +358,13 @@ func TestEngine_StartPeriodicCheckpointPersistsRestartableStateWithoutFlush(t *t
358358
if err != nil {
359359
return false
360360
}
361-
return len(manifest.Checkpoints) >= 1
361+
if len(manifest.Checkpoints) == 0 {
362+
return false
363+
}
364+
checkpoint := latestCheckpointMeta(manifest.Checkpoints)
365+
return checkpoint.HighWaterMark == 1 &&
366+
manifest.ActiveTail.BaseHighWaterMark == checkpoint.HighWaterMark &&
367+
manifest.ActiveTail.EventCount == 0
362368
}, time.Second, 10*time.Millisecond)
363369

364370
manifest, err := loadOrCreateManifest(rootDir)

tests/e2e/helpers/testcontext.go

Lines changed: 26 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -97,20 +97,34 @@ func (tc *TestContext) ReconnectPortForward() error {
9797
serviceName = fmt.Sprintf("%s-spectre", tc.SharedDeployment.ReleaseName)
9898
}
9999

100-
// Create new port-forward
101-
portForwarder, err := NewPortForwarder(tc.t, tc.Cluster.GetContext(), namespace, serviceName, defaultServicePort)
102-
if err != nil {
103-
return fmt.Errorf("failed to create new port-forward: %w", err)
104-
}
105-
if err := portForwarder.WaitForReady(30 * time.Second); err != nil {
106-
return fmt.Errorf("service not reachable via new port-forward: %w", err)
107-
}
100+
var lastErr error
101+
deadline := time.Now().Add(30 * time.Second)
102+
103+
for time.Now().Before(deadline) {
104+
portForwarder, err := NewPortForwarder(tc.t, tc.Cluster.GetContext(), namespace, serviceName, defaultServicePort)
105+
if err != nil {
106+
lastErr = fmt.Errorf("failed to create new port-forward: %w", err)
107+
time.Sleep(500 * time.Millisecond)
108+
continue
109+
}
110+
if err := portForwarder.WaitForReady(30 * time.Second); err != nil {
111+
lastErr = fmt.Errorf("service not reachable via new port-forward: %w", err)
112+
_ = portForwarder.Stop()
113+
time.Sleep(500 * time.Millisecond)
114+
continue
115+
}
108116

109-
tc.PortForward = portForwarder
110-
tc.APIClient = NewAPIClient(tc.t, portForwarder.GetURL())
117+
tc.PortForward = portForwarder
118+
tc.APIClient = NewAPIClient(tc.t, portForwarder.GetURL())
111119

112-
tc.t.Logf("✓ Port-forward reconnected to new pod")
113-
return nil
120+
tc.t.Logf("✓ Port-forward reconnected to new pod")
121+
return nil
122+
}
123+
124+
if lastErr == nil {
125+
lastErr = fmt.Errorf("timed out waiting for replacement port-forward")
126+
}
127+
return lastErr
114128
}
115129

116130
// SetupE2ETestWithValuesFile provisions test infrastructure using a custom Helm values file.

tests/integration/api/embedded_runtime_fast_restart_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ func TestEmbeddedRuntimeFastRestartServesTimelineImmediately(t *testing.T) {
4747
require.Equal(t, 1.0, gaugeValueFromFamilies(t, families, "spectre_embedded_active_tail_events", nil))
4848

4949
manifestAfterReopen := readEmbeddedManifest(t, dir)
50-
require.Equal(t, 1, manifestAfterReopen.SegmentIndexGeneration)
51-
manifestBeforeReopen.SegmentIndexGeneration = manifestAfterReopen.SegmentIndexGeneration
52-
require.Equal(t, manifestBeforeReopen, manifestAfterReopen)
50+
require.Equal(t, manifestBeforeReopen.ActiveCheckpoint, manifestAfterReopen.ActiveCheckpoint)
51+
require.Equal(t, manifestBeforeReopen.ActiveTail, manifestAfterReopen.ActiveTail)
52+
require.Equal(t, manifestBeforeReopen.Checkpoints, manifestAfterReopen.Checkpoints)
5353

5454
server := newEmbeddedRuntimeServer(t, engine)
5555
response := queryEmbeddedTimeline(t, server, 0, 1_000_000)

0 commit comments

Comments
 (0)