def test__cannot_connect(self, module_patch, import_patch):
        mock_module = setup_module(module_patch)
        self.setup_session_root(import_patch)
        self.mock_session.start.side_effect = Exception("cannot connect")

        main()

        import_patch.assert_called_once_with("vspk.v5_0")
        mock_module.fail_json.assert_called_once_with(
            msg="Could not establish connection to VSD cannot connect", rc=1)
    def test__exception(self, module_patch, import_patch):
        mock_module = setup_module(module_patch)
        mock_root = self.setup_session_root(import_patch)
        self.setup_sample_domains(mock_root)
        self.l3_domains[1].save.side_effect = Exception("cannot save")

        main()

        import_patch.assert_called_once_with("vspk.v5_0")
        mock_module.fail_json.assert_called_once_with(
            msg="Could not set maintainance mode : cannot save", rc=1)
    def test__cannot_import(self, module_patch, import_patch):
        mock_module = setup_module(module_patch)
        import_patch.side_effect = ImportError("cannot import")

        main()

        import_patch.assert_called_once_with("vspk.v5_0")
        mock_module.fail_json.assert_called_once_with(
            msg='vspk is required for this module, or '
            'API version specified does not exist.',
            rc=1)
    def test__no_changes(self, module_patch, import_patch):
        mock_module = setup_module(module_patch)
        mock_root = self.setup_session_root(import_patch)
        self.setup_sample_domains(mock_root)
        self.l3_domains[1].save.side_effect = self.get_mock_bambou_error(
            400, "There are no attribute changes")

        main()

        import_patch.assert_called_once_with("vspk.v5_0")
        mock_module.fail_json.assert_not_called()
        mock_module.exit_json.assert_called_once_with(
            rc=0, changed=True, result="Maintainance mode is already enabled")
    def test__bambou_error(self, module_patch, import_patch):
        mock_module = setup_module(module_patch)
        mock_root = self.setup_session_root(import_patch)
        self.setup_sample_domains(mock_root)
        self.l3_domains[1].save.side_effect = self.get_mock_bambou_error(
            400, "save error")

        main()

        import_patch.assert_called_once_with("vspk.v5_0")
        mock_module.fail_json.assert_called_once_with(
            msg="Could not set maintainance mode : "
            "[HTTP 400(save error)] save error",
            rc=1)
    def test_enable__success(self, module_patch, import_patch):
        mock_module = setup_module(module_patch)
        mock_root = self.setup_session_root(import_patch)
        self.setup_sample_domains(mock_root)

        main()

        self.validate_session(import_patch)
        self.validate_sample_domains(mock_root, "ENABLED")

        mock_module.fail_json.assert_not_called()
        mock_module.exit_json.assert_called_once_with(
            rc=0,
            changed=True,
            result="Maintainance mode for all non shared L3 domains-enabled, "
            "Maintainance mode for all non shared L2 domains-enabled,")
    def test_enable__no_domains(self, module_patch, import_patch):
        mock_module = setup_module(module_patch)
        mock_root = self.setup_session_root(import_patch)
        self.setup_sample_domains(mock_root)
        mock_root.domains.get.return_value = list()
        mock_root.l2_domains.get.return_value = list()

        main()

        self.validate_session(import_patch)

        mock_module.fail_json.assert_not_called()
        mock_module.exit_json.assert_called_once_with(
            rc=0,
            changed=True,
            result="No L3 domains found to enabled maintainance mode, "
            "No L2 domains found to enabled maintainance mode")
    def test_disable__success(self, module_patch, import_patch):
        params = dict(TEST_PARAMS)
        params["state"] = "disabled"
        mock_module = setup_module(module_patch, params)
        mock_root = self.setup_session_root(import_patch)
        self.setup_sample_domains(mock_root)

        main()

        self.validate_session(import_patch)
        self.validate_sample_domains(mock_root, "DISABLED")

        mock_module.fail_json.assert_not_called()
        mock_module.exit_json.assert_called_once_with(
            rc=0,
            changed=True,
            result="Maintainance mode for all non shared L3 domains-disabled, "
            "Maintainance mode for all non shared L2 domains-disabled,")