3
from landscape.tests.helpers import LandscapeTest
5
from landscape.lib.bootstrap import (
6
BootstrapPath, BootstrapFile, BootstrapDirectory, BootstrapList)
9
class BootstrapPathTest(LandscapeTest):
11
bootstrap_class = BootstrapPath
14
super(BootstrapPathTest, self).setUp()
15
self.dirname = self.makeDir()
16
self.path = os.path.join(self.dirname, "$my_var")
17
self.real_path = os.path.join(self.dirname, "my_var_value")
19
def test_username(self):
20
getpwnam = self.mocker.replace("pwd.getpwnam")
21
getpwnam("username").pw_uid
22
self.mocker.result(1234)
24
getuid = self.mocker.replace("os.getuid")
28
chown = self.mocker.replace("os.chown")
29
chown(self.real_path, 1234, -1)
33
file = self.bootstrap_class(self.real_path, username="username")
34
file.bootstrap(my_var="my_var_value")
37
getgrnam = self.mocker.replace("grp.getgrnam")
38
getgrnam("group").gr_gid
39
self.mocker.result(5678)
41
getuid = self.mocker.replace("os.getuid")
45
chown = self.mocker.replace("os.chown")
46
chown(self.real_path, -1, 5678)
50
file = self.bootstrap_class(self.path, group="group")
51
file.bootstrap(my_var="my_var_value")
54
chmod = self.mocker.replace("os.chmod")
55
chmod(self.real_path, 0644)
59
file = self.bootstrap_class(self.path, mode=0644)
60
file.bootstrap(my_var="my_var_value")
62
def test_all_details(self):
63
getuid = self.mocker.replace("os.getuid")
67
getpwnam = self.mocker.replace("pwd.getpwnam")
68
getpwnam("username").pw_uid
69
self.mocker.result(1234)
71
getgrnam = self.mocker.replace("grp.getgrnam")
72
getgrnam("group").gr_gid
73
self.mocker.result(5678)
75
chown = self.mocker.replace("os.chown")
76
chown(self.real_path, 1234, 5678)
78
chmod = self.mocker.replace("os.chmod")
79
chmod(self.real_path, 0644)
83
file = self.bootstrap_class(self.path, "username", "group", 0644)
84
file.bootstrap(my_var="my_var_value")
86
def test_all_details_with_non_root(self):
87
getuid = self.mocker.replace("os.getuid")
89
self.mocker.result(1000)
91
chmod = self.mocker.replace("os.chmod")
92
chmod(self.real_path, 0644)
96
file = self.bootstrap_class(self.path, "username", "group", 0644)
97
file.bootstrap(my_var="my_var_value")
100
class BootstrapCreationTest(BootstrapPathTest):
102
bootstrap_class = BootstrapFile
104
def exists(self, path):
105
return os.path.isfile(path)
107
def test_creation(self):
108
file = self.bootstrap_class(self.path)
109
self.assertFalse(self.exists(self.real_path))
110
file.bootstrap(my_var="my_var_value")
111
self.assertTrue(self.exists(self.real_path))
114
class BootstrapFileTest(BootstrapCreationTest):
116
def test_creation_wont_overwrite(self):
117
filename = self.makeFile("CONTENT")
118
file = self.bootstrap_class(filename)
120
self.assertEqual(open(filename).read(), "CONTENT")
123
class BootstrapDirectoryTest(BootstrapCreationTest):
125
bootstrap_class = BootstrapDirectory
127
def exists(self, path):
128
return os.path.isdir(path)
130
def test_creation_works_with_existing(self):
131
dirname = self.makeDir()
132
dir = self.bootstrap_class(dirname)
134
self.assertTrue(self.exists(dirname))
136
def test_creation_will_fail_correctly(self):
137
filename = self.makeFile("I AM A *FILE*")
138
dir = self.bootstrap_class(filename)
139
self.assertRaises(OSError, dir.bootstrap)
142
class BootstrapListTest(LandscapeTest):
144
def test_creation(self):
145
dirname = self.makeDir()
147
list = BootstrapList([BootstrapFile("$dirname/filename"),
148
BootstrapDirectory("$dirname/dirname"),
149
BootstrapFile("$dirname/dirname/filename")])
151
list.bootstrap(dirname=dirname)
153
self.assertTrue(os.path.isfile(os.path.join(dirname, "filename")))
154
self.assertTrue(os.path.isdir(os.path.join(dirname, "dirname")))
155
self.assertTrue(os.path.isfile(os.path.join(dirname,
156
"dirname/filename")))