--- /dev/null
+# Copyright 2019 Nokia
+
+# Licensed under the Apache License, Version 2.0 (the "License");
+# 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
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import unittest
+import mock
+from mock import call
+
+from cmframework.server.cmprocessor import CMProcessor
+from cmframework.apis.cmerror import CMError
+from cmframework.server.cmcsn import CMCSN
+from cmframework.server import cmchangemonitor
+
+
+class CMProcessorSnapshotTest(unittest.TestCase):
+ @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
+ @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
+ @mock.patch('cmframework.server.cmprocessor.logging')
+ def test_get_property(self, mock_logging, mock_cmsnapshot, mock_cmcsn):
+ mock_backend = mock.MagicMock()
+
+ mock_validator = mock.MagicMock()
+ mock_activator = mock.MagicMock()
+ mock_changemonitor = mock.MagicMock()
+ mock_activationstate_handler = mock.MagicMock()
+ mock_snapshot_handler = mock.MagicMock()
+
+ processor = CMProcessor(mock_backend, mock_validator, mock_activator,
+ mock_changemonitor, mock_activationstate_handler,
+ mock_snapshot_handler)
+
+ property = processor.get_property('foo')
+ mock_cmsnapshot.return_value.assert_not_called()
+
+ snapshot_property = processor.get_property('foo', 'snap1')
+ mock_cmsnapshot.return_value.assert_has_calls([call.load('snap1'),
+ call.get_property('foo')],
+ any_order=True)
+
+ @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
+ @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
+ @mock.patch('cmframework.server.cmprocessor.logging')
+ def test_get_properties(self, mock_logging, mock_cmsnapshot, mock_cmcsn):
+ mock_backend = mock.MagicMock()
+
+ mock_validator = mock.MagicMock()
+ mock_activator = mock.MagicMock()
+ mock_changemonitor = mock.MagicMock()
+ mock_activationstate_handler = mock.MagicMock()
+ mock_snapshot_handler = mock.MagicMock()
+
+ processor = CMProcessor(mock_backend, mock_validator, mock_activator,
+ mock_changemonitor, mock_activationstate_handler,
+ mock_snapshot_handler)
+
+ property = processor.get_properties('.*')
+ mock_cmsnapshot.return_value.assert_not_called()
+
+ snapshot_property = processor.get_properties('.*', 'snap1')
+ mock_cmsnapshot.return_value.assert_has_calls([call.load('snap1'),
+ call.get_properties('.*')],
+ any_order=True)
+
+ @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
+ @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
+ @mock.patch('cmframework.server.cmprocessor.logging')
+ def test_create_snapshot(self, mock_logging, mock_cmsnapshot, mock_cmcsn):
+ mock_backend = mock.MagicMock()
+
+ mock_validator = mock.MagicMock()
+ mock_activator = mock.MagicMock()
+ mock_changemonitor = mock.MagicMock()
+ mock_activationstate_handler = mock.MagicMock()
+ mock_snapshot_handler = mock.MagicMock()
+
+ processor = CMProcessor(mock_backend, mock_validator, mock_activator,
+ mock_changemonitor, mock_activationstate_handler,
+ mock_snapshot_handler)
+
+ processor.create_snapshot('snap1')
+
+ mock_cmsnapshot.return_value.create.assert_called_once_with('snap1', mock_backend)
+
+ @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
+ @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
+ @mock.patch('cmframework.server.cmprocessor.logging')
+ def test_delete_snapshot(self, mock_logging, mock_cmsnapshot, mock_cmcsn):
+ mock_backend = mock.MagicMock()
+
+ mock_validator = mock.MagicMock()
+ mock_activator = mock.MagicMock()
+ mock_changemonitor = mock.MagicMock()
+ mock_activationstate_handler = mock.MagicMock()
+ mock_snapshot_handler = mock.MagicMock()
+
+ processor = CMProcessor(mock_backend, mock_validator, mock_activator,
+ mock_changemonitor, mock_activationstate_handler,
+ mock_snapshot_handler)
+
+ processor.delete_snapshot('snap1')
+
+ mock_cmsnapshot.return_value.delete.assert_called_once_with('snap1')
+
+ @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
+ @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
+ @mock.patch('cmframework.server.cmprocessor.logging')
+ def test_list_snapshots(self, mock_logging, mock_cmsnapshot, mock_cmcsn):
+ mock_backend = mock.MagicMock()
+
+ mock_validator = mock.MagicMock()
+ mock_activator = mock.MagicMock()
+ mock_changemonitor = mock.MagicMock()
+ mock_activationstate_handler = mock.MagicMock()
+ mock_snapshot_handler = mock.MagicMock()
+
+ processor = CMProcessor(mock_backend, mock_validator, mock_activator,
+ mock_changemonitor, mock_activationstate_handler,
+ mock_snapshot_handler)
+
+ processor.list_snapshots()
+
+ mock_cmsnapshot.return_value.list.assert_called_once()
+
+ @mock.patch('cmframework.server.cmprocessor.cmactivationwork.CMActivationWork')
+ @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
+ @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
+ @mock.patch('cmframework.server.cmprocessor.logging')
+ def test_restore_snapshot(self,
+ mock_logging,
+ mock_cmsnapshot,
+ mock_cmcsn,
+ mock_cmactivationwork):
+ csn1 = mock.MagicMock()
+ csn2 = mock.MagicMock()
+ mock_cmcsn.side_effect = [csn1, csn2]
+ mock_backend = mock.MagicMock()
+
+ mock_validator = mock.MagicMock()
+ mock_activator = mock.MagicMock()
+ mock_changemonitor = mock.MagicMock()
+ mock_activationstate_handler = mock.MagicMock()
+ mock_snapshot_handler = mock.MagicMock()
+
+ processor = CMProcessor(mock_backend, mock_validator, mock_activator,
+ mock_changemonitor, mock_activationstate_handler,
+ mock_snapshot_handler)
+
+ self.assertEqual(processor.csn, csn1)
+
+ processor.restore_snapshot('snap1')
+
+ self.assertEqual(processor.csn, csn2)
+ mock_cmsnapshot.return_value.load.assert_called_once_with('snap1')
+ mock_validator.validate_set.assert_called_once_with(
+ mock_cmsnapshot.return_value.get_properties.return_value)
+ mock_cmsnapshot.return_value.restore.assert_called_once_with(mock_backend)
+ mock_cmactivationwork.assert_called_once_with(
+ mock_cmactivationwork.OPER_SET,
+ csn2.get.return_value,
+ mock_cmsnapshot.return_value.get_properties.return_value)
+ mock_activator.add_work.assert_called_once_with(mock_cmactivationwork.return_value)
+
+if __name__ == '__main__':
+ unittest.main()