XMPP - Extensible Messaging and Presence Protocol
What is XMPP?
XMPP is an open, XML-based communication protocol designed for real-time messaging, presence information, and structured data exchange between clients and servers. Originally developed for instant messaging, it has evolved to support a wide range of applications including IoT, VoIP, and social networking.
Why is XMPP useful?
Real-time communication – Ideal for chat, notifications, and presence updates.
Federated architecture – Like email, anyone can run their own XMPP server.
Extensible – Supports custom features via XMPP Extension Protocols (XEPs).
Secure – Supports TLS encryption and SASL authentication.
Decentralized – No central authority; promotes open communication.
How it works?
Client connects to XMPP server – Using TCP and negotiates TLS and authentication.
Authentication – Performed using SASL (Simple Authentication and Security Layer).
Session established – Client sends <presence/> to indicate availability.
Message exchange – Clients send XML stanzas (message, presence, IQ) through the server.
Session ends – Client sends <presence type=’unavailable’/> and disconnects.
Where is XMPP used?
Instant messaging apps – Like Jabber, Conversations, and formerly Google Talk.
IoT communication – Lightweight and extensible for device-to-device messaging.
Enterprise chat systems – Used in internal communication tools.
Social networking – Supports presence and status updates.
VoIP and video calls – Used as a signaling protocol in some systems.
Which OSI layer does this protocol belong to?
Manages sessions – Maintains long-lived XML streams between client and server.
Protocol-agnostic messaging – Can carry any structured data in XML format.
Stateful communication – Tracks presence, subscriptions, and message delivery status.
Topics in this section,
In this section, you are going to learn
Terminology
Version Info
XMPP |
RFC |
Year |
Core Idea / Contribution |
---|---|---|---|
Version |
|||
Version 1.0 |
|||
RFC 3920 / RFC 3921 |
2004 |
Initial standardization of XMPP for instant messaging and presence. Defined XML streams, message routing, and presence handling. |
|
Version1.0 (Revised) |
|||
RFC 6120 / RFC 6121 |
2011 |
Updated core and instant messaging/presence specifications. Improved stream management, security (TLS/SASL), and extensibility |
|
Address Format Update |
|||
RFC 7622 |
2015 |
Defined the format and handling of XMPP addresses (JIDs), improving internationalization and consistency |
setup
setup
Client Stream Header Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
1 |
Client Stream Header Packet |
Sent by the client to initiate an XML stream |
Variable |
to the server. |
(depends on |
||
attributes) |
|||
<stream:stream> |
Opening tag to initiate stream |
Variable |
|
to |
Server domain |
Variable |
|
xmlns |
XML namespace (usually jabber:client) |
Variable |
|
version |
XMPP version (e.g., 1.0) |
Variable |
|
xml:lang |
Language (optional) |
Variable |
|
Server Stream Header Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
2 |
Server Stream Header Packet |
Sent by the server in response to the clients |
Variable |
stream initiation. |
|||
<stream:stream> |
Opening tag from server |
Variable |
|
from |
Server domain |
Variable |
|
id |
Stream ID |
Variable |
|
version |
XMPP version |
Variable |
|
xmlns |
Namespace |
Variable |
|
SASL Authentication Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
3 |
SASL Authentication Packet |
Sent by the client to authenticate using |
Variable |
|
|||
<auth> |
SASL authentication element |
Variable |
|
mechanism |
Authentication method (e.g., PLAIN) |
Variable |
|
xmlns |
Namespace (urn:ietf:params:xml:ns:xmpp-sasl) |
Variable |
|
Content |
Encoded credentials |
Variable |
|
Resource Binding Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
4 |
Resource Binding Packet |
Sent after authentication to bind a resource |
Variable |
to the session. |
|||
<iq> |
IQ stanza with type=”set” |
Variable |
|
<bind> |
Resource binding request |
Variable |
|
<resource> |
Desired resource name (optional) |
Variable |
|
Presence Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
5 |
Presence Packet |
Indicates client availability or status. |
Variable |
<presence> |
Presence stanza |
Variable |
|
type |
Optional (e.g., “unavailable”) |
Variable |
|
<show> |
Optional (e.g., “away”, “dnd”) |
Variable |
|
<status> |
Optional status message |
Variable |
|
<priority> |
Optional priority value |
Variable |
|
Message Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
6 |
Message Packet |
Used to send chat messages or notifications. |
Variable |
<message> |
Message stanza |
Variable |
|
to |
Recipient JID |
Variable |
|
type |
Message type (e.g., “chat”, “groupchat”) |
Variable |
|
<body> |
Message content |
Variable |
|
<subject> |
Optional subject |
Variable |
|
<thread> |
Optional thread ID |
Variable |
|
IQ Packet
S.No |
Protocol Packets |
Description |
Size(bytes) |
---|---|---|---|
7 |
IQ Packet |
Used for structured queries and responses |
Variable |
(e.g., roster, vCard). |
|||
s.no |
Use Case |
Description |
---|---|---|
1 |
Instant Messaging |
Core use case for real-time chat between users, including presence and typing indicators. |
2 |
Enterprise Communication |
Used in internal messaging systems for secure and federated communication. |
3 |
IoT Messaging |
Lightweight and extensible, suitable for device-to-device communication in IoT networks. |
4 |
Social Networking |
Supports presence, status updates, and messaging in decentralized social platforms. |
5 |
VoIP and Video Signaling |
Used as a signaling protocol in systems like Jingle for initiating and managing calls. |
6 |
Multi-User Chat (MUC) |
Enables group chats with features like moderation, roles, and history. |
7 |
Push Notifications |
Delivers real-time alerts and updates to mobile and web clients. |
8 |
Federated Communication |
Allows communication across different servers, similar to email. |
9 |
Gaming |
Used for real-time messaging and presence in multiplayer games. |
10 |
Secure Messaging Platforms |
Forms the backbone of encrypted messaging apps like Conversations and Snikket. |
S.no |
Feature |
Description |
---|---|---|
1 |
XML-Based Protocol |
Uses XML stanzas for structured, extensible communication. |
2 |
Real-Time Messaging |
Enables instant message delivery with presence and status updates. |
3 |
Presence Information |
Allows users to broadcast availability (online, away, busy, etc.). |
4 |
Federated Architecture |
Like email, supports communication across different servers. |
5 |
Extensibility via XEPs |
Supports custom features through XMPP Extension Protocols (XEPs). |
6 |
Security Support |
Offers TLS for encryption and SASL for authentication. |
7 |
Multi-User Chat (MUC) |
Built-in support for group chats with roles and moderation. |
8 |
Offline Messaging |
Stores messages for delivery when the recipient comes online. |
9 |
Push Notifications |
Can integrate with mobile push services for alerts. |
10 |
Cross-Platform Compatibility |
Works across desktops, mobile devices, and embedded systems. |
XML Based Protocol - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Valid XML Stanza |
Send a well-formed XML stanza |
Stanza parsed successfully |
2 |
Malformed XML |
Send XML with missing closing tag |
Error returned |
3 |
Nested XML Elements |
Send stanza with nested elements |
Elements parsed correctly |
4 |
XML Namespace Declaration |
Include valid XML namespace |
Namespace recognized |
5 |
Invalid Namespace |
Use incorrect namespace format |
Error returned |
6 |
XML Attribute Parsing |
Include attributes in XML stanza |
Attributes parsed correctly |
7 |
Special Characters in XML |
Include &, <, > in XML content |
Characters escaped properly |
8 |
CDATA Section |
Use CDATA to include raw text |
CDATA parsed correctly |
9 |
Unicode Characters in XML |
Send XML with Unicode characters |
Characters displayed correctly |
10 |
XML Comment Handling |
Include XML comments |
Comments ignored during parsing |
11 |
XML Schema Validation |
Validate stanza against XMPP schema |
Validation passed |
12 |
Invalid XML Encoding |
Use unsupported encoding |
Error returned |
13 |
XML with Empty Elements |
Send stanza with empty elements |
Parsed without error |
14 |
XML with Large Payload |
Send large XML content |
Parsed successfully |
15 |
XML with Whitespace Formatting |
Include extra whitespace in XML |
Whitespace ignored |
16 |
XML with Line Breaks |
Include line breaks in XML |
Parsed correctly |
17 |
XML with Multiple Namespaces |
Use multiple namespaces in stanza |
All namespaces recognized |
18 |
XML with Invalid Characters |
Include invalid XML characters |
Error returned |
19 |
XML with Entity References |
Use entity references like & |
Parsed correctly |
20 |
XML with Processing Instructions |
Include XML processing instructions |
Instructions ignored |
21 |
XML with XML Declaration |
Include <?xml version=”1.0”?> |
Declaration parsed correctly |
22 |
XML with UTF-8 Encoding |
Use UTF-8 encoding |
Parsed successfully |
23 |
XML with UTF-16 Encoding |
Use UTF-16 encoding |
Parsed successfully |
24 |
XML with Invalid Root Element |
Use incorrect root element |
Error returned |
25 |
XML with Valid Root Element |
Use <message>, <presence>, or <iq> as root |
Parsed successfully |
26 |
XML with Custom Extension |
Include custom XML extension |
Extension parsed |
27 |
XML with XMPP Error Stanza |
Send error stanza in XML |
Error handled |
28 |
XML with IQ Request |
Send IQ get/set stanza |
Response received |
29 |
XML with Message Stanza |
Send <message> stanza |
Message delivered |
30 |
XML with Presence Stanza |
Send <presence> stanza |
Presence updated |
31 |
XML with Stream Start |
Send stream start XML |
Stream initiated |
32 |
XML with Stream End |
Send stream end XML |
Stream closed |
33 |
XML with TLS Negotiation |
Include TLS negotiation XML |
Secure stream established |
34 |
XML with SASL Authentication |
Include SASL XML stanza |
Authentication successful |
35 |
XML with Resource Binding |
Include resource binding XML |
Resource bound |
36 |
XML with Session Establishment |
Include session establishment XML |
Session started |
37 |
XML with Roster Retrieval |
Include roster retrieval XML |
Roster received |
38 |
XML with Subscription Request |
Include subscription XML stanza |
Subscription confirmed |
39 |
XML with Delivery Receipt Request |
Include delivery receipt XML |
Receipt received |
40 |
XML with Read Receipt Request |
Include read receipt XML |
Read receipt received |
41 |
XML with Ping Extension |
Include ping XML stanza |
Pong received |
42 |
XML with Group Chat Message |
Include group chat XML message |
Message broadcasted |
43 |
XML with Archive Retrieval |
Include archive retrieval XML |
Messages retrieved |
44 |
XML with BOSH Binding |
Include BOSH XML stanza |
Connection established |
45 |
XML with WebSocket Binding |
Include WebSocket XML stanza |
Connection established |
46 |
XML with Reconnect Logic |
Include reconnect XML stanza |
Reconnection successful |
47 |
XML with Timeout Simulation |
Simulate timeout in XML stanza |
Connection closed |
48 |
XML with Server Restart |
Send XML after server restart |
Connection re-established |
49 |
XML with Client Restart |
Send XML after client restart |
Connection re-established |
50 |
XML Logging |
Log XML stanzas during communication |
Logs show correct XML format |
Real Time Messaging - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Send Text Message |
Send a basic text message |
Message delivered instantly |
2 |
Receive Text Message |
Receive a basic text message |
Message appears in real-time |
3 |
Send Message While Offline |
Send message while client is offline |
Message queued and delivered on reconnect |
4 |
Receive Message After Reconnect |
Reconnect and receive missed messages |
All messages received |
5 |
Message Order |
Send multiple messages in sequence |
Messages received in correct order |
6 |
Message Acknowledgment |
Acknowledge message receipt |
Sender sees delivery confirmation |
7 |
Message Read Receipt |
Mark message as read |
Sender sees read status |
8 |
Typing Indicator |
Show typing status while composing message |
Recipient sees “typing…” indicator |
9 |
Presence Online |
User comes online |
Status updates to “online” |
10 |
Presence Offline |
User goes offline |
Status updates to “offline” |
11 |
Presence Away |
User is idle for a period |
Status updates to “away” |
12 |
Presence Do Not Disturb |
User sets DND mode |
Status updates to “Do Not Disturb” |
13 |
Group Messaging |
Send message to group |
All group members receive message |
14 |
Broadcast Messaging |
Send broadcast message |
All users receive message |
15 |
Message with Emoji |
Send message with emoji |
Emoji rendered correctly |
16 |
Message with Attachment |
Send message with file/image |
Attachment delivered and accessible |
17 |
Message with Link Preview |
Send message with URL |
Link preview generated |
18 |
Message with Markdown |
Send message with markdown formatting |
Formatting rendered correctly |
19 |
Message with Unicode |
Send message with Unicode characters |
Characters displayed correctly |
20 |
Message with Special Characters |
Send message with symbols and special characters |
Characters displayed correctly |
21 |
Message Delivery on Slow Network |
Send message on high-latency connection |
Message delivered with delay |
22 |
Message Delivery on Mobile Data |
Send message over mobile network |
Message delivered |
23 |
Message Delivery on Wi-Fi |
Send message over Wi-Fi |
Message delivered |
24 |
Message Delivery on VPN |
Send message over VPN |
Message delivered |
25 |
Message Delivery with Packet Loss |
Simulate packet loss |
Message retransmitted |
26 |
Message Delivery with Retry |
Retry sending failed message |
Message eventually delivered |
27 |
Message Delivery with Encryption |
Send encrypted message |
Message decrypted correctly |
28 |
Message Delivery with Compression |
Send compressed message |
Message decompressed and displayed |
29 |
Message Delivery with Delay |
Simulate server delay |
Message delivered after delay |
30 |
Message Delivery with Timeout |
Simulate timeout |
Message marked as failed |
31 |
Message Sync Across Devices |
Send message from one device |
Message appears on all devices |
32 |
Message History |
Retrieve past messages |
History loaded correctly |
33 |
Message Deletion |
Delete sent message |
Message removed from both ends |
34 |
Message Edit |
Edit sent message |
Updated message displayed |
35 |
Message Reaction |
React to a message |
Reaction displayed |
36 |
Message Notification |
Receive push notification for new message |
Notification received |
37 |
Message Notification Mute |
Mute notifications |
No notification received |
38 |
Message Notification Custom Sound |
Set custom notification sound |
Custom sound played |
39 |
Message with Location |
Send location in message |
Location rendered on map |
40 |
Message with Contact Card |
Send contact card |
Contact details displayed |
41 |
Message with Voice Note |
Send voice message |
Audio playable |
42 |
Message with Video |
Send video message |
Video playable |
43 |
Message with Status Update |
Send message with status change |
Status updated in real-time |
44 |
Message with Mention |
Mention user in group message |
Mention highlighted |
45 |
Message with Thread |
Reply to a message in thread |
Threaded view displayed |
46 |
Message with Quote |
Quote previous message |
Quoted message shown |
47 |
Message with Forward |
Forward message to another user |
Message delivered to new recipient |
48 |
Message with Star/Pin |
Star or pin important message |
Message marked accordingly |
49 |
Message with Expiry |
Send message with expiry time |
Message auto-deletes after expiry |
50 |
Message with Delivery Report |
Request delivery report |
Report shows delivery status |
Presence Information - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Send Available Presence |
Send <presence> stanza with status “available” |
Presence shown as online |
2 |
Send Away Presence |
Send <presence> stanza with status “away” |
Presence shown as away |
3 |
Send Busy Presence |
Send <presence> stanza with status “dnd” (do not disturb) |
Presence shown as busy |
4 |
Send Offline Presence |
Send <presence> stanza with type “unavailable” |
Presence shown as offline |
5 |
Receive Presence Update |
Receive presence stanza from contact |
UI updates contact status |
6 |
Broadcast Presence to All |
Send presence to all contacts |
All contacts receive update |
7 |
Presence with Status Message |
Include custom status message in presence |
Message displayed to contacts |
8 |
Presence with Priority |
Include priority value in presence |
Priority respected in routing |
9 |
Presence with Invalid Type |
Send presence with invalid type |
Error returned |
10 |
Presence with Invalid Show Value |
Use unsupported show value |
Ignored or error returned |
11 |
Presence Subscription Request |
Send subscription request to contact |
Contact receives request |
12 |
Presence Subscription Approval |
Approve subscription request |
Subscription confirmed |
13 |
Presence Subscription Denial |
Deny subscription request |
Subscription rejected |
14 |
Presence Unsubscribe Request |
Send unsubscribe request |
Contact removed from roster |
15 |
Presence Probe |
Send presence probe to contact |
Contact responds with current presence |
16 |
Presence on Login |
Send presence automatically on login |
Presence broadcasted |
17 |
Presence on Logout |
Send unavailable presence on logout |
Presence updated to offline |
18 |
Presence on Timeout |
Send unavailable presence on timeout |
Presence updated to offline |
19 |
Presence on Disconnect |
Send unavailable presence on disconnect |
Presence updated to offline |
20 |
Presence with Multiple Resources |
Send presence from multiple devices |
All resources show correct status |
21 |
Presence Priority Conflict |
Resolve conflict using priority values |
Highest priority resource selected |
22 |
Presence with Custom XML Extension |
Include custom XML in presence stanza |
Extension parsed correctly |
23 |
Presence with Unicode Status |
Use Unicode characters in status message |
Displayed correctly |
24 |
Presence with HTML Status |
Include HTML in status message |
HTML ignored or sanitized |
25 |
Presence with Long Status Message |
Send long status message |
Message truncated or displayed fully |
26 |
Presence with Empty Status |
Send presence with no status message |
Default status shown |
27 |
Presence with Invalid XML |
Send malformed XML in presence stanza |
Error returned |
28 |
Presence with Timestamp |
Include timestamp in presence stanza |
Timestamp parsed correctly |
29 |
Presence with Location Info |
Include location data in presence |
Location displayed if supported |
30 |
Presence with Mood Info |
Include mood extension in presence |
Mood displayed if supported |
31 |
Presence with Activity Info |
Include activity extension in presence |
Activity displayed if supported |
32 |
Presence with Avatar Info |
Include avatar hash in presence |
Avatar updated |
33 |
Presence with Device Info |
Include device info in presence |
Device recognized |
34 |
Presence with Network Info |
Include network type in presence |
Network info parsed |
35 |
Presence with Custom Show Value |
Use custom show value |
Ignored or displayed as-is |
36 |
Presence with Invalid Priority |
Use non-numeric priority |
Error returned |
37 |
Presence with Negative Priority |
Use negative priority value |
Priority respected |
38 |
Presence with High Priority |
Use high priority value |
Priority respected |
39 |
Presence with Duplicate Stanza |
Send duplicate presence stanzas |
Last one overrides previous |
40 |
Presence with Delayed Delivery |
Simulate delayed presence delivery |
Presence eventually updated |
41 |
Presence with Packet Loss |
Simulate packet loss during presence broadcast |
Presence not received |
42 |
Presence with Reconnect Logic |
Reconnect and resend presence after failure |
Presence updated |
43 |
Presence with Logging Enabled |
Log presence stanzas |
Logs show correct sequence |
44 |
Presence with Monitoring Tool |
Monitor presence using external tool |
Presence visible in tool |
45 |
Presence with Server Restart |
Send presence after server restart |
Presence re-broadcasted |
46 |
Presence with Client Restart |
Send presence after client restart |
Presence re-broadcasted |
47 |
Presence with BOSH Binding |
Send presence over BOSH |
Presence delivered |
48 |
Presence with WebSocket Binding |
Send presence over WebSocket |
Presence delivered |
49 |
Presence with Group Chat Join |
Send presence to group chat room |
Room members see presence |
50 |
Presence with Group Chat Leave |
Send unavailable presence to group chat room |
Room members see departure |
Federated Architecture - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Send Available Presence |
Send <presence> stanza with status “available” |
Presence shown as online |
2 |
Send Away Presence |
Send <presence> stanza with status “away” |
Presence shown as away |
3 |
Send Busy Presence |
Send <presence> stanza with status “dnd” |
Presence shown as busy |
4 |
Send Offline Presence |
Send <presence> stanza with type “unavailable” |
Presence shown as offline |
5 |
Receive Presence Update |
Receive presence stanza from contact |
UI updates contact status |
6 |
Broadcast Presence to All |
Send presence to all contacts |
All contacts receive update |
7 |
Presence with Status Message |
Include custom status message in presence |
Message displayed to contacts |
8 |
Presence with Priority |
Include priority value in presence |
Priority respected in routing |
9 |
Presence with Invalid Type |
Send presence with invalid type |
Error returned |
10 |
Presence with Invalid Show Value |
Use unsupported show value |
Ignored or error returned |
11 |
Presence Subscription Request |
Send subscription request to contact |
Contact receives request |
12 |
Presence Subscription Approval |
Approve subscription request |
Subscription confirmed |
13 |
Presence Subscription Denial |
Deny subscription request |
Subscription rejected |
14 |
Presence Unsubscribe Request |
Send unsubscribe request |
Contact removed from roster |
15 |
Presence Probe |
Send presence probe to contact |
Contact responds with current presence |
16 |
Presence on Login |
Send presence automatically on login |
Presence broadcasted |
17 |
Presence on Logout |
Send unavailable presence on logout |
Presence updated to offline |
18 |
Presence on Timeout |
Send unavailable presence on timeout |
Presence updated to offline |
19 |
Presence on Disconnect |
Send unavailable presence on disconnect |
Presence updated to offline |
20 |
Presence with Multiple Resources |
Send presence from multiple devices |
All resources show correct status |
21 |
Presence Priority Conflict |
Resolve conflict using priority values |
Highest priority resource selected |
22 |
Presence with Custom XML Extension |
Include custom XML in presence stanza |
Extension parsed correctly |
23 |
Presence with Unicode Status |
Use Unicode characters in status message |
Displayed correctly |
24 |
Presence with HTML Status |
Include HTML in status message |
HTML ignored or sanitized |
25 |
Presence with Long Status Message |
Send long status message |
Message truncated or displayed fully |
26 |
Presence with Empty Status |
Send presence with no status message |
Default status shown |
27 |
Presence with Invalid XML |
Send malformed XML in presence stanza |
Error returned |
28 |
Presence with Timestamp |
Include timestamp in presence stanza |
Timestamp parsed correctly |
29 |
Presence with Location Info |
Include location data in presence |
Location displayed if supported |
30 |
Presence with Mood Info |
Include mood extension in presence |
Mood displayed if supported |
31 |
Presence with Activity Info |
Include activity extension in presence |
Activity displayed if supported |
32 |
Presence with Avatar Info |
Include avatar hash in presence |
Avatar updated |
33 |
Presence with Device Info |
Include device info in presence |
Device recognized |
34 |
Presence with Network Info |
Include network type in presence |
Network info parsed |
35 |
Presence with Custom Show Value |
Use custom show value |
Ignored or displayed as-is |
36 |
Presence with Invalid Priority |
Use non-numeric priority |
Error returned |
37 |
Presence with Negative Priority |
Use negative priority value |
Priority respected |
38 |
Presence with High Priority |
Use high priority value |
Priority respected |
39 |
Presence with Duplicate Stanza |
Send duplicate presence stanzas |
Last one overrides previous |
40 |
Presence with Delayed Delivery |
Simulate delayed presence delivery |
Presence eventually updated |
41 |
Presence with Packet Loss |
Simulate packet loss during presence broadcast |
Presence not received |
42 |
Presence with Reconnect Logic |
Reconnect and resend presence after failure |
Presence updated |
43 |
Presence with Logging Enabled |
Log presence stanzas |
Logs show correct sequence |
44 |
Presence with Monitoring Tool |
Monitor presence using external tool |
Presence visible in tool |
45 |
Presence with Server Restart |
Send presence after server restart |
Presence re-broadcasted |
46 |
Presence with Client Restart |
Send presence after client restart |
Presence re-broadcasted |
47 |
Presence with BOSH Binding |
Send presence over BOSH |
Presence delivered |
48 |
Presence with WebSocket Binding |
Send presence over WebSocket |
Presence delivered |
49 |
Presence with Group Chat Join |
Send presence to group chat room |
Room members see presence |
50 |
Presence with Group Chat Leave |
Send unavailable presence to group chat room |
Room members see departure |
Extensiblity via XEPs - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Load Supported XEPs |
Retrieve list of supported XEPs from server |
List of XEPs returned |
2 |
Use XEP-0085 (Chat State Notifications) |
Send chat state (e.g., composing, paused) |
State displayed to recipient |
3 |
Use XEP-0184 (Message Delivery Receipts) |
Request and receive delivery receipt |
Receipt received on delivery |
4 |
Use XEP-0280 (Message Carbons) |
Enable message carbons for multi-device sync |
Messages synced across devices |
5 |
Use XEP-0313 (Message Archive Mgmt) |
Query archived messages |
Archived messages retrieved |
6 |
Use XEP-0045 (Multi-User Chat) |
Join and interact in group chat |
Group chat functions correctly |
7 |
Use XEP-0060 (PubSub) |
Publish and subscribe to nodes |
Events published and received |
8 |
Use XEP-0363 (HTTP File Upload) |
Upload file via HTTP |
File uploaded and link shared |
9 |
Use XEP-0077 (In-Band Registration) |
Register new account via XMPP client |
Account created successfully |
10 |
Use XEP-0191 (Blocking Command) |
Block a contact |
Contact blocked and cannot send messages |
11 |
Use XEP-0352 (Client State Indication) |
Indicate client active/inactive state |
Server adjusts traffic accordingly |
12 |
Use XEP-0357 (Push Notifications) |
Enable push notifications |
Notifications received on mobile |
13 |
Use XEP-0424 (Message Retraction) |
Retract a previously sent message |
Message removed from recipient’s view |
14 |
Use XEP-0428 (Stanza Content Encryption) |
Send encrypted stanza |
Stanza decrypted correctly by recipient |
15 |
Use XEP-0384 (OMEMO Encryption) |
Send end-to-end encrypted message |
Message decrypted only by intended recipient |
16 |
Use XEP-0398 (User Avatar to vCard) |
Sync avatar with vCard |
Avatar updated across clients |
17 |
Use XEP-0156 (Server Discovery) |
Discover alternate connection methods |
Alternate methods listed |
18 |
Use XEP-0054 (vCard-temp) |
Retrieve user profile information |
vCard data displayed |
19 |
Use XEP-0092 (Software Version) |
Query client software version |
Version info returned |
20 |
Use XEP-0012 (Last Activity) |
Query last activity of a contact |
Last active time returned |
21 |
Use XEP-0199 (XMPP Ping) |
Ping server or contact |
Pong response received |
22 |
Use XEP-0203 (Delayed Delivery) |
Handle delayed message with timestamp |
Message shown with correct timestamp |
23 |
Use XEP-0172 (User Nickname) |
Set and display user nickname |
Nickname shown in UI |
24 |
Use XEP-0048 (Bookmarks) |
Save and retrieve chat room bookmarks |
Bookmarks persist across sessions |
25 |
Use XEP-0380 (Explicit Message Encryption) |
Send explicitly encrypted message |
Message decrypted correctly |
26 |
Use XEP-0422 (Message Fastening) |
Attach metadata to messages |
Metadata displayed correctly |
27 |
Use XEP-0425 (Message Moderation) |
Moderate messages in group chat |
Moderation actions enforced |
28 |
Use XEP-0410 (MUC Self-Ping) |
Detect ghost presence in group chat |
Ghost presence resolved |
29 |
Use XEP-0402 (Bookmarks Conversion) |
Convert legacy bookmarks to new format |
Bookmarks migrated successfully |
30 |
Use Custom XEP |
Implement and test a custom extension |
Custom feature works as intended |
31 |
Use XEP-0369 (MIX - Modern Group Chat) |
Join a MIX-enabled group chat |
Messages and presence handled correctly |
32 |
Use XEP-0421 (Anonymous Usage Stats) |
Send anonymous usage statistics |
Stats sent and acknowledged |
33 |
Use XEP-0400 (Quick Response) |
Send quick reply options in messages |
Recipient sees and selects options |
34 |
Use XEP-0382 (Spoiler Messages) |
Send message with spoiler tag |
Spoiler hidden until revealed |
35 |
Use XEP-0377 (Spam Reporting) |
Report spam message |
Report acknowledged |
36 |
Use XEP-0373 (OpenPGP for XMPP) |
Send OpenPGP encrypted message |
Message decrypted by recipient |
37 |
Use XEP-0374 (OpenPGP for XMPP: Instant Messaging) |
Send OpenPGP IM message |
Message securely delivered |
38 |
Use XEP-0368 (SRV records for XMPP over TLS) |
Connect using direct TLS via SRV records |
Connection established |
39 |
Use XEP-0359 (Stanza IDs) |
Assign unique IDs to stanzas |
IDs used for tracking and receipts |
40 |
Use XEP-0346 (Form Discovery and Publishing) |
Discover and fill out forms |
Form submitted successfully |
41 |
Use XEP-0343 (Signaling WebRTC) |
Initiate WebRTC call via XMPP |
Call setup initiated |
42 |
Use XEP-0334 (Message Processing Hints) |
Add hints like “no-store”, “no-copy” |
Hints respected by server |
43 |
Use XEP-0329 (File Info Sharing) |
Share file metadata |
Metadata displayed correctly |
44 |
Use XEP-0317 (Hats in MUC) |
Assign roles or hats in group chat |
Hats displayed in room |
45 |
Use XEP-0308 (Last Message Correction) |
Correct a previously sent message |
Message updated in UI |
46 |
Use XEP-0297 (Stanza Forwarding) |
Forward a message with original metadata |
Metadata preserved |
47 |
Use XEP-0292 (vCard4 Over XMPP) |
Use vCard4 format for profile |
Profile displayed correctly |
48 |
Use XEP-0277 (Microblogging over XMPP) |
Post microblog entry |
Entry published to followers |
49 |
Use XEP-0258 (Security Labels) |
Add security classification to messages |
Labels displayed and enforced |
50 |
Use XEP-0249 (Direct MUC Invitations) |
Invite user to group chat via direct message |
User receives and joins room |
Security Support - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
TLS Handshake Success |
Establish TLS connection with valid certificate |
Secure connection established |
2 |
TLS Handshake Failure |
Attempt TLS with invalid certificate |
Connection rejected |
3 |
TLS with Self-Signed Certificate |
Connect using self-signed certificate |
Warning or rejection based on policy |
4 |
TLS with Expired Certificate |
Connect using expired certificate |
Connection rejected |
5 |
TLS with Revoked Certificate |
Connect using revoked certificate |
Connection rejected |
6 |
TLS with Weak Cipher Suite |
Attempt connection with deprecated cipher |
Connection rejected or downgraded |
7 |
TLS with Strong Cipher Suite |
Use modern, secure cipher suite |
Connection accepted |
8 |
TLS Version Negotiation |
Negotiate highest supported TLS version |
TLS 1.3 or 1.2 used |
9 |
TLS Downgrade Attack Prevention |
Attempt downgrade to older TLS version |
Downgrade prevented |
10 |
TLS Session Resumption |
Reconnect using session resumption |
Session resumed securely |
11 |
SASL PLAIN Authentication |
Authenticate using SASL PLAIN |
Login successful over TLS |
12 |
SASL SCRAM-SHA-1 Authentication |
Authenticate using SCRAM-SHA-1 |
Login successful |
13 |
SASL SCRAM-SHA-256 Authentication |
Authenticate using SCRAM-SHA-256 |
Login successful |
14 |
SASL EXTERNAL Authentication |
Authenticate using client certificate |
Login successful |
15 |
SASL Anonymous Authentication |
Attempt anonymous login |
Access granted with limited permissions |
16 |
SASL Failure Handling |
Provide wrong credentials |
Authentication fails |
17 |
SASL Mechanism Negotiation |
Server offers supported mechanisms |
Client selects compatible method |
18 |
SASL Replay Attack Prevention |
Replay old authentication message |
Authentication rejected |
19 |
SASL Channel Binding |
Use channel binding with TLS |
Authentication succeeds with binding |
20 |
Encrypted Message Transmission |
Send message over TLS |
Message encrypted in transit |
21 |
Encrypted File Transfer |
Transfer file over TLS |
File encrypted in transit |
22 |
Encrypted Presence Updates |
Send presence over TLS |
Presence encrypted |
23 |
Encrypted Group Chat |
Join group chat over TLS |
Messages encrypted |
24 |
Certificate Pinning |
Use pinned certificate |
Connection accepted only if match |
25 |
Certificate Chain Validation |
Validate full certificate chain |
Connection accepted if valid |
26 |
Mutual TLS Authentication |
Require client certificate |
Connection succeeds with valid cert |
27 |
SASL Authentication Logging |
Log authentication attempts |
Logs show correct status |
28 |
TLS Certificate Rotation |
Rotate server certificate |
Clients reconnect successfully |
29 |
TLS with DNSSEC |
Use DNSSEC to verify server identity |
Connection verified |
30 |
SASL with OAuth2 |
Authenticate using OAuth2 token |
Login successful |
31 |
SASL with JWT |
Authenticate using JSON Web Token |
Login successful |
32 |
SASL with Kerberos |
Authenticate using Kerberos |
Login successful |
33 |
SASL with GSSAPI |
Authenticate using GSSAPI |
Login successful |
34 |
SASL with SAML |
Authenticate using SAML assertion |
Login successful |
35 |
TLS Certificate Expiry Warning |
Notify admin before cert expiry |
Alert generated |
36 |
TLS with OCSP Stapling |
Validate certificate revocation via OCSP |
OCSP response verified |
37 |
TLS with HSTS |
Enforce HTTPS-only connections |
Insecure connections blocked |
38 |
SASL Brute Force Protection |
Detect repeated failed logins |
IP temporarily blocked |
39 |
SASL Rate Limiting |
Limit login attempts per user/IP |
Excess attempts delayed or blocked |
40 |
TLS with Perfect Forward Secrecy |
Use ephemeral keys for session encryption |
Session keys not reused |
41 |
SASL with Multi-Factor Authentication |
Require second factor during login |
MFA enforced |
42 |
TLS with Client Fingerprint Verification |
Match client TLS fingerprint |
Connection accepted if match |
43 |
SASL with Account Lockout |
Lock account after repeated failures |
Login blocked temporarily |
44 |
TLS with IPv6 |
Establish TLS connection over IPv6 |
Secure connection established |
45 |
SASL with Federated Identity Provider |
Authenticate via external IdP |
Login successful |
46 |
TLS with SNI (Server Name Indication) |
Use SNI to select correct certificate |
Correct cert served |
47 |
TLS with ALPN (Protocol Negotiation) |
Negotiate protocol (e.g., XMPP, HTTP) |
Correct protocol selected |
48 |
SASL with Session Timeout |
Expire session after inactivity |
Re-authentication required |
49 |
TLS with Compression Disabled |
Ensure compression is disabled (CRIME prevention) |
Compression not used |
50 |
TLS with Logging and Audit Trail |
Log TLS session details securely |
Logs available for audit |
Multiuser chat - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Create MUC Room |
Create a new group chat room |
Room created successfully |
2 |
Join MUC Room |
Join an existing MUC room |
User joins room and sees messages |
3 |
Leave MUC Room |
Leave a MUC room |
User exits room and presence is updated |
4 |
Send Message in MUC |
Send message to group chat |
Message visible to all participants |
5 |
Receive Message in MUC |
Receive message from another participant |
Message displayed in chat window |
6 |
Set Room Subject |
Change the subject/topic of the room |
Subject updated for all users |
7 |
Assign Moderator Role |
Grant moderator role to a participant |
User gains moderator privileges |
8 |
Revoke Moderator Role |
Remove moderator role from a participant |
User loses moderator privileges |
9 |
Assign Admin Role |
Grant admin role to a participant |
User gains admin privileges |
10 |
Ban User from Room |
Ban a user from the room |
User is removed and cannot rejoin |
11 |
Kick User from Room |
Kick a user from the room |
User is removed but can rejoin |
12 |
Set Room to Members-Only |
Restrict room to approved members |
Only members can join |
13 |
Invite User to Room |
Send invitation to join room |
User receives and accepts invitation |
14 |
Decline Room Invitation |
Decline an invitation |
Invitation marked as declined |
15 |
Set Room to Persistent |
Make room persistent across server restarts |
Room remains available |
16 |
Set Room to Temporary |
Make room temporary |
Room deleted after last user leaves |
17 |
Enable Room Logging |
Enable message archiving |
Messages logged on server |
18 |
Disable Room Logging |
Disable message archiving |
Messages not stored |
19 |
Enable Room Password |
Set a password for room entry |
Only users with password can join |
20 |
Change Room Password |
Update room password |
New password required for entry |
21 |
Join Room with Password |
Join password-protected room |
Access granted with correct password |
22 |
Join Room with Wrong Password |
Attempt to join with incorrect password |
Access denied |
23 |
Set Room to Public |
Make room discoverable |
Room appears in search results |
24 |
Set Room to Hidden |
Hide room from discovery |
Room not listed in search |
25 |
Discover Available Rooms |
Query server for public rooms |
List of rooms returned |
26 |
Change User Nickname |
Change nickname in room |
Nickname updated |
27 |
Prevent Nickname Change |
Restrict nickname changes |
Change denied |
28 |
Set Room to Moderated |
Only moderators can speak |
Non-moderators cannot send messages |
29 |
Set Room to Unmoderated |
All users can speak |
Messages allowed from all participants |
30 |
Enable Voice Request |
Require voice request to speak |
Users must request permission |
31 |
Grant Voice to User |
Allow user to speak in moderated room |
User can send messages |
32 |
Revoke Voice from User |
Remove speaking privileges |
User cannot send messages |
33 |
Enable Room History |
Show message history to new users |
History visible on join |
34 |
Disable Room History |
Hide message history from new users |
No history shown |
35 |
Set Max Users Limit |
Limit number of participants |
New joins blocked after limit |
36 |
Exceed Max Users Limit |
Attempt to join full room |
Access denied |
37 |
Enable Room Configuration Form |
Allow room settings to be edited |
Form available to admins |
38 |
Submit Room Configuration |
Change room settings via form |
Settings updated |
39 |
Lock Room |
Prevent new users from joining temporarily |
Join requests denied |
40 |
Unlock Room |
Allow new users to join again |
Join requests accepted |
41 |
Set Room Language |
Define default language for room |
Language tag applied |
42 |
Send Private Message in MUC |
Send private message to participant |
Message delivered privately |
43 |
Block Private Messages in MUC |
Prevent private messaging |
Messages blocked |
44 |
Enable Room Notifications |
Notify users of new messages |
Notifications received |
45 |
Disable Room Notifications |
Mute room notifications |
No alerts shown |
46 |
Rejoin Room After Disconnect |
Automatically rejoin after reconnect |
User rejoins room |
47 |
Room Presence Updates |
Receive presence updates of participants |
UI reflects join/leave events |
48 |
Room Role Persistence |
Retain roles across sessions |
Roles restored on rejoin |
49 |
Room Affiliation Management |
Manage affiliations (owner, admin, member) |
Affiliations updated |
50 |
Room Message Rate Limiting |
Limit message rate per user |
Excess messages throttled |
offline messaging - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Send Message to Offline User |
Send message while recipient is offline |
Message stored on server |
2 |
Receive Message After Login |
Recipient logs in after being offline |
Stored message delivered |
3 |
Multiple Messages to Offline User |
Send multiple messages while user is offline |
All messages delivered in order |
4 |
Offline Message with Timestamp |
Include timestamp in stored message |
Timestamp preserved |
5 |
Offline Message with Delay Tag |
Use XEP-0203 delay tag |
Delay tag parsed correctly |
6 |
Offline Message with Unicode |
Send message with Unicode characters |
Message displayed correctly |
7 |
Offline Message with HTML Content |
Send message with HTML formatting |
HTML sanitized or rendered |
8 |
Offline Message with Attachments |
Send file or media while recipient is offline |
File delivered after login |
9 |
Offline Message with Encryption |
Send encrypted message while offline |
Message decrypted after delivery |
10 |
Offline Message with OMEMO |
Use OMEMO encryption for offline message |
Message decrypted on supported client |
11 |
Offline Message with PGP |
Use PGP encryption for offline message |
Message decrypted after login |
12 |
Offline Message with Priority |
Assign priority to offline message |
Priority respected in delivery |
13 |
Offline Message with Expiry |
Set expiry time for offline message |
Message discarded if expired |
14 |
Offline Message to Multiple Recipients |
Send to multiple offline users |
All receive messages after login |
15 |
Offline Message to Group Chat |
Send message to MUC while offline |
Message not delivered (MUC doesn’t store offline) |
16 |
Offline Message to Federated Domain |
Send message to user on another server |
Message stored and forwarded |
17 |
Offline Message from Federated Domain |
Receive message from another server while offline |
Message delivered after login |
18 |
Offline Message with Presence Change |
Send message just before user logs in |
Message still delivered |
19 |
Offline Message with Roster Update |
Send message during roster change |
Message delivered correctly |
20 |
Offline Message with Status Message |
Include status or mood in message |
Status displayed if supported |
21 |
Offline Message with Custom Extension |
Include custom XML in message |
Extension parsed or ignored |
22 |
Offline Message with Invalid XML |
Send malformed message |
Error logged or message discarded |
23 |
Offline Message with Logging Enabled |
Log offline message on server |
Message appears in logs |
24 |
Offline Message with Delivery Receipt |
Request delivery receipt |
Receipt sent after delivery |
25 |
Offline Message with Read Receipt |
Request read receipt |
Receipt sent after user reads |
26 |
Offline Message with Message ID |
Assign unique ID to message |
ID preserved and trackable |
27 |
Offline Message with Duplicate ID |
Send duplicate message ID |
Duplicate ignored or flagged |
28 |
Offline Message with Server Restart |
Server restarts before delivery |
Message still delivered |
29 |
Offline Message with Client Restart |
Client restarts before receiving message |
Message delivered after reconnect |
30 |
Offline Message with Network Failure |
Network drops during send |
Message stored and retried |
31 |
Offline Message with Storage Quota |
Exceed server storage quota |
Message rejected or delayed |
32 |
Offline Message with Large Payload |
Send large message while offline |
Message stored or truncated |
33 |
Offline Message with Rate Limiting |
Send many messages quickly |
Rate limits enforced |
34 |
Offline Message with Spam Detection |
Send spam-like message |
Message flagged or blocked |
35 |
Offline Message with Account Suspension |
Send to suspended account |
Message rejected |
36 |
Offline Message with Account Deletion |
Send to deleted account |
Message discarded |
37 |
Offline Message with Presence Probe |
Probe presence before sending |
Message stored if offline |
38 |
Offline Message with Auto-Reply |
Receive auto-reply from offline user |
Auto-reply sent if configured |
39 |
Offline Message with Push Notification |
Trigger push notification |
Notification sent to device |
40 |
Offline Message with Message Archive |
Store message in archive (XEP-0313) |
Message retrievable from archive |
41 |
Offline Message with Message Carbons |
Sync message to all devices |
Message delivered to all devices after login |
42 |
Offline Message with Message Fastening |
Attach metadata to offline message |
Metadata preserved |
43 |
Offline Message with Spoiler Tag |
Send spoiler message |
Spoiler hidden until revealed |
44 |
Offline Message with Quick Reply Options |
Include quick reply buttons |
Options shown after login |
45 |
Offline Message with Nickname Change |
Send message after nickname change |
Message delivered with updated nickname |
46 |
Offline Message with Avatar Update |
Send message after avatar change |
Avatar shown correctly |
47 |
Offline Message with Timezone Info |
Include sender timezone |
Timezone displayed if supported |
48 |
Offline Message with Language Tag |
Include language tag in message |
Language displayed correctly |
49 |
Offline Message with Server Policy Change |
Change server policy during offline period |
Message handled per new policy |
50 |
Offline Message with Delayed Delivery |
Simulate delayed delivery |
Message eventually delivered |
Push Notifications - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Register Device for Push |
Register mobile device with push service |
Device token stored |
2 |
Unregister Device |
Remove device from push service |
Token deleted |
3 |
Send Push Notification |
Trigger push for incoming message |
Notification received on device |
4 |
Push on Message Delivery |
Send push when message is delivered |
Notification triggered |
5 |
Push on Message Receipt |
Send push when message is read |
Notification triggered |
6 |
Push on Presence Change |
Notify when contact comes online |
Notification received |
7 |
Push on Group Chat Mention |
Notify when user is mentioned in group chat |
Mention notification received |
8 |
Push on Direct Mention |
Notify when user is mentioned in direct message |
Notification received |
9 |
Push on File Transfer |
Notify when file is received |
Notification includes file info |
10 |
Push on Offline Message |
Notify when offline message is delivered |
Notification triggered |
11 |
Push with Message Preview |
Include message snippet in notification |
Preview displayed |
12 |
Push with Sender Info |
Include sender name in notification |
Sender shown |
13 |
Push with Custom Sound |
Use custom sound for notification |
Sound played |
14 |
Push with Badge Count |
Update app badge count |
Badge updated |
15 |
Push with Silent Mode |
Send silent notification |
No alert shown, app updated |
16 |
Push with Priority |
Send high-priority notification |
Notification shown immediately |
17 |
Push with Expiry Time |
Set expiry time for notification |
Notification discarded if expired |
18 |
Push with Localization |
Send localized message |
Message shown in correct language |
19 |
Push with Action Buttons |
Include reply or open buttons |
Buttons functional |
20 |
Push with Rich Media |
Include image or media in notification |
Media displayed |
21 |
Push with Encryption |
Encrypt notification payload |
Decrypted on client |
22 |
Push with Token Rotation |
Rotate device token |
New token registered |
23 |
Push with Invalid Token |
Send push to invalid token |
Error logged |
24 |
Push with Expired Token |
Send push to expired token |
Notification not delivered |
25 |
Push with Multiple Devices |
Send push to all registered devices |
All devices receive notification |
26 |
Push with Device Filtering |
Send push to specific device |
Only selected device receives |
27 |
Push with App in Background |
App is in background |
Notification shown |
28 |
Push with App in Foreground |
App is active |
Notification handled silently |
29 |
Push with App Closed |
App is not running |
Notification wakes app |
30 |
Push with Network Delay |
Simulate network delay |
Notification eventually received |
31 |
Push with Packet Loss |
Simulate packet loss |
Notification retried |
32 |
Push with Server Restart |
Restart server before push |
Notification still delivered |
33 |
Push with Client Restart |
Restart client before push |
Notification received after restart |
34 |
Push with Logging Enabled |
Log push events |
Logs show correct sequence |
35 |
Push with Monitoring Tool |
Monitor push delivery externally |
Delivery confirmed |
36 |
Push with Delivery Receipt |
Confirm push delivery |
Receipt logged |
37 |
Push with Read Receipt |
Confirm notification read |
Read status updated |
38 |
Push with Retry Logic |
Retry failed push |
Notification eventually delivered |
39 |
Push with Rate Limiting |
Limit number of pushes per user |
Excess pushes throttled |
40 |
Push with Throttling |
Throttle push during high load |
Notifications delayed but delivered |
41 |
Push with Do Not Disturb Mode |
User has DND enabled |
Notification suppressed |
42 |
Push with Time-Based Rules |
Send push only during specific hours |
Notification sent within allowed time |
43 |
Push with Location-Based Rules |
Send push based on user location |
Notification sent if location matches |
44 |
Push with Federated Server |
Send push from federated domain |
Notification delivered across domains |
45 |
Push with Federated Client |
Receive push on federated client |
Notification received |
46 |
Push with Token Expiry Notification |
Notify user of token expiry |
Alert shown |
47 |
Push with App Update |
Send push after app update |
Notification received |
48 |
Push with OS-Level Restrictions |
Handle OS restrictions (e.g., battery saver) |
Notification delivered or queued |
49 |
Push with User Preferences |
Respect user notification settings |
Notification sent or suppressed |
50 |
Push with Server Policy Change |
Change push policy during session |
Notification handled per new policy |
cross platform compatibility - Testcases
# |
Test Case |
Description |
Expected Result |
---|---|---|---|
1 |
Login on Desktop |
Authenticate on desktop client |
Login successful |
2 |
Login on Mobile |
Authenticate on mobile app |
Login successful |
3 |
Login on Embedded Device |
Authenticate on embedded system (e.g., IoT) |
Login successful |
4 |
Send Message from Desktop |
Send message from desktop |
Message delivered to all devices |
5 |
Send Message from Mobile |
Send message from mobile |
Message delivered to all devices |
6 |
Send Message from Embedded Device |
Send message from embedded system |
Message delivered to all devices |
7 |
Receive Message on Desktop |
Receive message on desktop |
Message displayed correctly |
8 |
Receive Message on Mobile |
Receive message on mobile |
Message displayed correctly |
9 |
Receive Message on Embedded Device |
Receive message on embedded system |
Message displayed or logged |
10 |
Presence Sync Across Devices |
Update presence on one device |
Reflected on all devices |
11 |
Roster Sync Across Devices |
Update contact list on one device |
Synced across all platforms |
12 |
Group Chat on Desktop |
Join and participate in MUC on desktop |
Full functionality available |
13 |
Group Chat on Mobile |
Join and participate in MUC on mobile |
Full functionality available |
14 |
Group Chat on Embedded Device |
Join MUC from embedded system |
Basic participation supported |
15 |
File Transfer on Desktop |
Send/receive file |
File handled correctly |
16 |
File Transfer on Mobile |
Send/receive file |
File handled correctly |
17 |
File Transfer on Embedded Device |
Send/receive file |
File handled or logged |
18 |
Push Notification on Mobile |
Receive push alert |
Notification received |
19 |
Message Archive Access on Desktop |
Access archived messages |
Archive displayed |
20 |
Message Archive Access on Mobile |
Access archived messages |
Archive displayed |
21 |
Message Archive Access on Embedded Device |
Access archived messages |
Archive accessible or limited |
22 |
Encryption Support on Desktop |
Send encrypted message |
Message decrypted correctly |
23 |
Encryption Support on Mobile |
Send encrypted message |
Message decrypted correctly |
24 |
Encryption Support on Embedded Device |
Send encrypted message |
Message decrypted or logged |
25 |
UI Consistency Across Platforms |
Compare UI elements |
Consistent experience |
26 |
Theme Support Across Platforms |
Apply dark/light theme |
Theme applied correctly |
27 |
Language Localization |
Use localized UI |
Language displayed correctly |
28 |
Emoji Support |
Send/receive emojis |
Emojis rendered correctly |
29 |
Notification Settings Sync |
Change notification settings on one device |
Synced across devices |
30 |
Multi-Device Login |
Login from multiple platforms |
Sessions maintained |
31 |
Session Timeout Handling |
Handle session expiry |
Re-authentication required |
32 |
Reconnect Logic on Desktop |
Reconnect after network loss |
Session restored |
33 |
Reconnect Logic on Mobile |
Reconnect after app backgrounding |
Session restored |
34 |
Reconnect Logic on Embedded Device |
Reconnect after disconnection |
Session restored |
35 |
Offline Message Delivery on Desktop |
Receive stored messages after login |
Messages delivered |
36 |
Offline Message Delivery on Mobile |
Receive stored messages after login |
Messages delivered |
37 |
Offline Message Delivery on Embedded |
Receive stored messages after login |
Messages delivered or logged |
38 |
Presence Probe from Embedded Device |
Probe contact presence |
Presence info received |
39 |
Voice/Video Call on Desktop |
Initiate and receive call |
Call connected |
40 |
Voice/Video Call on Mobile |
Initiate and receive call |
Call connected |
41 |
Voice/Video Call on Embedded Device |
Attempt call |
Call supported or gracefully rejected |
42 |
Custom Extension Support |
Use XEP extension |
Parsed and handled correctly |
43 |
Device Info Reporting |
Report device type in presence |
Info displayed correctly |
44 |
Network Type Detection |
Detect and report network type |
Info logged or displayed |
45 |
Battery Optimization Handling |
Handle OS-level battery restrictions |
App remains functional |
46 |
Background Sync on Mobile |
Sync messages while app is backgrounded |
Messages received |
47 |
App Update Compatibility |
Update app and retain session |
Session restored |
48 |
OS Version Compatibility |
Run on different OS versions |
App functions correctly |
49 |
Accessibility Support |
Use screen reader or accessibility tools |
App accessible |
50 |
Performance Benchmarking |
Measure performance across platforms |
Acceptable latency and resource usage |
Reference links