Skip to content

Replace puts with proper logger in E2E test infrastructure #29

@justin808

Description

@justin808

Description

The E2E test infrastructure currently uses puts for all output. A proper logger would provide better control over log levels, formatting, and output destinations (especially useful in CI environments).

Proposed Changes

1. Add Logger Support

require 'logger'

module ShakacodeDemoCommon
  class E2eTestRunner
    attr_reader :results, :logger

    def initialize(modes, logger: nil)
      @modes = modes
      @results = {}
      @logger = logger || default_logger
    end

    private

    def default_logger
      Logger.new($stdout).tap do |log|
        log.level = ENV.fetch('E2E_LOG_LEVEL', 'INFO')
        log.formatter = proc do |severity, datetime, progname, msg|
          "#{severity}: #{msg}\n"
        end
      end
    end
  end
end

2. Replace puts Calls

# Before
puts 'Starting server...'
puts "Warning: Port #{port} may still be in use"

# After
logger.info 'Starting server...'
logger.warn "Port #{port} may still be in use"
logger.debug "Server responding with status #{response.code}"

3. Benefits by Log Level

  • DEBUG: Detailed server responses, port checks, HTTP timeouts
  • INFO: Test progress, mode switches, success messages (default)
  • WARN: Warnings about port availability, fallback behaviors
  • ERROR: Test failures, server startup failures

Use Cases:

CI Environment

# Minimal output for clean CI logs
E2E_LOG_LEVEL=WARN bundle exec rake e2e:test_all_modes

Local Debugging

# Verbose output for troubleshooting
E2E_LOG_LEVEL=DEBUG bundle exec rake e2e:test_all_modes

Production Runs

# Standard informational output
E2E_LOG_LEVEL=INFO bundle exec rake e2e:test_all_modes  # default

Implementation Considerations:

  • Maintain backward compatibility (default logger should produce similar output)
  • Allow custom logger injection for testing
  • Don't log sensitive information (ports are fine, but avoid tokens/credentials)
  • Consider colorized output for better readability (using gems like rainbow)
  • Progress indicators (. characters) might need special handling

Related

Priority

Low-Medium - Would improve developer experience and CI integration but current puts approach is functional.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions