Files
wehub-resource-sync e0e362d700
SDK Tests / changes (push) Successful in 2m29s
Real E2E Tests / changes (push) Successful in 2m29s
Deploy Docs Pages / build (push) Has been cancelled
Deploy Docs Pages / deploy (push) Has been cancelled
Real E2E Tests / JavaScript E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Python E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Java E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / C# E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Go E2E (docker bridge) (push) Has been cancelled
Real E2E Tests / Real E2E CI (push) Has been cancelled
SDK Tests / SDK CI (push) Has been cancelled
SDK Tests / CLI Tests (push) Has been cancelled
SDK Tests / Python SDK Quality (code-interpreter) (push) Has been cancelled
SDK Tests / Python SDK Quality (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / JavaScript SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Python SDK Tests (sandbox) (push) Has been cancelled
SDK Tests / CLI Quality (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Kotlin SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (code-interpreter) (push) Has been cancelled
SDK Tests / C# SDK Quality And Tests (sandbox) (push) Has been cancelled
SDK Tests / Go SDK Quality And Tests (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:39:33 +08:00

104 lines
2.7 KiB
Go

// Copyright 2026 Alibaba Group Holding Ltd.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package supervisor
import (
"bufio"
"bytes"
"encoding/json"
"strings"
"sync"
"testing"
"time"
)
func TestEventWriter_Roundtrip(t *testing.T) {
var buf bytes.Buffer
fixed := time.Date(2026, 5, 28, 10, 0, 0, 0, time.UTC)
ew := newEventWriter(&buf, "egress", func() time.Time { return fixed })
if err := ew.emit(Event{Event: EventStart, PID: 1234, Attempt: 1, Gen: 1}); err != nil {
t.Fatal(err)
}
if err := ew.emit(Event{Event: EventExit, PID: 1234, Gen: 1, ExitCode: intPtr(0), DurationMS: 1500}); err != nil {
t.Fatal(err)
}
sc := bufio.NewScanner(strings.NewReader(buf.String()))
if !sc.Scan() {
t.Fatal("expected first line")
}
var e1 Event
if err := json.Unmarshal(sc.Bytes(), &e1); err != nil {
t.Fatal(err)
}
if e1.Event != EventStart || e1.PID != 1234 || e1.Name != "egress" || !e1.TS.Equal(fixed) {
t.Fatalf("e1 unexpected: %+v", e1)
}
if !sc.Scan() {
t.Fatal("expected second line")
}
var e2 Event
if err := json.Unmarshal(sc.Bytes(), &e2); err != nil {
t.Fatal(err)
}
if e2.Event != EventExit || e2.ExitCode == nil || *e2.ExitCode != 0 || e2.DurationMS != 1500 {
t.Fatalf("e2 unexpected: %+v", e2)
}
}
func TestEventWriter_ConcurrentWritesDoNotInterleave(t *testing.T) {
var buf bytes.Buffer
ew := newEventWriter(&buf, "n", time.Now)
const goroutines = 16
const perGoroutine = 64
var wg sync.WaitGroup
for i := 0; i < goroutines; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for j := 0; j < perGoroutine; j++ {
if err := ew.emit(Event{Event: EventBackoff, SleepMS: 1}); err != nil {
t.Errorf("emit: %v", err)
}
}
}()
}
wg.Wait()
sc := bufio.NewScanner(strings.NewReader(buf.String()))
count := 0
for sc.Scan() {
var e Event
if err := json.Unmarshal(sc.Bytes(), &e); err != nil {
t.Fatalf("line %d not valid JSON: %v\nline=%q", count, err, sc.Text())
}
count++
}
if count != goroutines*perGoroutine {
t.Fatalf("got %d events, want %d", count, goroutines*perGoroutine)
}
}
func TestEventWriter_NilSafe(t *testing.T) {
var ew *eventWriter
if err := ew.emit(Event{Event: EventStart}); err != nil {
t.Fatal(err)
}
}