#include #include #include #include using namespace xrpl; TEST(TelemetryConfig, setup_defaults) { telemetry::Telemetry::Setup s; EXPECT_FALSE(s.enabled); EXPECT_EQ(s.serviceName, "xrpld"); EXPECT_TRUE(s.serviceVersion.empty()); EXPECT_TRUE(s.serviceInstanceId.empty()); EXPECT_EQ(s.exporterEndpoint, "http://localhost:4318/v1/traces"); EXPECT_FALSE(s.useTls); EXPECT_TRUE(s.tlsCertPath.empty()); EXPECT_DOUBLE_EQ(s.samplingRatio, 1.0); EXPECT_EQ(s.batchSize, 512u); EXPECT_EQ(s.batchDelay, std::chrono::milliseconds{5000}); EXPECT_EQ(s.maxQueueSize, 2048u); EXPECT_EQ(s.networkId, 0u); EXPECT_EQ(s.networkType, "mainnet"); EXPECT_TRUE(s.traceTransactions); EXPECT_TRUE(s.traceConsensus); EXPECT_TRUE(s.traceRpc); EXPECT_FALSE(s.tracePeer); EXPECT_TRUE(s.traceLedger); } TEST(TelemetryConfig, parse_empty_section) { Section section; auto setup = telemetry::setup_Telemetry(section, "nHUtest123", "2.0.0", 0); EXPECT_FALSE(setup.enabled); EXPECT_EQ(setup.serviceName, "xrpld"); EXPECT_EQ(setup.serviceVersion, "2.0.0"); EXPECT_EQ(setup.serviceInstanceId, "nHUtest123"); EXPECT_DOUBLE_EQ(setup.samplingRatio, 1.0); EXPECT_TRUE(setup.traceRpc); EXPECT_TRUE(setup.traceTransactions); EXPECT_TRUE(setup.traceConsensus); EXPECT_FALSE(setup.tracePeer); EXPECT_TRUE(setup.traceLedger); } TEST(TelemetryConfig, parse_full_section) { Section section; section.set("enabled", "1"); section.set("service_name", "my-rippled"); section.set("service_instance_id", "custom-id"); section.set("exporter", "otlp_http"); section.set("endpoint", "http://collector:4318/v1/traces"); section.set("use_tls", "1"); section.set("tls_ca_cert", "/etc/ssl/ca.pem"); section.set("sampling_ratio", "0.5"); section.set("batch_size", "256"); section.set("batch_delay_ms", "3000"); section.set("max_queue_size", "4096"); section.set("trace_transactions", "0"); section.set("trace_consensus", "0"); section.set("trace_rpc", "1"); section.set("trace_peer", "1"); section.set("trace_ledger", "0"); auto setup = telemetry::setup_Telemetry(section, "nHUtest123", "2.0.0", 1); EXPECT_TRUE(setup.enabled); EXPECT_EQ(setup.serviceName, "my-rippled"); EXPECT_EQ(setup.serviceInstanceId, "custom-id"); EXPECT_EQ(setup.exporterEndpoint, "http://collector:4318/v1/traces"); EXPECT_TRUE(setup.useTls); EXPECT_EQ(setup.tlsCertPath, "/etc/ssl/ca.pem"); EXPECT_DOUBLE_EQ(setup.samplingRatio, 0.5); EXPECT_EQ(setup.batchSize, 256u); EXPECT_EQ(setup.batchDelay, std::chrono::milliseconds{3000}); EXPECT_EQ(setup.maxQueueSize, 4096u); EXPECT_FALSE(setup.traceTransactions); EXPECT_FALSE(setup.traceConsensus); EXPECT_TRUE(setup.traceRpc); EXPECT_TRUE(setup.tracePeer); EXPECT_FALSE(setup.traceLedger); } TEST(TelemetryConfig, null_telemetry_factory) { telemetry::Telemetry::Setup setup; setup.enabled = false; beast::Journal::Sink& sink = beast::Journal::getNullSink(); beast::Journal j(sink); auto tel = telemetry::make_Telemetry(setup, j); EXPECT_TRUE(tel != nullptr); EXPECT_FALSE(tel->isEnabled()); EXPECT_FALSE(tel->shouldTraceRpc()); EXPECT_FALSE(tel->shouldTraceTransactions()); EXPECT_FALSE(tel->shouldTraceConsensus()); EXPECT_FALSE(tel->shouldTracePeer()); EXPECT_FALSE(tel->shouldTraceLedger()); // start/stop should be no-ops without crashing tel->start(); tel->stop(); } TEST(TelemetryConfig, sampling_ratio_clamped) { Section section; section.set("sampling_ratio", "2.5"); auto setup = telemetry::setup_Telemetry(section, "nHUtest123", "2.0.0", 0); EXPECT_DOUBLE_EQ(setup.samplingRatio, 1.0); Section section2; section2.set("sampling_ratio", "-0.5"); auto setup2 = telemetry::setup_Telemetry(section2, "nHUtest123", "2.0.0", 0); EXPECT_DOUBLE_EQ(setup2.samplingRatio, 0.0); }