Skip to content

Commit

Permalink
Test full matrix of supported adapters
Browse files Browse the repository at this point in the history
  • Loading branch information
segiddins committed Jul 21, 2024
1 parent 53d6769 commit 829bc60
Show file tree
Hide file tree
Showing 5 changed files with 98 additions and 7 deletions.
71 changes: 70 additions & 1 deletion .github/workflows/gemstash-ci.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
name: Tests

on: [push, pull_request]
on:
push:
branches:
- main
pull_request:

jobs:
gemstash_tests:
Expand All @@ -9,6 +13,50 @@ jobs:
fail-fast: false
matrix:
ruby: ["3.1", "3.2", "3.3", "jruby-9.4"]
db_adapter: ["sqlite3"]
cache_type: ["memory"]
include:
- ruby: "3.3"
db_adapter: "postgres"
cache_type: "memory"
- ruby: "3.3"
db_adapter: "mysql2"
cache_type: "memory"
- ruby: "3.3"
db_adapter: "sqlite3"
cache_type: "memcached"
- ruby: "3.3"
db_adapter: "sqlite3"
cache_type: "redis"
- ruby: "jruby-9.4"
db_adapter: "sqlite3"
cache_type: "memcached"
- ruby: "jruby-9.4"
db_adapter: "sqlite3"
cache_type: "redis"
services:
postgres:
image: postgres:13
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: gemstash_test
ports:
- 5432:5432
memcached:
image: memcached:1.6
ports:
- 11211:11211
redis:
image: redis:7
ports:
- 6379:6379
env:
GEMSTASH_SPEC_CACHE_TYPE: ${{ matrix.cache_type }}
GEMSTASH_SPEC_DB_ADAPTER: ${{ matrix.db_adapter }}
GEMSTASH_SPEC_DB_URL: ${{ (matrix.db_adapter == 'postgres' && 'postgres://postgres:postgres@localhost/gemstash_test') || (matrix.db_adapter == 'mysql2' && 'mysql2://root:[email protected]:3306/gemstash_test') }}
GEMSTASH_SPEC_REDIS_SERVERS: redis://localhost:6379
GEMSTASH_SPEC_MEMCACHED_SERVERS: localhost:11211
steps:
- uses: actions/checkout@v4
- name: Setup ruby
Expand All @@ -18,8 +66,29 @@ jobs:
bundler-cache: true # 'bundle install' and cache
- name: increase ulimit
run: ulimit -n 8192
- name: Set up MySQL
if: matrix.db_adapter == 'mysql2'
run: |
set -eux
sudo /etc/init.d/mysql start
mysql -e 'CREATE DATABASE gemstash_test;' --user=root --password=root
mysqladmin ping --user=root --password=root
- name: Run Tests
run: bundle exec rspec --exclude-pattern "spec/integration_spec.rb"
- name: Run Integration Tests
run: bundle exec rspec ./spec/integration_spec.rb
timeout-minutes: 60

all-tests-pass:
if: always()

needs:
- gemstash_tests

runs-on: ubuntu-latest

steps:
- name: check test jobs
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2
with:
jobs: ${{ toJSON(needs) }}
7 changes: 7 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,16 @@ gem "rspec", "~> 3.3"
gem "webrick", "~> 1.6"

platform :jruby do
gem "jdbc-sqlite3"
gem "psych"
end

platform :ruby do
gem "mysql2"
gem "pg"
gem "sqlite3"
end

group :linting do
gem "rubocop", "~> 1.44"
gem "rubocop-performance", "~> 1.5"
Expand Down
3 changes: 2 additions & 1 deletion lib/gemstash/cache.rb
Original file line number Diff line number Diff line change
Expand Up @@ -101,9 +101,10 @@ def get(key)
end

def get_multi(keys)
@cache.mget(*keys).each do |k, v|
@cache.mget(*keys).each_with_index do |v, idx|
next if v.nil?

k = keys[idx]
yield(k, YAML.load(v))
end
end
Expand Down
5 changes: 4 additions & 1 deletion lib/gemstash/env.rb
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,10 @@ def db
Sequel.connect("sqlite://#{CGI.escape(db_path)}", config.database_connection_config)
end
when "postgres", "mysql", "mysql2"
db = Sequel.connect(config[:db_url], config.database_connection_config)
db_url = config[:db_url]
raise "Missing DB URL" unless db_url

db = Sequel.connect(db_url, config.database_connection_config)
else
raise "Unsupported DB adapter: '#{config[:db_adapter]}'"
end
Expand Down
19 changes: 15 additions & 4 deletions spec/spec_helper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,12 @@
Pathname.new(TEST_BASE_PATH).children.each(&:rmtree)
TEST_LOG_FILE = File.join(TEST_BASE_PATH, "server.log")
TEST_CONFIG = Gemstash::Configuration.new(config: {
:base_path => TEST_BASE_PATH
base_path: TEST_BASE_PATH,
cache_type: ENV.fetch("GEMSTASH_SPEC_CACHE_TYPE", "memory"),
db_adapter: ENV.fetch("GEMSTASH_SPEC_DB_ADAPTER", "sqlite3"),
db_url: ENV.fetch("GEMSTASH_SPEC_DB_URL", nil),
redis_servers: ENV.fetch("GEMSTASH_SPEC_REDIS_SERVERS", nil),
memcached_servers: ENV.fetch("GEMSTASH_SPEC_MEMCACHED_SERVERS", nil)
})
Gemstash::Env.current = Gemstash::Env.new(TEST_CONFIG)
Thread.current[:test_gemstash_env_set] = true
Expand All @@ -45,13 +50,19 @@
end
end

TEST_DB.disconnect

# If a spec has no transaction, delete the DB, and force recreate/migrate to ensure it is clean
if example.metadata[:db_transaction] == false
File.delete(File.join(TEST_BASE_PATH, "gemstash.db"))
if TEST_CONFIG[:db_adapter] == "sqlite3"
File.delete(File.join(TEST_BASE_PATH, "gemstash.db"))
else
# Drop all tables
TEST_DB.drop_table(*TEST_DB.tables)
end
TEST_DB.disconnect
Gemstash::Env.migrate(TEST_DB)
end

TEST_DB.disconnect
end

config.before(:each) do
Expand Down

0 comments on commit 829bc60

Please sign in to comment.