1import salt.modules.jboss7 as jboss7
2from salt.utils.odict import OrderedDict
3from tests.support.mixins import LoaderModuleMockMixin
4from tests.support.mock import MagicMock
5from tests.support.unit import TestCase
6
7
8class JBoss7TestCase(TestCase, LoaderModuleMockMixin):
9
10    jboss_config = {}
11    org_run_operation = None
12
13    def setup_loader_modules(self):
14        self.org_run_operation = MagicMock()
15        self.addCleanup(delattr, self, "org_run_operation")
16        return {
17            jboss7: {"__salt__": {"jboss7_cli.run_operation": self.org_run_operation}}
18        }
19
20    def test_create_simple_binding(self):
21        jboss7.create_simple_binding(self.jboss_config, "java:global/env", "DEV")
22
23        self.org_run_operation.assert_called_with(
24            self.jboss_config,
25            '/subsystem=naming/binding="java:global/env":add(binding-type=simple,'
26            ' value="DEV")',
27        )
28
29    def test_create_simple_binding_with_backslash(self):
30        jboss7.create_simple_binding(self.jboss_config, "java:global/env", r"DEV\2")
31
32        self.org_run_operation.assert_called_with(
33            self.jboss_config,
34            r'/subsystem=naming/binding="java:global/env":add(binding-type=simple,'
35            r' value="DEV\\\\2")',
36        )
37
38    def test_update_binding(self):
39        jboss7.update_simple_binding(self.jboss_config, "java:global/env", "INT")
40
41        self.org_run_operation.assert_called_with(
42            self.jboss_config,
43            '/subsystem=naming/binding="java:global/env":write-attribute(name=value,'
44            ' value="INT")',
45        )
46
47    def test_update_binding_with_backslash(self):
48        jboss7.update_simple_binding(self.jboss_config, "java:global/env", r"INT\2")
49
50        self.org_run_operation.assert_called_with(
51            self.jboss_config,
52            r'/subsystem=naming/binding="java:global/env":write-attribute(name=value,'
53            r' value="INT\\\\2")',
54        )
55
56    def test_read_binding(self):
57        def cli_command_response(jboss_config, cli_command):
58            if (
59                cli_command
60                == '/subsystem=naming/binding="java:global/env":read-resource'
61            ):
62                return {
63                    "outcome": "success",
64                    "result": {"binding-type": "simple", "value": "DEV"},
65                }
66
67        self.org_run_operation.side_effect = cli_command_response
68
69        result = jboss7.read_simple_binding(self.jboss_config, "java:global/env")
70        self.assertEqual(result["outcome"], "success")
71        self.assertEqual(result["result"]["value"], "DEV")
72
73    def test_create_datasource_all_properties_included(self):
74        def cli_command_response(jboss_config, cli_command, fail_on_error=False):
75            if (
76                cli_command
77                == '/subsystem=datasources/data-source="appDS":read-resource-description'
78            ):
79                return {
80                    "outcome": "success",
81                    "result": {
82                        "attributes": {
83                            "driver-name": {"type": "STRING"},
84                            "connection-url": {"type": "STRING"},
85                            "jndi-name": {"type": "STRING"},
86                            "user-name": {"type": "STRING"},
87                            "password": {"type": "STRING"},
88                        }
89                    },
90                }
91
92        self.org_run_operation.side_effect = cli_command_response
93
94        datasource_properties = OrderedDict()
95        datasource_properties["driver-name"] = "mysql"
96        datasource_properties["connection-url"] = "jdbc:mysql://localhost:3306/app"
97        datasource_properties["jndi-name"] = "java:jboss/datasources/appDS"
98        datasource_properties["user-name"] = "app"
99        datasource_properties["password"] = "app_password"
100
101        jboss7.create_datasource(self.jboss_config, "appDS", datasource_properties)
102
103        self.org_run_operation.assert_called_with(
104            self.jboss_config,
105            '/subsystem=datasources/data-source="appDS":add(driver-name="mysql",connection-url="jdbc:mysql://localhost:3306/app",jndi-name="java:jboss/datasources/appDS",user-name="app",password="app_password")',
106            fail_on_error=False,
107        )
108
109    def test_create_datasource_format_boolean_value_when_string(self):
110        def cli_command_response(jboss_config, cli_command, fail_on_error=False):
111            if (
112                cli_command
113                == '/subsystem=datasources/data-source="appDS":read-resource-description'
114            ):
115                return {
116                    "outcome": "success",
117                    "result": {"attributes": {"use-ccm": {"type": "BOOLEAN"}}},
118                }
119
120        self.org_run_operation.side_effect = cli_command_response
121        datasource_properties = OrderedDict()
122        datasource_properties["use-ccm"] = "true"
123
124        jboss7.create_datasource(self.jboss_config, "appDS", datasource_properties)
125
126        self.org_run_operation.assert_called_with(
127            self.jboss_config,
128            '/subsystem=datasources/data-source="appDS":add(use-ccm=true)',
129            fail_on_error=False,
130        )
131
132    def test_create_datasource_format_boolean_value_when_boolean(self):
133        def cli_command_response(jboss_config, cli_command, fail_on_error=False):
134            if (
135                cli_command
136                == '/subsystem=datasources/data-source="appDS":read-resource-description'
137            ):
138                return {
139                    "outcome": "success",
140                    "result": {"attributes": {"use-ccm": {"type": "BOOLEAN"}}},
141                }
142
143        self.org_run_operation.side_effect = cli_command_response
144        datasource_properties = OrderedDict()
145        datasource_properties["use-ccm"] = True
146
147        jboss7.create_datasource(self.jboss_config, "appDS", datasource_properties)
148
149        self.org_run_operation.assert_called_with(
150            self.jboss_config,
151            '/subsystem=datasources/data-source="appDS":add(use-ccm=true)',
152            fail_on_error=False,
153        )
154
155    def test_create_datasource_format_int_value_when_int(self):
156        def cli_command_response(jboss_config, cli_command, fail_on_error=False):
157            if (
158                cli_command
159                == '/subsystem=datasources/data-source="appDS":read-resource-description'
160            ):
161                return {
162                    "outcome": "success",
163                    "result": {"attributes": {"min-pool-size": {"type": "INT"}}},
164                }
165
166        self.org_run_operation.side_effect = cli_command_response
167        datasource_properties = OrderedDict()
168        datasource_properties["min-pool-size"] = 15
169
170        jboss7.create_datasource(self.jboss_config, "appDS", datasource_properties)
171
172        self.org_run_operation.assert_called_with(
173            self.jboss_config,
174            '/subsystem=datasources/data-source="appDS":add(min-pool-size=15)',
175            fail_on_error=False,
176        )
177
178    def test_create_datasource_format_int_value_when_string(self):
179        def cli_command_response(jboss_config, cli_command, fail_on_error=False):
180            if (
181                cli_command
182                == '/subsystem=datasources/data-source="appDS":read-resource-description'
183            ):
184                return {
185                    "outcome": "success",
186                    "result": {"attributes": {"min-pool-size": {"type": "INT"}}},
187                }
188
189        self.org_run_operation.side_effect = cli_command_response
190        datasource_properties = OrderedDict()
191        datasource_properties["min-pool-size"] = "15"
192
193        jboss7.create_datasource(self.jboss_config, "appDS", datasource_properties)
194
195        self.org_run_operation.assert_called_with(
196            self.jboss_config,
197            '/subsystem=datasources/data-source="appDS":add(min-pool-size=15)',
198            fail_on_error=False,
199        )
200
201    def test_read_datasource(self):
202        def cli_command_response(jboss_config, cli_command):
203            if (
204                cli_command
205                == '/subsystem=datasources/data-source="appDS":read-resource'
206            ):
207                return {
208                    "outcome": "success",
209                    "result": {
210                        "driver-name": "mysql",
211                        "connection-url": "jdbc:mysql://localhost:3306/app",
212                        "jndi-name": "java:jboss/datasources/appDS",
213                        "user-name": "app",
214                        "password": "app_password",
215                    },
216                }
217
218        self.org_run_operation.side_effect = cli_command_response
219
220        ds_result = jboss7.read_datasource(self.jboss_config, "appDS")
221        ds_properties = ds_result["result"]
222
223        self.assertEqual(ds_properties["driver-name"], "mysql")
224        self.assertEqual(
225            ds_properties["connection-url"], "jdbc:mysql://localhost:3306/app"
226        )
227        self.assertEqual(ds_properties["jndi-name"], "java:jboss/datasources/appDS")
228        self.assertEqual(ds_properties["user-name"], "app")
229        self.assertEqual(ds_properties["password"], "app_password")
230
231    def test_update_datasource(self):
232        datasource_properties = {
233            "driver-name": "mysql",
234            "connection-url": "jdbc:mysql://localhost:3306/app",
235            "jndi-name": "java:jboss/datasources/appDS",
236            "user-name": "newuser",
237            "password": "app_password",
238        }
239
240        def cli_command_response(jboss_config, cli_command, fail_on_error=False):
241            if (
242                cli_command
243                == '/subsystem=datasources/data-source="appDS":read-resource-description'
244            ):
245                return {
246                    "outcome": "success",
247                    "result": {
248                        "attributes": {
249                            "driver-name": {"type": "STRING"},
250                            "connection-url": {"type": "STRING"},
251                            "jndi-name": {"type": "STRING"},
252                            "user-name": {"type": "STRING"},
253                            "password": {"type": "STRING"},
254                        }
255                    },
256                }
257
258            elif (
259                cli_command
260                == '/subsystem=datasources/data-source="appDS":read-resource'
261            ):
262                return {
263                    "outcome": "success",
264                    "result": {
265                        "driver-name": "mysql",
266                        "connection-url": "jdbc:mysql://localhost:3306/app",
267                        "jndi-name": "java:jboss/datasources/appDS",
268                        "user-name": "app",
269                        "password": "app_password",
270                    },
271                }
272
273            elif (
274                cli_command
275                == '/subsystem=datasources/data-source="appDS":write-attribute(name="user-name",value="newuser")'
276            ):
277                return {"outcome": "success", "success": True}
278
279        self.org_run_operation.side_effect = cli_command_response
280
281        jboss7.update_datasource(self.jboss_config, "appDS", datasource_properties)
282
283        self.org_run_operation.assert_any_call(
284            self.jboss_config,
285            '/subsystem=datasources/data-source="appDS":write-attribute(name="user-name",value="newuser")',
286            fail_on_error=False,
287        )
288