Some checks failed
Docs CI / lint-and-preview (push) Has been cancelled
feat(ruby): Add RubyVendorArtifactCollector to collect vendor artifacts test(deno): Add golden tests for Deno analyzer with various fixtures test(deno): Create Deno module and package files for testing test(deno): Implement Deno lock and import map for dependency management test(deno): Add FFI and worker scripts for Deno testing feat(ruby): Set up Ruby workspace with Gemfile and dependencies feat(ruby): Add expected output for Ruby workspace tests feat(signals): Introduce CallgraphManifest model for signal processing
51 lines
1.6 KiB
C#
51 lines
1.6 KiB
C#
using System.IO;
|
|
using System.IO.Compression;
|
|
using System.Text;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using FluentAssertions;
|
|
using StellaOps.Signals.Parsing;
|
|
using Xunit;
|
|
|
|
namespace StellaOps.Signals.Reachability.Tests;
|
|
|
|
public sealed class RuntimeFactsNdjsonReaderTests
|
|
{
|
|
[Fact]
|
|
public async Task ReadAsync_ParsesLines()
|
|
{
|
|
var ndjson = """
|
|
{"symbolId":"sym::foo","hitCount":2,"processId":10,"processName":"api"}
|
|
{"symbolId":"sym::bar","codeId":"elf:abcd","loaderBase":"0x1000","metadata":{"thread":"bg"}}
|
|
""";
|
|
|
|
await using var stream = new MemoryStream(Encoding.UTF8.GetBytes(ndjson));
|
|
var events = await RuntimeFactsNdjsonReader.ReadAsync(stream, gzipEncoded: false, CancellationToken.None);
|
|
|
|
events.Should().HaveCount(2);
|
|
events[0].SymbolId.Should().Be("sym::foo");
|
|
events[0].ProcessId.Should().Be(10);
|
|
events[0].ProcessName.Should().Be("api");
|
|
events[1].LoaderBase.Should().Be("0x1000");
|
|
}
|
|
|
|
[Fact]
|
|
public async Task ReadAsync_HandlesGzip()
|
|
{
|
|
var ndjson = """
|
|
{"symbolId":"sym::foo"}
|
|
""";
|
|
await using var compressed = new MemoryStream();
|
|
await using (var gzip = new GZipStream(compressed, CompressionLevel.Optimal, leaveOpen: true))
|
|
await using (var writer = new StreamWriter(gzip, Encoding.UTF8, leaveOpen: true))
|
|
{
|
|
await writer.WriteAsync(ndjson);
|
|
}
|
|
|
|
compressed.Position = 0;
|
|
|
|
var events = await RuntimeFactsNdjsonReader.ReadAsync(compressed, gzipEncoded: true, CancellationToken.None);
|
|
events.Should().HaveCount(1);
|
|
}
|
|
}
|