at 25.11-pre 3.1 kB view raw
1import ../make-test-python.nix ( 2 { pkgs, ... }: 3 let 4 homeserverUrl = "http://homeserver:8008"; 5 6 private_key = pkgs.runCommand "matrix_key.pem" { 7 buildInputs = [ pkgs.dendrite ]; 8 } "generate-keys --private-key $out"; 9 in 10 { 11 name = "dendrite"; 12 meta = with pkgs.lib; { 13 maintainers = teams.matrix.members; 14 }; 15 16 nodes = { 17 homeserver = 18 { pkgs, ... }: 19 { 20 services.dendrite = { 21 enable = true; 22 loadCredential = [ "test_private_key:${private_key}" ]; 23 openRegistration = true; 24 settings = { 25 global.server_name = "test-dendrite-server.com"; 26 global.private_key = "$CREDENTIALS_DIRECTORY/test_private_key"; 27 client_api.registration_disabled = false; 28 }; 29 }; 30 31 networking.firewall.allowedTCPPorts = [ 8008 ]; 32 }; 33 34 client = 35 { pkgs, ... }: 36 { 37 environment.systemPackages = [ 38 (pkgs.writers.writePython3Bin "do_test" { libraries = [ pkgs.python3Packages.matrix-nio ]; } '' 39 import asyncio 40 41 from nio import AsyncClient 42 43 44 async def main() -> None: 45 # Connect to dendrite 46 client = AsyncClient("http://homeserver:8008", "alice") 47 48 # Register as user alice 49 response = await client.register("alice", "my-secret-password") 50 51 # Log in as user alice 52 response = await client.login("my-secret-password") 53 54 # Create a new room 55 response = await client.room_create(federate=False) 56 room_id = response.room_id 57 58 # Join the room 59 response = await client.join(room_id) 60 61 # Send a message to the room 62 response = await client.room_send( 63 room_id=room_id, 64 message_type="m.room.message", 65 content={ 66 "msgtype": "m.text", 67 "body": "Hello world!" 68 } 69 ) 70 71 # Sync responses 72 response = await client.sync(timeout=30000) 73 74 # Check the message was received by dendrite 75 last_message = response.rooms.join[room_id].timeline.events[-1].body 76 assert last_message == "Hello world!" 77 78 # Leave the room 79 response = await client.room_leave(room_id) 80 81 # Close the client 82 await client.close() 83 84 asyncio.get_event_loop().run_until_complete(main()) 85 '') 86 ]; 87 }; 88 }; 89 90 testScript = '' 91 start_all() 92 93 with subtest("start the homeserver"): 94 homeserver.wait_for_unit("dendrite.service") 95 homeserver.wait_for_open_port(8008) 96 97 with subtest("ensure messages can be exchanged"): 98 client.succeed("do_test") 99 ''; 100 101 } 102)