test/symmetric_encryption_test.rb in symmetric-encryption-3.7.2 vs test/symmetric_encryption_test.rb in symmetric-encryption-3.8.0

- old
+ new

@@ -1,289 +1,290 @@ require_relative 'test_helper' # Unit Test for SymmetricEncryption # class SymmetricEncryptionTest < Minitest::Test - context 'SymmetricEncryption' do + describe 'SymmetricEncryption' do - context 'configuration' do - setup do - @ciphers = SymmetricEncryption.send(:read_config, File.join(File.dirname(__FILE__), 'config', 'symmetric-encryption.yml'), 'test') + describe 'configuration' do + before do + config = SymmetricEncryption::Config.read_config(File.join(File.dirname(__FILE__), 'config', 'symmetric-encryption.yml'), 'test') + @ciphers = SymmetricEncryption::Config.extract_ciphers(config) @cipher_v2, @cipher_v1, @cipher_v0 = @ciphers end - should "match config file for first cipher" do + it 'matches config file for first cipher' do cipher = SymmetricEncryption.cipher assert @cipher_v2.send(:key) assert @cipher_v2.send(:iv) assert @cipher_v2.version assert_equal @cipher_v2.cipher_name, cipher.cipher_name assert_equal @cipher_v2.version, cipher.version assert_equal false, SymmetricEncryption.secondary_ciphers.include?(cipher) end - should "match config file for v1 cipher" do + it 'match config file for v1 cipher' do cipher = SymmetricEncryption.cipher(2) assert @cipher_v2.cipher_name assert @cipher_v2.version assert_equal @cipher_v2.cipher_name, cipher.cipher_name assert_equal @cipher_v2.version, cipher.version assert_equal false, SymmetricEncryption.secondary_ciphers.include?(cipher) end - should "match config file for v0 cipher" do + it 'match config file for v0 cipher' do cipher = SymmetricEncryption.cipher(0) assert @cipher_v0.cipher_name assert @cipher_v0.version assert_equal @cipher_v0.cipher_name, cipher.cipher_name assert_equal @cipher_v0.version, cipher.version assert_equal true, SymmetricEncryption.secondary_ciphers.include?(cipher) end end SymmetricEncryption::Cipher::ENCODINGS.each do |encoding| - context "encoding: #{encoding}" do - setup do - @social_security_number = "987654321" - @social_security_number_encrypted = + describe "encoding: #{encoding}" do + before do + @social_security_number = '987654321' + @social_security_number_encrypted = case encoding - when :base64 - "QEVuQwIAS+8X1NRrqdfEIQyFHVPuVA==\n" - when :base64strict - "QEVuQwIAS+8X1NRrqdfEIQyFHVPuVA==" - when :base16 - "40456e4302004bef17d4d46ba9d7c4210c851d53ee54" - when :none - "@EnC\x02\x00K\xEF\x17\xD4\xD4k\xA9\xD7\xC4!\f\x85\x1DS\xEET".force_encoding(Encoding.find("binary")) - else - raise "Add test for encoding: #{encoding}" - end + when :base64 + "QEVuQwIAS+8X1NRrqdfEIQyFHVPuVA==\n" + when :base64strict + 'QEVuQwIAS+8X1NRrqdfEIQyFHVPuVA==' + when :base16 + '40456e4302004bef17d4d46ba9d7c4210c851d53ee54' + when :none + "@EnC\x02\x00K\xEF\x17\xD4\xD4k\xA9\xD7\xC4!\f\x85\x1DS\xEET".force_encoding(Encoding.find("binary")) + else + raise "Add test for encoding: #{encoding}" + end @social_security_number_encrypted_with_secondary_1 = "D1UCu38pqJ3jc0GvwJHiow==\n" - @non_utf8 = "\xc2".force_encoding('binary') - @encoding = SymmetricEncryption.cipher.encoding - SymmetricEncryption.cipher.encoding = encoding + @non_utf8 = "\xc2".force_encoding('binary') + @encoding = SymmetricEncryption.cipher.encoding + SymmetricEncryption.cipher.encoding = encoding end - teardown do + after do SymmetricEncryption.cipher.encoding = @encoding end - should "encrypt simple string" do + it "encrypt simple string" do assert_equal @social_security_number_encrypted, SymmetricEncryption.encrypt(@social_security_number) end - should "decrypt string" do + it "decrypt string" do assert decrypted = SymmetricEncryption.decrypt(@social_security_number_encrypted) assert_equal @social_security_number, decrypted assert_equal Encoding.find('utf-8'), decrypted.encoding, decrypted end - should 'return BINARY encoding for non-UTF-8 encrypted data' do + it 'return BINARY encoding for non-UTF-8 encrypted data' do assert_equal Encoding.find('binary'), @non_utf8.encoding assert_equal true, @non_utf8.valid_encoding? assert encrypted = SymmetricEncryption.encrypt(@non_utf8) assert decrypted = SymmetricEncryption.decrypt(encrypted) assert_equal true, decrypted.valid_encoding? assert_equal Encoding.find('binary'), decrypted.encoding, decrypted assert_equal @non_utf8, decrypted end - should "return nil when encrypting nil" do + it "return nil when encrypting nil" do assert_equal nil, SymmetricEncryption.encrypt(nil) end - should "return '' when encrypting ''" do + it "return '' when encrypting ''" do assert_equal '', SymmetricEncryption.encrypt('') end - should "return nil when decrypting nil" do + it "return nil when decrypting nil" do assert_equal nil, SymmetricEncryption.decrypt(nil) end - should "return '' when decrypting ''" do + it "return '' when decrypting ''" do assert_equal '', SymmetricEncryption.decrypt('') end - should "determine if string is encrypted" do + it "determine if string is encrypted" do assert_equal true, SymmetricEncryption.encrypted?(@social_security_number_encrypted) assert_equal false, SymmetricEncryption.encrypted?(@social_security_number) end end end - context "using select_cipher" do - setup do + describe "using select_cipher" do + before do @social_security_number = "987654321" # Encrypt data without a header and encode with base64 which has a trailing '\n' - @encrypted_0_ssn = SymmetricEncryption.cipher(0).encode(SymmetricEncryption.cipher(0).binary_encrypt(@social_security_number,false,false,false)) + @encrypted_0_ssn = SymmetricEncryption.cipher(0).encode(SymmetricEncryption.cipher(0).binary_encrypt(@social_security_number, false, false, false)) SymmetricEncryption.select_cipher do |encoded_str, decoded_str| # Use cipher version 0 if the encoded string ends with "\n" otherwise # use the current default cipher encoded_str.end_with?("\n") ? SymmetricEncryption.cipher(0) : SymmetricEncryption.cipher end end - teardown do + after do # Clear out select_cipher SymmetricEncryption.select_cipher end - should "decrypt string without a header using an old cipher" do + it "decrypt string without a header using an old cipher" do assert_equal @social_security_number, SymmetricEncryption.decrypt(@encrypted_0_ssn) end end - context "without select_cipher" do - setup do + describe "without select_cipher" do + before do @social_security_number = "987654321" # Encrypt data without a header and encode with base64 which has a trailing '\n' - assert @encrypted_0_ssn = SymmetricEncryption.cipher(0).encode(SymmetricEncryption.cipher(0).binary_encrypt(@social_security_number,false,false,false)) + assert @encrypted_0_ssn = SymmetricEncryption.cipher(0).encode(SymmetricEncryption.cipher(0).binary_encrypt(@social_security_number, false, false, false)) end - should "decrypt string without a header using an old cipher" do + it "decrypt string without a header using an old cipher" do assert_raises OpenSSL::Cipher::CipherError do SymmetricEncryption.decrypt(@encrypted_0_ssn) end end end - context "random iv" do - setup do + describe "random iv" do + before do @social_security_number = "987654321" end - should "encrypt and then decrypt using random iv" do + it "encrypt and then decrypt using random iv" do # Encrypt with random iv assert encrypted = SymmetricEncryption.encrypt(@social_security_number, random_iv=true) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @social_security_number, SymmetricEncryption.decrypt(encrypted) end - should "encrypt and then decrypt using random iv with compression" do + it "encrypt and then decrypt using random iv with compression" do # Encrypt with random iv and compress assert encrypted = SymmetricEncryption.encrypt(@social_security_number, random_iv=true, compress=true) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @social_security_number, SymmetricEncryption.decrypt(encrypted) end end - context "data types" do - context "string" do - setup do + describe "data types" do + describe "string" do + before do @social_security_number = "987654321" end - should "encrypt and decrypt value to and from a string" do + it "encrypt and decrypt value to and from a string" do assert encrypted = SymmetricEncryption.encrypt(@social_security_number, random_iv=false, compress=false, type=:string) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @social_security_number, SymmetricEncryption.decrypt(encrypted, version=nil, type=:string) end end - context "integer" do - setup do + describe "integer" do + before do @age = 21 end - should "encrypt and decrypt value to and from an integer" do + it "encrypt and decrypt value to and from an integer" do assert encrypted = SymmetricEncryption.encrypt(@age, random_iv=false, compress=false, type=:integer) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @age, SymmetricEncryption.decrypt(encrypted, version=nil, type=:integer) end end - context "float" do - setup do + describe "float" do + before do @miles = 2.5 end - should "encrypt and decrypt value to and from a float" do + it "encrypt and decrypt value to and from a float" do assert encrypted = SymmetricEncryption.encrypt(@miles, random_iv=false, compress=false, type=:float) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @miles, SymmetricEncryption.decrypt(encrypted, version=nil, type=:float) end end - context "decimal" do - setup do + describe "decimal" do + before do @account_balance = BigDecimal.new("12.58") end - should "encrypt and decrypt value to and from a BigDecimal" do + it "encrypt and decrypt value to and from a BigDecimal" do assert encrypted = SymmetricEncryption.encrypt(@account_balance, random_iv=false, compress=false, type=:decimal) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @account_balance, SymmetricEncryption.decrypt(encrypted, version=nil, type=:decimal) end end - context "datetime" do - setup do + describe "datetime" do + before do @checked_in_at = DateTime.new(2001, 11, 26, 20, 55, 54, "-5") end - should "encrypt and decrypt value to and from a DateTime" do + it "encrypt and decrypt value to and from a DateTime" do assert encrypted = SymmetricEncryption.encrypt(@checked_in_at, random_iv=false, compress=false, type=:datetime) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @checked_in_at, SymmetricEncryption.decrypt(encrypted, version=nil, type=:datetime) end end - context "time" do - setup do + describe "time" do + before do @closing_time = Time.new(2013, 01, 01, 22, 30, 00, "-04:00") end - should "encrypt and decrypt value to and from a Time" do + it "encrypt and decrypt value to and from a Time" do assert encrypted = SymmetricEncryption.encrypt(@closing_time, random_iv=false, compress=false, type=:time) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @closing_time, SymmetricEncryption.decrypt(encrypted, version=nil, type=:time) end end - context "date" do - setup do + describe "date" do + before do @birthdate = Date.new(1927, 04, 01) end - should "encrypt and decrypt value to and from a Date" do + it "encrypt and decrypt value to and from a Date" do assert encrypted = SymmetricEncryption.encrypt(@birthdate, random_iv=false, compress=false, type=:date) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @birthdate, SymmetricEncryption.decrypt(encrypted, version=nil, type=:date) end end - context "boolean" do - context "when true" do - setup do + describe "boolean" do + describe "when true" do + before do @is_working = true end - should "encrypt and decrypt a true value to and from a boolean" do + it "encrypt and decrypt a true value to and from a boolean" do assert encrypted = SymmetricEncryption.encrypt(@is_working, random_iv=false, compress=false, type=:boolean) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @is_working, SymmetricEncryption.decrypt(encrypted, version=nil, type=:boolean) end end - context "when false" do - setup do + describe "when false" do + before do @is_broken = false end - should "encrypt and decrypt a false value to and from a boolean" do + it "encrypt and decrypt a false value to and from a boolean" do assert encrypted = SymmetricEncryption.encrypt(@is_broken, random_iv=false, compress=false, type=:boolean) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @is_broken, SymmetricEncryption.decrypt(encrypted, version=nil, type=:boolean) end end - context "when yaml" do - setup do - @test = { :a => :b } + describe "when yaml" do + before do + @test = {:a => :b} end - should "encrypt and decrypt a false value to and from a boolean" do + it "encrypt and decrypt a false value to and from a boolean" do assert encrypted = SymmetricEncryption.encrypt(@test, random_iv=false, compress=false, type=:yaml) assert_equal true, SymmetricEncryption.encrypted?(encrypted) assert_equal @test, SymmetricEncryption.decrypt(encrypted, version=nil, type=:yaml) end end