based on internal repository c9a2ac8 2019-01-03 16:04:57 +0100 tagged rev-master-2.0.0
152 lines
6.4 KiB
Python
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")
|