(t *testing.T)
| 2570 | } |
| 2571 | |
| 2572 | func 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 | } |
nothing calls this directly
no test coverage detected