ZapretKVN-android/audit/runtime_log_observer_test.go
loop-uh 6c6de7e24a
Some checks failed
Android CI / build (push) Has been cancelled
refactor: unify protocol runtimes and retain original core errors
2026-09-05 16:27:51 +03:00

55 lines
1.7 KiB
Go

package daemon_test
import (
"context"
"net"
"testing"
"time"
"github.com/sagernet/sing-box/daemon"
"github.com/sagernet/sing-box/log"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"google.golang.org/grpc/test/bufconn"
"google.golang.org/protobuf/types/known/emptypb"
)
func TestZapretRuntimeLogObserverBeforeCoreStartup(t *testing.T) {
ctx, cancel := context.WithTimeout(context.Background(), 3*time.Second)
defer cancel()
service := daemon.NewStartedService(daemon.ServiceOptions{Context: ctx, LogMaxLines: 128})
defer service.Close()
listener := bufconn.Listen(1024 * 1024)
server := grpc.NewServer()
daemon.RegisterStartedServiceServer(server, service)
go func() { _ = server.Serve(listener) }()
defer server.Stop()
connection, err := grpc.NewClient("passthrough:///runtime-log-test",
grpc.WithTransportCredentials(insecure.NewCredentials()),
grpc.WithContextDialer(func(context.Context, string) (net.Conn, error) { return listener.Dial() }))
if err != nil {
t.Fatal(err)
}
defer connection.Close()
client := daemon.NewStartedServiceClient(connection)
stream, err := client.SubscribeLog(ctx, &emptypb.Empty{})
if err != nil {
t.Fatal(err)
}
// Mirrors CommandClient.handleLogStream: metadata before the first Recv.
if _, err = client.GetDefaultLogLevel(ctx, &emptypb.Empty{}); err != nil {
t.Fatal(err)
}
if _, err = stream.Recv(); err != nil {
t.Fatal(err)
}
const original = "synthetic startup error: original details"
service.WriteMessage(log.LevelError, original)
message, err := stream.Recv()
if err != nil {
t.Fatal(err)
}
if len(message.Messages) != 1 || message.Messages[0].Message != original {
t.Fatalf("startup error missing or rewritten: %v", message)
}
}