1# -*- coding: utf-8 -*-
2# Copyright 2020 Red Hat
3# GNU General Public License v3.0+
4# (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
5
6#############################################
7#                WARNING                    #
8#############################################
9#
10# This file is auto generated by the resource
11#   module builder playbook.
12#
13# Do not edit this file manually.
14#
15# Changes to this file will be over written
16#   by the resource module builder.
17#
18# Changes should be made in the model used to
19#   generate this file or in the resource module
20#   builder template.
21#
22#############################################
23
24from __future__ import absolute_import, division, print_function
25
26__metaclass__ = type
27
28from ansible_collections.junipernetworks.junos.tests.unit.compat.mock import (
29    patch,
30    MagicMock,
31)
32from ansible_collections.junipernetworks.junos.plugins.modules import (
33    junos_ospfv3,
34)
35from ansible_collections.junipernetworks.junos.tests.unit.modules.utils import (
36    set_module_args,
37)
38from .junos_module import TestJunosModule, load_fixture
39
40
41class TestJunosOspfv3Module(TestJunosModule):
42    module = junos_ospfv3
43
44    def setUp(self):
45        super(TestJunosOspfv3Module, self).setUp()
46        self.mock_lock_configuration = patch(
47            "ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos.lock_configuration"
48        )
49        self.lock_configuration = self.mock_lock_configuration.start()
50        self.mock_unlock_configuration = patch(
51            "ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.junos.unlock_configuration"
52        )
53        self.unlock_configuration = self.mock_unlock_configuration.start()
54        self.mock_load_config = patch(
55            "ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.config.ospfv3.ospfv3.load_config"
56        )
57        self.load_config = self.mock_load_config.start()
58
59        self.mock_validate_config = patch(
60            "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils.validate_config"
61        )
62        self.validate_config = self.mock_validate_config.start()
63
64        self.mock_commit_configuration = patch(
65            "ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.config.ospfv3.ospfv3.commit_configuration"
66        )
67        self.mock_commit_configuration = self.mock_commit_configuration.start()
68
69        self.mock_get_connection = patch(
70            "ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.facts.ospfv3.ospfv3."
71            "Ospfv3Facts.get_connection"
72        )
73        self.get_connection = self.mock_get_connection.start()
74
75        self.conn = self.get_connection()
76        self.conn.get = MagicMock()
77
78        self.mock_get_xml_dict = patch(
79            "ansible_collections.junipernetworks.junos.plugins.module_utils.network.junos.facts.ospfv3.ospfv3.Ospfv3Facts._get_xml_dict"
80        )
81        self._get_xml_dict = self.mock_get_xml_dict.start()
82
83    def tearDown(self):
84        super(TestJunosOspfv3Module, self).tearDown()
85        self.mock_get_connection.stop()
86        self.mock_load_config.stop()
87        self.mock_validate_config.stop()
88        self.mock_lock_configuration.stop()
89        self.mock_unlock_configuration.stop()
90        self.mock_commit_configuration.stop()
91
92    def load_fixtures(self, commands=None, format="text", changed=False):
93        self.get_connection.return_value = load_fixture(
94            "junos_ospfv3_config.cfg"
95        )
96        if changed:
97            self.load_config.return_value = load_fixture(
98                "get_configuration_rpc_reply_diff.txt"
99            )
100        else:
101            self.load_config.return_value = None
102
103    def test_junos_ospfv3_merged(self):
104        set_module_args(
105            dict(
106                config=[
107                    dict(
108                        router_id="10.200.16.75",
109                        areas=[
110                            dict(
111                                area_id="0.0.0.100",
112                                stub=dict(default_metric=200, set=True),
113                                interfaces=[
114                                    dict(
115                                        name="so-0/0/0.0", priority=3, metric=5
116                                    )
117                                ],
118                            )
119                        ],
120                    )
121                ],
122                state="merged",
123            )
124        )
125        commands = [
126            '<nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:ospf3>'
127            "<nc:area><nc:name>0.0.0.100</nc:name><nc:interface><nc:name>so-0/0/0.0</nc:name>"
128            "<nc:priority>3</nc:priority><nc:metric>5</nc:metric></nc:interface><nc:stub>"
129            "<nc:default-metric>200</nc:default-metric></nc:stub></nc:area></nc:ospf3></nc:protocols>",
130            '<nc:routing-options xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">'
131            "<nc:router-id>10.200.16.75</nc:router-id></nc:routing-options>",
132        ]
133        result = self.execute_module(changed=True)
134        self.assertEqual(sorted(result["commands"]), sorted(commands))
135
136    def test_junos_ospfv3_merged_idempotent(self):
137        self.get_connection.return_value = load_fixture(
138            "junos_ospfv3_config.cfg"
139        )
140        src = load_fixture("junos_ospfv3.cfg", content="str")
141        set_module_args(dict(src=src))
142        set_module_args(
143            dict(
144                config=[
145                    dict(
146                        router_id="30",
147                        areas=[
148                            dict(
149                                area_id="100",
150                                stub=dict(default_metric=10, set=True),
151                                interfaces=[
152                                    dict(
153                                        name="so-0/0/0.0", priority=3, metric=5
154                                    )
155                                ],
156                            )
157                        ],
158                    )
159                ],
160                state="merged",
161            )
162        )
163        self.execute_module(changed=False, commands=[])
164
165    def test_junos_ospfv3_replaced(self):
166        set_module_args(
167            dict(
168                config=[
169                    dict(
170                        router_id="10.200.16.75",
171                        areas=[
172                            dict(
173                                area_id="0.0.0.100",
174                                stub=dict(default_metric=200, set=True),
175                                interfaces=[
176                                    dict(
177                                        name="so-0/0/0.0", priority=3, metric=5
178                                    )
179                                ],
180                            )
181                        ],
182                    )
183                ],
184                state="replaced",
185            )
186        )
187        result = self.execute_module(changed=True)
188        commands = [
189            '<nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:ospf3>'
190            "<nc:area><nc:name>0.0.0.100</nc:name><nc:interface><nc:name>so-0/0/0.0</nc:name>"
191            "<nc:priority>3</nc:priority>"
192            "<nc:metric>5</nc:metric></nc:interface>"
193            "<nc:stub><nc:default-metric>200</nc:default-metric></nc:stub></nc:area></nc:ospf3>"
194            "<nc:ospf3><nc:area><nc:name>0.0.0.100</nc:name>"
195            "<nc:interface><nc:name>so-0/0/0.0</nc:name>"
196            "<nc:priority>3</nc:priority><nc:metric>5</nc:metric></nc:interface>"
197            "<nc:stub><nc:default-metric>200</nc:default-metric></nc:stub></nc:area></nc:ospf3></nc:protocols>",
198            '<nc:routing-options xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">'
199            "<nc:router-id>10.200.16.75</nc:router-id><nc:router-id>10.200.16.75</nc:router-id></nc:routing-options>",
200        ]
201        self.assertEqual(sorted(result["commands"]), commands)
202
203    def test_junos_ospfv3_replaced_idempotent(self):
204        self.get_connection.return_value = load_fixture(
205            "junos_ospfv3_config.cfg"
206        )
207        src = load_fixture("junos_ospfv3.cfg", content="str")
208        set_module_args(dict(src=src))
209        set_module_args(
210            dict(
211                config=[
212                    dict(
213                        router_id="30",
214                        areas=[
215                            dict(
216                                area_id="100",
217                                stub=dict(default_metric=10, set=True),
218                                interfaces=[
219                                    dict(
220                                        name="so-0/0/0.0", priority=3, metric=5
221                                    )
222                                ],
223                            )
224                        ],
225                    )
226                ],
227                state="replaced",
228            )
229        )
230
231        self.execute_module(changed=False, commands=[])
232
233    def test_junos_ospfv3_overridden(self):
234        set_module_args(
235            dict(
236                config=[
237                    dict(
238                        router_id="10.200.16.75",
239                        areas=[
240                            dict(
241                                area_id="0.0.0.100",
242                                stub=dict(default_metric=200, set=True),
243                                interfaces=[
244                                    dict(
245                                        name="so-0/0/0.0", priority=3, metric=5
246                                    )
247                                ],
248                            )
249                        ],
250                    )
251                ],
252                state="overridden",
253            )
254        )
255        commands = [
256            '<nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:ospf3 delete="delete"/><nc:ospf3>'
257            "<nc:area><nc:name>0.0.0.100</nc:name><nc:interface><nc:name>so-0/0/0.0</nc:name>"
258            "<nc:priority>3</nc:priority>"
259            "<nc:metric>5</nc:metric></nc:interface>"
260            "<nc:stub><nc:default-metric>200</nc:default-metric></nc:stub></nc:area></nc:ospf3></nc:protocols>",
261            '<nc:routing-options xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">'
262            "<nc:router-id>10.200.16.75</nc:router-id></nc:routing-options>",
263        ]
264        result = self.execute_module(changed=True)
265        self.assertEqual(sorted(result["commands"]), commands)
266
267    def test_junos_ospfv3_overridden_idempotent(self):
268        self.get_connection.return_value = load_fixture(
269            "junos_ospfv3_config.cfg"
270        )
271        src = load_fixture("junos_ospfv3.cfg", content="str")
272        set_module_args(dict(src=src))
273        set_module_args(
274            dict(
275                config=[
276                    dict(
277                        router_id="30",
278                        areas=[
279                            dict(
280                                area_id="100",
281                                stub=dict(default_metric=10, set=True),
282                                interfaces=[
283                                    dict(
284                                        name="so-0/0/0.0", priority=3, metric=5
285                                    )
286                                ],
287                            )
288                        ],
289                    )
290                ],
291                state="overridden",
292            )
293        )
294
295        self.execute_module(changed=False, commands=[])
296
297    def test_junos_ospfv3_delete(self):
298        set_module_args(
299            dict(
300                config=[
301                    dict(
302                        router_id="10.200.16.75",
303                        areas=[
304                            dict(
305                                area_id="0.0.0.100",
306                                stub=dict(default_metric=200, set=True),
307                                interfaces=[dict(name="so-0/0/0.0")],
308                            )
309                        ],
310                    )
311                ],
312                state="deleted",
313            )
314        )
315
316        commands = [
317            '<nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:ospf3>'
318            "<nc:area><nc:name>0.0.0.100</nc:name><nc:interface><nc:name>so-0/0/0.0</nc:name>"
319            "</nc:interface><nc:stub><nc:default-metric>200</nc:default-metric></nc:stub></nc:area></nc:ospf3></nc:protocols>",
320            '<nc:routing-options xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">'
321            "<nc:router-id>10.200.16.75</nc:router-id></nc:routing-options>",
322        ]
323
324        result = self.execute_module(changed=True)
325        self.assertEqual(sorted(result["commands"]), commands)
326
327    def test_junos_ospfv3_delete_idempotent(self):
328        set_module_args(
329            dict(
330                config=[
331                    dict(
332                        router_id="10.200.16.70",
333                        areas=[
334                            dict(
335                                area_id="0.0.0.100",
336                                stub=dict(default_metric=200, set=True),
337                                interfaces=[dict(name="so-0/0/0.0")],
338                            )
339                        ],
340                    )
341                ],
342                state="deleted",
343            )
344        )
345        self.execute_module(changed=False, commands=[])
346
347    def test_junos_ospfv3_parsed(self):
348
349        set_module_args(
350            dict(
351                running_config='<?xml version="1.0" encoding="UTF-8"?>\n'
352                '<rpc-reply message-id="urn:uuid:0cadb4e8-5bba-47f4-986e-72906227007f">\n'
353                '<configuration changed-seconds="1590139550" changed-localtime="2020-05-22 09:25:50 UTC">'
354                "\n<protocols>\n<ospf3>\n<area>\n<name>0.0.0.100</name>\n<stub>\n"
355                "<default-metric>200</default-metric>\n</stub>\n<interface>\n<name>so-0/0/0.0</name>"
356                "\n<passive></passive>\n<metric>5</metric>\n<priority>3</priority>\n"
357                "</interface>\n</area>\n</ospf3>\n</protocols>\n<routing-options>\n"
358                "<router-id>10.200.16.75</router-id>\n</routing-options>\n"
359                "</configuration>\n</rpc-reply>",
360                state="parsed",
361            )
362        )
363        result = self.execute_module(changed=False)
364        self.assertEqual([], result["parsed"])
365
366    def test_junos_ospfv3_rendered(self):
367        set_module_args(
368            dict(
369                config=[
370                    dict(
371                        router_id="10.200.16.75",
372                        areas=[
373                            dict(
374                                area_id="0.0.0.100",
375                                stub=dict(default_metric=200, set=True),
376                                interfaces=[
377                                    dict(
378                                        name="so-0/0/0.0", priority=3, metric=5
379                                    )
380                                ],
381                            )
382                        ],
383                    )
384                ],
385                state="rendered",
386            )
387        )
388        commands = (
389            '<nc:protocols xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><nc:ospf3>'
390            "<nc:area><nc:name>0.0.0.100</nc:name><nc:interface><nc:name>so-0/0/0.0</nc:name>"
391            "<nc:priority>3</nc:priority><nc:metric>5</nc:metric></nc:interface><nc:stub>"
392            "<nc:default-metric>200</nc:default-metric></nc:stub></nc:area></nc:ospf3></nc:protocols>"
393        )
394        self.execute_module(changed=False, commands=commands)
395