1"""Test acme_account_rollover script with real ACME server""" 

2import unittest 

3import os 

4import configparser 

5import acme_dns_tiny 

6from tests.config_factory import generate_acme_account_rollover_config 

7from tools.acme_account_deactivate import account_deactivate 

8import tools.acme_account_rollover 

9 

10ACME_DIRECTORY = os.getenv("GITLABCI_ACMEDIRECTORY_V2", 

11 "https://acme-staging-v02.api.letsencrypt.org/directory") 

12ACME_TIMEOUT = os.getenv("GITLABCI_ACMETIMEOUT", "10") 

13 

14 

15class TestACMEAccountRollover(unittest.TestCase): 

16 """Tests for acme_account_rollover.""" 

17 

18 @classmethod 

19 def setUpClass(cls): 

20 cls.configs = generate_acme_account_rollover_config() 

21 acme_dns_tiny.main([cls.configs['config']]) 

22 super(TestACMEAccountRollover, cls).setUpClass() 

23 

24 # To clean ACME staging server and close correctly temporary files 

25 # pylint: disable=bare-except 

26 @classmethod 

27 def tearDownClass(cls): 

28 # Remove temporary files 

29 parser = configparser.ConfigParser() 

30 parser.read(cls.configs['config']) 

31 try: 

32 # deactivate account key registration at end of tests 

33 # (we assume the key has been rolled over) 

34 account_deactivate( 

35 cls.configs["new_account_key"], ACME_DIRECTORY, ACME_TIMEOUT) 

36 except: 

37 pass 

38 try: 

39 os.remove(parser["acmednstiny"]["AccountKeyFile"]) 

40 except: 

41 pass 

42 try: 

43 os.remove(parser["acmednstiny"]["CSRFile"]) 

44 except: 

45 pass 

46 try: 

47 os.remove(cls.configs["new_account_key"]) 

48 except: 

49 pass 

50 try: 

51 os.remove(cls.configs['config']) 

52 except: 

53 pass 

54 super(TestACMEAccountRollover, cls).tearDownClass() 

55 

56 def test_success_account_rollover(self): 

57 """ Test success account key rollover.""" 

58 with self.assertLogs(level='INFO') as accountrolloverlog: 

59 tools.acme_account_rollover.main(["--current", self.configs['old_account_key'], 

60 "--new", self.configs['new_account_key'], 

61 "--acme-directory", ACME_DIRECTORY]) 

62 self.assertIn("INFO:acme_account_rollover:Keys rolled over.", accountrolloverlog.output) 

63 

64 

65if __name__ == "__main__": # pragma: no cover 

66 unittest.main()