Пример #1
0
class TestMyTask(SingleTaskTestCase):
    TASK = MyTask

    def setUp(self):
        self.testpath = NamedTemporaryDirectory()
        MyTask.PATH = self.testpath.name
        MyTask.INTERVAL = 0.25
        super(TestMyTask, self).setUp()
        self.task.execute()

    def tearDown(self):
        self.testpath.close()
        super(TestMyTask, self).tearDown()

    def test_file_create(self):
        fn = self.testpath.join('foo')
        with open(fn, mode='w'):
            pass
        os.utime(fn, None)
        self.task.execute()
        self.assertTrue(self.task.onFileCreated.called)
        self.assertEqual(self.task.onFileCreated.call_count, 1)
        self.assertEqual(self.task.onFileCreated.call_args[0][0], 'foo',
                         self.task.onFileCreated.call_args)

    def test_file_delete(self):
        self.test_file_create()
        os.remove(self.testpath.join('foo'))
        self.task.execute()

        self.assertTrue(self.task.onFileDeleted.called)
        self.assertEqual(self.task.onFileDeleted.call_count, 1)
        self.assertEqual(self.task.onFileDeleted.call_args[0][0], 'foo',
                          self.task.onFileDeleted.call_args)

    def test_file_update(self):
        self.test_file_create()

        self.task.execute()
        path = self.testpath.join('foo')

        # Run once to make sure we detect the current time for the files
        self.task.execute()

        # Forcibly update the atime/mtime of the file
        st = os.stat(path)
        self.task.stat = self.mock.Mock()
        self.task.stat.return_value = self.mock.NonCallableMock(wraps=st)
        self.task.stat.return_value.st_atime = st.st_atime - 10
        self.task.stat.return_value.st_mtime = st.st_mtime - 10

        self.task.execute()
        self.task.stat.assert_called()

        st2 = self.task.stat()
        self.assertEqual(st2.st_atime, st.st_atime - 10)
        self.assertEqual(st2.st_mtime, st.st_mtime - 10)

        self.assertTrue(self.task.onFileChanged.called)
        self.assertEqual(self.task.onFileChanged.call_count, 1)
        self.assertEqual(self.task.onFileChanged.call_args[0][0], 'foo',
                         self.task.onFileChanged.call_args)

    def test_file_delete_race_condition(self):
        self.test_file_create()

        self.task.stat = self.mock.Mock()
        self.task.stat.side_effect = OSError(errno.ENOENT, 'Fake ENOENT')
        self.task.execute()

        self.assertTrue(self.task.onFileDeleted.called)

    def test_nodirectory_ok(self):
        # Call close() on the named directory to cleanup the directory
        self.testpath.close()

        # Then, call execute() and make sure nothing blows up
        self.task.execute()
Пример #2
0
class TestMyTask(SingleTaskTestCase):
    TASK = MyTask

    def setUp(self):
        self.testpath = NamedTemporaryDirectory()
        MyTask.PATH = self.testpath.name
        MyTask.INTERVAL = 0.25
        super(TestMyTask, self).setUp()
        self.task.execute()

    def tearDown(self):
        self.testpath.close()
        super(TestMyTask, self).tearDown()

    def test_file_create(self):
        fn = self.testpath.join('foo')
        with open(fn, mode='w'):
            pass
        os.utime(fn, None)
        self.task.execute()
        self.assertTrue(self.task.onFileCreated.called)
        self.assertEqual(self.task.onFileCreated.call_count, 1)
        self.assertEqual(self.task.onFileCreated.call_args[0][0], 'foo',
                         self.task.onFileCreated.call_args)

    def test_file_delete(self):
        self.test_file_create()
        os.remove(self.testpath.join('foo'))
        self.task.execute()

        self.assertTrue(self.task.onFileDeleted.called)
        self.assertEqual(self.task.onFileDeleted.call_count, 1)
        self.assertEqual(self.task.onFileDeleted.call_args[0][0], 'foo',
                         self.task.onFileDeleted.call_args)

    def test_file_update(self):
        self.test_file_create()

        self.task.execute()
        path = self.testpath.join('foo')

        # Run once to make sure we detect the current time for the files
        self.task.execute()

        # Forcibly update the atime/mtime of the file
        st = os.stat(path)
        self.task.stat = self.mock.Mock()
        self.task.stat.return_value = self.mock.NonCallableMock(wraps=st)
        self.task.stat.return_value.st_atime = st.st_atime - 10
        self.task.stat.return_value.st_mtime = st.st_mtime - 10

        self.task.execute()
        self.task.stat.assert_called_with(path)

        st2 = self.task.stat()
        self.assertEqual(st2.st_atime, st.st_atime - 10)
        self.assertEqual(st2.st_mtime, st.st_mtime - 10)

        self.assertTrue(self.task.onFileChanged.called)
        self.assertEqual(self.task.onFileChanged.call_count, 1)
        self.assertEqual(self.task.onFileChanged.call_args[0][0], 'foo',
                         self.task.onFileChanged.call_args)

    def test_file_delete_race_condition(self):
        self.test_file_create()

        self.task.stat = self.mock.Mock()
        self.task.stat.side_effect = OSError(errno.ENOENT, 'Fake ENOENT')
        self.task.execute()

        self.assertTrue(self.task.onFileDeleted.called)

    def test_nodirectory_ok(self):
        # Call close() on the named directory to cleanup the directory
        self.testpath.close()

        # Then, call execute() and make sure nothing blows up
        self.task.execute()