test: lock parser span-retention behavior
This commit is contained in:
@@ -61,6 +61,16 @@ public class ParserTests
|
||||
Encoding.ASCII.GetString(cmds[0].Payload.ToArray()).ShouldContain("verbose");
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Parse_CONNECT_preserves_json_payload_bytes()
|
||||
{
|
||||
const string json = "{\"verbose\":false,\"echo\":true}";
|
||||
var cmds = await ParseAsync($"CONNECT {json}\r\n");
|
||||
cmds.ShouldHaveSingleItem();
|
||||
cmds[0].Type.ShouldBe(CommandType.Connect);
|
||||
Encoding.ASCII.GetString(cmds[0].Payload.Span).ShouldBe(json);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Parse_SUB_without_queue()
|
||||
{
|
||||
@@ -144,6 +154,31 @@ public class ParserTests
|
||||
cmds[0].Payload.ToArray().ShouldBeEmpty();
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Parse_split_PUB_payload_across_reads()
|
||||
{
|
||||
var pipe = new Pipe();
|
||||
var parser = new NatsParser(maxPayload: NatsProtocol.MaxPayloadSize);
|
||||
|
||||
await pipe.Writer.WriteAsync(Encoding.ASCII.GetBytes("PUB foo 5\r\nHe"));
|
||||
|
||||
var first = await pipe.Reader.ReadAsync();
|
||||
var firstBuffer = first.Buffer;
|
||||
parser.TryParse(ref firstBuffer, out _).ShouldBeFalse();
|
||||
pipe.Reader.AdvanceTo(firstBuffer.Start, firstBuffer.End);
|
||||
|
||||
await pipe.Writer.WriteAsync(Encoding.ASCII.GetBytes("llo\r\n"));
|
||||
pipe.Writer.Complete();
|
||||
|
||||
var second = await pipe.Reader.ReadAsync();
|
||||
var secondBuffer = second.Buffer;
|
||||
parser.TryParse(ref secondBuffer, out var cmd).ShouldBeTrue();
|
||||
cmd.Type.ShouldBe(CommandType.Pub);
|
||||
cmd.Subject.ShouldBe("foo");
|
||||
Encoding.ASCII.GetString(cmd.Payload.Span).ShouldBe("Hello");
|
||||
pipe.Reader.AdvanceTo(secondBuffer.Start, secondBuffer.End);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public async Task Parse_case_insensitive()
|
||||
{
|
||||
@@ -173,6 +208,7 @@ public class ParserTests
|
||||
var cmds = await ParseAsync("INFO {\"server_id\":\"test\"}\r\n");
|
||||
cmds.ShouldHaveSingleItem();
|
||||
cmds[0].Type.ShouldBe(CommandType.Info);
|
||||
Encoding.ASCII.GetString(cmds[0].Payload.Span).ShouldBe("{\"server_id\":\"test\"}");
|
||||
}
|
||||
|
||||
// Mirrors Go TestParsePubArg: verifies subject, optional reply, and payload size
|
||||
|
||||
Reference in New Issue
Block a user