pmsco-public/tests/test_files.py
matthias muntwiler acea809e4e update public distribution
based on internal repository c9a2ac8 2019-01-03 16:04:57 +0100
tagged rev-master-2.0.0
2019-01-31 15:45:02 +01:00

152 lines
6.4 KiB
Python

"""
@package tests.test_files
unit tests for pmsco.files
the purpose of these tests is to help debugging the code.
to run the tests, change to the directory which contains the tests directory, and execute =nosetests=.
@pre nose must be installed (python-nose package on Debian).
@author Matthias Muntwiler, matthias.muntwiler@psi.ch
@copyright (c) 2015-18 by Paul Scherrer Institut @n
Licensed under the Apache License, Version 2.0 (the "License"); @n
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
"""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import unittest
import mock
import os
import pmsco.files as files
class TestFileTracker(unittest.TestCase):
"""
unit tests of pmsco.files.FileTracker
for a description of the mock and patch mechanism, cf.
- http://blog.thedigitalcatonline.com/blog/2016/03/06/python-mocks-a-gentle-introduction-part-1
- http://blog.thedigitalcatonline.com/blog/2016/09/27/python-mocks-a-gentle-introduction-part-2
"""
def setUp(self):
# before each test method
self.files = files.FileTracker()
self.files.keep_rfac = 1
self.files.add_file("model 1 file 1 cluster K", 1, 'cluster')
self.files.add_file("model 1 file 2 output D", 1, 'output')
self.files.add_file("model 2 file 1 cluster K", 2, 'cluster')
self.files.add_file("model 2 file 2 output D", 2, 'output')
self.files.add_file("model 3 file 1 cluster K", 3, 'cluster')
self.files.add_file("model 3 file 2 output D", 3, 'output')
self.files.add_file("model 4 file 1 cluster K", 4, 'cluster')
self.files.add_file("model 4 file 2 output D", 4, 'output')
self.files.add_file("model 5 file 1 cluster K", 5, 'cluster')
self.files.add_file("model 5 file 2 output D", 5, 'output')
self.files.update_model_rfac(2, 0.0)
self.files.update_model_rfac(3, 0.1)
self.files.update_model_rfac(4, 0.3)
self.files.update_model_rfac(1, 0.5)
self.files.update_model_rfac(5, 0.6)
self.files.set_model_complete(1, True)
self.files.set_model_complete(2, True)
self.files.set_model_complete(3, False)
self.files.set_model_complete(5, True)
def tearDown(self):
# after each test method
pass
@classmethod
def setup_class(cls):
# before any methods in this class
pass
@classmethod
def teardown_class(cls):
# teardown_class() after any methods in this class
pass
def test_add_file(self):
self.assertEqual(self.files.get_file_count(), 10, "file count after setup")
# add a new file of an existing model
self.files.add_file("model 2 file 1 input K", 2, 'input')
self.assertEqual(self.files.get_file_count(), 11, "file count after add")
# change the category of an existing file
self.files.add_file("model 2 file 2 output D", 2, 'report')
self.assertEqual(self.files.get_file_count(), 11, "file count after change")
def test_rename_file(self):
self.files.rename_file("model 2 file 2 output D", "renamed file")
self.assertEqual(self.files.get_file_count(), 10, "file count after rename")
self.files.rename_file("inexistant file", "renamed file")
self.assertEqual(self.files.get_file_count(), 10, "file count after rename")
@mock.patch('os.remove')
def test_remove_file(self, os_remove_mock):
self.files.remove_file("model 3 file 1 cluster K")
self.assertEqual(self.files.get_file_count(), 9, "file count after remove")
self.assertFalse(os_remove_mock.called, "file deleted")
def test_update_model_rfac(self):
pass
def test_set_model_complete(self):
self.assertEqual(self.files.get_complete_models_count(), 3, "complete model count after setup")
self.files.set_model_complete(3, True)
self.assertEqual(self.files.get_complete_models_count(), 4, "complete model count after add")
self.files.set_model_complete(2, False)
self.assertEqual(self.files.get_complete_models_count(), 3, "complete model count after remove")
self.files.set_model_complete(5, True)
self.assertEqual(self.files.get_complete_models_count(), 3, "complete model count after no change")
@mock.patch('os.remove')
def test_delete_files(self, os_remove_mock):
self.files.keep_rfac = 10
self.files.delete_files()
os_remove_mock.assert_any_call(os.path.abspath("model 1 file 2 output D"))
os_remove_mock.assert_any_call(os.path.abspath("model 2 file 2 output D"))
os_remove_mock.assert_any_call(os.path.abspath("model 5 file 2 output D"))
self.assertEqual(self.files.get_file_count(), 5+2)
@mock.patch('os.remove')
def test_delete_file(self, os_remove_mock):
self.files.delete_file("model 3 file 1 cluster K")
self.assertEqual(self.files.get_file_count(), 9, "file count after remove")
self.assertTrue(os_remove_mock.called, "file not deleted")
@mock.patch('os.remove')
def test_delete_bad_rfac(self, os_remove_mock):
self.files.delete_bad_rfac(keep=2, force_delete=True)
self.assertEqual(self.files.get_file_count(), 6)
os_remove_mock.assert_any_call(os.path.abspath("model 1 file 1 cluster K"))
os_remove_mock.assert_any_call(os.path.abspath("model 5 file 1 cluster K"))
@mock.patch('os.remove')
def test_delete_category(self, os_remove_mock):
self.files.delete_category('cluster')
self.assertEqual(self.files.get_file_count(), 7)
os_remove_mock.assert_any_call(os.path.abspath("model 1 file 1 cluster K"))
os_remove_mock.assert_any_call(os.path.abspath("model 2 file 1 cluster K"))
os_remove_mock.assert_any_call(os.path.abspath("model 5 file 1 cluster K"))
@mock.patch('os.remove')
def test_delete_models(self, os_remove_mock):
n = self.files.delete_models()
self.assertEqual(n, 0)
n = self.files.delete_models(keep={2, 5})
self.assertEqual(n, 1)
self.assertEqual(self.files.get_file_count(), 8, "file count after remove")
self.assertTrue(os_remove_mock.called, "file not deleted")
n = self.files.delete_models(delete={2, 3})
self.assertEqual(n, 1)
self.assertEqual(self.files.get_file_count(), 6, "file count after remove")