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 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146
|
# frozen_string_literal: true
# rubocop:todo all
require 'mongo'
require 'base64'
require 'lite_spec_helper'
describe Mongo::Crypt::DataKeyContext do
require_libmongocrypt
include_context 'define shared FLE helpers'
let(:credentials) { Mongo::Crypt::KMS::Credentials.new(kms_providers) }
let(:kms_tls_options) do
{}
end
let(:mongocrypt) do
Mongo::Crypt::Handle.new(credentials, kms_tls_options)
end
let(:io) { double("Mongo::Crypt::EncryptionIO") }
let(:key_alt_names) { [] }
let(:context) { described_class.new(mongocrypt, io, key_document, key_alt_names, nil) }
describe '#initialize' do
shared_examples 'it properly sets key_alt_names' do
context 'with one key_alt_names' do
let(:key_alt_names) { ['keyAltName1'] }
it 'does not raise an exception' do
expect do
context
end.not_to raise_error
end
end
context 'with multiple key_alt_names' do
let(:key_alt_names) { ['keyAltName1', 'keyAltName2'] }
it 'does not raise an exception' do
expect do
context
end.not_to raise_error
end
end
context 'with empty key_alt_names' do
let(:key_alt_names) { [] }
it 'does not raise an exception' do
expect do
context
end.not_to raise_error
end
end
context 'with invalid key_alt_names' do
let(:key_alt_names) { ['keyAltName1', 3] }
it 'does raises an exception' do
expect do
context
end.to raise_error(ArgumentError, /All values of the :key_alt_names option Array must be Strings/)
end
end
context 'with non-array key_alt_names' do
let(:key_alt_names) { "keyAltName1" }
it 'does raises an exception' do
expect do
context
end.to raise_error(ArgumentError, /key_alt_names option must be an Array/)
end
end
end
context 'with aws kms provider' do
include_context 'with AWS kms_providers'
let(:key_document) do
Mongo::Crypt::KMS::MasterKeyDocument.new(
'aws',
{ master_key: { region: 'us-east-2', key: 'arn' } }
)
end
it_behaves_like 'it properly sets key_alt_names'
context 'with valid options' do
it 'does not raise an exception' do
expect do
context
end.not_to raise_error
end
end
context 'with valid endpoint' do
let(:key_document) do
Mongo::Crypt::KMS::MasterKeyDocument.new(
'aws',
{
master_key: {
region: 'us-east-2',
key: 'arn',
endpoint: 'kms.us-east-2.amazonaws.com:443'
}
}
)
end
it 'does not raise an exception' do
expect do
context
end.not_to raise_error
end
end
end
end
describe '#run_state_machine' do
# TODO: test with AWS KMS provider
context 'with local KMS provider' do
include_context 'with local kms_providers'
let(:key_document) do
Mongo::Crypt::KMS::MasterKeyDocument.new(
'local',
{
master_key: { key: 'MASTER-KEY' }
}
)
end
let(:operation_context) { Mongo::Operation::Context.new }
it 'creates a data key' do
expect(context.run_state_machine(operation_context)).to be_a_kind_of(Hash)
end
end
end
end
|