4 # Copyright (C) 2013 Google Inc.
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 # General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
22 """Script for unittesting the ganeti.storage.file module"""
27 from ganeti import errors
28 from ganeti.storage import filestorage
33 class TestFileStorageSpaceInfo(unittest.TestCase):
35 def testSpaceInfoPathInvalid(self):
36 """Tests that an error is raised when the given file is not existing.
39 self.assertRaises(errors.CommandError, filestorage.GetSpaceInfo,
40 "/path/does/not/exist/")
42 def testSpaceInfoPathValid(self):
43 """Tests that the 'df' command is run if the file is valid.
46 info = filestorage.GetSpaceInfo("/")
48 def testParseDfOutputValidInput(self):
49 """Tests that parsing of the output of 'df' works correctly.
53 "Filesystem 1M-blocks Used Available Use% Mounted on\n" \
54 "/dev/mapper/sysvg-root 161002M 58421M 94403M 39% /"
55 expected_size = 161002
58 (size, free) = filestorage._ParseDfResult(valid_df_output)
59 self.assertEqual(expected_size, size,
60 "Calculation of total size is incorrect.")
61 self.assertEqual(expected_free, free,
62 "Calculation of free space is incorrect.")
65 def testParseDfOutputInvalidInput(self):
66 """Tests that parsing of the output of 'df' works correctly when invalid
70 invalid_output_header_missing = \
71 "/dev/mapper/sysvg-root 161002M 58421M 94403M 39% /"
72 invalid_output_dataline_missing = \
73 "Filesystem 1M-blocks Used Available Use% Mounted on\n"
74 invalid_output_wrong_num_columns = \
75 "Filesystem 1M-blocks Available\n" \
76 "/dev/mapper/sysvg-root 161002M 94403M"
77 invalid_output_units_wrong = \
78 "Filesystem 1M-blocks Used Available Use% Mounted on\n" \
79 "/dev/mapper/sysvg-root 161002G 58421G 94403G 39% /"
80 invalid_output_units_missing = \
81 "Filesystem 1M-blocks Used Available Use% Mounted on\n" \
82 "/dev/mapper/sysvg-root 161002 58421 94403 39% /"
83 invalid_outputs = [invalid_output_header_missing,
84 invalid_output_dataline_missing,
85 invalid_output_wrong_num_columns,
86 invalid_output_units_wrong,
87 invalid_output_units_missing]
89 for output in invalid_outputs:
90 self.assertRaises(errors.CommandError, filestorage._ParseDfResult, output)
93 if __name__ == "__main__":
94 testutils.GanetiTestProgram()