Files
agent-radar 2ed3415fb7
Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
源码快照 @ 2026-09-01 (source-only, 剔除非源码素材)
2026-09-01 20:17:27 +08:00

100 lines
2.6 KiB
Go

package devicelink
import (
"context"
"errors"
"io"
"net"
"testing"
"time"
)
func TestStreamProbeLeavesVerifiedStreamForApplicationPayload(t *testing.T) {
t.Parallel()
server, client := net.Pipe()
defer client.Close()
defer server.Close()
serverDone := make(chan error, 1)
go func() {
serverDone <- ServeStreamProbe(context.Background(), server, func(_ context.Context, stream net.Conn) error {
payload := make([]byte, len("application-payload"))
if _, err := io.ReadFull(stream, payload); err != nil {
return err
}
if string(payload) != "application-payload" {
return errors.New("unexpected application payload")
}
_, err := stream.Write([]byte("application-ack"))
return err
})
}()
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
defer cancel()
if err := ProbeStream(ctx, client); err != nil {
t.Fatalf("ProbeStream() error = %v", err)
}
if _, err := client.Write([]byte("application-payload")); err != nil {
t.Fatalf("write application payload: %v", err)
}
ack := make([]byte, len("application-ack"))
if _, err := io.ReadFull(client, ack); err != nil {
t.Fatalf("read application acknowledgement: %v", err)
}
if string(ack) != "application-ack" {
t.Fatalf("application acknowledgement = %q", ack)
}
if err := <-serverDone; err != nil {
t.Fatalf("ServeStreamProbe() error = %v", err)
}
}
func TestStreamProbeCancellationClosesBlockedStream(t *testing.T) {
t.Parallel()
server, client := net.Pipe()
defer server.Close()
ctx, cancel := context.WithCancel(context.Background())
result := make(chan error, 1)
go func() { result <- ProbeStream(ctx, client) }()
cancel()
select {
case err := <-result:
if err == nil {
t.Fatal("ProbeStream() succeeded after cancellation")
}
case <-time.After(time.Second):
t.Fatal("ProbeStream() did not observe cancellation")
}
_ = client.Close()
}
func TestStreamProbeRejectsUnexpectedRequest(t *testing.T) {
t.Parallel()
server, client := net.Pipe()
defer server.Close()
defer client.Close()
result := make(chan error, 1)
go func() {
result <- ServeStreamProbe(context.Background(), server, func(context.Context, net.Conn) error {
return nil
})
}()
payload := make([]byte, len(streamProbeRequest))
copy(payload, "unexpected")
if _, err := client.Write(payload); err != nil {
t.Fatalf("write unexpected probe: %v", err)
}
select {
case err := <-result:
if !errors.Is(err, ErrStreamProbeRejected) {
t.Fatalf("ServeStreamProbe() error = %v, want rejection", err)
}
case <-time.After(time.Second):
t.Fatal("ServeStreamProbe() did not reject unexpected request")
}
}