cartodb-4.42/spec/lib/cartodb/stats/importer_spec.rb
2024-04-06 05:25:13 +00:00

150 lines
4.5 KiB
Ruby

require_relative '../../../simplecov_helper'
require 'rspec/core'
require 'rspec/expectations'
require 'rspec/mocks'
require_relative '../../../rspec_configuration.rb'
require_relative '../../../../lib/cartodb/stats/importer'
include Mocha::ParameterMatchers
module CartoDB
module Stats
describe Importer do
TEST_HOST = '172.28.128.3'.freeze
TEST_PORT = 8125
TIMING_TEST_KEY_A = 'test'.freeze
TIMING_TEST_KEY_B = 'timing'.freeze
TIMING_TEST_KEY = "#{TIMING_TEST_KEY_A}.#{TIMING_TEST_KEY_B}".freeze
GAUGE_TEST_KEY = 'gauge'.freeze
GAUGE_TEST_VALUE = 0.5
HOST_INFO = "fake-test-queue".freeze
EXPECTED_PREFIX = "importer.#{HOST_INFO}".freeze
describe '#timing' do
it "sends key with importer prefix" do
expected_send("#{EXPECTED_PREFIX}.#{TIMING_TEST_KEY}")
CartoDB::Stats::Importer.instance(
{
'host' => TEST_HOST,
'port' => TEST_PORT
}, HOST_INFO).timing(TIMING_TEST_KEY) { foo }
end
it "doesn't send anything if host or port are not met" do
expected_send_nothing
CartoDB::Stats::Importer.instance(
'host' => nil,
'port' => nil
).timing(TIMING_TEST_KEY) { foo }
CartoDB::Stats::Importer.instance(
'host' => TEST_HOST,
'port' => nil
).timing(TIMING_TEST_KEY) { foo }
CartoDB::Stats::Importer.instance(
'host' => nil,
'port' => TEST_PORT
).timing(TIMING_TEST_KEY) { foo }
end
it "runs block even without host or port" do
count = 0
CartoDB::Stats::Importer.instance(
'host' => nil,
'port' => nil
).timing(TIMING_TEST_KEY) do
count += 1
end
CartoDB::Stats::Importer.instance(
'host' => TEST_HOST,
'port' => nil
).timing(TIMING_TEST_KEY) do
count += 1
end
CartoDB::Stats::Importer.instance(
'host' => nil,
'port' => TEST_PORT
).timing(TIMING_TEST_KEY) do
count += 1
end
count.should eq 3
end
it "registers nested timing" do
expected_send("#{EXPECTED_PREFIX}.#{TIMING_TEST_KEY_A}")
expected_send("#{EXPECTED_PREFIX}.#{TIMING_TEST_KEY}")
importer_stats = CartoDB::Stats::Importer.instance(
{
'host' => TEST_HOST,
'port' => TEST_PORT
}, HOST_INFO)
importer_stats.timing(TIMING_TEST_KEY_A) do
importer_stats.timing(TIMING_TEST_KEY_B) do
foo
end
end
end
it 'sends nothing and discards key fragment if block fails' do
expected_send("#{EXPECTED_PREFIX}.#{TIMING_TEST_KEY_B}")
importer_stats = CartoDB::Stats::Importer.instance(
{
'host' => TEST_HOST,
'port' => TEST_PORT
}, HOST_INFO)
begin
importer_stats.timing(TIMING_TEST_KEY_A) do
raise 'error'
end
rescue StandardError
# INFO: keep going
end
importer_stats.timing(TIMING_TEST_KEY_B) do
end
end
end
describe '#gauge' do
it 'sends key with importer prefix' do
expected_send("#{EXPECTED_PREFIX}.#{GAUGE_TEST_KEY}")
CartoDB::Stats::Importer.instance(
{
'host' => TEST_HOST,
'port' => TEST_PORT
}, HOST_INFO).gauge(GAUGE_TEST_KEY, GAUGE_TEST_VALUE)
end
it "doesn't send anything if host or port are not met" do
expected_send_nothing
CartoDB::Stats::Importer.instance(
'host' => nil,
'port' => nil
).gauge(GAUGE_TEST_KEY, GAUGE_TEST_VALUE)
CartoDB::Stats::Importer.instance(
'host' => nil,
'port' => TEST_PORT
).gauge(GAUGE_TEST_KEY, GAUGE_TEST_VALUE)
CartoDB::Stats::Importer.instance(
'host' => TEST_HOST,
'port' => nil
).gauge(GAUGE_TEST_KEY, GAUGE_TEST_VALUE)
end
end
def foo
sleep 0.001
end
def expected_send(buf)
buf_re = %r{^#{buf}:}
UDPSocket.any_instance.expects(:send).with(regexp_matches(buf_re), 0, TEST_HOST, TEST_PORT).once
end
def expected_send_nothing
UDPSocket.any_instance.expects(:send).never
end
end
end
end