blob: 78276f2d4173cb50676d76d1437c9bd4ee6c671f [file] [log] [blame]
Matteo Scandolodf2600b2017-07-05 17:01:29 -07001import unittest
2from mock import patch, MagicMock
3from tosca.parser import TOSCA_Parser
4from grpc_client.resources import RESOURCES
5
6class FakeObj:
7 new = None
8 filter = None
9
10class FakeModel:
11 save = None
12 id = 1
13
14class FakeGuiExt:
15 objects = FakeObj
16
17class FakeSite:
18 objects = FakeObj
19
20class FakeUser:
21 objects = FakeObj
22
23mock_resources = {
24 'XOSGuiExtension': FakeGuiExt,
25 'Site': FakeSite,
26 'User': FakeUser
27}
28
29class TOSCA_Parser_E2E(unittest.TestCase):
30
31 @patch.dict(RESOURCES, mock_resources, clear=True)
32 @patch.object(FakeGuiExt.objects, 'filter', MagicMock(return_value=[FakeModel]))
33 @patch.object(FakeModel, 'save')
34 def test_basic_creation(self, mock_save):
35 """
36 [TOSCA_Parser] Should save models defined in a TOSCA recipe
37 """
38 recipe = """
39tosca_definitions_version: tosca_simple_yaml_1_0
40
41description: Persist xos-sample-gui-extension
42
43imports:
44 - custom_types/xosguiextension.yaml
45
46topology_template:
47 node_templates:
48
49 # UI Extension
50 test:
51 type: tosca.nodes.XOSGuiExtension
52 properties:
53 name: test
54 files: /spa/extensions/test/vendor.js, /spa/extensions/test/app.js
55"""
56
57 parser = TOSCA_Parser(recipe)
58
59 parser.execute()
60
61 # checking that the model has been saved
62 mock_save.assert_called()
63
64 self.assertIsNotNone(parser.templates_by_model_name['test'])
65 self.assertEqual(parser.ordered_models_name, ['test'])
66
67 # check that the model was saved with the expected values
68 saved_model = parser.saved_model_by_name['test']
69 self.assertEqual(saved_model.name, 'test')
70 self.assertEqual(saved_model.files, '/spa/extensions/test/vendor.js, /spa/extensions/test/app.js')
71
72 @patch.dict(RESOURCES, mock_resources, clear=True)
73 @patch.object(FakeSite.objects, 'filter', MagicMock(return_value=[FakeModel]))
74 @patch.object(FakeUser.objects, 'filter', MagicMock(return_value=[FakeModel]))
75 @patch.object(FakeModel, 'save')
76 def test_related_models_creation(self, mock_save):
77 """
78 [TOSCA_Parser] Should save related models defined in a TOSCA recipe
79 """
80
81 recipe = """
82tosca_definitions_version: tosca_simple_yaml_1_0
83
84description: Create a new site with one user
85
86imports:
87 - custom_types/user.yaml
88 - custom_types/site.yaml
89
90topology_template:
91 node_templates:
92
93 # Site
94 site_onlab:
95 type: tosca.nodes.Site
96 properties:
97 name: Open Networking Lab
98 site_url: http://onlab.us/
99 hosts_nodes: True
100
101 # User
102 user_test:
103 type: tosca.nodes.User
104 properties:
105 username: test@opencord.org
106 email: test@opencord.org
107 password: mypwd
108 firstname: User
109 lastname: Test
110 is_admin: True
111 requirements:
112 - site:
113 node: site_onlab
114 relationship: tosca.relationships.BelongsToOne
115"""
116
117 parser = TOSCA_Parser(recipe)
118
119 parser.execute()
120
121 self.assertEqual(mock_save.call_count, 2)
122
123 self.assertIsNotNone(parser.templates_by_model_name['site_onlab'])
124 self.assertIsNotNone(parser.templates_by_model_name['user_test'])
125 self.assertEqual(parser.ordered_models_name, ['site_onlab', 'user_test'])
126
127 # check that the model was saved with the expected values
128 saved_site = parser.saved_model_by_name['site_onlab']
129 self.assertEqual(saved_site.name, 'Open Networking Lab')
130
131 saved_user = parser.saved_model_by_name['user_test']
132 self.assertEqual(saved_user.firstname, 'User')
133 self.assertEqual(saved_user.site_id, 1)