package liveshare import ( "context" "crypto/tls" "fmt" "strings" "testing" livesharetest "github.com/github/go-liveshare/test" "github.com/sourcegraph/jsonrpc2" ) func TestNewClient(t *testing.T) { client, err := NewClient() if err != nil { t.Errorf("error creating new client: %v", err) } if client == nil { t.Error("client is nil") } } func TestNewClientValidConnection(t *testing.T) { connection := Connection{"1", "2", "3", "4"} client, err := NewClient(WithConnection(connection)) if err != nil { t.Errorf("error creating new client: %v", err) } if client == nil { t.Error("client is nil") } } func TestNewClientWithInvalidConnection(t *testing.T) { connection := Connection{} if _, err := NewClient(WithConnection(connection)); err == nil { t.Error("err is nil") } } func TestClientJoin(t *testing.T) { connection := Connection{ SessionID: "session-id", SessionToken: "session-token", RelaySAS: "relay-sas", } joinWorkspace := func(req *jsonrpc2.Request) (interface{}, error) { return joinWorkspaceResult{1}, nil } server, err := livesharetest.NewServer( livesharetest.WithPassword(connection.SessionToken), livesharetest.WithService("workspace.joinWorkspace", joinWorkspace), ) if err != nil { t.Errorf("error creating liveshare server: %v", err) } defer server.Close() connection.RelayEndpoint = "sb" + strings.TrimPrefix(server.URL(), "https") ctx := context.Background() tlsConfig := WithTLSConfig(&tls.Config{InsecureSkipVerify: true}) client, err := NewClient(WithConnection(connection), tlsConfig) if err != nil { t.Errorf("error creating new client: %v", err) } done := make(chan error) go func() { if err := client.Join(ctx); err != nil { done <- fmt.Errorf("error joining client: %v", err) return } done <- nil }() select { case err := <-server.Err(): t.Errorf("error from server: %v", err) case err := <-done: if err != nil { t.Errorf("error from client: %v", err) } } }