65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
		
		
			
		
	
	
			65 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
|   | import ./make-test.nix { | ||
|  |   name = "dovecot"; | ||
|  | 
 | ||
|  |   machine = { pkgs, ... }: { | ||
|  |     imports = [ common/user-account.nix ]; | ||
|  |     services.postfix.enable = true; | ||
|  |     services.dovecot2.enable = true; | ||
|  |     services.dovecot2.protocols = [ "imap" "pop3" ]; | ||
|  |     environment.systemPackages = let | ||
|  |       sendTestMail = pkgs.writeScriptBin "send-testmail" ''
 | ||
|  |         #!${pkgs.stdenv.shell} | ||
|  |         exec sendmail -vt <<MAIL | ||
|  |         From: root@localhost | ||
|  |         To: alice@localhost | ||
|  |         Subject: Very important! | ||
|  | 
 | ||
|  |         Hello world! | ||
|  |         MAIL | ||
|  |       '';
 | ||
|  | 
 | ||
|  |       testImap = pkgs.writeScriptBin "test-imap" ''
 | ||
|  |         #!${pkgs.python3.interpreter} | ||
|  |         import imaplib | ||
|  | 
 | ||
|  |         with imaplib.IMAP4('localhost') as imap: | ||
|  |           imap.login('alice', 'foobar') | ||
|  |           imap.select() | ||
|  |           status, refs = imap.search(None, 'ALL') | ||
|  |           assert status == 'OK' | ||
|  |           assert len(refs) == 1 | ||
|  |           status, msg = imap.fetch(refs[0], 'BODY[TEXT]') | ||
|  |           assert status == 'OK' | ||
|  |           assert msg[0][1].strip() == b'Hello world!' | ||
|  |       '';
 | ||
|  | 
 | ||
|  |       testPop = pkgs.writeScriptBin "test-pop" ''
 | ||
|  |         #!${pkgs.python3.interpreter} | ||
|  |         import poplib | ||
|  | 
 | ||
|  |         pop = poplib.POP3('localhost') | ||
|  |         try: | ||
|  |           pop.user('alice') | ||
|  |           pop.pass_('foobar') | ||
|  |           assert len(pop.list()[1]) == 1 | ||
|  |           status, fullmail, size = pop.retr(1) | ||
|  |           assert status.startswith(b'+OK ') | ||
|  |           body = b"".join(fullmail[fullmail.index(b""):]).strip() | ||
|  |           assert body == b'Hello world!' | ||
|  |         finally: | ||
|  |           pop.quit() | ||
|  |       '';
 | ||
|  | 
 | ||
|  |     in [ sendTestMail testImap testPop ]; | ||
|  |   }; | ||
|  | 
 | ||
|  |   testScript = ''
 | ||
|  |     $machine->waitForUnit('postfix.service'); | ||
|  |     $machine->waitForUnit('dovecot2.service'); | ||
|  |     $machine->succeed('send-testmail'); | ||
|  |     $machine->waitUntilFails('[ "$(postqueue -p)" != "Mail queue is empty" ]'); | ||
|  |     $machine->succeed('test-imap'); | ||
|  |     $machine->succeed('test-pop'); | ||
|  |   '';
 | ||
|  | } |