blob: 8015a6bbcf95cf56a08241e21206c18563a02327 [file] [log] [blame]
Matteo Scandoload0c1752018-08-09 15:47:16 -07001
2# Copyright 2017-present Open Networking Foundation
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15
16
17import unittest
Scott Bakerc2a633d2019-04-01 19:27:41 -070018from mock import patch
Matteo Scandoload0c1752018-08-09 15:47:16 -070019
Scott Bakerc2a633d2019-04-01 19:27:41 -070020import os
21import sys
Matteo Scandoload0c1752018-08-09 15:47:16 -070022
Scott Bakerc2a633d2019-04-01 19:27:41 -070023test_path = os.path.abspath(os.path.dirname(os.path.realpath(__file__)))
24
Matteo Scandoload0c1752018-08-09 15:47:16 -070025
26class TestModelPolicyAttWorkflowDriverWhiteListEntry(unittest.TestCase):
27 def setUp(self):
28 self.sys_path_save = sys.path
Matteo Scandoload0c1752018-08-09 15:47:16 -070029
30 config = os.path.join(test_path, "../test_config.yaml")
31 from xosconfig import Config
32 Config.clear()
33 Config.init(config, 'synchronizer-config-schema.yaml')
34
Scott Baker71d20472019-02-01 12:05:35 -080035 from xossynchronizer.mock_modelaccessor_build import mock_modelaccessor_config
36 mock_modelaccessor_config(test_path, [("att-workflow-driver", "att-workflow-driver.xproto"),
37 ("olt-service", "volt.xproto"),
Matteo Scandoload6c8942019-02-14 13:02:08 -080038 ("rcord", "rcord.xproto")])
Matteo Scandoload0c1752018-08-09 15:47:16 -070039
Scott Baker71d20472019-02-01 12:05:35 -080040 import xossynchronizer.modelaccessor
41 import mock_modelaccessor
Scott Bakerc2a633d2019-04-01 19:27:41 -070042 reload(mock_modelaccessor) # in case nose2 loaded it in a previous test
Scott Baker71d20472019-02-01 12:05:35 -080043 reload(xossynchronizer.modelaccessor) # in case nose2 loaded it in a previous test
44
45 from xossynchronizer.modelaccessor import model_accessor
46 from model_policy_att_workflow_driver_whitelistentry import AttWorkflowDriverWhiteListEntryPolicy, AttHelpers
47 self.AttHelpers = AttHelpers
Matteo Scandoload0c1752018-08-09 15:47:16 -070048
49 from mock_modelaccessor import MockObjectList
50 self.MockObjectList = MockObjectList
51
52 # import all class names to globals
53 for (k, v) in model_accessor.all_model_classes.items():
54 globals()[k] = v
55
Scott Bakerc2a633d2019-04-01 19:27:41 -070056 # Some of the functions we call have side-effects. For example, creating a VSGServiceInstance may lead to
57 # creation of tags. Ideally, this wouldn't happen, but it does. So make sure we reset the world.
Matteo Scandoload0c1752018-08-09 15:47:16 -070058 model_accessor.reset_all_object_stores()
59
Scott Baker71d20472019-02-01 12:05:35 -080060 self.policy = AttWorkflowDriverWhiteListEntryPolicy(model_accessor=model_accessor)
Matteo Scandoload0c1752018-08-09 15:47:16 -070061
62 self.service = AttWorkflowDriverService()
63
Matteo Scandoload0c1752018-08-09 15:47:16 -070064 def tearDown(self):
65 sys.path = self.sys_path_save
66 self.service = None
67
Matteo Scandolob8da43d2018-09-12 15:52:16 -070068 def test_enable_onu(self):
Matteo Scandolob8da43d2018-09-12 15:52:16 -070069 si = AttWorkflowDriverServiceInstance(serial_number="BRCM333", owner_id=self.service.id, valid="invalid")
Scott Baker71d20472019-02-01 12:05:35 -080070 with patch.object(self.AttHelpers, "validate_onu") as validate_onu, \
Scott Bakerc2a633d2019-04-01 19:27:41 -070071 patch.object(si, "save") as save_si:
Matteo Scandolob8da43d2018-09-12 15:52:16 -070072 validate_onu.return_value = [True, "valid onu"]
73
74 self.policy.validate_onu_state(si)
75
76 save_si.assert_called_once()
Scott Bakerc2a633d2019-04-01 19:27:41 -070077 save_si.assert_called_with(
78 always_update_timestamp=True, update_fields=[
Matteo Scandolo2d9f40d2019-04-19 08:38:10 -070079 'admin_onu_state', 'serial_number', 'updated'])
Matteo Scandolob8da43d2018-09-12 15:52:16 -070080
81 def test_disable_onu(self):
Matteo Scandolob8da43d2018-09-12 15:52:16 -070082 si = AttWorkflowDriverServiceInstance(serial_number="BRCM333", owner_id=self.service.id, valid="invalid")
Scott Baker71d20472019-02-01 12:05:35 -080083 with patch.object(self.AttHelpers, "validate_onu") as validate_onu, \
Scott Bakerc2a633d2019-04-01 19:27:41 -070084 patch.object(si, "save") as save_si:
Matteo Scandolob8da43d2018-09-12 15:52:16 -070085 validate_onu.return_value = [False, "invalid onu"]
86
87 self.policy.validate_onu_state(si)
88
89 save_si.assert_called_once()
Scott Bakerc2a633d2019-04-01 19:27:41 -070090 save_si.assert_called_with(
91 always_update_timestamp=True, update_fields=[
Matteo Scandolo2d9f40d2019-04-19 08:38:10 -070092 'admin_onu_state', 'serial_number', 'updated'])
Matteo Scandolob8da43d2018-09-12 15:52:16 -070093
Matteo Scandoload0c1752018-08-09 15:47:16 -070094 def test_whitelist_update(self):
Matteo Scandolob8da43d2018-09-12 15:52:16 -070095 si = AttWorkflowDriverServiceInstance(serial_number="BRCM333", owner_id=self.service.id)
96 wle = AttWorkflowDriverWhiteListEntry(serial_number="brcm333", owner_id=self.service.id, owner=self.service)
97 with patch.object(AttWorkflowDriverServiceInstance.objects, "get_items") as oss_si_items, \
Scott Bakerc2a633d2019-04-01 19:27:41 -070098 patch.object(self.policy, "validate_onu_state") as validate_onu_state, \
99 patch.object(wle, "save") as wle_save:
Matteo Scandoload0c1752018-08-09 15:47:16 -0700100 oss_si_items.return_value = [si]
101
Matteo Scandoload0c1752018-08-09 15:47:16 -0700102 self.policy.handle_update(wle)
103
Matteo Scandolob8da43d2018-09-12 15:52:16 -0700104 validate_onu_state.assert_called_with(si)
105 self.assertTrue(wle.backend_need_delete_policy)
Scott Bakerc2a633d2019-04-01 19:27:41 -0700106 wle_save.assert_called_with(
107 always_update_timestamp=False, update_fields=[
108 'backend_need_delete_policy', 'owner', 'serial_number'])
Matteo Scandolod6c325a2018-09-04 14:28:23 -0700109
Matteo Scandoload0c1752018-08-09 15:47:16 -0700110 def test_whitelist_delete(self):
Matteo Scandolob8da43d2018-09-12 15:52:16 -0700111 si = AttWorkflowDriverServiceInstance(serial_number="BRCM333", owner_id=self.service.id)
112 wle = AttWorkflowDriverWhiteListEntry(serial_number="brcm333", owner_id=self.service.id, owner=self.service)
113 with patch.object(AttWorkflowDriverServiceInstance.objects, "get_items") as oss_si_items, \
114 patch.object(self.policy, "validate_onu_state") as validate_onu_state, \
115 patch.object(wle, "save") as wle_save:
Matteo Scandoload0c1752018-08-09 15:47:16 -0700116 oss_si_items.return_value = [si]
117
Matteo Scandoload0c1752018-08-09 15:47:16 -0700118 self.policy.handle_delete(wle)
119
Matteo Scandolob8da43d2018-09-12 15:52:16 -0700120 validate_onu_state.assert_called_with(si)
121 self.assertTrue(wle.backend_need_reap)
Scott Bakerc2a633d2019-04-01 19:27:41 -0700122 wle_save.assert_called_with(
123 always_update_timestamp=False, update_fields=[
124 'backend_need_reap', 'owner', 'serial_number'])
125
126
Matteo Scandoload0c1752018-08-09 15:47:16 -0700127if __name__ == '__main__':
Matteo Scandolo2d9f40d2019-04-19 08:38:10 -0700128 sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), ".."))
Matteo Scandoload0c1752018-08-09 15:47:16 -0700129 unittest.main()