@@ -193,7 +193,7 @@ static void group_peer_join_handler(Tox *tox, uint32_t group_number, uint32_t pe
193193 ck_assert (state -> num_peers < NUM_GROUP_TOXES );
194194}
195195
196- static void handle_mod (State * state , const char * peer_name , size_t peer_name_len , Tox_Group_Role role )
196+ static void handle_mod (State * state , const char * peer_name , size_t peer_name_len )
197197{
198198 if (state -> mod_event_count == 0 ) {
199199 ck_assert (memcmp (peer_name , state -> mod_name1 , peer_name_len ) == 0 );
@@ -205,10 +205,9 @@ static void handle_mod(State *state, const char *peer_name, size_t peer_name_len
205205
206206 ++ state -> mod_event_count ;
207207 state -> mod_check = true;
208- ck_assert (role == TOX_GROUP_ROLE_MODERATOR );
209208}
210209
211- static void handle_observer (State * state , const char * peer_name , size_t peer_name_len , Tox_Group_Role role )
210+ static void handle_observer (State * state , const char * peer_name , size_t peer_name_len )
212211{
213212 if (state -> observer_event_count == 0 ) {
214213 ck_assert (memcmp (peer_name , state -> observer_name1 , peer_name_len ) == 0 );
@@ -220,10 +219,9 @@ static void handle_observer(State *state, const char *peer_name, size_t peer_nam
220219
221220 ++ state -> observer_event_count ;
222221 state -> observer_check = true;
223- ck_assert (role == TOX_GROUP_ROLE_OBSERVER );
224222}
225223
226- static void handle_user (State * state , const char * peer_name , size_t peer_name_len , Tox_Group_Role role )
224+ static void handle_user (State * state , const char * peer_name , size_t peer_name_len )
227225{
228226 // event 1: observer1 gets promoted back to user
229227 // event 2: observer2 gets promoted to moderator
@@ -243,7 +241,6 @@ static void handle_user(State *state, const char *peer_name, size_t peer_name_le
243241
244242 ++ state -> user_event_count ;
245243 state -> user_check = true;
246- ck_assert (role == TOX_GROUP_ROLE_USER );
247244}
248245
249246static void group_mod_event_handler (Tox * tox , uint32_t group_number , uint32_t source_peer_id , uint32_t target_peer_id ,
@@ -274,24 +271,25 @@ static void group_mod_event_handler(Tox *tox, uint32_t group_number, uint32_t so
274271
275272 Tox_Group_Role role = tox_group_peer_get_role (tox , group_number , target_peer_id , & q_err );
276273 ck_assert (q_err == TOX_ERR_GROUP_PEER_QUERY_OK );
274+ ck_assert (role <= TOX_GROUP_ROLE_OBSERVER );
277275
278276 fprintf (stderr , "tox%u: got moderator event %d (%s), role = %s\n" ,
279277 autotox -> index , mod_type , tox_group_mod_event_to_string (mod_type ),
280278 tox_group_role_to_string (role ));
281279
282280 switch (mod_type ) {
283281 case TOX_GROUP_MOD_EVENT_MODERATOR : {
284- handle_mod (state , peer_name , peer_name_len , role );
282+ handle_mod (state , peer_name , peer_name_len );
285283 break ;
286284 }
287285
288286 case TOX_GROUP_MOD_EVENT_OBSERVER : {
289- handle_observer (state , peer_name , peer_name_len , role );
287+ handle_observer (state , peer_name , peer_name_len );
290288 break ;
291289 }
292290
293291 case TOX_GROUP_MOD_EVENT_USER : {
294- handle_user (state , peer_name , peer_name_len , role );
292+ handle_user (state , peer_name , peer_name_len );
295293 break ;
296294 }
297295
@@ -607,6 +605,15 @@ static void group_moderation_test(AutoTox *autotoxes)
607605 tox_group_mod_kick_peer (tox1 , state1 -> group_number , founder_peer_id , & k_err );
608606 ck_assert_msg (k_err != TOX_ERR_GROUP_MOD_KICK_PEER_OK , "Mod kicked founder" );
609607
608+ /* the moderator about to be kicked changes the topic to trigger the founder to
609+ * re-sign and redistribute it after the kick.
610+ */
611+ State * state_x = (State * )autotoxes [idx ].state ;
612+ Tox * tox_x = autotoxes [idx ].tox ;
613+ Tox_Err_Group_Topic_Set topic_err ;
614+ tox_group_set_topic (tox_x , state_x -> group_number , nullptr , 0 , & topic_err );
615+ ck_assert (topic_err == TOX_ERR_GROUP_TOPIC_SET_OK );
616+
610617 /* founder kicks moderator (this triggers two events: user and kick) */
611618 fprintf (stderr , "Founder is kicking %s\n" , state0 -> peers [0 ].name );
612619
@@ -619,7 +626,6 @@ static void group_moderation_test(AutoTox *autotoxes)
619626 fprintf (stderr , "All peers successfully received kick event\n" );
620627
621628 fprintf (stderr , "Founder is demoting moderator to user\n" );
622-
623629 tox_group_mod_set_role (tox0 , state0 -> group_number , state0 -> peers [2 ].peer_id , TOX_GROUP_ROLE_USER , & role_err );
624630 ck_assert_msg (role_err == TOX_ERR_GROUP_MOD_SET_ROLE_OK , "Failed to demote peer 3 to User. error: %d" , role_err );
625631
0 commit comments