blob: 0489878893165200e032826aa582f538af909352 [file] [log] [blame]
chojoyceb0817032022-01-12 18:29:36 +08001# Copyright 2022 - The Android Open Source Project
2#
3# Licensed under the Apache License, Version 2.0 (the "License");
4# you may not use this file except in compliance with the License.
5# You may obtain a copy of the License at
6#
7# http://www.apache.org/licenses/LICENSE-2.0
8#
9# Unless required by applicable law or agreed to in writing, software
10# distributed under the License is distributed on an "AS IS" BASIS,
11# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12# See the License for the specific language governing permissions and
13# limitations under the License.
14"""Tests for mkcert."""
15import filecmp
16import os
chojoyce32ee70e2022-02-11 12:39:53 +080017import shutil
chojoyceb0817032022-01-12 18:29:36 +080018import unittest
19
20from acloud.internal.lib import driver_test_lib
21from acloud.internal.lib import utils
22from acloud.setup import mkcert
23
24
25class MkcertTest(driver_test_lib.BaseDriverTest):
26 """Test Mkcert."""
27
28 # pylint: disable=no-member
29 def testInstall(self):
30 """Test Install."""
31 self.Patch(os.path, "isdir", return_value=False)
32 self.Patch(os.path, "exists", return_value=False)
33 self.Patch(os, "mkdir")
34 self.Patch(mkcert, "IsRootCAReady")
35 self.Patch(mkcert, "UnInstall")
36 self.Patch(utils, "Popen")
chojoyce32ee70e2022-02-11 12:39:53 +080037 self.Patch(shutil, "rmtree")
chojoyce40f34882022-03-10 12:33:08 +080038 self.Patch(os, "stat")
chojoyce8c7f7ad2022-02-18 19:55:13 +080039 self.Patch(os, "chmod")
chojoyce40f34882022-03-10 12:33:08 +080040 os.stat().st_mode = 33188
chojoyceb0817032022-01-12 18:29:36 +080041 mkcert.Install()
chojoyce8c7f7ad2022-02-18 19:55:13 +080042 os.chmod.assert_not_called()
chojoyce32ee70e2022-02-11 12:39:53 +080043 shutil.rmtree.assert_not_called()
44 mkcert.UnInstall.assert_not_called()
chojoyceb0817032022-01-12 18:29:36 +080045 self.assertEqual(4, utils.Popen.call_count)
46 utils.Popen.reset_mock()
47
48 self.Patch(os.path, "isdir", return_value=True)
49 self.Patch(os.path, "exists", return_value=True)
chojoyce40f34882022-03-10 12:33:08 +080050 os.stat().st_mode = 33184
chojoyceb0817032022-01-12 18:29:36 +080051 mkcert.Install()
chojoyce8c7f7ad2022-02-18 19:55:13 +080052 os.chmod.assert_called_once()
chojoyce32ee70e2022-02-11 12:39:53 +080053 shutil.rmtree.assert_called_once()
chojoyceb0817032022-01-12 18:29:36 +080054 mkcert.UnInstall.assert_called_once()
chojoyce32ee70e2022-02-11 12:39:53 +080055 self.assertEqual(4, utils.Popen.call_count)
chojoyceb0817032022-01-12 18:29:36 +080056
57
58 def testAllocateLocalHostCert(self):
59 """Test AllocateLocalHostCert."""
60 self.Patch(mkcert, "IsRootCAReady", return_value=False)
61 self.assertFalse(mkcert.AllocateLocalHostCert())
62
63 self.Patch(mkcert, "IsRootCAReady", return_value=True)
64 self.Patch(os.path, "exists", return_value=True)
65 self.Patch(utils, "Popen")
66 self.Patch(mkcert, "IsCertificateReady")
67 mkcert.AllocateLocalHostCert()
68 self.assertEqual(0, utils.Popen.call_count)
69
70 self.Patch(os.path, "exists", return_value=False)
71 mkcert.AllocateLocalHostCert()
72 self.assertEqual(3, utils.Popen.call_count)
73
74
75 def testIsRootCAReady(self):
76 """Test IsRootCAReady."""
77 self.Patch(os.path, "exists", return_value=True)
78 self.Patch(filecmp, "cmp", return_value=True)
79 self.assertTrue(mkcert.IsRootCAReady())
80
81 self.Patch(filecmp, "cmp", return_value=False)
82 self.assertFalse(mkcert.IsRootCAReady())
83
84 self.Patch(os.path, "exists", return_value=False)
85 self.assertFalse(mkcert.IsRootCAReady())
86
87
88 def testIsCertificateReady(self):
89 """Test IsCertificateReady."""
90 self.Patch(os.path, "exists", return_value=False)
91 self.assertFalse(mkcert.IsCertificateReady())
92
93 self.Patch(os.path, "exists", return_value=True)
94 self.assertTrue(mkcert.IsCertificateReady())
95
96
97 def testUnInstall(self):
98 """Test UnInstall."""
99 self.Patch(utils, "Popen")
100 mkcert.UnInstall()
101 self.assertEqual(3, utils.Popen.call_count)
102
103
104if __name__ == '__main__':
105 unittest.main()