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:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-05-12 00:09:40 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-05-12 00:09:40 +0300
commit3f45eb27e9586ad87682c2d125770e119a7e9fe0 (patch)
tree533c2906ecf49c1403a2c21211241f21768e139a /spec/services
parent636eb69592af287dd76876e6fc3c898ad1af33f6 (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/services')
-rw-r--r--spec/services/prometheus/proxy_variable_substitution_service_spec.rb102
-rw-r--r--spec/services/template_engines/liquid_service_spec.rb126
2 files changed, 71 insertions, 157 deletions
diff --git a/spec/services/prometheus/proxy_variable_substitution_service_spec.rb b/spec/services/prometheus/proxy_variable_substitution_service_spec.rb
index 9978c631366..621b4c1f7be 100644
--- a/spec/services/prometheus/proxy_variable_substitution_service_spec.rb
+++ b/spec/services/prometheus/proxy_variable_substitution_service_spec.rb
@@ -142,7 +142,7 @@ describe Prometheus::ProxyVariableSubstitutionService do
end
it_behaves_like 'success' do
- let(:expected_query) { 'up{pod_name=""}' }
+ let(:expected_query) { 'up{pod_name="{{pod_name}}"}' }
end
end
@@ -161,28 +161,6 @@ describe Prometheus::ProxyVariableSubstitutionService do
end
end
- context 'with liquid tags and ruby format variables' do
- let(:params_keys) do
- {
- query: 'up{ {% if true %}env1="%{ci_environment_slug}",' \
- 'env2="{{ci_environment_slug}}"{% endif %} }'
- }
- end
-
- # The following spec will fail and should be changed to a 'success' spec
- # once we remove support for the Ruby interpolation format.
- # https://gitlab.com/gitlab-org/gitlab/issues/37990
- #
- # Liquid tags `{% %}` cannot be used currently because the Ruby `%`
- # operator raises an error when it encounters a Liquid `{% %}` tag in the
- # string.
- #
- # Once we remove support for the Ruby format, users can start using
- # Liquid tags.
-
- it_behaves_like 'error', 'Malformed string'
- end
-
context 'ruby template rendering' do
let(:params_keys) do
{ query: 'up{env=%{ci_environment_slug},%{environment_filter}}' }
@@ -271,17 +249,79 @@ describe Prometheus::ProxyVariableSubstitutionService do
end
end
- context 'when liquid template rendering raises error' do
- before do
- liquid_service = instance_double(TemplateEngines::LiquidService)
+ context 'gsub variable substitution tolerance for weirdness' do
+ context 'with whitespace around variable' do
+ let(:params_keys) do
+ {
+ query: 'up{' \
+ "env1={{ ci_environment_slug}}," \
+ "env2={{ci_environment_slug }}," \
+ "{{ environment_filter }}" \
+ '}'
+ }
+ end
- allow(TemplateEngines::LiquidService).to receive(:new).and_return(liquid_service)
- allow(liquid_service).to receive(:render).and_raise(
- TemplateEngines::LiquidService::RenderError, 'error message'
- )
+ it_behaves_like 'success' do
+ let(:expected_query) do
+ 'up{' \
+ "env1=#{environment.slug}," \
+ "env2=#{environment.slug}," \
+ "container_name!=\"POD\",environment=\"#{environment.slug}\"" \
+ '}'
+ end
+ end
+ end
+
+ context 'with empty variables' do
+ let(:params_keys) do
+ { query: "up{env1={{}},env2={{ }}}" }
+ end
+
+ it_behaves_like 'success' do
+ let(:expected_query) { "up{env1={{}},env2={{ }}}" }
+ end
end
- it_behaves_like 'error', 'error message'
+ context 'with multiple occurrences of variable in string' do
+ let(:params_keys) do
+ { query: "up{env1={{ci_environment_slug}},env2={{ci_environment_slug}}}" }
+ end
+
+ it_behaves_like 'success' do
+ let(:expected_query) { "up{env1=#{environment.slug},env2=#{environment.slug}}" }
+ end
+ end
+
+ context 'with multiple variables in string' do
+ let(:params_keys) do
+ { query: "up{env={{ci_environment_slug}},{{environment_filter}}}" }
+ end
+
+ it_behaves_like 'success' do
+ let(:expected_query) do
+ "up{env=#{environment.slug}," \
+ "container_name!=\"POD\",environment=\"#{environment.slug}\"}"
+ end
+ end
+ end
+
+ context 'with unknown variables in string' do
+ let(:params_keys) { { query: "up{env={{env_slug}}}" } }
+
+ it_behaves_like 'success' do
+ let(:expected_query) { "up{env={{env_slug}}}" }
+ end
+ end
+
+ context 'with unknown and known variables in string' do
+ let(:params_keys) do
+ { query: "up{env={{ci_environment_slug}},other_env={{env_slug}}}" }
+ end
+
+ it_behaves_like 'success' do
+ let(:expected_query) { "up{env=#{environment.slug},other_env={{env_slug}}}" }
+ end
+ end
end
end
end
diff --git a/spec/services/template_engines/liquid_service_spec.rb b/spec/services/template_engines/liquid_service_spec.rb
deleted file mode 100644
index 7c5262bc264..00000000000
--- a/spec/services/template_engines/liquid_service_spec.rb
+++ /dev/null
@@ -1,126 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-describe TemplateEngines::LiquidService do
- describe '#render' do
- let(:template) { 'up{env={{ci_environment_slug}}}' }
- let(:result) { subject }
-
- let_it_be(:slug) { 'env_slug' }
-
- let_it_be(:context) do
- {
- ci_environment_slug: slug,
- environment_filter: "container_name!=\"POD\",environment=\"#{slug}\""
- }
- end
-
- subject { described_class.new(template).render(context) }
-
- it 'with symbol keys in context it substitutes variables' do
- expect(result).to include("up{env=#{slug}")
- end
-
- context 'with multiple occurrences of variable in template' do
- let(:template) do
- 'up{env1={{ci_environment_slug}},env2={{ci_environment_slug}}}'
- end
-
- it 'substitutes variables' do
- expect(result).to eq("up{env1=#{slug},env2=#{slug}}")
- end
- end
-
- context 'with multiple variables in template' do
- let(:template) do
- 'up{env={{ci_environment_slug}},' \
- '{{environment_filter}}}'
- end
-
- it 'substitutes all variables' do
- expect(result).to eq(
- "up{env=#{slug}," \
- "container_name!=\"POD\",environment=\"#{slug}\"}"
- )
- end
- end
-
- context 'with unknown variables in template' do
- let(:template) { 'up{env={{env_slug}}}' }
-
- it 'does not substitute unknown variables' do
- expect(result).to eq("up{env=}")
- end
- end
-
- context 'with extra variables in context' do
- let(:template) { 'up{env={{ci_environment_slug}}}' }
-
- it 'substitutes variables' do
- # If context has only 1 key, there is no need for this spec.
- expect(context.count).to be > 1
- expect(result).to eq("up{env=#{slug}}")
- end
- end
-
- context 'with unknown and known variables in template' do
- let(:template) { 'up{env={{ci_environment_slug}},other_env={{env_slug}}}' }
-
- it 'substitutes known variables' do
- expect(result).to eq("up{env=#{slug},other_env=}")
- end
- end
-
- context 'Liquid errors' do
- shared_examples 'raises RenderError' do |message|
- it do
- expect { result }.to raise_error(described_class::RenderError, message)
- end
- end
-
- context 'when liquid raises error' do
- let(:template) { 'up{env={{ci_environment_slug}}' }
- let(:liquid_template) { Liquid::Template.new }
-
- before do
- allow(Liquid::Template).to receive(:parse).with(template).and_return(liquid_template)
- allow(liquid_template).to receive(:render!).and_raise(exception, message)
- end
-
- context 'raises Liquid::MemoryError' do
- let(:exception) { Liquid::MemoryError }
- let(:message) { 'Liquid error: Memory limits exceeded' }
-
- it_behaves_like 'raises RenderError', 'Memory limit exceeded while rendering template'
- end
-
- context 'raises Liquid::Error' do
- let(:exception) { Liquid::Error }
- let(:message) { 'Liquid error: Generic error message' }
-
- it_behaves_like 'raises RenderError', 'Error rendering query'
- end
- end
-
- context 'with template that is expensive to render' do
- let(:template) do
- '{% assign loop_count = 1000 %}'\
- '{% assign padStr = "0" %}'\
- '{% assign number_to_pad = "1" %}'\
- '{% assign strLength = number_to_pad | size %}'\
- '{% assign padLength = loop_count | minus: strLength %}'\
- '{% if padLength > 0 %}'\
- ' {% assign padded = number_to_pad %}'\
- ' {% for position in (1..padLength) %}'\
- ' {% assign padded = padded | prepend: padStr %}'\
- ' {% endfor %}'\
- ' {{ padded }}'\
- '{% endif %}'
- end
-
- it_behaves_like 'raises RenderError', 'Memory limit exceeded while rendering template'
- end
- end
- end
-end