func TestRealtimeClient_RealtimeHost(t *testing.T) { t.Parallel() httpClient := testutil.NewHTTPClient() app, err := testutil.NewSandbox(nil) if err != nil { t.Fatalf("NewSandbox=%s", err) } defer safeclose(t, app) rec := ably.NewRecorder(httpClient) hosts := []string{ "127.0.0.1", "localhost", "::1", } for _, host := range hosts { client, err := ably.NewRealtimeClient(app.Options(rec.Options(host))) if err != nil { t.Errorf("NewRealtimeClient=%s (host=%s)", err, host) continue } if err := checkError(80000, wait(client.Connection.Connect())); err != nil { t.Errorf("%s (host=%s)", err, host) continue } if err := checkError(50002, client.Close()); err != nil { t.Errorf("%s (host=%s)", err, host) continue } if _, ok := rec.Hosts[host]; !ok { t.Errorf("host %s was not recorded (recorded %v)", host, rec.Hosts) } } }
func ProvisionRealtime(cfg *Config, opts *ably.ClientOptions) (*Sandbox, *ably.RealtimeClient) { app := Provision(cfg) client, err := ably.NewRealtimeClient(app.Options(opts)) if err != nil { panic(nonil(err, app.Close())) } return app, client }
func TestRealtimeChannel_Subscribe(t *testing.T) { t.Parallel() app, client1 := testutil.ProvisionRealtime(nil, nil) defer safeclose(t, client1, app) client2, err := ably.NewRealtimeClient(app.Options(&ably.ClientOptions{NoEcho: true})) if err != nil { t.Fatalf("client2: NewRealtimeClient()=%v", err) } defer safeclose(t, client2) channel1 := client1.Channels.Get("test") sub1, err := channel1.Subscribe() if err != nil { t.Fatalf("client1: Subscribe()=%v", err) } defer sub1.Close() channel2 := client2.Channels.Get("test") sub2, err := channel2.Subscribe() if err != nil { t.Fatalf("client2: Subscribe()=%v", err) } defer sub2.Close() if err := wait(channel1.Publish("hello", "client1")); err != nil { t.Fatalf("client1: Publish()=%v", err) } if err := wait(channel2.Publish("hello", "client2")); err != nil { t.Fatalf("client2: Publish()=%v", err) } timeout := 15 * time.Second if err := expectMsg(sub1.MessageChannel(), "hello", "client1", timeout, true); err != nil { t.Fatal(err) } if err := expectMsg(sub1.MessageChannel(), "hello", "client2", timeout, true); err != nil { t.Fatal(err) } if err := expectMsg(sub2.MessageChannel(), "hello", "client1", timeout, true); err != nil { t.Fatal(err) } if err := expectMsg(sub2.MessageChannel(), "hello", "client2", timeout, false); err != nil { t.Fatal(err) } }