summaryrefslogtreecommitdiff
path: root/spec/models/ci/build_trace_chunks/fog_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/models/ci/build_trace_chunks/fog_spec.rb')
-rw-r--r--spec/models/ci/build_trace_chunks/fog_spec.rb51
1 files changed, 51 insertions, 0 deletions
diff --git a/spec/models/ci/build_trace_chunks/fog_spec.rb b/spec/models/ci/build_trace_chunks/fog_spec.rb
index d9e9533fb26..21dab6fad60 100644
--- a/spec/models/ci/build_trace_chunks/fog_spec.rb
+++ b/spec/models/ci/build_trace_chunks/fog_spec.rb
@@ -102,6 +102,57 @@ RSpec.describe Ci::BuildTraceChunks::Fog do
end
end
+ describe '#append_data' do
+ let(:initial_data) { (+'😺').force_encoding(Encoding::ASCII_8BIT) }
+ let(:model) { create(:ci_build_trace_chunk, :fog_with_data, initial_data: initial_data) }
+ let(:data) { data_store.data(model) }
+
+ context 'when ci_job_trace_force_encode is enabled' do
+ it 'appends ASCII data' do
+ data_store.append_data(model, +'hello world', 4)
+
+ expect(data.encoding).to eq(Encoding::ASCII_8BIT)
+ expect(data.force_encoding(Encoding::UTF_8)).to eq('😺hello world')
+ end
+
+ it 'appends UTF-8 data' do
+ data_store.append_data(model, +'Résumé', 4)
+
+ expect(data.encoding).to eq(Encoding::ASCII_8BIT)
+ expect(data.force_encoding(Encoding::UTF_8)).to eq("😺Résumé")
+ end
+
+ context 'when initial data is UTF-8' do
+ let(:initial_data) { +'😺' }
+
+ it 'appends ASCII data' do
+ data_store.append_data(model, +'hello world', 4)
+
+ expect(data.encoding).to eq(Encoding::ASCII_8BIT)
+ expect(data.force_encoding(Encoding::UTF_8)).to eq('😺hello world')
+ end
+ end
+ end
+
+ context 'when ci_job_trace_force_encode is disabled' do
+ before do
+ stub_feature_flags(ci_job_trace_force_encode: false)
+ end
+
+ it 'appends ASCII data' do
+ data_store.append_data(model, +'hello world', 4)
+
+ expect(data.encoding).to eq(Encoding::ASCII_8BIT)
+ expect(data.force_encoding(Encoding::UTF_8)).to eq('😺hello world')
+ end
+
+ it 'throws an exception when appending UTF-8 data' do
+ expect(Gitlab::ErrorTracking).to receive(:track_and_raise_exception).and_call_original
+ expect { data_store.append_data(model, +'Résumé', 4) }.to raise_exception(Encoding::CompatibilityError)
+ end
+ end
+ end
+
describe '#delete_data' do
subject { data_store.delete_data(model) }