test(gateway): freeze v8 qualification harness
Verify Data Plane / gateway (push) Failing after 3m12s

This commit is contained in:
sechmachine
2026-08-09 17:50:02 +07:00
parent a491c4f733
commit a0ca194691
8 changed files with 489 additions and 78 deletions
+48 -12
View File
@@ -47,17 +47,21 @@ type qualificationGatewayProcessReady struct {
}
type qualificationGatewayProcessSnapshot struct {
Metrics MetricsSnapshot
NativeSetups uint64
NativeOpens uint64
MediaIngress uint64
MediaRecovered uint64
MediaEnqueued uint64
MediaDrops uint64
MediaQueueMaximum uint64
MediaQueueMaximumBytes uint64
PacerReservations uint64
ProviderTelemetry ProviderTelemetry
Metrics MetricsSnapshot
NativeSetups uint64
NativeOpens uint64
MediaIngress uint64
MediaRecovered uint64
MediaEnqueued uint64
MediaDrops uint64
MediaQueueMaximum uint64
MediaQueueMaximumBytes uint64
PacerReservations uint64
ProviderTelemetry ProviderTelemetry
VideoReceiveBuffer int
VideoReceiveBufferAvailable bool
KernelDrops uint64
KernelDropsAvailable bool
}
type qualificationProcessRecordRequest struct {
@@ -242,7 +246,7 @@ func (r *qualificationProcessRecorder) stop() (qualificationProcessRecordResult,
return qualificationProcessRecordResult{}, err
}
first, last := resources[0], resources[len(resources)-1]
result.CPUSeconds = max(last.CPUSeconds-first.CPUSeconds, 0)
result.CPUSeconds = qualificationCPUSecondsDelta(first.CPUSeconds, last.CPUSeconds)
result.AllocatedObjects = last.AllocatedObjects - first.AllocatedObjects
result.AllocatedBytes = last.AllocatedBytes - first.AllocatedBytes
for _, sample := range resources {
@@ -252,6 +256,35 @@ func (r *qualificationProcessRecorder) stop() (qualificationProcessRecordResult,
return result, nil
}
func qualificationCPUSecondsDelta(first, last float64) float64 {
cpuSeconds := -1.0
if first >= 0 && last >= first {
cpuSeconds = last - first
}
return cpuSeconds
}
func TestQualificationCPUSecondsDeltaRejectsUnavailableOrDecreasingSamples(t *testing.T) {
tests := []struct {
name string
first, last float64
want float64
}{
{name: "positive", first: 1.25, last: 1.75, want: 0.5},
{name: "zero", first: 1.25, last: 1.25, want: 0},
{name: "unavailable first", first: -1, last: 1.25, want: -1},
{name: "unavailable last", first: 1.25, last: -1, want: -1},
{name: "decreasing", first: 1.75, last: 1.25, want: -1},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
if got := qualificationCPUSecondsDelta(test.first, test.last); got != test.want {
t.Fatalf("CPU delta for first=%f last=%f = %f, want %f", test.first, test.last, got, test.want)
}
})
}
}
type qualificationGatewayProcess struct {
command *exec.Cmd
cancel context.CancelFunc
@@ -461,6 +494,9 @@ func TestQualificationGatewayProcessChild(t *testing.T) {
snapshot.MediaQueueMaximum = session.mediaQueueMaximum.Load()
snapshot.MediaQueueMaximumBytes = session.mediaQueueMaximumBytes.Load()
snapshot.ProviderTelemetry = session.Telemetry()
snapshot.VideoReceiveBuffer, snapshot.VideoReceiveBufferAvailable,
snapshot.KernelDrops, snapshot.KernelDropsAvailable =
qualificationProviderVideoSocketDiagnostics(session.videoConn)
}
_ = json.NewEncoder(response).Encode(snapshot)
})