优化结构
This commit is contained in:
@@ -0,0 +1,57 @@
|
||||
package mq
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"testing"
|
||||
)
|
||||
|
||||
type captureClient struct{ payload []byte }
|
||||
|
||||
func (c *captureClient) Publish(_ context.Context, _ string, payload []byte, _ byte, _ bool) error {
|
||||
c.payload = append([]byte(nil), payload...)
|
||||
return nil
|
||||
}
|
||||
func (*captureClient) Subscribe(context.Context, string, byte, Handler) error { return nil }
|
||||
func (*captureClient) Unsubscribe(context.Context, ...string) error { return nil }
|
||||
func (*captureClient) Connected() bool { return true }
|
||||
func (*captureClient) Close() error { return nil }
|
||||
|
||||
func TestDisabledMQTTIsSafeAndUnavailable(t *testing.T) {
|
||||
client, err := NewMQTT(Config{})
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if client.Connected() {
|
||||
t.Fatal("disabled client reported connected")
|
||||
}
|
||||
if err = client.Publish(context.Background(), "events/test", []byte("test"), AtLeastOnce, false); !errors.Is(err, ErrUnavailable) {
|
||||
t.Fatalf("publish error = %v", err)
|
||||
}
|
||||
if err = client.Close(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err = client.Close(); err != nil {
|
||||
t.Fatalf("second close: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestEnabledMQTTRequiresBroker(t *testing.T) {
|
||||
if _, err := NewMQTT(Config{Enabled: true}); err == nil {
|
||||
t.Fatal("enabled MQTT without a broker should fail")
|
||||
}
|
||||
}
|
||||
|
||||
func TestPublishAndDecodeJSON(t *testing.T) {
|
||||
client := &captureClient{}
|
||||
if err := PublishJSON(context.Background(), client, "orders/paid", map[string]int{"id": 7}, AtLeastOnce, false); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
var value map[string]int
|
||||
if err := (Message{Payload: client.payload}).DecodeJSON(&value); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if value["id"] != 7 {
|
||||
t.Fatalf("decoded value = %#v", value)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user