42 lines
1.2 KiB
Go
42 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
"time"
|
|
|
|
amqp "github.com/rabbitmq/amqp091-go"
|
|
)
|
|
|
|
func TestPublishConfirmReturnAndUnknown(t *testing.T) {
|
|
for _, tc := range []struct {
|
|
name, want string
|
|
ack, returned, closed bool
|
|
}{
|
|
{name: "ack", want: "confirmed", ack: true}, {name: "return", want: "unroutable", ack: true, returned: true}, {name: "nack", want: "rejected"}, {name: "closed", want: "unknown", closed: true},
|
|
} {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
confirms := make(chan amqp.Confirmation, 1)
|
|
returns := make(chan amqp.Return, 1)
|
|
if tc.returned {
|
|
returns <- amqp.Return{ReplyCode: 312}
|
|
}
|
|
if tc.closed {
|
|
close(confirms)
|
|
} else {
|
|
confirms <- amqp.Confirmation{Ack: tc.ack}
|
|
}
|
|
got, err := awaitConfirm(context.Background(), confirms, returns)
|
|
if got != tc.want || (err == nil) != (got == "confirmed") {
|
|
t.Fatalf("%s: %s %v", tc.name, got, err)
|
|
}
|
|
})
|
|
}
|
|
ctx, cancel := context.WithTimeout(context.Background(), time.Millisecond)
|
|
defer cancel()
|
|
got, err := awaitConfirm(ctx, make(chan amqp.Confirmation), make(chan amqp.Return))
|
|
if got != "unknown" || err == nil {
|
|
t.Fatalf("timeout: %s %v", got, err)
|
|
}
|
|
}
|