Skip to content

Commit 391ae2d

Browse files
authored
Updates to allow tests to pass (#1541)
* Match sqlite3 requirement to what is in the activerecord source code for rails 7 * Don't test on rails 6.0, only 6.1 * Match sqlite3 version also for rails 6.1 * Don't test on ruby 3.0 * Only install protobuf for ruby >= 3.0, but keep grpc tests commented out * Revert Gemfile change * Also comment out protobuf files * Test rails 7.2 on ruby >= 3.1 * rack/chunked is removed in Rack v3.1 * Handle installing sqlite3 for ruby 2.7 and < 2.7 separately * Rack::Auth::Digest was removed in rack 3.1 and grape requires it * no need to test all frameworks together * Rails 7.2 sets req body to nil if there is none, previously was empty stringio
1 parent b40bcd7 commit 391ae2d

File tree

10 files changed

+98
-132
lines changed

10 files changed

+98
-132
lines changed

.ci/.exclude.yml

+15-82
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@ exclude:
22
# Ruby 2.4
33
# Only test on rails-4.2, sinatra-1.4
44
- VERSION: ruby:2.4
5-
FRAMEWORK: rails-7.0
5+
FRAMEWORK: rails-7.2
66
- VERSION: ruby:2.4
77
FRAMEWORK: rails-6.1
8-
- VERSION: ruby:2.4
9-
FRAMEWORK: rails-6.0
108
- VERSION: ruby:2.4
119
FRAMEWORK: rails-5.2
1210
- VERSION: ruby:2.4
1311
FRAMEWORK: sinatra-2.2
1412
- VERSION: ruby:2.4
1513
FRAMEWORK: grape-1.6
16-
- VERSION: ruby:2.4
17-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.0
1814
- VERSION: ruby:2.4
1915
FRAMEWORK: rails-main
2016
- VERSION: ruby:2.4
@@ -26,8 +22,6 @@ exclude:
2622
# Only test on ruby 2.4
2723
- VERSION: ruby:3.1
2824
FRAMEWORK: rails-4.2
29-
- VERSION: ruby:3.0
30-
FRAMEWORK: rails-4.2
3125
- VERSION: ruby:2.7
3226
FRAMEWORK: rails-4.2
3327
- VERSION: ruby:2.6
@@ -43,8 +37,6 @@ exclude:
4337
# sinatra-1.4 exclusions
4438
- VERSION: ruby:3.1
4539
FRAMEWORK: sinatra-1.4
46-
- VERSION: ruby:3.0
47-
FRAMEWORK: sinatra-1.4
4840
- VERSION: ruby:2.7
4941
FRAMEWORK: sinatra-1.4
5042
- VERSION: jruby:9.2
@@ -56,22 +48,18 @@ exclude:
5648
- VERSION: elasticobservability/jruby:9.2-8-jdk
5749
FRAMEWORK: sinatra-1.4
5850

59-
# rails-6.0 and rails-6.1 exclusions
51+
# rails-6.1 and rails 7.0 exclusions
6052
# Don't test on ruby 2.4
6153
- VERSION: ruby:2.4
6254
FRAMEWORK: rails-6.1
6355
- VERSION: ruby:2.4
64-
FRAMEWORK: rails-6.0
56+
FRAMEWORK: rails-7.2
6557

6658
# Only test rails main on ruby 3.1
67-
- VERSION: ruby:3.0
68-
FRAMEWORK: rails-main
6959
- VERSION: ruby:2.7
7060
FRAMEWORK: rails-main
7161
- VERSION: ruby:2.6
7262
FRAMEWORK: rails-main
73-
- VERSION: ruby:2.5
74-
FRAMEWORK: rails-main
7563
- VERSION: ruby:2.4
7664
FRAMEWORK: rails-main
7765
- VERSION: jruby:9.2
@@ -83,29 +71,25 @@ exclude:
8371
- VERSION: elasticobservability/jruby:9.2-8-jdk
8472
FRAMEWORK: rails-main
8573

86-
# Only test rails 7.0 on ruby >= 2.7
74+
# Only test rails 7.2 on ruby >= 3.1
75+
- VERSION: ruby:2.7
76+
FRAMEWORK: rails-7.2
8777
- VERSION: ruby:2.6
88-
FRAMEWORK: rails-7.0
89-
- VERSION: ruby:2.5
90-
FRAMEWORK: rails-7.0
78+
FRAMEWORK: rails-7.2
9179
- VERSION: ruby:2.4
92-
FRAMEWORK: rails-7.0
80+
FRAMEWORK: rails-7.2
9381
- VERSION: jruby:9.2
94-
FRAMEWORK: rails-7.0
82+
FRAMEWORK: rails-7.2
9583
- VERSION: elasticobservability/jruby:9.2-13-jdk
96-
FRAMEWORK: rails-7.0
84+
FRAMEWORK: rails-7.2
9785
- VERSION: elasticobservability/jruby:9.2-11-jdk
98-
FRAMEWORK: rails-7.0
86+
FRAMEWORK: rails-7.2
9987
- VERSION: elasticobservability/jruby:9.2-8-jdk
100-
FRAMEWORK: rails-7.0
88+
FRAMEWORK: rails-7.2
10189

10290
# Only test sinatra main on ruby 2.7 and ruby 3.1
103-
- VERSION: ruby:3.0
104-
FRAMEWORK: sinatra-main
10591
- VERSION: ruby:2.6
10692
FRAMEWORK: sinatra-main
107-
- VERSION: ruby:2.5
108-
FRAMEWORK: sinatra-main
10993
- VERSION: ruby:2.4
11094
FRAMEWORK: sinatra-main
11195
- VERSION: jruby:9.2
@@ -117,11 +101,9 @@ exclude:
117101
- VERSION: elasticobservability/jruby:9.2-8-jdk
118102
FRAMEWORK: sinatra-main
119103

120-
# Only test grape master on ruby 2.7 and ruby 3.0
104+
# Only test grape master on ruby 2.7 and ruby 3.1
121105
- VERSION: ruby:2.6
122106
FRAMEWORK: grape-master
123-
- VERSION: ruby:2.5
124-
FRAMEWORK: grape-master
125107
- VERSION: ruby:2.4
126108
FRAMEWORK: grape-master
127109
- VERSION: jruby:9.2
@@ -133,61 +115,12 @@ exclude:
133115
- VERSION: elasticobservability/jruby:9.2-8-jdk
134116
FRAMEWORK: grape-master
135117

136-
# grape 1.5 doesn't support ruby 3.0
118+
# grape 1.5 doesn't support ruby 3.1
137119
- VERSION: ruby:3.1
138120
FRAMEWORK: grape-1.6
139-
- VERSION: ruby:3.1
140-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
141-
- VERSION: ruby:3.1
142-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
143-
- VERSION: ruby:3.0
144-
FRAMEWORK: grape-1.6
145-
- VERSION: ruby:3.0
146-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
147121

148-
# only test ruby >= 3.0 with rails 6.0 and rails 6.1
122+
# only test ruby >= 3.1 with rails 6.1 and rails 7.0
149123
- VERSION: ruby:3.1
150124
FRAMEWORK: rails-5.2
151125
- VERSION: ruby:3.1
152126
FRAMEWORK: rails-5.1
153-
- VERSION: ruby:3.0
154-
FRAMEWORK: rails-5.2
155-
- VERSION: ruby:3.0
156-
FRAMEWORK: rails-5.1
157-
158-
# Unsupported
159-
# Ruby 2.6
160-
- VERSION: ruby:2.6
161-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
162-
- VERSION: ruby:2.6
163-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
164-
# Ruby 2.5
165-
- VERSION: ruby:2.5
166-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
167-
- VERSION: ruby:2.5
168-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
169-
# Ruby 2.4
170-
- VERSION: ruby:2.4
171-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
172-
- VERSION: ruby:2.4
173-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
174-
# JRuby 9.2
175-
- VERSION: jruby:9.2
176-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
177-
- VERSION: jruby:9.2
178-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
179-
# JRuby 9.2-13-jdk
180-
- VERSION: elasticobservability/jruby:9.2-13-jdk
181-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
182-
- VERSION: elasticobservability/jruby:9.2-13-jdk
183-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
184-
# JRuby 9.2-11-jdk
185-
- VERSION: elasticobservability/jruby:9.2-11-jdk
186-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
187-
- VERSION: elasticobservability/jruby:9.2-11-jdk
188-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0
189-
# JRuby 9.2-8-jdk
190-
- VERSION: elasticobservability/jruby:9.2-8-jdk
191-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-6.1
192-
- VERSION: elasticobservability/jruby:9.2-8-jdk
193-
FRAMEWORK: grape-1.6,sinatra-2.2,rails-7.0

.ci/.framework.yml

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,10 @@
11
FRAMEWORK:
2-
- rails-7.0
2+
- rails-7.2
33
- rails-6.1
4-
- rails-6.0
54
- rails-5.2
65
- rails-4.2
76

87
- sinatra-2.2
98
- sinatra-1.4
109

1110
- grape-1.6
12-
13-
- grape-1.6,sinatra-2.2,rails-6.1

.ci/.ruby.yml

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
VERSION:
22
- ruby:3.1
3-
- ruby:3.0
43
- ruby:2.7
54
- ruby:2.6
65
- ruby:2.4

Gemfile

+9
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,11 @@ frameworks_versions.each do |framework, version|
103103
end
104104
end
105105

106+
# Handle Rack::Auth::Digest being removed in rack 3.1, grape requires it
107+
if frameworks_versions.key?('grape')
108+
gem 'rack', '~> 3.0.0'
109+
end
110+
106111
if frameworks_versions.key?('rails')
107112
unless /^(main|6)/.match?(frameworks_versions['rails'])
108113
gem 'delayed_job', require: nil
@@ -125,8 +130,12 @@ if RUBY_PLATFORM == 'java'
125130
end
126131
elsif frameworks_versions['rails'] =~ /^(4|5)/
127132
gem 'sqlite3', '~> 1.3.6'
133+
elsif frameworks_versions['rails'] =~ /^(6|7)/
134+
gem 'sqlite3', '~> 1.4'
128135
elsif RUBY_VERSION < '2.7'
129136
gem 'sqlite3', '~> 1.4.4'
137+
elsif RUBY_VERSION < '3.0'
138+
gem 'sqlite3', '~> 1.3.6'
130139
else
131140
gem 'sqlite3'
132141
end

lib/elastic_apm/context_builder.rb

+5-2
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,11 @@ def get_body(req)
7979
when 'application/x-www-form-urlencoded', 'multipart/form-data'
8080
req.POST.dup
8181
else
82-
body = req.body.read
83-
req.body.rewind
82+
io = req.body
83+
return '' unless io
84+
85+
body = io.read
86+
io.rewind
8487
body.byteslice(0, MAX_BODY_LENGTH).force_encoding('utf-8').scrub
8588
end
8689
end

spec/elastic_apm/grpc_spec.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
require 'spec_helper'
2121

22-
# if !defined?(JRUBY_VERSION) && RUBY_VERSION < '3.0'
22+
# if !defined?(JRUBY_VERSION) && RUBY_VERSION >= '3.0'
2323
# require 'grpc'
2424
#
2525
# module ElasticAPM

spec/integration/rails_spec.rb

+20-1
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ def create
105105
render_ok
106106
end
107107

108+
def test_body
109+
render_ok
110+
end
111+
108112
def raise_error
109113
raise FancyError, "Help! I'm trapped in a specfile!"
110114
end
@@ -151,6 +155,7 @@ def ping(recipient, subject)
151155
root to: 'application#index'
152156
get '/tags_and_context', to: 'application#context'
153157
post '/', to: 'application#create'
158+
post '/test_body', to: 'application#test_body'
154159
get '/error', to: 'application#raise_error'
155160
get '/report_message', to: 'application#report_message'
156161
get '/send_notification', to: 'application#send_notification'
@@ -207,7 +212,7 @@ def ping(recipient, subject)
207212
end
208213

209214
describe 'transactions' do
210-
context 'when a simple request is made' do
215+
context 'when a simple get request is made' do
211216
it 'spans action and posts it' do
212217
get '/'
213218

@@ -218,6 +223,20 @@ def ping(recipient, subject)
218223
end
219224
end
220225

226+
context 'when a simple post request is made with a body' do
227+
it 'spans action and posts it' do
228+
post '/test_body', '{"data":{"a":"1","b":"five"}}',
229+
'CONTENT_TYPE' => 'application/json'
230+
231+
wait_for transactions: 1, spans: 2
232+
233+
name = @mock_intake.transactions.fetch(0)['name']
234+
expect(name).to eq 'ApplicationController#test_body'
235+
body = @mock_intake.transactions.fetch(0).dig('context', 'request', 'body')
236+
expect(body).to eq '{"data":{"a":"1","b":"five"}}'
237+
end
238+
end
239+
221240
context 'when tags and context are set' do
222241
it 'sets the values' do
223242
get '/tags_and_context'

spec/support/helloworld_pb.rb

+19-19
Original file line numberDiff line numberDiff line change
@@ -34,22 +34,22 @@
3434
# Generated by the protocol buffer compiler. DO NOT EDIT!
3535
# source: helloworld.proto
3636

37-
if !defined?(JRUBY_VERSION) && RUBY_VERSION < '3.0'
38-
require 'google/protobuf'
39-
40-
Google::Protobuf::DescriptorPool.generated_pool.build do
41-
add_message "helloworld.HelloRequest" do
42-
optional :name, :string, 1
43-
end
44-
add_message "helloworld.HelloReply" do
45-
optional :message, :string, 1
46-
end
47-
end
48-
49-
module Helloworld
50-
HelloRequest = Google::Protobuf::DescriptorPool
51-
.generated_pool.lookup('helloworld.HelloRequest').msgclass
52-
HelloReply = Google::Protobuf::DescriptorPool
53-
.generated_pool.lookup('helloworld.HelloReply').msgclass
54-
end
55-
end
37+
# if !defined?(JRUBY_VERSION) && RUBY_VERSION < '3.0'
38+
# require 'google/protobuf'
39+
#
40+
# Google::Protobuf::DescriptorPool.generated_pool.build do
41+
# add_message "helloworld.HelloRequest" do
42+
# optional :name, :string, 1
43+
# end
44+
# add_message "helloworld.HelloReply" do
45+
# optional :message, :string, 1
46+
# end
47+
# end
48+
#
49+
# module Helloworld
50+
# HelloRequest = Google::Protobuf::DescriptorPool
51+
# .generated_pool.lookup('helloworld.HelloRequest').msgclass
52+
# HelloReply = Google::Protobuf::DescriptorPool
53+
# .generated_pool.lookup('helloworld.HelloReply').msgclass
54+
# end
55+
# end

spec/support/helloworld_services_pb.rb

+21-21
Original file line numberDiff line numberDiff line change
@@ -31,24 +31,24 @@
3131

3232
# frozen_string_literal: true
3333

34-
if !defined?(JRUBY_VERSION) && RUBY_VERSION < '3.0'
35-
require_relative 'helloworld_pb'
36-
37-
module Helloworld
38-
module Greeter
39-
# The greeting service definition.
40-
class Service
41-
include GRPC::GenericService
42-
43-
self.marshal_class_method = :encode
44-
self.unmarshal_class_method = :decode
45-
self.service_name = 'helloworld.Greeter'
46-
47-
# Sends a greeting
48-
rpc :SayHello, HelloRequest, HelloReply
49-
end
50-
51-
Stub = Service.rpc_stub_class
52-
end
53-
end
54-
end
34+
# if !defined?(JRUBY_VERSION) && RUBY_VERSION < '3.0'
35+
# require_relative 'helloworld_pb'
36+
#
37+
# module Helloworld
38+
# module Greeter
39+
# # The greeting service definition.
40+
# class Service
41+
# include GRPC::GenericService
42+
#
43+
# self.marshal_class_method = :encode
44+
# self.unmarshal_class_method = :decode
45+
# self.service_name = 'helloworld.Greeter'
46+
#
47+
# # Sends a greeting
48+
# rpc :SayHello, HelloRequest, HelloReply
49+
# end
50+
#
51+
# Stub = Service.rpc_stub_class
52+
# end
53+
# end
54+
# end

0 commit comments

Comments
 (0)