@@ -453,6 +453,7 @@ def test_list_subscriptions_missing_key(self):
453453 self .assertEqual (req ['query_params' ], {})
454454
455455 def test_get_iam_policy_w_bound_client (self ):
456+ from gcloud .pubsub .iam import _OWNER_ROLE , _WRITER_ROLE , _READER_ROLE
456457 OWNER1 = 'user:phred@example.com'
457458 OWNER2 = 'group:cloud-logs@google.com'
458459 WRITER1 = 'domain:google.com'
@@ -463,9 +464,9 @@ def test_get_iam_policy_w_bound_client(self):
463464 'etag' : 'DEADBEEF' ,
464465 'version' : 17 ,
465466 'bindings' : [
466- {'role' : 'roles/owner' , 'members' : [OWNER1 , OWNER2 ]},
467- {'role' : 'roles/writer' , 'members' : [WRITER1 , WRITER2 ]},
468- {'role' : 'roles/reader' , 'members' : [READER1 , READER2 ]},
467+ {'role' : _OWNER_ROLE , 'members' : [OWNER1 , OWNER2 ]},
468+ {'role' : _WRITER_ROLE , 'members' : [WRITER1 , WRITER2 ]},
469+ {'role' : _READER_ROLE , 'members' : [READER1 , READER2 ]},
469470 ],
470471 }
471472 TOPIC_NAME = 'topic_name'
@@ -519,6 +520,87 @@ def test_get_iam_policy_w_alternate_client(self):
519520 self .assertEqual (req ['method' ], 'GET' )
520521 self .assertEqual (req ['path' ], '/%s' % PATH )
521522
523+ def test_set_iam_policy_w_bound_client (self ):
524+ from gcloud .pubsub .iam import Policy
525+ from gcloud .pubsub .iam import _OWNER_ROLE , _WRITER_ROLE , _READER_ROLE
526+ OWNER1 = 'group:cloud-logs@google.com'
527+ OWNER2 = 'user:phred@example.com'
528+ WRITER1 = 'domain:google.com'
529+ WRITER2 = 'user:phred@example.com'
530+ READER1 = 'serviceAccount:1234-abcdef@service.example.com'
531+ READER2 = 'user:phred@example.com'
532+ POLICY = {
533+ 'etag' : 'DEADBEEF' ,
534+ 'version' : 17 ,
535+ 'bindings' : [
536+ {'role' : _OWNER_ROLE , 'members' : [OWNER1 , OWNER2 ]},
537+ {'role' : _WRITER_ROLE , 'members' : [WRITER1 , WRITER2 ]},
538+ {'role' : _READER_ROLE , 'members' : [READER1 , READER2 ]},
539+ ],
540+ }
541+ RESPONSE = POLICY .copy ()
542+ RESPONSE ['etag' ] = 'ABACABAF'
543+ RESPONSE ['version' ] = 18
544+ TOPIC_NAME = 'topic_name'
545+ PROJECT = 'PROJECT'
546+ TOPIC_NAME = 'topic_name'
547+ PATH = 'projects/%s/topics/%s:setIamPolicy' % (PROJECT , TOPIC_NAME )
548+
549+ conn = _Connection (RESPONSE )
550+ CLIENT = _Client (project = PROJECT , connection = conn )
551+ topic = self ._makeOne (TOPIC_NAME , client = CLIENT )
552+ policy = Policy ('DEADBEEF' , 17 )
553+ policy .owners .add (OWNER1 )
554+ policy .owners .add (OWNER2 )
555+ policy .writers .add (WRITER1 )
556+ policy .writers .add (WRITER2 )
557+ policy .readers .add (READER1 )
558+ policy .readers .add (READER2 )
559+
560+ new_policy = topic .set_iam_policy (policy )
561+
562+ self .assertEqual (new_policy .etag , 'ABACABAF' )
563+ self .assertEqual (new_policy .version , 18 )
564+ self .assertEqual (sorted (new_policy .owners ), [OWNER1 , OWNER2 ])
565+ self .assertEqual (sorted (new_policy .writers ), [WRITER1 , WRITER2 ])
566+ self .assertEqual (sorted (new_policy .readers ), [READER1 , READER2 ])
567+
568+ self .assertEqual (len (conn ._requested ), 1 )
569+ req = conn ._requested [0 ]
570+ self .assertEqual (req ['method' ], 'POST' )
571+ self .assertEqual (req ['path' ], '/%s' % PATH )
572+ self .assertEqual (req ['data' ], POLICY )
573+
574+ def test_set_iam_policy_w_alternate_client (self ):
575+ from gcloud .pubsub .iam import Policy
576+ RESPONSE = {'etag' : 'ACAB' }
577+ TOPIC_NAME = 'topic_name'
578+ PROJECT = 'PROJECT'
579+ TOPIC_NAME = 'topic_name'
580+ PATH = 'projects/%s/topics/%s:setIamPolicy' % (PROJECT , TOPIC_NAME )
581+
582+ conn1 = _Connection ()
583+ conn2 = _Connection (RESPONSE )
584+ CLIENT1 = _Client (project = PROJECT , connection = conn1 )
585+ CLIENT2 = _Client (project = PROJECT , connection = conn2 )
586+ topic = self ._makeOne (TOPIC_NAME , client = CLIENT1 )
587+
588+ policy = Policy ()
589+ new_policy = topic .set_iam_policy (policy , client = CLIENT2 )
590+
591+ self .assertEqual (new_policy .etag , 'ACAB' )
592+ self .assertEqual (new_policy .version , None )
593+ self .assertEqual (sorted (new_policy .owners ), [])
594+ self .assertEqual (sorted (new_policy .writers ), [])
595+ self .assertEqual (sorted (new_policy .readers ), [])
596+
597+ self .assertEqual (len (conn1 ._requested ), 0 )
598+ self .assertEqual (len (conn2 ._requested ), 1 )
599+ req = conn2 ._requested [0 ]
600+ self .assertEqual (req ['method' ], 'POST' )
601+ self .assertEqual (req ['path' ], '/%s' % PATH )
602+ self .assertEqual (req ['data' ], {})
603+
522604
523605class TestBatch (unittest2 .TestCase ):
524606
0 commit comments