@@ -3119,6 +3119,64 @@ def test_authorize_deauthorize_subvolume(self):
31193119 self ._fs_cmd ("subvolume" , "rm" , self .volname , subvolume , "--group_name" , group )
31203120 self ._fs_cmd ("subvolumegroup" , "rm" , self .volname , group )
31213121
3122+ def test_subvolume_deauthorize_with_shared_key (self ):
3123+ """
3124+ That mon caps are preserved when one cephx key authorized on multiple
3125+ subvolumes is deauthorized on any of those.
3126+ """
3127+ subvolume1 = self ._gen_subvol_name ()
3128+ subvolume2 = self ._gen_subvol_name ()
3129+ group = self ._gen_subvol_grp_name ()
3130+ authid = "alice"
3131+
3132+ # create group
3133+ self ._fs_cmd ("subvolumegroup" , "create" , self .volname , group )
3134+
3135+ # create subvolumes
3136+ self ._fs_cmd ("subvolume" , "create" , self .volname , subvolume1 , "--group_name" , group )
3137+ self ._fs_cmd ("subvolume" , "create" , self .volname , subvolume2 , "--group_name" , group )
3138+
3139+ # authorize alice authID read-write access to both subvolumes
3140+ self ._fs_cmd ("subvolume" , "authorize" , self .volname , subvolume1 , authid ,
3141+ "--group_name" , group )
3142+ self ._fs_cmd ("subvolume" , "authorize" , self .volname , subvolume2 , authid ,
3143+ "--group_name" , group )
3144+
3145+ # verify autorized-id has access to both subvolumes
3146+ expected_auth_list = [{'alice' : 'rw' }]
3147+ auth_list1 = json .loads (self ._fs_cmd ('subvolume' , 'authorized_list' , self .volname , subvolume1 , "--group_name" , group ))
3148+ self .assertEqual (expected_auth_list , auth_list1 )
3149+ auth_list2 = json .loads (self ._fs_cmd ('subvolume' , 'authorized_list' , self .volname , subvolume2 , "--group_name" , group ))
3150+ self .assertEqual (expected_auth_list , auth_list2 )
3151+
3152+ # check mon caps for authid
3153+ expected_mon_caps = 'allow r'
3154+ full_caps = json .loads (self ._raw_cmd ("auth" , "get" , "client.alice" , "--format=json-pretty" ))
3155+ self .assertEqual (expected_mon_caps , full_caps [0 ]['caps' ]['mon' ])
3156+
3157+ # deauthorize guest1 authID
3158+ self ._fs_cmd ("subvolume" , "deauthorize" , self .volname , subvolume2 , authid ,
3159+ "--group_name" , group )
3160+
3161+ # verify autorized-id has access to subvolume1 only
3162+ expected_auth_list = [{'alice' : 'rw' }]
3163+ auth_list1 = json .loads (self ._fs_cmd ('subvolume' , 'authorized_list' , self .volname , subvolume1 , "--group_name" , group ))
3164+ self .assertEqual (expected_auth_list , auth_list1 )
3165+ auth_list2 = json .loads (self ._fs_cmd ('subvolume' , 'authorized_list' , self .volname , subvolume2 , "--group_name" , group ))
3166+ self .assertEqual ([], auth_list2 )
3167+
3168+ # check mon caps still hold for authid
3169+ expected_mon_caps = 'allow r'
3170+ full_caps = json .loads (self ._raw_cmd ("auth" , "get" , "client.alice" , "--format=json-pretty" ))
3171+ self .assertEqual (expected_mon_caps , full_caps [0 ]['caps' ]['mon' ])
3172+
3173+ # cleanup
3174+ self ._fs_cmd ("subvolume" , "deauthorize" , self .volname , subvolume1 , authid ,
3175+ "--group_name" , group )
3176+ self ._fs_cmd ("subvolume" , "rm" , self .volname , subvolume1 , "--group_name" , group )
3177+ self ._fs_cmd ("subvolume" , "rm" , self .volname , subvolume2 , "--group_name" , group )
3178+ self ._fs_cmd ("subvolumegroup" , "rm" , self .volname , group )
3179+
31223180 def test_multitenant_subvolumes (self ):
31233181 """
31243182 That subvolume access can be restricted to a tenant.
0 commit comments