at 22.05-pre 3.2 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 = { pkgs, ... }: { 18 services.dendrite = { 19 enable = true; 20 settings = { 21 global.server_name = "test-dendrite-server.com"; 22 global.private_key = private_key; 23 client_api.registration_disabled = false; 24 }; 25 }; 26 27 networking.firewall.allowedTCPPorts = [ 8008 ]; 28 }; 29 30 client = { pkgs, ... }: { 31 environment.systemPackages = [ 32 ( 33 pkgs.writers.writePython3Bin "do_test" 34 { libraries = [ pkgs.python3Packages.matrix-nio ]; } '' 35 import asyncio 36 37 from nio import AsyncClient 38 39 40 async def main() -> None: 41 # Connect to dendrite 42 client = AsyncClient("http://homeserver:8008", "alice") 43 44 # Register as user alice 45 response = await client.register("alice", "my-secret-password") 46 47 # Log in as user alice 48 response = await client.login("my-secret-password") 49 50 # Create a new room 51 response = await client.room_create(federate=False) 52 room_id = response.room_id 53 54 # Join the room 55 response = await client.join(room_id) 56 57 # Send a message to the room 58 response = await client.room_send( 59 room_id=room_id, 60 message_type="m.room.message", 61 content={ 62 "msgtype": "m.text", 63 "body": "Hello world!" 64 } 65 ) 66 67 # Sync responses 68 response = await client.sync(timeout=30000) 69 70 # Check the message was received by dendrite 71 last_message = response.rooms.join[room_id].timeline.events[-1].body 72 assert last_message == "Hello world!" 73 74 # Leave the room 75 response = await client.room_leave(room_id) 76 77 # Close the client 78 await client.close() 79 80 asyncio.get_event_loop().run_until_complete(main()) 81 '' 82 ) 83 ]; 84 }; 85 }; 86 87 testScript = '' 88 start_all() 89 90 with subtest("start the homeserver"): 91 homeserver.wait_for_unit("dendrite.service") 92 homeserver.wait_for_open_port(8008) 93 94 with subtest("ensure messages can be exchanged"): 95 client.succeed("do_test") 96 ''; 97 98 } 99)