Something went wrong. Try again.
Monorepo for Tangled tangled.org
Something went wrong. Try again.
Go
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465//go:build linux
package microvm
import ( "context" "io" "log/slog" "net" "strings" "testing" "time"
"tangled.org/core/spindle/agentproto" agentv1 "tangled.org/core/spindle/agentproto/gen")
func TestAgentSessionInitProtocolVersion(t *testing.T) { for _, test := range []struct { name string version uint32 wantErr bool }{ {"current", agentproto.ProtocolVersion, false}, {"stale", agentproto.ProtocolVersion + 1, true}, } { t.Run(test.name, func(t *testing.T) { host, guest := net.Pipe() defer host.Close() defer guest.Close() session := NewAgentSession(host, 0, slog.New(slog.NewTextHandler(io.Discard, nil))) guestErr := make(chan error, 1) go func() { encoder := agentproto.NewEncoder(guest) if err := encoder.Encode(&agentproto.Message{Id: "hello", Hello: &agentv1.Hello{ProtocolVersion: test.version}}); err != nil { guestErr <- err return } if test.wantErr { guestErr <- nil return } message, err := agentproto.NewDecoder(guest).Decode() if err == nil && message.Init == nil { err = io.ErrUnexpectedEOF } guestErr <- err }() ctx, cancel := context.WithTimeout(context.Background(), time.Second) defer cancel() err := session.Init(ctx, &agentv1.Init{JobId: "job"}) if test.wantErr { if err == nil || !strings.Contains(err.Error(), "protocol version mismatch") { t.Fatalf("Init error = %v", err) } } else if err != nil { t.Fatalf("Init failed: %v", err) } if err := <-guestErr; err != nil { t.Fatalf("guest side failed: %v", err) } }) }}