Skip to content

Commit 5e2c8ca

Browse files
committed
cleanup: make some improvements to group moderation test
- We no longer assert peer roles in the mod event callback because this causes an issue with the new events implementation, which triggers the events after all the packets from the current tox_iterate() are processed, rather than as the packets are received. These checks were superfluous and shouldn't reduce code coverage. - A moderator now sets the topic before the founder kicks him in order to increase internal code coverage.
1 parent 259de48 commit 5e2c8ca

File tree

3 files changed

+18
-11
lines changed

3 files changed

+18
-11
lines changed

auto_tests/group_moderation_test.c

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

249246
static 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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
189633f3accb67886c402bf242616d9b3e8258f8050dbd00a10b7c6147ed28aa /usr/local/bin/tox-bootstrapd
1+
030f7ea99c34523091b268df0ea8fb02e81ee340d608af85d502bace4817d6b0 /usr/local/bin/tox-bootstrapd

toxcore/group_chats.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3862,6 +3862,7 @@ static bool update_gc_topic(GC_Chat *chat, const uint8_t *public_sig_key)
38623862
return true;
38633863
}
38643864

3865+
LOGGER_TRACE(chat->log, "founder is re-signing topic");
38653866
return gc_set_topic(chat, chat->topic_info.topic, chat->topic_info.length) == 0;
38663867
}
38673868

0 commit comments

Comments
 (0)