package rabbitmq import "testing" func TestShouldDeadLetterBatch(t *testing.T) { tests := []struct { name string retryCount int maxRetries int want bool }{ {name: "first attempt retries", retryCount: 0, maxRetries: 3, want: false}, {name: "second attempt retries", retryCount: 1, maxRetries: 3, want: false}, {name: "last configured retry retries", retryCount: 2, maxRetries: 3, want: false}, {name: "next failure dead letters", retryCount: 3, maxRetries: 3, want: true}, {name: "zero retries dead letters immediately", retryCount: 0, maxRetries: 0, want: true}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if actual := shouldDeadLetterBatch(tt.retryCount, tt.maxRetries); actual != tt.want { t.Fatalf("shouldDeadLetterBatch(%d, %d) = %t, want %t", tt.retryCount, tt.maxRetries, actual, tt.want) } }) } } func TestBatchRetryCount(t *testing.T) { tests := []struct { name string headers map[string]any want int }{ {name: "missing", want: 0}, {name: "int", headers: map[string]any{batchRetryCountHeader: 2}, want: 2}, {name: "int64", headers: map[string]any{batchRetryCountHeader: int64(3)}, want: 3}, {name: "uint", headers: map[string]any{batchRetryCountHeader: uint16(4)}, want: 4}, {name: "string", headers: map[string]any{batchRetryCountHeader: "5"}, want: 5}, {name: "negative", headers: map[string]any{batchRetryCountHeader: -1}, want: 0}, {name: "invalid", headers: map[string]any{batchRetryCountHeader: "not-a-number"}, want: 0}, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { if actual := batchRetryCount(tt.headers); actual != tt.want { t.Fatalf("batchRetryCount() = %d, want %d", actual, tt.want) } }) } }