Back to Repositories

Testing Query Monitoring System in PgHero

This test suite validates core query monitoring and filtering functionality in PgHero, focusing on running queries, long-running queries, and query blocking detection. The tests ensure proper database query tracking and data filtering capabilities.

Test Coverage Overview

The test suite provides comprehensive coverage of PgHero’s query monitoring capabilities, including:

  • Running query detection and tracking
  • Long-running query identification
  • Blocked query detection
  • Query filtering and data masking functionality
Edge cases are handled through simulated long-running queries and thread-based concurrent execution testing.

Implementation Analysis

The testing approach utilizes Minitest framework with a focus on isolated unit tests. Each test case validates specific query monitoring features using thread-based query execution and sleep operations to simulate real-world scenarios.

The implementation leverages Ruby’s threading capabilities and ActiveRecord’s connection handling to create test conditions for query monitoring.

Technical Details

Key technical components include:

  • Minitest as the testing framework
  • ActiveRecord for database connections
  • Thread-based concurrent execution
  • PgHero configuration helpers
  • Database connection management utilities

Best Practices Demonstrated

The test suite exemplifies several testing best practices:

  • Isolation of test cases
  • Proper resource cleanup
  • Helper method extraction for common setup
  • Clear test naming conventions
  • Effective use of assertions
The code organization follows a clear pattern with setup, execution, and cleanup phases clearly defined.

ankane/pghero

test/queries_test.rb

            
require_relative "test_helper"

class QueriesTest < Minitest::Test
  def test_running_queries
    assert database.running_queries
  end

  def test_filter_data
    query = "SELECT pg_sleep(1)"
    # TODO manually checkout connection if needed
    t = Thread.new { ActiveRecord::Base.connection.execute(query) }
    sleep(0.5)

    assert_equal query, database.running_queries.first[:query]

    with_filter_data do
      assert_equal "SELECT pg_sleep($1)", database.running_queries.first[:query]
    end

    t.join
  end

  def test_long_running_queries
    assert database.long_running_queries
  end

  def test_blocked_queries
    assert database.blocked_queries
  end

  def with_filter_data
    previous_value = PgHero.filter_data
    begin
      PgHero.filter_data = true
      database.remove_instance_variable(:@filter_data)
      yield
    ensure
      PgHero.filter_data = previous_value
      database.remove_instance_variable(:@filter_data)
    end
  end
end