mirror of
				https://github.com/mail-in-a-box/mailinabox.git
				synced 2025-11-03 19:30:54 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import pytest
 | 
						|
from time import sleep
 | 
						|
from subprocess import check_call, check_output
 | 
						|
import smtplib
 | 
						|
 | 
						|
from settings import *
 | 
						|
from common import random_id
 | 
						|
from test_mail import new_message, check_imap_received
 | 
						|
 | 
						|
 | 
						|
def test_backup_mail():
 | 
						|
    # send a mail, to ensure we have something to backup
 | 
						|
    msg, subject = new_message(TEST_ADDRESS, TEST_ADDRESS)
 | 
						|
    s = smtplib.SMTP(TEST_DOMAIN, 587)
 | 
						|
    s.starttls()
 | 
						|
    s.login(TEST_ADDRESS, TEST_PASSWORD)
 | 
						|
    s.sendmail(TEST_ADDRESS, [TEST_ADDRESS], msg)
 | 
						|
    s.quit()
 | 
						|
    
 | 
						|
    # trigger a backup
 | 
						|
    sleep(2)
 | 
						|
    cmd_ssh = "sshpass -p vagrant ssh vagrant@{} -p {} ".format(TEST_SERVER, TEST_PORT)
 | 
						|
    cmd_count = cmd_ssh + "ls -l /home/user-data/backup/encrypted | wc -l"
 | 
						|
    num_backup_files = int(check_output(cmd_count, shell=True))
 | 
						|
    cmd = cmd_ssh + "sudo /vagrant/management/backup.py"
 | 
						|
    check_call(cmd, shell=True)
 | 
						|
    num_backup_files_new = int(check_output(cmd_count, shell=True))
 | 
						|
    assert num_backup_files_new > num_backup_files
 | 
						|
    
 | 
						|
    # delete mail
 | 
						|
    assert check_imap_received(subject)
 | 
						|
    assert not check_imap_received(subject)
 | 
						|
    
 | 
						|
    # restore backup
 | 
						|
    path = "/home/user-data"
 | 
						|
    passphrase = "export PASSPHRASE=\$(sudo cat /home/user-data/backup/secret_key.txt) &&"
 | 
						|
    # extract to temp directory
 | 
						|
    restore = "sudo -E duplicity restore --force file://{0}/backup/encrypted {0}/restore &&".format(path)
 | 
						|
    # move restored backup using rsync, because it allows to overwrite files
 | 
						|
    move = "sudo rsync -av {0}/restore/* {0}/ &&".format(path)
 | 
						|
    rm = "sudo rm -rf {0}/restore/".format(path)
 | 
						|
    check_call(cmd_ssh + "\"" + passphrase + restore + move + rm + "\"", shell=True)
 | 
						|
    
 | 
						|
    # check the mail is there again
 | 
						|
    assert check_imap_received(subject)
 |