78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Nix
		
	
	
	
	
	
| import ./make-test-python.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
 | |
|       '';
 | |
| 
 | |
|       sendTestMailViaDeliveryAgent = pkgs.writeScriptBin "send-lda" ''
 | |
|         #!${pkgs.stdenv.shell}
 | |
| 
 | |
|         exec ${pkgs.dovecot}/libexec/dovecot/deliver -d bob <<MAIL
 | |
|         From: root@localhost
 | |
|         To: bob@localhost
 | |
|         Subject: Something else...
 | |
| 
 | |
|         I'm running short of ideas!
 | |
|         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('bob')
 | |
|           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"I'm running short of ideas!"
 | |
|         finally:
 | |
|           pop.quit()
 | |
|       '';
 | |
| 
 | |
|     in [ sendTestMail sendTestMailViaDeliveryAgent testImap testPop ];
 | |
|   };
 | |
| 
 | |
|   testScript = ''
 | |
|     machine.wait_for_unit("postfix.service")
 | |
|     machine.wait_for_unit("dovecot2.service")
 | |
|     machine.succeed("send-testmail")
 | |
|     machine.succeed("send-lda")
 | |
|     machine.wait_until_fails('[ "$(postqueue -p)" != "Mail queue is empty" ]')
 | |
|     machine.succeed("test-imap")
 | |
|     machine.succeed("test-pop")
 | |
|   '';
 | |
| }
 | 
