diff --git a/test/frameworks/rails_test.rb b/test/frameworks/rails_test.rb new file mode 100644 index 00000000..99ad00e2 --- /dev/null +++ b/test/frameworks/rails_test.rb @@ -0,0 +1,38 @@ +# (c) Copyright IBM Corp. 2024 + +require 'test_helper' +require 'rack/test' +require 'rails' + +class RailsTest < Minitest::Test + include Rack::Test::Methods + begin + ENV['INSTANA_TEST'] = nil + APP = Rack::Builder.parse_file('test/support/apps/rails_generic/config.ru') + ensure + ENV['INSTANA_TEST'] = 'true' + end + + railties_version = Gem::Specification.find_by_name('railties').version + if railties_version < Gem::Version.new('7.1.0') + APP = APP.first + end + + def app + APP + end + + def test_log + clear_all! + + get '/base/log_warning' + assert last_response.ok? + + spans = ::Instana.processor.queued_spans + assert spans[0][:data][:log] + log_span = spans[0][:data][:log] + + assert_equal "Warn", log_span[:level] + assert_equal "This is a test warning", log_span[:message] + end +end diff --git a/test/support/apps/rails_generic/config.ru b/test/support/apps/rails_generic/config.ru new file mode 100644 index 00000000..00625f50 --- /dev/null +++ b/test/support/apps/rails_generic/config.ru @@ -0,0 +1,30 @@ +# (c) Copyright IBM Corp. 2024 + +require 'rails' +require 'action_controller/railtie' + +class TestControllerApplication < Rails::Application + config.eager_load = 'test' + config.consider_all_requests_local = false + config.secret_key_base = 'test_key' + config.secret_token = 'test_token' + + if Rails::VERSION::MAJOR > 5 + config.hosts.clear + end + + routes.append do + get '/base/log_warning' => 'test_base#log_warning' + end +end + +class TestBaseController < ActionController::Base + def log_warning + Rails.logger.warn "This is a test warning" + render plain: 'Test warning logged' + end +end + +TestControllerApplication.initialize! + +run TestControllerApplication