chore: 并入 iotlcm-openapi 历史到 openapi/(原提交 3b05d5a)
This commit is contained in:
@@ -0,0 +1,49 @@
|
||||
package workerdiagnostic
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/gogf/gf/v2/errors/gerror"
|
||||
"github.com/gogf/gf/v2/os/gtime"
|
||||
"github.com/gogf/gf/v2/util/guid"
|
||||
|
||||
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/consts"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/model"
|
||||
)
|
||||
|
||||
type Publisher func(ctx context.Context, queue string, data any) error
|
||||
|
||||
type Service struct {
|
||||
publisher Publisher
|
||||
}
|
||||
|
||||
type Result struct {
|
||||
TraceID string
|
||||
Queue string
|
||||
SentAt int64
|
||||
}
|
||||
|
||||
func New(publisher Publisher) *Service {
|
||||
return &Service{publisher: publisher}
|
||||
}
|
||||
|
||||
func (s *Service) Publish(ctx context.Context, message string) (*Result, error) {
|
||||
var (
|
||||
traceID = fmt.Sprintf("worker-test-%s", guid.S())
|
||||
sentAt = gtime.TimestampMilli()
|
||||
payload = model.WorkerDiagnosticMessage{
|
||||
TraceID: traceID,
|
||||
SentAt: sentAt,
|
||||
Message: message,
|
||||
}
|
||||
)
|
||||
if err := s.publisher(ctx, consts.QueueWorkerDiagnostic, payload); err != nil {
|
||||
return nil, gerror.Wrap(err, "publish worker diagnostic message failed")
|
||||
}
|
||||
return &Result{
|
||||
TraceID: traceID,
|
||||
Queue: consts.QueueWorkerDiagnostic,
|
||||
SentAt: sentAt,
|
||||
}, nil
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
package workerdiagnostic
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/consts"
|
||||
"git.5iot.com/iotlcm-public/iotlcm-openapi/internal/model"
|
||||
)
|
||||
|
||||
func TestPublish(t *testing.T) {
|
||||
var (
|
||||
publishedQueue string
|
||||
publishedPayload model.WorkerDiagnosticMessage
|
||||
)
|
||||
service := New(func(ctx context.Context, queue string, data any) error {
|
||||
publishedQueue = queue
|
||||
var ok bool
|
||||
publishedPayload, ok = data.(model.WorkerDiagnosticMessage)
|
||||
if !ok {
|
||||
t.Fatalf("unexpected payload type %T", data)
|
||||
}
|
||||
return nil
|
||||
})
|
||||
|
||||
result, err := service.Publish(context.Background(), "worker ping")
|
||||
if err != nil {
|
||||
t.Fatalf("Publish() error = %v", err)
|
||||
}
|
||||
if publishedQueue != consts.QueueWorkerDiagnostic {
|
||||
t.Fatalf("queue = %q, want %q", publishedQueue, consts.QueueWorkerDiagnostic)
|
||||
}
|
||||
if !strings.HasPrefix(result.TraceID, "worker-test-") {
|
||||
t.Fatalf("traceId = %q, want worker-test- prefix", result.TraceID)
|
||||
}
|
||||
if result.SentAt <= 0 {
|
||||
t.Fatalf("sentAt = %d, want positive timestamp", result.SentAt)
|
||||
}
|
||||
if result.Queue != consts.QueueWorkerDiagnostic {
|
||||
t.Fatalf("result queue = %q, want %q", result.Queue, consts.QueueWorkerDiagnostic)
|
||||
}
|
||||
if publishedPayload.TraceID != result.TraceID || publishedPayload.SentAt != result.SentAt {
|
||||
t.Fatalf("published identifiers = %+v, result = %+v", publishedPayload, result)
|
||||
}
|
||||
if publishedPayload.Message != "worker ping" {
|
||||
t.Fatalf("message = %q, want worker ping", publishedPayload.Message)
|
||||
}
|
||||
body, err := json.Marshal(publishedPayload)
|
||||
if err != nil {
|
||||
t.Fatalf("json.Marshal() error = %v", err)
|
||||
}
|
||||
wantJSON := `{"traceId":"` + result.TraceID + `","sentAt":` + fmt.Sprint(result.SentAt) + `,"message":"worker ping"}`
|
||||
if string(body) != wantJSON {
|
||||
t.Fatalf("JSON = %s, want %s", body, wantJSON)
|
||||
}
|
||||
}
|
||||
|
||||
func TestPublishWrapsPublisherError(t *testing.T) {
|
||||
publishErr := errors.New("broker unavailable")
|
||||
service := New(func(ctx context.Context, queue string, data any) error {
|
||||
return publishErr
|
||||
})
|
||||
|
||||
result, err := service.Publish(context.Background(), "worker ping")
|
||||
if result != nil {
|
||||
t.Fatalf("result = %+v, want nil", result)
|
||||
}
|
||||
if err == nil {
|
||||
t.Fatal("Publish() error = nil, want error")
|
||||
}
|
||||
if !errors.Is(err, publishErr) {
|
||||
t.Fatalf("Publish() error = %v, want wrapped publisher error", err)
|
||||
}
|
||||
if !strings.Contains(err.Error(), "publish worker diagnostic message failed") {
|
||||
t.Fatalf("Publish() error = %v, want context", err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user