45 lines
1.2 KiB
Go
45 lines
1.2 KiB
Go
package mq
|
|
|
|
import (
|
|
"context"
|
|
"strings"
|
|
"testing"
|
|
"time"
|
|
|
|
"git.ipao.vip/rogee/go-sip/internal/tenant"
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func TestV2LocalBrokerDisconnectStopsPublisher(t *testing.T) {
|
|
address := localBrokerURL(t)
|
|
broker, err := Open(address, uuid.NewString())
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
defer broker.Close()
|
|
tenantKey := "disconnect-" + uuid.NewString()
|
|
if _, err := broker.DeclareTenantQueue(tenantKey); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
route, err := tenant.NewDispatcherRoute(broker.dispatcherID, tenantKey)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
// Closing the underlying AMQP connection models a broker disconnect while
|
|
// leaving the Broker object in the state observed by the runtime watcher.
|
|
if err := broker.conn.Close(); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
select {
|
|
case <-broker.Done():
|
|
case <-time.After(3 * time.Second):
|
|
t.Fatal("broker disconnect was not surfaced")
|
|
}
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Second)
|
|
defer cancel()
|
|
err = broker.Publish(ctx, EventExchange, route.OutboundKey, []byte(`{"event_id":"after-disconnect"}`))
|
|
if err == nil || !strings.Contains(err.Error(), "closed") {
|
|
t.Fatalf("publisher accepted a disconnected broker: %v", err)
|
|
}
|
|
}
|