1616import time
1717from os import environ
1818
19- from google .api_core .exceptions import GoogleAPICallError
19+ from google .api_core .exceptions import Aborted , GoogleAPICallError
2020from google .cloud import kms_v1
2121from google .cloud .kms_v1 import enums
2222from google .iam .v1 .policy_pb2 import Policy
2525
2626import snippets
2727
28+ from gcp_devrel .testing import eventually_consistent
29+
2830
2931def create_key_helper (key_id , purpose , algorithm , t ):
3032 try :
@@ -51,7 +53,7 @@ def setup_module(module):
5153 except GoogleAPICallError :
5254 # keyring already exists
5355 pass
54- s = create_key_helper (t .symId ,
56+ s = create_key_helper (t .sym_id ,
5557 enums .CryptoKey .CryptoKeyPurpose .ENCRYPT_DECRYPT ,
5658 enums .CryptoKeyVersion .CryptoKeyVersionAlgorithm .
5759 GOOGLE_SYMMETRIC_ENCRYPTION ,
@@ -69,9 +71,9 @@ class TestKMSSnippets:
6971 keyring_path = '{}/keyRings/{}' .format (parent , keyring_id )
7072 version = '1'
7173
72- symId = 'symmetric'
74+ sym_id = 'symmetric'
7375
74- sym = '{}/cryptoKeys/{}' .format (keyring_path , symId )
76+ sym = '{}/cryptoKeys/{}' .format (keyring_path , sym_id )
7577 sym_version = '{}/cryptoKeyVersions/{}' .format (sym , version )
7678
7779 message = 'test message 123'
@@ -94,7 +96,7 @@ def test_create_key_ring(self):
9496 @pytest .mark .skip (reason = "Deleting keys isn't instant, so we should avoid \
9597 creating a large number of them in our tests" )
9698 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 ()))
98100 snippets .create_crypto_key (self .project_id , self .location ,
99101 self .keyring_id , key_id )
100102 c = kms_v1 .KeyManagementServiceClient ()
@@ -108,30 +110,30 @@ def test_create_crypto_key(self):
108110 def test_key_change_version_state (self ):
109111 client = kms_v1 .KeyManagementServiceClient ()
110112 name = client .crypto_key_version_path (self .project_id , self .location ,
111- self .keyring_id , self .symId ,
113+ self .keyring_id , self .sym_id ,
112114 self .version )
113115 state_enum = enums .CryptoKeyVersion .CryptoKeyVersionState
114116 # test disable
115117 snippets .disable_crypto_key_version (self .project_id , self .location ,
116- self .keyring_id , self .symId ,
118+ self .keyring_id , self .sym_id ,
117119 self .version )
118120 response = client .get_crypto_key_version (name )
119121 assert response .state == state_enum .DISABLED
120122 # test destroy
121123 snippets .destroy_crypto_key_version (self .project_id , self .location ,
122- self .keyring_id , self .symId ,
124+ self .keyring_id , self .sym_id ,
123125 self .version )
124126 response = client .get_crypto_key_version (name )
125127 assert response .state == state_enum .DESTROY_SCHEDULED
126128 # test restore
127129 snippets .restore_crypto_key_version (self .project_id , self .location ,
128- self .keyring_id , self .symId ,
130+ self .keyring_id , self .sym_id ,
129131 self .version )
130132 response = client .get_crypto_key_version (name )
131133 assert response .state == state_enum .DISABLED
132134 # test re-enable
133135 snippets .enable_crypto_key_version (self .project_id , self .location ,
134- self .keyring_id , self .symId ,
136+ self .keyring_id , self .sym_id ,
135137 self .version )
136138 response = client .get_crypto_key_version (name )
137139 assert response .state == state_enum .ENABLED
@@ -171,48 +173,61 @@ def test_ring_policy(self):
171173 # tests get/add/remove policy members
172174 def test_key_policy (self ):
173175 # 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 ))
189197 # 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 ))
205220
206221 def test_symmetric_encrypt_decrypt (self ):
207222 cipher_bytes = snippets .encrypt_symmetric (self .project_id ,
208223 self .location ,
209224 self .keyring_id ,
210- self .symId ,
225+ self .sym_id ,
211226 self .message_bytes )
212227 plain_bytes = snippets .decrypt_symmetric (self .project_id ,
213228 self .location ,
214229 self .keyring_id ,
215- self .symId ,
230+ self .sym_id ,
216231 cipher_bytes )
217232 assert plain_bytes == self .message_bytes
218233 assert cipher_bytes != self .message_bytes
0 commit comments