public void TestAckReplySyncCoverage() { Context.RunInJsServer(c => { // create the stream. CreateDefaultTestStream(c); // Create our JetStream context. IJetStream js = c.CreateJetStreamContext(); IJetStreamPushSyncSubscription sub = js.PushSubscribeSync(SUBJECT); c.Flush(DefaultTimeout); // flush outgoing communication with/to the server JsPublish(js, SUBJECT, "COVERAGE", 1); Msg message = sub.NextMessage(1000); Assert.NotNull(message); message.Reply = "$JS.ACK.stream.LS0k4eeN.1.1.1.1627472530542070600.0"; Assert.Throws <NATSNoRespondersException>(() => message.AckSync(1000)); }); }
public void TestAcks() { Context.RunInJsServer(c => { // create the stream. CreateDefaultTestStream(c); // Create our JetStream context. IJetStream js = c.CreateJetStreamContext(); ConsumerConfiguration cc = ConsumerConfiguration.Builder().WithAckWait(1500).Build(); // Build our subscription options. PushSubscribeOptions options = PushSubscribeOptions.Builder() .WithConfiguration(cc) .Build(); IJetStreamPushSyncSubscription sub = js.PushSubscribeSync(SUBJECT, options); c.Flush(DefaultTimeout); // flush outgoing communication with/to the server // TERM JsPublish(js, SUBJECT, "TERM", 1); Msg m = sub.NextMessage(DefaultTimeout); Assert.NotNull(m); Assert.Equal("TERM1", Encoding.ASCII.GetString(m.Data)); m.Term(); AssertNoMoreMessages(sub); // Ack Wait timeout JsPublish(js, SUBJECT, "WAIT", 1); m = sub.NextMessage(DefaultTimeout); Assert.NotNull(m); Assert.Equal("WAIT1", Encoding.ASCII.GetString(m.Data)); Thread.Sleep(2000); m.Ack(); m = sub.NextMessage(DefaultTimeout); Assert.NotNull(m); Assert.Equal("WAIT1", Encoding.ASCII.GetString(m.Data)); // In Progress JsPublish(js, SUBJECT, "PRO", 1); m = sub.NextMessage(DefaultTimeout); Assert.NotNull(m); Assert.Equal("PRO1", Encoding.ASCII.GetString(m.Data)); m.InProgress(); Thread.Sleep(750); m.InProgress(); Thread.Sleep(750); m.InProgress(); Thread.Sleep(750); m.InProgress(); Thread.Sleep(750); m.Ack(); AssertNoMoreMessages(sub); // ACK Sync JsPublish(js, SUBJECT, "ACKSYNC", 1); m = sub.NextMessage(DefaultTimeout); Assert.NotNull(m); Assert.Equal("ACKSYNC1", Encoding.ASCII.GetString(m.Data)); m.AckSync(DefaultTimeout); AssertNoMoreMessages(sub); // NAK JsPublish(js, SUBJECT, "NAK", 1); m = sub.NextMessage(DefaultTimeout); Assert.NotNull(m); Assert.Equal("NAK1", Encoding.ASCII.GetString(m.Data)); m.Nak(); m = sub.NextMessage(DefaultTimeout); Assert.NotNull(m); Assert.Equal("NAK1", Encoding.ASCII.GetString(m.Data)); m.Ack(); AssertNoMoreMessages(sub); JsPublish(js, SUBJECT, "NAK", 2, 1); m = sub.NextMessage(1000); Assert.NotNull(m); Assert.Equal("NAK2", Encoding.ASCII.GetString(m.Data)); m.NakWithDelay(3000); Assert.Throws <NATSTimeoutException>(() => sub.NextMessage(500)); m = sub.NextMessage(3000); Assert.NotNull(m); Assert.Equal("NAK2", Encoding.ASCII.GetString(m.Data)); m.Ack(); Assert.Throws <NATSTimeoutException>(() => sub.NextMessage(500)); JsPublish(js, SUBJECT, "NAK", 3, 1); m = sub.NextMessage(1000); Assert.NotNull(m); Assert.Equal("NAK3", Encoding.ASCII.GetString(m.Data)); m.NakWithDelay(Duration.OfSeconds(3)); // coverage to use both nakWithDelay Assert.Throws <NATSTimeoutException>(() => sub.NextMessage(500)); m = sub.NextMessage(3000); Assert.NotNull(m); Assert.Equal("NAK3", Encoding.ASCII.GetString(m.Data)); m.Ack(); Assert.Throws <NATSTimeoutException>(() => sub.NextMessage(500)); }); }