| 
									
										
										
										
											2019-11-24 13:04:11 +01:00
										 |  |  | import ../make-test-python.nix { | 
					
						
							| 
									
										
										
										
											2019-06-15 12:58:00 +03:00
										 |  |  |   name = "prosody-mysql"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   nodes = { | 
					
						
							|  |  |  |     client = { nodes, pkgs, ... }: { | 
					
						
							|  |  |  |       environment.systemPackages = [ | 
					
						
							|  |  |  |         (pkgs.callPackage ./xmpp-sendmessage.nix { connectTo = nodes.server.config.networking.primaryIPAddress; }) | 
					
						
							|  |  |  |       ]; | 
					
						
							| 
									
										
										
										
											2020-05-04 00:14:42 +02:00
										 |  |  |       networking.extraHosts = ''
 | 
					
						
							|  |  |  |         ${nodes.server.config.networking.primaryIPAddress} example.com | 
					
						
							|  |  |  |         ${nodes.server.config.networking.primaryIPAddress} conference.example.com | 
					
						
							|  |  |  |         ${nodes.server.config.networking.primaryIPAddress} uploads.example.com | 
					
						
							|  |  |  |       '';
 | 
					
						
							| 
									
										
										
										
											2019-06-15 12:58:00 +03:00
										 |  |  |     }; | 
					
						
							|  |  |  |     server = { config, pkgs, ... }: { | 
					
						
							| 
									
										
										
										
											2019-06-20 10:58:44 +03:00
										 |  |  |       nixpkgs.overlays = [ | 
					
						
							|  |  |  |         (self: super: { | 
					
						
							|  |  |  |           prosody = super.prosody.override { | 
					
						
							|  |  |  |             withDBI = true; | 
					
						
							|  |  |  |             withExtraLibs = [ pkgs.luaPackages.luadbi-mysql ]; | 
					
						
							|  |  |  |           }; | 
					
						
							|  |  |  |         }) | 
					
						
							|  |  |  |       ]; | 
					
						
							| 
									
										
										
										
											2019-06-15 12:58:00 +03:00
										 |  |  |       networking.extraHosts = ''
 | 
					
						
							|  |  |  |         ${config.networking.primaryIPAddress} example.com | 
					
						
							| 
									
										
										
										
											2020-05-04 00:14:42 +02:00
										 |  |  |         ${config.networking.primaryIPAddress} conference.example.com | 
					
						
							|  |  |  |         ${config.networking.primaryIPAddress} uploads.example.com | 
					
						
							| 
									
										
										
										
											2019-06-15 12:58:00 +03:00
										 |  |  |       '';
 | 
					
						
							|  |  |  |       networking.firewall.enable = false; | 
					
						
							|  |  |  |       services.prosody = { | 
					
						
							|  |  |  |         enable = true; | 
					
						
							|  |  |  |         # TODO: use a self-signed certificate | 
					
						
							|  |  |  |         c2sRequireEncryption = false; | 
					
						
							|  |  |  |         extraConfig = ''
 | 
					
						
							|  |  |  |           storage = "sql" | 
					
						
							|  |  |  |           sql = { | 
					
						
							|  |  |  |             driver = "MySQL"; | 
					
						
							|  |  |  |             database = "prosody"; | 
					
						
							|  |  |  |             host = "mysql"; | 
					
						
							|  |  |  |             port = 3306; | 
					
						
							|  |  |  |             username = "prosody"; | 
					
						
							|  |  |  |             password = "password123"; | 
					
						
							|  |  |  |           }; | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         virtualHosts.test = { | 
					
						
							|  |  |  |           domain = "example.com"; | 
					
						
							|  |  |  |           enabled = true; | 
					
						
							|  |  |  |         }; | 
					
						
							| 
									
										
										
										
											2020-05-04 00:14:42 +02:00
										 |  |  |         muc = [ | 
					
						
							|  |  |  |           { | 
					
						
							|  |  |  |             domain = "conference.example.com"; | 
					
						
							|  |  |  |           } | 
					
						
							|  |  |  |         ]; | 
					
						
							|  |  |  |         uploadHttp = { | 
					
						
							|  |  |  |           domain = "uploads.example.com"; | 
					
						
							|  |  |  |         }; | 
					
						
							| 
									
										
										
										
											2019-06-15 12:58:00 +03:00
										 |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |     mysql = { config, pkgs, ... }: { | 
					
						
							|  |  |  |       networking.firewall.enable = false; | 
					
						
							|  |  |  |       services.mysql = { | 
					
						
							|  |  |  |         enable = true; | 
					
						
							|  |  |  |         initialScript = pkgs.writeText "mysql_init.sql" ''
 | 
					
						
							|  |  |  |           CREATE DATABASE prosody; | 
					
						
							|  |  |  |           CREATE USER 'prosody'@'server' IDENTIFIED BY 'password123'; | 
					
						
							|  |  |  |           GRANT ALL PRIVILEGES ON prosody.* TO 'prosody'@'server'; | 
					
						
							|  |  |  |           FLUSH PRIVILEGES; | 
					
						
							|  |  |  |         '';
 | 
					
						
							|  |  |  |         package = pkgs.mariadb; | 
					
						
							|  |  |  |       }; | 
					
						
							|  |  |  |     }; | 
					
						
							|  |  |  |   }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   testScript = { nodes, ... }: ''
 | 
					
						
							| 
									
										
										
										
											2019-11-24 13:04:11 +01:00
										 |  |  |     mysql.wait_for_unit("mysql.service") | 
					
						
							|  |  |  |     server.wait_for_unit("prosody.service") | 
					
						
							|  |  |  |     server.succeed('prosodyctl status | grep "Prosody is running"') | 
					
						
							| 
									
										
										
										
											2019-06-15 12:58:00 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     # set password to 'nothunter2' (it's asked twice) | 
					
						
							| 
									
										
										
										
											2019-11-24 13:04:11 +01:00
										 |  |  |     server.succeed("yes nothunter2 | prosodyctl adduser cthon98@example.com") | 
					
						
							| 
									
										
										
										
											2019-06-15 12:58:00 +03:00
										 |  |  |     # set password to 'y' | 
					
						
							| 
									
										
										
										
											2019-11-24 13:04:11 +01:00
										 |  |  |     server.succeed("yes | prosodyctl adduser azurediamond@example.com") | 
					
						
							| 
									
										
										
										
											2019-06-15 12:58:00 +03:00
										 |  |  |     # correct password to 'hunter2' | 
					
						
							| 
									
										
										
										
											2019-11-24 13:04:11 +01:00
										 |  |  |     server.succeed("yes hunter2 | prosodyctl passwd azurediamond@example.com") | 
					
						
							| 
									
										
										
										
											2019-06-15 12:58:00 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-24 13:04:11 +01:00
										 |  |  |     client.succeed("send-message") | 
					
						
							| 
									
										
										
										
											2019-06-15 12:58:00 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-11-24 13:04:11 +01:00
										 |  |  |     server.succeed("prosodyctl deluser cthon98@example.com") | 
					
						
							|  |  |  |     server.succeed("prosodyctl deluser azurediamond@example.com") | 
					
						
							| 
									
										
										
										
											2019-06-15 12:58:00 +03:00
										 |  |  |   '';
 | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 |