Initial commit
[ta/config-manager.git] / cmframework / test / cmprocessor_snapshot_test.py
1 # Copyright 2019 Nokia
2
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 import unittest
16 import mock
17 from mock import call
18
19 from cmframework.server.cmprocessor import CMProcessor
20 from cmframework.apis.cmerror import CMError
21 from cmframework.server.cmcsn import CMCSN
22 from cmframework.server import cmchangemonitor
23
24
25 class CMProcessorSnapshotTest(unittest.TestCase):
26     @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
27     @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
28     @mock.patch('cmframework.server.cmprocessor.logging')
29     def test_get_property(self, mock_logging, mock_cmsnapshot, mock_cmcsn):
30         mock_backend = mock.MagicMock()
31
32         mock_validator = mock.MagicMock()
33         mock_activator = mock.MagicMock()
34         mock_changemonitor = mock.MagicMock()
35         mock_activationstate_handler = mock.MagicMock()
36         mock_snapshot_handler = mock.MagicMock()
37
38         processor = CMProcessor(mock_backend, mock_validator, mock_activator,
39                                 mock_changemonitor, mock_activationstate_handler,
40                                 mock_snapshot_handler)
41
42         property = processor.get_property('foo')
43         mock_cmsnapshot.return_value.assert_not_called()
44
45         snapshot_property = processor.get_property('foo', 'snap1')
46         mock_cmsnapshot.return_value.assert_has_calls([call.load('snap1'),
47                                                        call.get_property('foo')],
48                                                       any_order=True)
49
50     @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
51     @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
52     @mock.patch('cmframework.server.cmprocessor.logging')
53     def test_get_properties(self, mock_logging, mock_cmsnapshot, mock_cmcsn):
54         mock_backend = mock.MagicMock()
55
56         mock_validator = mock.MagicMock()
57         mock_activator = mock.MagicMock()
58         mock_changemonitor = mock.MagicMock()
59         mock_activationstate_handler = mock.MagicMock()
60         mock_snapshot_handler = mock.MagicMock()
61
62         processor = CMProcessor(mock_backend, mock_validator, mock_activator,
63                                 mock_changemonitor, mock_activationstate_handler,
64                                 mock_snapshot_handler)
65
66         property = processor.get_properties('.*')
67         mock_cmsnapshot.return_value.assert_not_called()
68
69         snapshot_property = processor.get_properties('.*', 'snap1')
70         mock_cmsnapshot.return_value.assert_has_calls([call.load('snap1'),
71                                                        call.get_properties('.*')],
72                                                       any_order=True)
73
74     @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
75     @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
76     @mock.patch('cmframework.server.cmprocessor.logging')
77     def test_create_snapshot(self, mock_logging, mock_cmsnapshot, mock_cmcsn):
78         mock_backend = mock.MagicMock()
79
80         mock_validator = mock.MagicMock()
81         mock_activator = mock.MagicMock()
82         mock_changemonitor = mock.MagicMock()
83         mock_activationstate_handler = mock.MagicMock()
84         mock_snapshot_handler = mock.MagicMock()
85
86         processor = CMProcessor(mock_backend, mock_validator, mock_activator,
87                                 mock_changemonitor, mock_activationstate_handler,
88                                 mock_snapshot_handler)
89
90         processor.create_snapshot('snap1')
91
92         mock_cmsnapshot.return_value.create.assert_called_once_with('snap1', mock_backend)
93
94     @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
95     @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
96     @mock.patch('cmframework.server.cmprocessor.logging')
97     def test_delete_snapshot(self, mock_logging, mock_cmsnapshot, mock_cmcsn):
98         mock_backend = mock.MagicMock()
99
100         mock_validator = mock.MagicMock()
101         mock_activator = mock.MagicMock()
102         mock_changemonitor = mock.MagicMock()
103         mock_activationstate_handler = mock.MagicMock()
104         mock_snapshot_handler = mock.MagicMock()
105
106         processor = CMProcessor(mock_backend, mock_validator, mock_activator,
107                                 mock_changemonitor, mock_activationstate_handler,
108                                 mock_snapshot_handler)
109
110         processor.delete_snapshot('snap1')
111
112         mock_cmsnapshot.return_value.delete.assert_called_once_with('snap1')
113
114     @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
115     @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
116     @mock.patch('cmframework.server.cmprocessor.logging')
117     def test_list_snapshots(self, mock_logging, mock_cmsnapshot, mock_cmcsn):
118         mock_backend = mock.MagicMock()
119
120         mock_validator = mock.MagicMock()
121         mock_activator = mock.MagicMock()
122         mock_changemonitor = mock.MagicMock()
123         mock_activationstate_handler = mock.MagicMock()
124         mock_snapshot_handler = mock.MagicMock()
125
126         processor = CMProcessor(mock_backend, mock_validator, mock_activator,
127                                 mock_changemonitor, mock_activationstate_handler,
128                                 mock_snapshot_handler)
129
130         processor.list_snapshots()
131
132         mock_cmsnapshot.return_value.list.assert_called_once()
133
134     @mock.patch('cmframework.server.cmprocessor.cmactivationwork.CMActivationWork')
135     @mock.patch('cmframework.server.cmprocessor.cmcsn.CMCSN')
136     @mock.patch('cmframework.server.cmprocessor.cmsnapshot.CMSnapshot')
137     @mock.patch('cmframework.server.cmprocessor.logging')
138     def test_restore_snapshot(self,
139                               mock_logging,
140                               mock_cmsnapshot,
141                               mock_cmcsn,
142                               mock_cmactivationwork):
143         csn1 = mock.MagicMock()
144         csn2 = mock.MagicMock()
145         mock_cmcsn.side_effect = [csn1, csn2]
146         mock_backend = mock.MagicMock()
147
148         mock_validator = mock.MagicMock()
149         mock_activator = mock.MagicMock()
150         mock_changemonitor = mock.MagicMock()
151         mock_activationstate_handler = mock.MagicMock()
152         mock_snapshot_handler = mock.MagicMock()
153
154         processor = CMProcessor(mock_backend, mock_validator, mock_activator,
155                                 mock_changemonitor, mock_activationstate_handler,
156                                 mock_snapshot_handler)
157
158         self.assertEqual(processor.csn, csn1)
159
160         processor.restore_snapshot('snap1')
161
162         self.assertEqual(processor.csn, csn2)
163         mock_cmsnapshot.return_value.load.assert_called_once_with('snap1')
164         mock_validator.validate_set.assert_called_once_with(
165             mock_cmsnapshot.return_value.get_properties.return_value)
166         mock_cmsnapshot.return_value.restore.assert_called_once_with(mock_backend)
167         mock_cmactivationwork.assert_called_once_with(
168             mock_cmactivationwork.OPER_SET,
169             csn2.get.return_value,
170             mock_cmsnapshot.return_value.get_properties.return_value)
171         mock_activator.add_work.assert_called_once_with(mock_cmactivationwork.return_value)
172
173 if __name__ == '__main__':
174     unittest.main()