5
5
# Since the encrypted values use openssl and are non-deterministic, we can never know the
6
6
# actual value to test against. All we can do is ensure the value is in the correct format
7
7
# for the encrypted content, which verifies it's not in the original state
8
- ENCRYPTED_VALUE_PATTERN = %(' ?([a-z0-9A-Z=/+]+)\- \- ([a-z0-9A-Z=/+]+)\- \- ([a-z0-9A-Z=/+]+)' ?)
8
+ ENCRYPTED_VALUE_PATTERN = %(['"] ?([a-z0-9A-Z=/+]+)\- \- ([a-z0-9A-Z=/+]+)\- \- ([a-z0-9A-Z=/+]+)['"] ?)
9
9
10
10
class Diffcrypt ::EncryptorTest < Minitest ::Test
11
+ def test_it_includes_client_info_at_root
12
+ content = "---\n key: value"
13
+ expected_pattern = /---\n client: diffcrypt-#{ Diffcrypt ::VERSION } \n cipher: #{ Diffcrypt ::Encryptor ::CIPHER } \n data:\n key: #{ ENCRYPTED_VALUE_PATTERN } \n /
14
+ assert_match expected_pattern , Diffcrypt ::Encryptor . new ( TEST_KEY ) . encrypt ( content )
15
+ end
16
+
11
17
def test_it_decrypts_root_values
12
18
encrypted_content = <<~CONTENT
13
- secret_key_base: 88Ry6HESUoXBr6QUFXmni9zzfCIYt9qGNFvIWFcN--4xoecI5mqbNRBibI--62qPJbkzzh5h8lhFEFOSaQ==
19
+ data:
20
+ secret_key_base: 88Ry6HESUoXBr6QUFXmni9zzfCIYt9qGNFvIWFcN--4xoecI5mqbNRBibI--62qPJbkzzh5h8lhFEFOSaQ==
14
21
CONTENT
15
22
expected = <<~CONTENT
16
23
---
@@ -27,14 +34,15 @@ def test_it_encrypts_root_values
27
34
CONTENT
28
35
expected_pattern = /---\n secret_key_base: #{ ENCRYPTED_VALUE_PATTERN } \n /
29
36
30
- assert_match expected_pattern , Diffcrypt ::Encryptor . new ( TEST_KEY ) . encrypt ( content )
37
+ assert_match expected_pattern , Diffcrypt ::Encryptor . new ( TEST_KEY ) . encrypt_data ( content ) . to_yaml
31
38
end
32
39
33
40
def test_it_decrypts_nested_structures
34
41
encrypted_content = <<~CONTENT
35
- secret_key_base: 88Ry6HESUoXBr6QUFXmni9zzfCIYt9qGNFvIWFcN--4xoecI5mqbNRBibI--62qPJbkzzh5h8lhFEFOSaQ==
36
- aws:
37
- access_key_id: Ot/uCTEL+8kp61EPctnxNlg=--Be6sg7OdvjZlfxgR--7qRbbf0lA4VgjnUGUrrFwg==
42
+ data:
43
+ secret_key_base: 88Ry6HESUoXBr6QUFXmni9zzfCIYt9qGNFvIWFcN--4xoecI5mqbNRBibI--62qPJbkzzh5h8lhFEFOSaQ==
44
+ aws:
45
+ access_key_id: Ot/uCTEL+8kp61EPctnxNlg=--Be6sg7OdvjZlfxgR--7qRbbf0lA4VgjnUGUrrFwg==
38
46
CONTENT
39
47
expected = <<~CONTENT
40
48
---
@@ -55,16 +63,16 @@ def test_it_encrypts_nested_structures
55
63
CONTENT
56
64
expected_pattern = /---\n secret_key_base: #{ ENCRYPTED_VALUE_PATTERN } \n aws:\n access_key_id: #{ ENCRYPTED_VALUE_PATTERN } \n /
57
65
58
- assert_match expected_pattern , Diffcrypt ::Encryptor . new ( TEST_KEY ) . encrypt ( content )
66
+ assert_match expected_pattern , Diffcrypt ::Encryptor . new ( TEST_KEY ) . encrypt_data ( content ) . to_yaml
59
67
end
60
68
61
69
# Verifies that a change to one key does not cause the encrypted values for other keys to be recomputed
62
70
# Mainly used in conjunction with rails credentials editor
63
71
def test_it_only_updates_changed_values
64
- original_encrypted_content = "---\n secret_key_base_1: 88Ry6HESUoXBr6QUFXmni9zzfCIYt9qGNFvIWFcN--4xoecI5mqbNRBibI--62qPJbkzzh5h8lhFEFOSaQ==\n aws:\n secret_access_key: 88Ry6HESUoXBr6QUFXmni9zzfCIYt9qGNFvIWFcN--4xoecI5mqbNRBibI--62qPJbkzzh5h8lhFEFOSaQ==\n "
72
+ original_encrypted_content = "---\n data: \n secret_key_base_1: 88Ry6HESUoXBr6QUFXmni9zzfCIYt9qGNFvIWFcN--4xoecI5mqbNRBibI--62qPJbkzzh5h8lhFEFOSaQ==\n aws:\n secret_access_key: 88Ry6HESUoXBr6QUFXmni9zzfCIYt9qGNFvIWFcN--4xoecI5mqbNRBibI--62qPJbkzzh5h8lhFEFOSaQ==\n "
65
73
updated_content = "---\n secret_key_base_1: secret_key_base_test\n aws:\n secret_access_key: secret_access_key_2"
66
74
expected_pattern = /---\n secret_key_base_1: 88Ry6HESUoXBr6QUFXmni9zzfCIYt9qGNFvIWFcN--4xoecI5mqbNRBibI--62qPJbkzzh5h8lhFEFOSaQ==\n aws:\n secret_access_key: #{ ENCRYPTED_VALUE_PATTERN } \n /
67
75
68
- assert_match expected_pattern , Diffcrypt ::Encryptor . new ( TEST_KEY ) . encrypt ( updated_content , original_encrypted_content )
76
+ assert_match expected_pattern , Diffcrypt ::Encryptor . new ( TEST_KEY ) . encrypt_data ( updated_content , original_encrypted_content ) . to_yaml
69
77
end
70
78
end
0 commit comments