@@ -415,6 +415,55 @@ def test_generate_signed_post_policy_v4(
415415 assert blob .download_as_bytes () == payload
416416
417417
418+ @pytest .mark .skipif (
419+ _helpers .is_api_endpoint_override ,
420+ reason = "Test does not yet support endpoint override" ,
421+ )
422+ def test_generate_signed_post_policy_v4_access_token_sa_email (
423+ storage_client , signing_bucket , blobs_to_delete , service_account , no_mtls
424+ ):
425+ client = iam_credentials_v1 .IAMCredentialsClient ()
426+ service_account_email = service_account .service_account_email
427+ name = path_template .expand (
428+ "projects/{project}/serviceAccounts/{service_account}" ,
429+ project = "-" ,
430+ service_account = service_account_email ,
431+ )
432+ scope = [
433+ "https://www.googleapis.com/auth/devstorage.read_write" ,
434+ "https://www.googleapis.com/auth/iam" ,
435+ ]
436+ response = client .generate_access_token (name = name , scope = scope )
437+
438+ now = _NOW (_UTC ).replace (tzinfo = None )
439+ blob_name = "post_policy_obj_email2.txt"
440+ payload = b"DEADBEEF"
441+ with open (blob_name , "wb" ) as f :
442+ f .write (payload )
443+ policy = storage_client .generate_signed_post_policy_v4 (
444+ signing_bucket .name ,
445+ blob_name ,
446+ conditions = [
447+ {"bucket" : signing_bucket .name },
448+ ["starts-with" , "$Content-Type" , "text/pla" ],
449+ ],
450+ expiration = now + datetime .timedelta (hours = 1 ),
451+ fields = {"content-type" : "text/plain" },
452+ service_account_email = service_account_email ,
453+ access_token = response .access_token ,
454+ )
455+ with open (blob_name , "r" ) as f :
456+ files = {"file" : (blob_name , f )}
457+ response = requests .post (policy ["url" ], data = policy ["fields" ], files = files )
458+
459+ os .remove (blob_name )
460+ assert response .status_code == 204
461+
462+ blob = signing_bucket .get_blob (blob_name )
463+ blobs_to_delete .append (blob )
464+ assert blob .download_as_bytes () == payload
465+
466+
418467def test_generate_signed_post_policy_v4_invalid_field (
419468 storage_client , buckets_to_delete , blobs_to_delete , service_account , no_mtls
420469):
0 commit comments