diff options
Diffstat (limited to 'spec/tasks/gitlab/usage_data_rake_spec.rb')
-rw-r--r-- | spec/tasks/gitlab/usage_data_rake_spec.rb | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/spec/tasks/gitlab/usage_data_rake_spec.rb b/spec/tasks/gitlab/usage_data_rake_spec.rb index 442b884b313..f54d06f406f 100644 --- a/spec/tasks/gitlab/usage_data_rake_spec.rb +++ b/spec/tasks/gitlab/usage_data_rake_spec.rb @@ -3,15 +3,23 @@ require 'rake_helper' RSpec.describe 'gitlab:usage data take tasks', :silence_stdout do + include StubRequests include UsageDataHelpers + let(:metrics_file) { Rails.root.join('tmp', 'test', 'sql_metrics_queries.json') } + before do Rake.application.rake_require 'tasks/gitlab/usage_data' + # stub prometheus external http calls https://gitlab.com/gitlab-org/gitlab/-/issues/245277 stub_prometheus_queries stub_database_flavor_check end + after do + FileUtils.rm_rf(metrics_file) + end + describe 'dump_sql_in_yaml' do it 'dumps SQL queries in yaml format' do expect { run_rake_task('gitlab:usage_data:dump_sql_in_yaml') }.to output(/.*recorded_at:.*/).to_stdout @@ -23,4 +31,53 @@ RSpec.describe 'gitlab:usage data take tasks', :silence_stdout do expect { run_rake_task('gitlab:usage_data:dump_sql_in_json') }.to output(/.*"recorded_at":.*/).to_stdout end end + + describe 'dump_non_sql_in_json' do + it 'dumps non SQL data in json format' do + expect { run_rake_task('gitlab:usage_data:dump_non_sql_in_json') }.to output(/.*"recorded_at":.*/).to_stdout + end + end + + describe 'generate_sql_metrics_fixture' do + it 'generates fixture file correctly' do + run_rake_task('gitlab:usage_data:generate_sql_metrics_queries') + + expect(Pathname.new(metrics_file)).to exist + end + end + + describe 'generate_and_send' do + let(:service_ping_payload_url) do + File.join(ServicePing::SubmitService::STAGING_BASE_URL, ServicePing::SubmitService::USAGE_DATA_PATH) + end + + let(:service_ping_metadata_url) do + File.join(ServicePing::SubmitService::STAGING_BASE_URL, ServicePing::SubmitService::METADATA_PATH) + end + + let(:payload) { { recorded_at: Time.current } } + + before do + allow_next_instance_of(ServicePing::BuildPayload) do |service| + allow(service).to receive(:execute).and_return(payload) + end + stub_response(body: payload.merge(conv_index: { usage_data_id: 123 })) + stub_response(body: nil, url: service_ping_metadata_url, status: 201) + end + + it 'generates and sends Service Ping payload' do + expect { run_rake_task('gitlab:usage_data:generate_and_send') }.to output(/.*201.*/).to_stdout + end + + private + + def stub_response(url: service_ping_payload_url, body:, status: 201) + stub_full_request(url, method: :post) + .to_return( + headers: { 'Content-Type' => 'application/json' }, + body: body.to_json, + status: status + ) + end + end end |