Skip to content

Commit c2fb640

Browse files
author
Egor Rachkovskii
committed
test(functional): address review on cross-version chat compat
- move peer-version resolution into the Makefile, selecting the latest patch per minor (two newest minors) - add TODO above the temporary worktree-based peer-image build - wrap banUserFromCommunity in the python wakuext service - exercise add/remove members from both vut and peer sides with 2-3 messages between each membership change; run the third node on the peer image so every exchange crosses versions
1 parent 138c3f5 commit c2fb640

5 files changed

Lines changed: 84 additions & 8 deletions

File tree

Makefile

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,6 +544,11 @@ test-functional-compatibility: export FUNCTIONAL_TESTS_DOCKER_UID ?= $(call sh,
544544
test-functional-compatibility: export FUNCTIONAL_TESTS_REPORT_CODECOV ?= false
545545
test-functional-compatibility: export USE_LOGOS_STORAGE := $(USE_LOGOS_STORAGE)
546546
test-functional-compatibility: export FUNCTIONAL_TESTS_MARKER := compatibility
547+
test-functional-compatibility: export PEER_REFS ?= $(if $(PEER_IMAGES),,$(shell git fetch --tags --quiet 2>/dev/null; \
548+
git tag --sort=-v:refname 2>/dev/null \
549+
| grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$$' \
550+
| awk -F. '!seen[$$1"."$$2]++' \
551+
| head -2 | paste -sd' ' -))
547552
test-functional-compatibility: ##@tests Cross-version chat compatibility smoke tests (set PEER_IMAGES or PEER_REFS)
548553
@./scripts/run_functional_tests.sh
549554

scripts/run_functional_tests.sh

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,11 @@ if [[ "${FUNCTIONAL_TESTS_MARKER}" == "compatibility" ]]; then
101101
resolved_peer_images+=("${img}")
102102
done
103103
else
104-
if [[ -z "${PEER_REFS}" ]]; then
105-
git fetch --tags --quiet || true
106-
PEER_REFS="$(git tag --sort=-v:refname | grep -E '^v[0-9]+\.[0-9]+\.[0-9]+$' | head -2 | tr '\n' ' ')"
107-
fi
108104
if [[ -z "${PEER_REFS}" ]]; then
109105
echo -e "${RED}No peer refs available. Set PEER_REFS or PEER_IMAGES.${RST}"
110106
exit 1
111107
fi
108+
# TODO: drop worktree build once released backend images are published to Harbor.
112109
for ref in ${PEER_REFS}; do
113110
ref_slug="$(printf '%s' "${ref}" | tr -c 'A-Za-z0-9_.-' '-' | sed 's/^[-.]*//; s/[-.]*$//')"
114111
peer_image="statusgo-peer-${ref_slug}"

tests-functional/clients/services/wakuext.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,11 @@ def leave_community(self, community_id):
445445
response = self.rpc_request("leaveCommunity", params)
446446
return response
447447

448+
def ban_user_from_community(self, community_id: str, user: str, delete_all_messages: bool = False):
449+
params = [{"communityId": community_id, "user": user, "deleteAllMessages": delete_all_messages}]
450+
response = self.rpc_request("banUserFromCommunity", params)
451+
return response
452+
448453
def set_light_client(self, enabled=True):
449454
params = [{"enabled": enabled}]
450455
response = self.rpc_request("setLightClient", params)

tests-functional/steps/messenger.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -214,6 +214,45 @@ def private_group_message(message_count, private_group_id, sender=None, receiver
214214
)
215215

216216

217+
def add_group_member(admin, group_id, new_member, observers):
218+
start = {observer.public_key: len(observer.received_signals[SignalType.MESSAGES_NEW]) for observer in observers}
219+
response = admin.wakuext_service.add_members_to_group_chat(group_id, [new_member.public_key])
220+
expected_message = get_message_by_content_type(
221+
response,
222+
content_type=MessageContentType.SYSTEM_MESSAGE_CONTENT_PRIVATE_GROUP.value,
223+
message_pattern=f"@{admin.public_key} has added @{new_member.public_key}",
224+
)[0]
225+
for observer in observers:
226+
with observer.expect_signal(SignalType.MESSAGES_NEW, pattern=expected_message.get("id"), timeout=60, start=start[observer.public_key]):
227+
pass
228+
return response
229+
230+
231+
def remove_group_member(admin, group_id, member, observers):
232+
start = {observer.public_key: len(observer.received_signals[SignalType.MESSAGES_NEW]) for observer in observers}
233+
response = admin.wakuext_service.remove_member_from_group_chat(group_id, member.public_key)
234+
expected_message = get_message_by_content_type(
235+
response,
236+
content_type=MessageContentType.SYSTEM_MESSAGE_CONTENT_PRIVATE_GROUP.value,
237+
message_pattern=f"@{member.public_key} left the group",
238+
)[0]
239+
for observer in observers:
240+
with observer.expect_signal(SignalType.MESSAGES_NEW, pattern=expected_message.get("id"), timeout=60, start=start[observer.public_key]):
241+
pass
242+
return response
243+
244+
245+
def leave_group(node, group_id, observers=()):
246+
start = {observer.public_key: len(observer.received_signals[SignalType.MESSAGES_NEW]) for observer in observers}
247+
response = node.wakuext_service.leave_group_chat(group_id, True)
248+
for observer in observers:
249+
with observer.expect_signal(
250+
SignalType.MESSAGES_NEW, pattern=f"@{node.public_key} left the group", timeout=60, start=start[observer.public_key]
251+
):
252+
pass
253+
return response
254+
255+
217256
# --- Community operations ---
218257

219258

@@ -696,6 +735,13 @@ def check_node_joined_community(node, joined, community_id):
696735
assert response.get("joined") is joined
697736

698737

738+
def ban_community_member(owner, community_id, member):
739+
response = owner.wakuext_service.ban_user_from_community(community_id, member.public_key)
740+
communities = [c for c in response.get("communities", []) if c.get("id") == community_id]
741+
assert communities, f"banned community {community_id} not in response"
742+
return response
743+
744+
699745
# --- One-to-one message operations ---
700746

701747

tests-functional/tests/test_chat_compatibility.py

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,40 @@ def vut(self, backend_new_profile):
2323
def peer(self, backend_new_profile, peer_image):
2424
return backend_new_profile("peer", image=peer_image)
2525

26+
@pytest.fixture()
27+
def third(self, backend_new_profile, peer_image):
28+
return backend_new_profile("third", image=peer_image)
29+
2630
def test_one_to_one_compatibility(self, vut, peer):
2731
messenger.make_contacts(vut, peer)
2832
messenger.one_to_one_message(1, sender=vut, receiver=peer)
2933
messenger.one_to_one_message(1, sender=peer, receiver=vut)
3034

31-
def test_group_chat_compatibility(self, vut, peer):
35+
def test_group_chat_compatibility(self, vut, peer, third):
3236
messenger.make_contacts(vut, peer)
37+
messenger.make_contacts(vut, third)
38+
3339
group_id = messenger.join_private_group(admin=vut, member=peer)
34-
messenger.private_group_message(1, group_id, sender=vut, receiver=peer)
40+
messenger.private_group_message(2, group_id, sender=vut, receiver=peer)
41+
42+
messenger.add_group_member(vut, group_id, third, observers=[peer, third])
43+
messenger.private_group_message(2, group_id, sender=vut, receiver=third)
44+
45+
messenger.remove_group_member(vut, group_id, third, observers=[peer])
46+
messenger.private_group_message(2, group_id, sender=peer, receiver=vut)
3547

36-
def test_community_compatibility(self, vut, peer):
48+
messenger.leave_group(peer, group_id, observers=[vut])
49+
50+
def test_community_compatibility(self, vut, peer, third):
3751
community_id = messenger.create_community(vut)
52+
3853
chat_id = messenger.join_community(member=peer, admin=vut, community_id=community_id)
39-
messenger.community_messages(chat_id, 1, sender=vut, receiver=peer)
54+
messenger.community_messages(chat_id, 2, sender=vut, receiver=peer)
55+
56+
messenger.join_community(member=third, admin=vut, community_id=community_id)
57+
messenger.community_messages(chat_id, 2, sender=vut, receiver=third)
58+
59+
messenger.ban_community_member(vut, community_id, third)
60+
messenger.community_messages(chat_id, 2, sender=peer, receiver=vut)
61+
62+
messenger.leave_the_community(peer, community_id)

0 commit comments

Comments
 (0)