1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
# frozen_string_literal: true
require "cases/encryption/helper"
require "models/post_encrypted"
class ActiveRecord::Encryption::ConcurrencyTest < ActiveRecord::EncryptionTestCase
setup do
ActiveRecord::Encryption.config.support_unencrypted_data = true
end
test "models can be encrypted and decrypted in different threads concurrently" do
4.times.collect { |index| thread_encrypting_and_decrypting("thread #{index}") }.each(&:join)
end
def thread_encrypting_and_decrypting(thread_label)
EncryptedPost.insert_all 100.times.collect { |index| { title: "Article #{index} (#{thread_label})", body: "Body #{index} (#{thread_label})" } }
posts = EncryptedPost.last(100)
Thread.new do
posts.each.with_index do |article, index|
assert_encrypted_attribute article, :title, "Article #{index} (#{thread_label})"
article.decrypt
assert_not_encrypted_attribute article, :title, "Article #{index} (#{thread_label})"
end
end
end
end
|