diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-11 18:09:37 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-03-11 18:09:37 +0300 |
commit | a210c43e0aca0311cc1d3d381763b25979ec72dc (patch) | |
tree | 0325d173da7a6e7bd6c2cdf450d0aa1c4e142d0f /spec/lib/gitlab/elasticsearch | |
parent | c9687bdf58e9d4a9c3942f587bd4841f42e3b5de (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib/gitlab/elasticsearch')
-rw-r--r-- | spec/lib/gitlab/elasticsearch/logs_spec.rb | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/spec/lib/gitlab/elasticsearch/logs_spec.rb b/spec/lib/gitlab/elasticsearch/logs_spec.rb new file mode 100644 index 00000000000..b2f23e30465 --- /dev/null +++ b/spec/lib/gitlab/elasticsearch/logs_spec.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe Gitlab::Elasticsearch::Logs do + let(:client) { Elasticsearch::Transport::Client } + + let(:es_message_1) { { timestamp: "2019-12-13T14:35:34.034Z", message: "10.8.2.1 - - [25/Oct/2019:08:03:22 UTC] \"GET / HTTP/1.1\" 200 13" } } + let(:es_message_2) { { timestamp: "2019-12-13T14:35:35.034Z", message: "10.8.2.1 - - [27/Oct/2019:23:49:54 UTC] \"GET / HTTP/1.1\" 200 13" } } + let(:es_message_3) { { timestamp: "2019-12-13T14:35:36.034Z", message: "10.8.2.1 - - [04/Nov/2019:23:09:24 UTC] \"GET / HTTP/1.1\" 200 13" } } + let(:es_message_4) { { timestamp: "2019-12-13T14:35:37.034Z", message: "- -\u003e /" } } + + let(:es_response) { JSON.parse(fixture_file('lib/elasticsearch/logs_response.json')) } + + subject { described_class.new(client) } + + let(:namespace) { "autodevops-deploy-9-production" } + let(:pod_name) { "production-6866bc8974-m4sk4" } + let(:container_name) { "auto-deploy-app" } + let(:search) { "foo +bar "} + let(:start_time) { "2019-12-13T14:35:34.034Z" } + let(:end_time) { "2019-12-13T14:35:34.034Z" } + + let(:body) { JSON.parse(fixture_file('lib/elasticsearch/query.json')) } + let(:body_with_container) { JSON.parse(fixture_file('lib/elasticsearch/query_with_container.json')) } + let(:body_with_search) { JSON.parse(fixture_file('lib/elasticsearch/query_with_search.json')) } + let(:body_with_times) { JSON.parse(fixture_file('lib/elasticsearch/query_with_times.json')) } + let(:body_with_start_time) { JSON.parse(fixture_file('lib/elasticsearch/query_with_start_time.json')) } + let(:body_with_end_time) { JSON.parse(fixture_file('lib/elasticsearch/query_with_end_time.json')) } + + RSpec::Matchers.define :a_hash_equal_to_json do |expected| + match do |actual| + actual.as_json == expected + end + end + + describe '#pod_logs' do + it 'returns the logs as an array' do + expect(client).to receive(:search).with(body: a_hash_equal_to_json(body)).and_return(es_response) + + result = subject.pod_logs(namespace, pod_name) + expect(result).to eq([es_message_4, es_message_3, es_message_2, es_message_1]) + end + + it 'can further filter the logs by container name' do + expect(client).to receive(:search).with(body: a_hash_equal_to_json(body_with_container)).and_return(es_response) + + result = subject.pod_logs(namespace, pod_name, container_name) + expect(result).to eq([es_message_4, es_message_3, es_message_2, es_message_1]) + end + + it 'can further filter the logs by search' do + expect(client).to receive(:search).with(body: a_hash_equal_to_json(body_with_search)).and_return(es_response) + + result = subject.pod_logs(namespace, pod_name, nil, search) + expect(result).to eq([es_message_4, es_message_3, es_message_2, es_message_1]) + end + + it 'can further filter the logs by start_time and end_time' do + expect(client).to receive(:search).with(body: a_hash_equal_to_json(body_with_times)).and_return(es_response) + + result = subject.pod_logs(namespace, pod_name, nil, nil, start_time, end_time) + expect(result).to eq([es_message_4, es_message_3, es_message_2, es_message_1]) + end + + it 'can further filter the logs by only start_time' do + expect(client).to receive(:search).with(body: a_hash_equal_to_json(body_with_start_time)).and_return(es_response) + + result = subject.pod_logs(namespace, pod_name, nil, nil, start_time) + expect(result).to eq([es_message_4, es_message_3, es_message_2, es_message_1]) + end + + it 'can further filter the logs by only end_time' do + expect(client).to receive(:search).with(body: a_hash_equal_to_json(body_with_end_time)).and_return(es_response) + + result = subject.pod_logs(namespace, pod_name, nil, nil, nil, end_time) + expect(result).to eq([es_message_4, es_message_3, es_message_2, es_message_1]) + end + end +end |