# -*- coding: utf-8 -*- import os from unittest import TestCase import lockfile from fixture import TempIO from rattail import files class TestLockingCopy(TestCase): def setUp(self): self.tmp = TempIO() self.src = self.tmp.mkdir(u'src') self.dst = self.tmp.mkdir(u'dst') self.src_file = self.src.putfile(u'somefile', b'') def test_normal_copy_succeeds(self): files.locking_copy(self.src_file, self.dst) dst_file = os.path.join(self.dst, u'somefile') self.assertTrue(os.path.exists(dst_file)) self.assertTrue(os.path.isfile(dst_file)) self.assertFalse(os.path.exists(os.path.join(self.dst, u'somefile.lock'))) def test_copy_times_out_if_lock_already_exists(self): dst_lock = self.dst.mkdir(u'somefile.lock') self.assertRaises(lockfile.LockTimeout, files.locking_copy, self.src_file, self.dst, timeout=0.1) def test_lock_timeout_may_be_specified_as_string(self): dst_lock = self.dst.mkdir(u'somefile.lock') # string "float" self.assertRaises(lockfile.LockTimeout, files.locking_copy, self.src_file, self.dst, timeout=u'0.1') # string "integer" self.assertRaises(lockfile.LockTimeout, files.locking_copy, self.src_file, self.dst, timeout=u'1')