-
-
Notifications
You must be signed in to change notification settings - Fork 12.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
2c0b230
commit 88f06c5
Showing
1 changed file
with
75 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
import ./make-test.nix { | ||
name = "prosody"; | ||
|
||
machine = { config, pkgs, ... }: { | ||
services.prosody = { | ||
enable = true; | ||
# TODO: use a self-signed certificate | ||
c2sRequireEncryption = false; | ||
}; | ||
environment.systemPackages = let | ||
sendMessage = pkgs.writeScriptBin "send-message" '' | ||
#!/usr/bin/env python3 | ||
# Based on the sleekxmpp send_client example, look there for more details: | ||
# https://github.com/fritzy/SleekXMPP/blob/develop/examples/send_client.py | ||
import sleekxmpp | ||
class SendMsgBot(sleekxmpp.ClientXMPP): | ||
""" | ||
A basic SleekXMPP bot that will log in, send a message, | ||
and then log out. | ||
""" | ||
def __init__(self, jid, password, recipient, message): | ||
sleekxmpp.ClientXMPP.__init__(self, jid, password) | ||
self.recipient = recipient | ||
self.msg = message | ||
self.add_event_handler("session_start", self.start, threaded=True) | ||
def start(self, event): | ||
self.send_presence() | ||
self.get_roster() | ||
self.send_message(mto=self.recipient, | ||
mbody=self.msg, | ||
mtype='chat') | ||
self.disconnect(wait=True) | ||
if __name__ == '__main__': | ||
xmpp = SendMsgBot("test1@localhost", "test1", "test2@localhost", "Hello World!") | ||
xmpp.register_plugin('xep_0030') # Service Discovery | ||
xmpp.register_plugin('xep_0199') # XMPP Ping | ||
# TODO: verify certificate | ||
# If you want to verify the SSL certificates offered by a server: | ||
# xmpp.ca_certs = "path/to/ca/cert" | ||
if xmpp.connect(('localhost', 5222)): | ||
xmpp.process(block=True) | ||
else: | ||
print("Unable to connect.") | ||
sys.exit(1) | ||
''; | ||
in [ (pkgs.python3.withPackages (ps: [ ps.sleekxmpp ])) sendMessage ]; | ||
}; | ||
|
||
testScript = '' | ||
$machine->waitForUnit('prosody.service'); | ||
$machine->succeed('prosodyctl status') =~ /Prosody is running/; | ||
# set password to 'test' (it's asked twice) | ||
$machine->succeed('yes test1 | prosodyctl adduser test1@localhost'); | ||
# set password to 'y' | ||
$machine->succeed('yes | prosodyctl adduser test2@localhost'); | ||
# correct password to 'test2' | ||
$machine->succeed('yes test2 | prosodyctl passwd test2@localhost'); | ||
$machine->succeed("send-message"); | ||
$machine->succeed('prosodyctl deluser test1@localhost'); | ||
$machine->succeed('prosodyctl deluser test2@localhost'); | ||
''; | ||
} |