# frozen_string_literal: true require "test_helper" class DogStatsDDatagramBuilderTest < Minitest::Test def setup @datagram_builder = StatsD::Instrument::DogStatsDDatagramBuilder.new end def test_raises_on_unsupported_metrics assert_raises(NotImplementedError) { @datagram_builder.kv("foo", 10, nil, nil) } end def test_simple_service_check datagram = @datagram_builder._sc("service", :ok) assert_equal("_sc|service|0", datagram) parsed_datagram = StatsD::Instrument::DogStatsDDatagramBuilder.datagram_class.new(datagram) assert_equal(:_sc, parsed_datagram.type) assert_equal("service", parsed_datagram.name) assert_equal(0, parsed_datagram.value) end def test_complex_service_check datagram = @datagram_builder._sc( "service", :warning, timestamp: Time.parse("2019-09-30T04:22:12Z"), hostname: "localhost", tags: { foo: "bar|baz" }, message: "blah", ) assert_equal("_sc|service|1|h:localhost|d:1569817332|#foo:barbaz|m:blah", datagram) parsed_datagram = StatsD::Instrument::DogStatsDDatagramBuilder.datagram_class.new(datagram) assert_equal(:_sc, parsed_datagram.type) assert_equal("service", parsed_datagram.name) assert_equal(1, parsed_datagram.value) assert_equal("localhost", parsed_datagram.hostname) assert_equal(Time.parse("2019-09-30T04:22:12Z"), parsed_datagram.timestamp) assert_equal(["foo:barbaz"], parsed_datagram.tags) assert_equal("blah", parsed_datagram.message) end def test_simple_event datagram = @datagram_builder._e("hello", "world") assert_equal("_e{5,5}:hello|world", datagram) parsed_datagram = StatsD::Instrument::DogStatsDDatagramBuilder.datagram_class.new(datagram) assert_equal(:_e, parsed_datagram.type) assert_equal("hello", parsed_datagram.name) assert_equal("world", parsed_datagram.value) end def test_complex_event datagram = @datagram_builder._e( "testing", "with\nnewline", timestamp: Time.parse("2019-09-30T04:22:12Z"), hostname: "localhost", aggregation_key: "my-key", priority: "low", source_type_name: "source", alert_type: "success", tags: { foo: "bar|baz" }, ) assert_equal( '_e{7,13}:testing|with\\nnewline|h:localhost|d:1569817332|k:my-key|' \ "p:low|s:source|t:success|#foo:barbaz", datagram, ) parsed_datagram = StatsD::Instrument::DogStatsDDatagramBuilder.datagram_class.new(datagram) assert_equal(:_e, parsed_datagram.type) assert_equal("testing", parsed_datagram.name) assert_equal("with\nnewline", parsed_datagram.value) assert_equal("localhost", parsed_datagram.hostname) assert_equal(Time.parse("2019-09-30T04:22:12Z"), parsed_datagram.timestamp) assert_equal(["foo:barbaz"], parsed_datagram.tags) assert_equal("my-key", parsed_datagram.aggregation_key) assert_equal("low", parsed_datagram.priority) assert_equal("source", parsed_datagram.source_type_name) assert_equal("success", parsed_datagram.alert_type) end end