From c2d825c7166231058c744bd04daf89b15f6e9d15 Mon Sep 17 00:00:00 2001 From: Andrew Kane Date: Sun, 30 Oct 2022 08:41:24 -0700 Subject: [PATCH] Test with Active Record 7.1 --- .github/workflows/build.yml | 14 ++++++++++++-- gemfiles/activerecord71.gemfile | 13 +++++++++++++ lib/active_kms/log_subscriber.rb | 4 ++-- test/key_provider_test.rb | 3 ++- test/test_helper.rb | 17 ++++++++++------- 5 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 gemfiles/activerecord71.gemfile diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index dfece3c..1c59e06 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,12 +2,22 @@ name: build on: [push, pull_request] jobs: build: + strategy: + fail-fast: false + matrix: + include: + - ruby: 3.1 + gemfile: Gemfile + - ruby: 3.2.0-preview2 + gemfile: gemfiles/activerecord71.gemfile runs-on: ubuntu-latest + env: + BUNDLE_GEMFILE: ${{ matrix.gemfile }} steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - uses: ruby/setup-ruby@v1 with: - ruby-version: 3.1 + ruby-version: ${{ matrix.ruby }} bundler-cache: true - run: | curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add - diff --git a/gemfiles/activerecord71.gemfile b/gemfiles/activerecord71.gemfile new file mode 100644 index 0000000..088699a --- /dev/null +++ b/gemfiles/activerecord71.gemfile @@ -0,0 +1,13 @@ +source "https://rubygems.org" + +gemspec path: ".." + +gem "rake" +gem "minitest", ">= 5" +gem "sqlite3" +gem "activerecord", github: "rails/rails" + +gem "aws-sdk-kms" +gem "google-cloud-kms" +gem "vault" +gem "nokogiri" # for aws-sdk diff --git a/lib/active_kms/log_subscriber.rb b/lib/active_kms/log_subscriber.rb index 756fa08..5146073 100644 --- a/lib/active_kms/log_subscriber.rb +++ b/lib/active_kms/log_subscriber.rb @@ -4,14 +4,14 @@ def decrypt(event) return unless logger.debug? name = "Decrypt Data Key (#{event.duration.round(1)}ms)" - debug " #{color(name, YELLOW, true)}" + debug " #{color(name, YELLOW, bold: true)}" end def encrypt(event) return unless logger.debug? name = "Encrypt Data Key (#{event.duration.round(1)}ms)" - debug " #{color(name, YELLOW, true)}" + debug " #{color(name, YELLOW, bold: true)}" end end end diff --git a/test/key_provider_test.rb b/test/key_provider_test.rb index bb5c1aa..7bea99e 100644 --- a/test/key_provider_test.rb +++ b/test/key_provider_test.rb @@ -8,7 +8,8 @@ def setup def test_works # should ideally be encrypt: 1 and no decrypt # https://github.com/rails/rails/issues/42388 - assert_operations encrypt: 3, decrypt: 1 do + encrypt = ActiveRecord::VERSION::STRING.to_f >= 7.1 ? 1 : 3 + assert_operations encrypt: encrypt, decrypt: 1 do User.create!(email: "test@example.org") end diff --git a/test/test_helper.rb b/test/test_helper.rb index 2fb4aba..1ad1aa6 100644 --- a/test/test_helper.rb +++ b/test/test_helper.rb @@ -39,13 +39,16 @@ class User < ActiveRecord::Base raise "Invalid key provider" end -ActiveRecord::Encryption.configure( - key_provider: key_provider, - # https://github.com/rails/rails/issues/42385 - primary_key: "secret", - key_derivation_salt: "secret", - deterministic_key: nil -) +encryption_options = { + key_provider: key_provider +} +# https://github.com/rails/rails/issues/42385 +if ActiveRecord::VERSION::STRING.to_f < 7.1 + encryption_options[:primary_key] = "secret" + encryption_options[:key_derivation_salt] = "secret" + encryption_options[:deterministic_key] = nil +end +ActiveRecord::Encryption.configure(**encryption_options) $events = Hash.new(0) ActiveSupport::Notifications.subscribe(/active_kms/) do |name, _start, _finish, _id, _payload|