MCPcopy
hub / github.com/nats-io/nats.go / TestScheduleCronDelivery

Function TestScheduleCronDelivery

jetstream/test/publish_test.go:2572–2623  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

2570}
2571
2572func TestScheduleCronDelivery(t *testing.T) {
2573 srv := RunBasicJetStreamServer()
2574 defer shutdownJSServerAndRemoveStorage(t, srv)
2575 nc, err := nats.Connect(srv.ClientURL())
2576 if err != nil {
2577 t.Fatalf("Unexpected error: %v", err)
2578 }
2579 defer nc.Close()
2580
2581 js, err := jetstream.New(nc)
2582 if err != nil {
2583 t.Fatalf("Unexpected error: %v", err)
2584 }
2585
2586 ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
2587 defer cancel()
2588 _, err = js.CreateStream(ctx, jetstream.StreamConfig{
2589 Name: "SCHED",
2590 Subjects: []string{"schedule.>", "target.>"},
2591 AllowMsgSchedules: true,
2592 })
2593 if err != nil {
2594 t.Fatalf("Unexpected error: %v", err)
2595 }
2596
2597 cons, err := js.CreateConsumer(ctx, "SCHED", jetstream.ConsumerConfig{
2598 FilterSubject: "target.cron",
2599 })
2600 if err != nil {
2601 t.Fatalf("Unexpected error: %v", err)
2602 }
2603
2604 // Schedule every second using 6-field cron.
2605 _, err = js.Publish(ctx, "schedule.cron", []byte("cron payload"),
2606 jetstream.WithScheduleCron("* * * * * *"),
2607 jetstream.WithScheduleTarget("target.cron"),
2608 )
2609 if err != nil {
2610 t.Fatalf("Unexpected error: %v", err)
2611 }
2612
2613 msg, err := cons.Next(jetstream.FetchMaxWait(5 * time.Second))
2614 if err != nil {
2615 t.Fatalf("Expected to receive scheduled message: %v", err)
2616 }
2617 if string(msg.Data()) != "cron payload" {
2618 t.Fatalf("Expected payload %q; got: %q", "cron payload", string(msg.Data()))
2619 }
2620 if next := msg.Headers().Get(jetstream.ScheduleNextHeader); next == "" {
2621 t.Fatal("Expected Nats-Schedule-Next header to be set on delivered message")
2622 }
2623}

Callers

nothing calls this directly

Calls 15

NewFunction · 0.92
WithScheduleCronFunction · 0.92
WithScheduleTargetFunction · 0.92
FetchMaxWaitFunction · 0.92
ConnectMethod · 0.80
FatalfMethod · 0.80
RunBasicJetStreamServerFunction · 0.70
CreateStreamMethod · 0.65
CreateConsumerMethod · 0.65
PublishMethod · 0.65
NextMethod · 0.65

Tested by

no test coverage detected