16
16
import time
17
17
from os import environ
18
18
19
- from google .api_core .exceptions import GoogleAPICallError
19
+ from google .api_core .exceptions import Aborted , GoogleAPICallError
20
20
from google .cloud import kms_v1
21
21
from google .cloud .kms_v1 import enums
22
22
from google .iam .v1 .policy_pb2 import Policy
25
25
26
26
import snippets
27
27
28
+ from gcp_devrel .testing import eventually_consistent
29
+
28
30
29
31
def create_key_helper (key_id , purpose , algorithm , t ):
30
32
try :
@@ -51,7 +53,7 @@ def setup_module(module):
51
53
except GoogleAPICallError :
52
54
# keyring already exists
53
55
pass
54
- s = create_key_helper (t .symId ,
56
+ s = create_key_helper (t .sym_id ,
55
57
enums .CryptoKey .CryptoKeyPurpose .ENCRYPT_DECRYPT ,
56
58
enums .CryptoKeyVersion .CryptoKeyVersionAlgorithm .
57
59
GOOGLE_SYMMETRIC_ENCRYPTION ,
@@ -69,9 +71,9 @@ class TestKMSSnippets:
69
71
keyring_path = '{}/keyRings/{}' .format (parent , keyring_id )
70
72
version = '1'
71
73
72
- symId = 'symmetric'
74
+ sym_id = 'symmetric'
73
75
74
- sym = '{}/cryptoKeys/{}' .format (keyring_path , symId )
76
+ sym = '{}/cryptoKeys/{}' .format (keyring_path , sym_id )
75
77
sym_version = '{}/cryptoKeyVersions/{}' .format (sym , version )
76
78
77
79
message = 'test message 123'
@@ -94,7 +96,7 @@ def test_create_key_ring(self):
94
96
@pytest .mark .skip (reason = "Deleting keys isn't instant, so we should avoid \
95
97
creating a large number of them in our tests" )
96
98
def test_create_crypto_key (self ):
97
- key_id = self .symId + '-test' + str (int (time .time ()))
99
+ key_id = self .sym_id + '-test' + str (int (time .time ()))
98
100
snippets .create_crypto_key (self .project_id , self .location ,
99
101
self .keyring_id , key_id )
100
102
c = kms_v1 .KeyManagementServiceClient ()
@@ -108,30 +110,30 @@ def test_create_crypto_key(self):
108
110
def test_key_change_version_state (self ):
109
111
client = kms_v1 .KeyManagementServiceClient ()
110
112
name = client .crypto_key_version_path (self .project_id , self .location ,
111
- self .keyring_id , self .symId ,
113
+ self .keyring_id , self .sym_id ,
112
114
self .version )
113
115
state_enum = enums .CryptoKeyVersion .CryptoKeyVersionState
114
116
# test disable
115
117
snippets .disable_crypto_key_version (self .project_id , self .location ,
116
- self .keyring_id , self .symId ,
118
+ self .keyring_id , self .sym_id ,
117
119
self .version )
118
120
response = client .get_crypto_key_version (name )
119
121
assert response .state == state_enum .DISABLED
120
122
# test destroy
121
123
snippets .destroy_crypto_key_version (self .project_id , self .location ,
122
- self .keyring_id , self .symId ,
124
+ self .keyring_id , self .sym_id ,
123
125
self .version )
124
126
response = client .get_crypto_key_version (name )
125
127
assert response .state == state_enum .DESTROY_SCHEDULED
126
128
# test restore
127
129
snippets .restore_crypto_key_version (self .project_id , self .location ,
128
- self .keyring_id , self .symId ,
130
+ self .keyring_id , self .sym_id ,
129
131
self .version )
130
132
response = client .get_crypto_key_version (name )
131
133
assert response .state == state_enum .DISABLED
132
134
# test re-enable
133
135
snippets .enable_crypto_key_version (self .project_id , self .location ,
134
- self .keyring_id , self .symId ,
136
+ self .keyring_id , self .sym_id ,
135
137
self .version )
136
138
response = client .get_crypto_key_version (name )
137
139
assert response .state == state_enum .ENABLED
@@ -171,48 +173,61 @@ def test_ring_policy(self):
171
173
# tests get/add/remove policy members
172
174
def test_key_policy (self ):
173
175
# add member
174
- snippets .add_member_to_crypto_key_policy (self .project_id ,
175
- self .location ,
176
- self .keyring_id ,
177
- self .symId ,
178
- self .member ,
179
- self .role )
180
- policy = snippets .get_crypto_key_policy (self .project_id ,
181
- self .location ,
182
- self .keyring_id ,
183
- self .symId )
184
- found = False
185
- for b in list (policy .bindings ):
186
- if b .role == self .role and self .member in b .members :
187
- found = True
188
- assert found
176
+ snippets .add_member_to_crypto_key_policy (
177
+ self .project_id ,
178
+ self .location ,
179
+ self .keyring_id ,
180
+ self .sym_id ,
181
+ self .member ,
182
+ self .role )
183
+
184
+ def check_policy ():
185
+ policy = snippets .get_crypto_key_policy (
186
+ self .project_id ,
187
+ self .location ,
188
+ self .keyring_id ,
189
+ self .sym_id )
190
+ found = False
191
+ for b in list (policy .bindings ):
192
+ if b .role == self .role and self .member in b .members :
193
+ found = True
194
+ assert found
195
+ eventually_consistent .call (check_policy ,
196
+ exceptions = (Aborted , AssertionError ))
189
197
# remove member
190
- snippets .remove_member_from_crypto_key_policy (self .project_id ,
191
- self .location ,
192
- self .keyring_id ,
193
- self .symId ,
194
- self .member ,
195
- self .role )
196
- policy = snippets .get_crypto_key_policy (self .project_id ,
197
- self .location ,
198
- self .keyring_id ,
199
- self .symId )
200
- found = False
201
- for b in list (policy .bindings ):
202
- if b .role == self .role and self .member in b .members :
203
- found = True
204
- assert not found
198
+ snippets .remove_member_from_crypto_key_policy (
199
+ self .project_id ,
200
+ self .location ,
201
+ self .keyring_id ,
202
+ self .sym_id ,
203
+ self .member ,
204
+ self .role )
205
+
206
+ def check_policy ():
207
+ policy = snippets .get_crypto_key_policy (
208
+ self .project_id ,
209
+ self .location ,
210
+ self .keyring_id ,
211
+ self .sym_id )
212
+ found = False
213
+ for b in list (policy .bindings ):
214
+ if b .role == self .role and self .member in b .members :
215
+ found = True
216
+ assert not found
217
+ eventually_consistent .call (
218
+ check_policy ,
219
+ exceptions = (Aborted , AssertionError ))
205
220
206
221
def test_symmetric_encrypt_decrypt (self ):
207
222
cipher_bytes = snippets .encrypt_symmetric (self .project_id ,
208
223
self .location ,
209
224
self .keyring_id ,
210
- self .symId ,
225
+ self .sym_id ,
211
226
self .message_bytes )
212
227
plain_bytes = snippets .decrypt_symmetric (self .project_id ,
213
228
self .location ,
214
229
self .keyring_id ,
215
- self .symId ,
230
+ self .sym_id ,
216
231
cipher_bytes )
217
232
assert plain_bytes == self .message_bytes
218
233
assert cipher_bytes != self .message_bytes
0 commit comments