|
270 | 270 |
|
271 | 271 | end
|
272 | 272 | end
|
| 273 | + context "the 'user-agent' header" do |
| 274 | + let(:pool) { double("pool") } |
| 275 | + let(:compression_level) { 6 } |
| 276 | + let(:base_options) { super().merge( :client_settings => {:compression_level => compression_level}) } |
| 277 | + let(:actions) { [ |
| 278 | + ["index", {:_id=>nil, :_index=>"logstash"}, {"message_1"=> message_1}], |
| 279 | + ["index", {:_id=>nil, :_index=>"logstash"}, {"message_2"=> message_2}], |
| 280 | + ["index", {:_id=>nil, :_index=>"logstash"}, {"message_3"=> message_3}], |
| 281 | + ]} |
| 282 | + let(:message_1) { "hello" } |
| 283 | + let(:message_2_size) { 1_000 } |
| 284 | + let(:message_2) { SecureRandom.alphanumeric(message_2_size / 2 ) * 2 } |
| 285 | + let(:message_3_size) { 1_000 } |
| 286 | + let(:message_3) { "m" * message_3_size } |
| 287 | + let(:messages_size) { message_1.size + message_2.size + message_3.size } |
| 288 | + let(:action_overhead) { 42 + 16 + 2 } # header plus doc key size plus new line overhead per action |
| 289 | + |
| 290 | + let(:response) do |
| 291 | + response = double("response") |
| 292 | + allow(response).to receive(:code).and_return(response) |
| 293 | + allow(response).to receive(:body).and_return({"errors" => false}.to_json) |
| 294 | + response |
| 295 | + end |
| 296 | + |
| 297 | + before(:each) do |
| 298 | + subject.instance_variable_set("@pool", pool) |
| 299 | + end |
| 300 | + |
| 301 | + it "carries bulk request's uncompressed size" do |
| 302 | + expect(pool).to receive(:post) do |path, params, body| |
| 303 | + headers = params.fetch(:headers, {}) |
| 304 | + expect(headers["X-Elastic-Event-Count"]).to be(3) |
| 305 | + expect(headers["X-Elastic-Uncompressed-Request-Length"]).to eq messages_size + (action_overhead * 3) |
| 306 | + expect(headers["X-Elastic-Uncompressed-Request-Length"]).to be > body.size |
| 307 | + end.and_return(response) |
| 308 | + |
| 309 | + subject.send(:bulk, actions) |
| 310 | + end |
| 311 | + context "without compression" do |
| 312 | + let(:compression_level) { 0 } |
| 313 | + it "carries bulk request's uncompressed size" do |
| 314 | + expect(pool).to receive(:post) do |path, params, body| |
| 315 | + headers = params.fetch(:headers, {}) |
| 316 | + expect(headers["X-Elastic-Event-Count"]).to be(3) |
| 317 | + expect(headers["X-Elastic-Uncompressed-Request-Length"]).to eq messages_size + (action_overhead * 3) |
| 318 | + expect(headers["X-Elastic-Uncompressed-Request-Length"]).to eq body.size |
| 319 | + end.and_return(response) |
| 320 | + subject.send(:bulk, actions) |
| 321 | + end |
| 322 | + end |
| 323 | + |
| 324 | + context "with compressed messages over 20MB" do |
| 325 | + let(:message_2_size) { 21_000_000 } |
| 326 | + it "carries bulk request's uncompressed size" do |
| 327 | + # only the first, tiny, message is sent first |
| 328 | + expect(pool).to receive(:post) do |path, params, body| |
| 329 | + headers = params.fetch(:headers, {}) |
| 330 | + expect(headers["X-Elastic-Uncompressed-Request-Length"]).to be == message_1.size + action_overhead |
| 331 | + expect(headers["X-Elastic-Event-Count"]).to be(1) |
| 332 | + end.and_return(response) |
| 333 | + |
| 334 | + # huge message_2 is sent afterwards alone |
| 335 | + expect(pool).to receive(:post) do |path, params, body| |
| 336 | + headers = params.fetch(:headers, {}) |
| 337 | + expect(headers["X-Elastic-Uncompressed-Request-Length"]).to be >= message_2.size + action_overhead |
| 338 | + expect(headers["X-Elastic-Event-Count"]).to be(1) |
| 339 | + end.and_return(response) |
| 340 | + |
| 341 | + # finally medium message_3 is sent alone as well |
| 342 | + expect(pool).to receive(:post) do |path, params, body| |
| 343 | + headers = params.fetch(:headers, {}) |
| 344 | + expect(headers["X-Elastic-Uncompressed-Request-Length"]).to be >= message_3.size + action_overhead |
| 345 | + expect(headers["X-Elastic-Event-Count"]).to be(1) |
| 346 | + end.and_return(response) |
| 347 | + |
| 348 | + subject.send(:bulk, actions) |
| 349 | + end |
| 350 | + end |
| 351 | + end |
273 | 352 | end
|
274 | 353 |
|
275 | 354 | describe "sniffing" do
|
|
0 commit comments