summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndrey Golovizin <ag@sologoc.com>2021-02-11 18:46:07 +0100
committerAndrey Golovizin <ag@sologoc.com>2021-02-12 06:54:20 +0100
commit3fd5a416769fe53a72de49161c8bea4f2b3ea194 (patch)
tree30c4d721ac60dc5b088b69a4468411fb3954cbb4
parent987955680f3063126c96961d4e1f68cb00f3ad57 (diff)
downloadnixpkgs-3fd5a416769fe53a72de49161c8bea4f2b3ea194.tar
nixpkgs-3fd5a416769fe53a72de49161c8bea4f2b3ea194.tar.gz
nixpkgs-3fd5a416769fe53a72de49161c8bea4f2b3ea194.tar.bz2
nixpkgs-3fd5a416769fe53a72de49161c8bea4f2b3ea194.tar.lz
nixpkgs-3fd5a416769fe53a72de49161c8bea4f2b3ea194.tar.xz
nixpkgs-3fd5a416769fe53a72de49161c8bea4f2b3ea194.tar.zst
nixpkgs-3fd5a416769fe53a72de49161c8bea4f2b3ea194.zip
nixos/prosody: fix broken tests
-rw-r--r--nixos/tests/xmpp/prosody.nix2
-rw-r--r--nixos/tests/xmpp/xmpp-sendmessage.nix26
2 files changed, 25 insertions, 3 deletions
diff --git a/nixos/tests/xmpp/prosody.nix b/nixos/tests/xmpp/prosody.nix
index e7755e24bab..2eb06d88287 100644
--- a/nixos/tests/xmpp/prosody.nix
+++ b/nixos/tests/xmpp/prosody.nix
@@ -85,7 +85,7 @@ in import ../make-test-python.nix {
     server.succeed('prosodyctl status | grep "Prosody is running"')
 
     server.succeed("create-prosody-users")
-    client.succeed('send-message 2>&1 | grep "XMPP SCRIPT TEST SUCCESS"')
+    client.succeed("send-message")
     server.succeed("delete-prosody-users")
   '';
 }
diff --git a/nixos/tests/xmpp/xmpp-sendmessage.nix b/nixos/tests/xmpp/xmpp-sendmessage.nix
index 30945e68300..47a77f524c6 100644
--- a/nixos/tests/xmpp/xmpp-sendmessage.nix
+++ b/nixos/tests/xmpp/xmpp-sendmessage.nix
@@ -23,8 +23,26 @@ class CthonTest(ClientXMPP):
     def __init__(self, jid, password):
         ClientXMPP.__init__(self, jid, password)
         self.add_event_handler("session_start", self.session_start)
+        self.test_succeeded = False
 
     async def session_start(self, event):
+        try:
+            # Exceptions in event handlers are printed to stderr but not
+            # propagated, they do not make the script terminate with a non-zero
+            # exit code. We use the `test_succeeded` flag as a workaround and
+            # check it later at the end of the script to exit with a proper
+            # exit code.
+            # Additionally, this flag ensures that this event handler has been
+            # actually run by ClientXMPP, which may well not be the case.
+            await self.test_xmpp_server()
+            self.test_succeeded = True
+        finally:
+            # Even if an exception happens in `test_xmpp_server()`, we still
+            # need to disconnect explicitly, otherwise the process will hang
+            # forever.
+            self.disconnect(wait=True)
+
+    async def test_xmpp_server(self):
         log = logging.getLogger(__name__)
         self.send_presence()
         self.get_roster()
@@ -42,11 +60,12 @@ class CthonTest(ClientXMPP):
             log.error("ERROR: Cannot run upload command. XEP_0363 seems broken")
             sys.exit(1)
         log.info('Upload success!')
+
         # Test MUC
-        self.plugin['xep_0045'].join_muc('testMucRoom', 'cthon98', wait=True)
+        # TODO: use join_muc_wait() after slixmpp 1.8.0 is released.
+        self.plugin['xep_0045'].join_muc('testMucRoom', 'cthon98')
         log.info('MUC join success!')
         log.info('XMPP SCRIPT TEST SUCCESS')
-        self.disconnect(wait=True)
 
 
 if __name__ == '__main__':
@@ -62,4 +81,7 @@ if __name__ == '__main__':
     ct.register_plugin('xep_0045')
     ct.connect(("server", 5222))
     ct.process(forever=False)
+
+    if not ct.test_succeeded:
+        sys.exit(1)
 ''