Blame SOURCES/show-only-warning-when-crm_mon-xml-is-invalid.patch

715401
From 2b49224c32d08bf4c008333f251c8f4ea1def4ef Mon Sep 17 00:00:00 2001
15f218
From: Ivan Devat <idevat@redhat.com>
15f218
Date: Mon, 29 Aug 2016 18:16:41 +0200
715401
Subject: [PATCH 5/6] show only warning when crm_mon xml is invalid
15f218
15f218
---
f778fe
 pcs/lib/pacemaker/state.py           | 13 ++++++++++---
f778fe
 pcs/lib/pacemaker/test/test_state.py | 24 ++++++++++++++++++++----
15f218
 2 files changed, 30 insertions(+), 7 deletions(-)
15f218
f778fe
diff --git a/pcs/lib/pacemaker/state.py b/pcs/lib/pacemaker/state.py
a3a2ad
index 6b87d8b9..6b71612d 100644
f778fe
--- a/pcs/lib/pacemaker/state.py
f778fe
+++ b/pcs/lib/pacemaker/state.py
a3a2ad
@@ -144,10 +144,17 @@ class _NodeSection(_Element):
f778fe
 def get_cluster_state_dom(xml):
15f218
     try:
f778fe
         dom = xml_fromstring(xml)
15f218
-        if os.path.isfile(settings.crm_mon_schema):
15f218
-            etree.RelaxNG(file=settings.crm_mon_schema).assertValid(dom)
15f218
+        if(
15f218
+            os.path.isfile(settings.crm_mon_schema)
15f218
+            and
15f218
+            not etree.RelaxNG(file=settings.crm_mon_schema).validate(dom)
15f218
+        ):
15f218
+            print(
15f218
+                "Warning: xml with cluster status does not conform to the"
15f218
+                " crm_mon schema"
15f218
+            )
15f218
         return dom
15f218
-    except (etree.XMLSyntaxError, etree.DocumentInvalid):
15f218
+    except etree.XMLSyntaxError:
15f218
         raise LibraryError(reports.cluster_state_invalid_format())
15f218
 
15f218
 class ClusterState(_Element):
f778fe
diff --git a/pcs/lib/pacemaker/test/test_state.py b/pcs/lib/pacemaker/test/test_state.py
a3a2ad
index 13628f44..5ea20d98 100644
f778fe
--- a/pcs/lib/pacemaker/test/test_state.py
f778fe
+++ b/pcs/lib/pacemaker/test/test_state.py
a3a2ad
@@ -4,6 +4,14 @@ from __future__ import (
a3a2ad
     print_function,
15f218
 )
15f218
 
15f218
+import sys
15f218
+try:
15f218
+    from cStringIO import StringIO
15f218
+except ImportError:
15f218
+    #python 3
15f218
+    from io import StringIO
15f218
+
15f218
+
f778fe
 from pcs.test.tools.pcs_unittest import TestCase, mock
15f218
 from lxml import etree
15f218
 
a3a2ad
@@ -86,16 +94,24 @@ class ClusterStatusTest(TestBase):
15f218
         )
15f218
 
15f218
     def test_refuse_invalid_document(self):
15f218
+        #commands writes to stdout
15f218
+        #we want clean test output, so we capture it
15f218
+        tmp_stdout = sys.stdout
15f218
+        stdout_catpture = StringIO()
15f218
+        sys.stdout = stdout_catpture
f778fe
+
15f218
         self.covered_status.append_to_first_tag_name(
15f218
             'nodes',
15f218
             '<node without="required attributes" />'
15f218
         )
f778fe
 
15f218
-        assert_raise_library_error(
15f218
-            lambda: ClusterState(str(self.covered_status)),
15f218
-            (severities.ERROR, report_codes.BAD_CLUSTER_STATE_FORMAT, {})
15f218
+        ClusterState(str(self.covered_status))
15f218
+        self.assertEqual(
15f218
+            stdout_catpture.getvalue(),
15f218
+            "Warning: xml with cluster status does not conform to the crm_mon"
15f218
+                " schema\n"
15f218
         )
f778fe
-
15f218
+        sys.stdout = tmp_stdout
15f218
 
15f218
 class WorkWithClusterStatusNodesTest(TestBase):
15f218
     def fixture_node_string(self, **kwargs):
15f218
-- 
715401
2.21.0
15f218