Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/metrics_server/metrics_server_spec.rb')
-rw-r--r--spec/metrics_server/metrics_server_spec.rb81
1 files changed, 81 insertions, 0 deletions
diff --git a/spec/metrics_server/metrics_server_spec.rb b/spec/metrics_server/metrics_server_spec.rb
new file mode 100644
index 00000000000..58556d2cf5a
--- /dev/null
+++ b/spec/metrics_server/metrics_server_spec.rb
@@ -0,0 +1,81 @@
+# frozen_string_literal: true
+
+require 'fast_spec_helper'
+
+require_relative '../../metrics_server/metrics_server'
+require_relative '../support/helpers/next_instance_of'
+
+RSpec.describe MetricsServer do # rubocop:disable RSpec/FilePath
+ include NextInstanceOf
+
+ describe '.spawn' do
+ let(:env) do
+ {
+ 'METRICS_SERVER_TARGET' => 'sidekiq',
+ 'GITLAB_CONFIG' => nil
+ }
+ end
+
+ it 'spawns a process with the correct environment variables and detaches it' do
+ expect(Process).to receive(:spawn).with(env, anything, err: $stderr, out: $stdout).and_return(99)
+ expect(Process).to receive(:detach).with(99)
+
+ described_class.spawn('sidekiq')
+ end
+ end
+
+ describe '#start' do
+ let(:exporter_class) { Class.new(Gitlab::Metrics::Exporter::BaseExporter) }
+ let(:exporter_double) { double('fake_exporter', start: true) }
+ let(:prometheus_client_double) { double(::Prometheus::Client) }
+ let(:prometheus_config) { ::Prometheus::Client::Configuration.new }
+ let(:metrics_dir) { Dir.mktmpdir }
+ let(:settings_double) { double(:settings, sidekiq_exporter: {}) }
+
+ subject(:metrics_server) { described_class.new('fake', metrics_dir)}
+
+ before do
+ stub_env('prometheus_multiproc_dir', metrics_dir)
+ stub_const('Gitlab::Metrics::Exporter::FakeExporter', exporter_class)
+ allow(exporter_class).to receive(:instance).with({}, synchronous: true).and_return(exporter_double)
+ allow(Settings).to receive(:monitoring).and_return(settings_double)
+ end
+
+ after do
+ Dir.rmdir(metrics_dir)
+ end
+
+ it 'configures ::Prometheus::Client' do
+ allow(prometheus_client_double).to receive(:configuration).and_return(prometheus_config)
+
+ metrics_server.start
+
+ expect(prometheus_config.multiprocess_files_dir).to eq metrics_dir
+ end
+
+ it 'ensures that metrics directory exists in correct mode (0700)' do
+ expect(FileUtils).to receive(:mkdir_p).with(metrics_dir, mode: 0700)
+
+ metrics_server.start
+ end
+
+ it 'removes any old metrics files' do
+ FileUtils.touch("#{metrics_dir}/remove_this.db")
+
+ expect { metrics_server.start }.to change { Dir.empty?(metrics_dir) }.from(false).to(true)
+ end
+
+ it 'starts a metrics server' do
+ expect(exporter_double).to receive(:start)
+
+ metrics_server.start
+ end
+
+ it 'sends the correct Settings to the exporter instance' do
+ expect(Settings).to receive(:monitoring).and_return(settings_double)
+ expect(settings_double).to receive(:sidekiq_exporter)
+
+ metrics_server.start
+ end
+ end
+end