Skip to content

Commit 8f74b68

Browse files
authored
MONGOID-5656 Rails specs ought to enable FLE (#5718)
* make sure and test the rails specs with fle enabled * only run FLE with Rails 7 (due to OS constraints with cmake/libmongocrypt-helper) * see about making GH actions build and use libmongocrypt-helper * make sure command-line parsing doesn't pick up arguments that weren't intended for it * a bit more information for deciphering what's wrong under GH actions * *grumble* use a real exception class * run `rake ci` instead, to better isolate the specs * disambiguate test names * use logger to report error in collection creation also, use log-levels to minimize log spam in tests, instead of stubbing the logger
1 parent f40bb73 commit 8f74b68

File tree

6 files changed

+56
-51
lines changed

6 files changed

+56
-51
lines changed

.evergreen/config.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -680,7 +680,8 @@ buildvariants:
680680
mongodb-version: "6.0"
681681
topology: "standalone"
682682
rails: ['7.0']
683-
os: debian11
683+
os: ubuntu-22.04
684+
fle: helper
684685
display_name: "${rails}, ${driver}, ${mongodb-version}"
685686
tasks:
686687
- name: "test"

.evergreen/config/variants.yml.erb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,9 @@ buildvariants:
116116
mongodb-version: "6.0"
117117
topology: "standalone"
118118
rails: ['7.0']
119-
os: debian11
120-
display_name: "${rails}, ${driver}, ${mongodb-version}"
119+
os: ubuntu-22.04
120+
fle: helper
121+
display_name: "${rails}, ${driver}, ${mongodb-version} (FLE ${fle})"
121122
tasks:
122123
- name: "test"
123124

.github/workflows/test.yml

Lines changed: 13 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ name: Run Mongoid Tests
77
- pull_request
88
jobs:
99
build:
10-
name: "${{matrix.ruby}} driver-${{matrix.driver}} mongodb-${{matrix.mongodb}}
11-
${{matrix.topology}}"
10+
name: "${{matrix.ruby}} drv:${{matrix.driver}} db:${{matrix.mongodb}}
11+
rails:${{matrix.rails}} fle:${{matrix.fle}} ${{matrix.topology}}"
1212
env:
1313
CI: true
1414
TESTOPTS: "-v"
@@ -24,8 +24,6 @@ jobs:
2424
os: ubuntu-20.04
2525
task: test
2626
driver: current
27-
rails:
28-
i18n:
2927
gemfile: Gemfile
3028
experimental: false
3129
- mongodb: '6.0'
@@ -34,8 +32,6 @@ jobs:
3432
os: ubuntu-20.04
3533
task: test
3634
driver: current
37-
rails:
38-
i18n:
3935
gemfile: Gemfile
4036
experimental: false
4137
- mongodb: '6.0'
@@ -44,8 +40,6 @@ jobs:
4440
os: ubuntu-20.04
4541
task: test
4642
driver: current
47-
rails:
48-
i18n:
4943
gemfile: Gemfile
5044
experimental: false
5145
- mongodb: '6.0'
@@ -54,8 +48,6 @@ jobs:
5448
os: ubuntu-20.04
5549
task: test
5650
driver: master
57-
rails:
58-
i18n:
5951
gemfile: gemfiles/driver_master.gemfile
6052
experimental: true
6153
- mongodb: '6.0'
@@ -64,8 +56,6 @@ jobs:
6456
os: ubuntu-20.04
6557
task: test
6658
driver: stable
67-
rails:
68-
i18n:
6959
gemfile: gemfiles/driver_stable.gemfile
7060
experimental: false
7161
- mongodb: '6.0'
@@ -75,7 +65,7 @@ jobs:
7565
task: test
7666
driver: current
7767
rails: '7.0'
78-
i18n:
68+
fle: helper
7969
gemfile: gemfiles/rails-7.0.gemfile
8070
experimental: false
8171
- mongodb: '6.0'
@@ -85,7 +75,7 @@ jobs:
8575
task: test
8676
driver: current
8777
rails: '6.1'
88-
i18n:
78+
fle: helper
8979
gemfile: gemfiles/rails-6.1.gemfile
9080
experimental: false
9181
- mongodb: '6.0'
@@ -95,7 +85,7 @@ jobs:
9585
task: test
9686
driver: current
9787
rails: '7.0'
98-
i18n:
88+
fle: helper
9989
gemfile: gemfiles/rails-7.0.gemfile
10090
experimental: false
10191
- mongodb: '6.0'
@@ -105,7 +95,7 @@ jobs:
10595
task: test
10696
driver: current
10797
rails: '6.1'
108-
i18n:
98+
fle: helper
10999
gemfile: gemfiles/rails-6.1.gemfile
110100
experimental: false
111101
- mongodb: '6.0'
@@ -115,7 +105,7 @@ jobs:
115105
task: test
116106
driver: current
117107
rails: '6.0'
118-
i18n:
108+
fle: helper
119109
gemfile: gemfiles/rails-6.0.gemfile
120110
experimental: false
121111
- mongodb: '6.0'
@@ -125,7 +115,7 @@ jobs:
125115
task: test
126116
driver: current
127117
rails: '5.2'
128-
i18n:
118+
fle: helper
129119
gemfile: gemfiles/rails-5.2.gemfile
130120
experimental: false
131121
- mongodb: '6.0'
@@ -135,7 +125,7 @@ jobs:
135125
task: test
136126
driver: current
137127
rails: '6.0'
138-
i18n:
128+
fle: helper
139129
gemfile: gemfiles/rails-6.0.gemfile
140130
experimental: false
141131
- mongodb: '5.0'
@@ -144,8 +134,6 @@ jobs:
144134
os: ubuntu-20.04
145135
task: test
146136
driver: current
147-
rails:
148-
i18n:
149137
gemfile: Gemfile
150138
experimental: false
151139
- mongodb: '4.4'
@@ -154,8 +142,6 @@ jobs:
154142
os: ubuntu-20.04
155143
task: test
156144
driver: current
157-
rails:
158-
i18n:
159145
gemfile: Gemfile
160146
experimental: false
161147
- mongodb: '4.0'
@@ -164,8 +150,6 @@ jobs:
164150
os: ubuntu-20.04
165151
task: test
166152
driver: current
167-
rails:
168-
i18n:
169153
gemfile: Gemfile
170154
experimental: false
171155
- mongodb: '3.6'
@@ -174,8 +158,6 @@ jobs:
174158
os: ubuntu-20.04
175159
task: test
176160
driver: current
177-
rails:
178-
i18n:
179161
gemfile: Gemfile
180162
experimental: false
181163

@@ -193,18 +175,21 @@ jobs:
193175
- name: load ruby
194176
uses: ruby/setup-ruby@v1
195177
env:
178+
FLE: "${{matrix.fle}}"
196179
BUNDLE_GEMFILE: "${{matrix.gemfile}}"
197180
with:
198181
ruby-version: "${{matrix.ruby}}"
199182
bundler: 2
200183
- name: bundle
201184
run: bundle install --jobs 4 --retry 3
202185
env:
186+
FLE: "${{matrix.fle}}"
203187
BUNDLE_GEMFILE: "${{matrix.gemfile}}"
204188
- name: test
205189
timeout-minutes: 60
206190
continue-on-error: "${{matrix.experimental}}"
207-
run: bundle exec rake spec
191+
run: bundle exec rake ci
208192
env:
209193
BUNDLE_GEMFILE: "${{matrix.gemfile}}"
194+
FLE: "${{matrix.fle}}"
210195
MONGODB_URI: "${{ steps.start-mongodb.outputs.cluster-uri }}"

lib/mongoid/tasks/database.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ def create_collections(models = ::Mongoid.models, force: false)
2626
else
2727
logger.info("MONGOID: collection options ignored on: #{model}, please define in the root model.")
2828
end
29+
rescue Exception
30+
logger.error "error while creating collection for #{model}"
31+
raise
2932
end
3033
end
3134

lib/mongoid/tasks/encryption.rake

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,45 @@
22

33
require 'optparse'
44

5-
# rubocop:disable Metrics/BlockLength
5+
def parse_data_key_options(argv = ARGV)
6+
# The only way to use OptionParser to parse custom options in rake is
7+
# to pass an empty argument ("--") before specifying them, e.g.:
8+
#
9+
# rake db:mongoid:encryption:create_data_key -- --client default
10+
#
11+
# Otherwise, rake complains about an unknown option. Thus, we can tell
12+
# if the argument list is valid for us to parse by detecting this empty
13+
# argument.
14+
#
15+
# (This works around an issue in the tests, where the specs are loading
16+
# the tasks directly to test them, but the option parser is then picking
17+
# up rspec command-line arguments and raising an exception).
18+
return {} unless argv.include?('--')
19+
20+
{}.tap do |options|
21+
parser = OptionParser.new do |opts|
22+
opts.on('-c', '--client CLIENT', 'Name of the client to use') do |v|
23+
options[:client_name] = v
24+
end
25+
opts.on('-p', '--provider PROVIDER', 'KMS provider to use') do |v|
26+
options[:kms_provider_name] = v
27+
end
28+
opts.on('-n', '--key-alt-name KEY_ALT_NAME', 'Alternate name for the key') do |v|
29+
options[:key_alt_name] = v
30+
end
31+
end
32+
# rubocop:disable Lint/EmptyBlock
33+
parser.parse!(parser.order!(argv) {})
34+
# rubocop:enable Lint/EmptyBlock
35+
end
36+
end
37+
638
namespace :db do
739
namespace :mongoid do
840
namespace :encryption do
941
desc 'Create encryption key'
1042
task create_data_key: [ :environment ] do
11-
options = {}
12-
parser = OptionParser.new do |opts|
13-
opts.on('-c', '--client CLIENT', 'Name of the client to use') do |v|
14-
options[:client_name] = v
15-
end
16-
opts.on('-p', '--provider PROVIDER', 'KMS provider to use') do |v|
17-
options[:kms_provider_name] = v
18-
end
19-
opts.on('-n', '--key-alt-name KEY_ALT_NAME', 'Alternate name for the key') do |v|
20-
options[:key_alt_name] = v
21-
end
22-
end
23-
# rubocop:disable Lint/EmptyBlock
24-
parser.parse!(parser.order!(ARGV) {})
25-
# rubocop:enable Lint/EmptyBlock
43+
options = parse_data_key_options
2644
result = Mongoid::Tasks::Encryption.create_data_key(
2745
client_name: options[:client_name],
2846
kms_provider_name: options[:kms_provider_name],
@@ -39,4 +57,3 @@ namespace :db do
3957
end
4058
end
4159
end
42-
# rubocop:enable Metrics/BlockLength

spec/mongoid/tasks/database_rake_spec.rb

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,7 @@
1111
let(:task_file) { "mongoid/tasks/database" }
1212

1313
let(:logger) do
14-
double("logger").tap do |log|
15-
allow(log).to receive(:info)
16-
end
14+
Logger.new(STDOUT, level: :error, formatter: ->(_sev, _dt, _prog, msg) { msg })
1715
end
1816

1917
before do

0 commit comments

Comments
 (0)