~gary-lasker/software-center/cherrypick-for-5.2.2.1

« back to all changes in this revision

Viewing changes to test/test_utils.py

  • Committer: Michael Vogt
  • Date: 2012-05-15 07:51:29 UTC
  • mfrom: (2989.17.8 software-center)
  • Revision ID: michael.vogt@ubuntu.com-20120515075129-szlkcz1nqcs0qu46
merge lp:~gary-lasker/software-center/fix-makedirs-race-crashes and add small test for test_safe_makedirs

Show diffs side-by-side

added added

removed removed

Lines of Context:
6
6
import os
7
7
import stat
8
8
import subprocess
 
9
import shutil
9
10
import tempfile
10
11
import time
11
12
import unittest
12
13
 
 
14
from mock import patch
 
15
 
13
16
from testutils import setup_test_env
14
17
setup_test_env()
15
18
from softwarecenter.utils import (decode_xml_char_reference,
187
190
        ensure_file_writable_and_delete_if_not(test_file_writeable.name)
188
191
        self.assertTrue(os.path.exists(test_file_writeable.name))
189
192
 
 
193
    def test_safe_makedirs(self):
 
194
        from softwarecenter.utils import safe_makedirs
 
195
        from tempfile import mkdtemp
 
196
        tmp = mkdtemp()
 
197
        # create base dir
 
198
        target = os.path.join(tmp, "foo", "bar")
 
199
        safe_makedirs(target)
 
200
        # we need the patch to ensure that the code is actually executed
 
201
        with patch("os.path.exists") as mock_:
 
202
            mock_.return_value = False
 
203
            self.assertTrue(os.path.isdir(target))
 
204
            # ensure that creating the base dir again does not crash
 
205
            safe_makedirs(target)
 
206
            self.assertTrue(os.path.isdir(target))
 
207
            # ensure we still get regular errors like permission denied
 
208
            # (stat.S_IRUSR)
 
209
            os.chmod(os.path.join(tmp, "foo"), 0400)
 
210
            self.assertRaises(OSError, safe_makedirs, target)
 
211
            # set back to stat.(S_IRUSR|S_IWUSR|S_IXUSR) to make rmtree work
 
212
            os.chmod(os.path.join(tmp, "foo"), 0700)
 
213
        # cleanup
 
214
        shutil.rmtree(tmp)
190
215
 
191
216
class TestExpungeCache(unittest.TestCase):
192
217