From 59483513a360615a6c4291fcb51db2351cd306d1 Mon Sep 17 00:00:00 2001
From: Christian Fetzer <fetzer.ch@gmail.com>
Date: Sun, 31 Aug 2014 21:43:55 +0200
Subject: [PATCH] valgrind publisher: Add parameters to fail build

Add optional parameters fail-no-reports and fail-invalid-reports that
set the build status to failure if no valgrind reports are available
or if the reports are malformed.

This parameters have been added to the Jenkins Valgrind Plugin
version 0.21.

Change-Id: I558802896f24a596f07957ab58a83fcaf6054093
---
 jenkins_jobs/modules/publishers.py         | 8 ++++++++
 tests/publishers/fixtures/valgrind001.xml  | 2 ++
 tests/publishers/fixtures/valgrind001.yaml | 2 ++
 3 files changed, 12 insertions(+)

diff --git a/jenkins_jobs/modules/publishers.py b/jenkins_jobs/modules/publishers.py
index 6bb0b9827..0e4001768 100644
--- a/jenkins_jobs/modules/publishers.py
+++ b/jenkins_jobs/modules/publishers.py
@@ -3558,6 +3558,10 @@ def valgrind(parser, xml_parent, data):
                 :failed: * **invalid-read-write** (`int`)
                          * **definitely-lost** (`int`)
                          * **total** (`int`)
+    :arg bool fail-no-reports: Fail build if no reports are found
+      (default false)
+    :arg bool fail-invalid-reports: Fail build if reports are malformed
+      (default false)
     :arg bool publish-if-aborted: Publish results for aborted builds
       (default false)
     :arg bool publish-if-failed: Publish results for failed builds
@@ -3589,6 +3593,10 @@ def valgrind(parser, xml_parent, data):
         XML.SubElement(p, '%sThresholdTotal' % threshold).text \
             = str(dthreshold.get('total', ''))
 
+    XML.SubElement(p, 'failBuildOnMissingReports').text = str(
+        data.get('fail-no-reports', False)).lower()
+    XML.SubElement(p, 'failBuildOnInvalidReports').text = str(
+        data.get('fail-invalid-reports', False)).lower()
     XML.SubElement(p, 'publishResultsForAbortedBuilds').text = str(
         data.get('publish-if-aborted', False)).lower()
     XML.SubElement(p, 'publishResultsForFailedBuilds').text = str(
diff --git a/tests/publishers/fixtures/valgrind001.xml b/tests/publishers/fixtures/valgrind001.xml
index 159a7a2b2..758a01aa8 100644
--- a/tests/publishers/fixtures/valgrind001.xml
+++ b/tests/publishers/fixtures/valgrind001.xml
@@ -10,6 +10,8 @@
         <failThresholdInvalidReadWrite>4</failThresholdInvalidReadWrite>
         <failThresholdDefinitelyLost>5</failThresholdDefinitelyLost>
         <failThresholdTotal>6</failThresholdTotal>
+        <failBuildOnMissingReports>true</failBuildOnMissingReports>
+        <failBuildOnInvalidReports>true</failBuildOnInvalidReports>
         <publishResultsForAbortedBuilds>true</publishResultsForAbortedBuilds>
         <publishResultsForFailedBuilds>true</publishResultsForFailedBuilds>
       </valgrindPublisherConfig>
diff --git a/tests/publishers/fixtures/valgrind001.yaml b/tests/publishers/fixtures/valgrind001.yaml
index c57ffe16c..0373b6b4c 100644
--- a/tests/publishers/fixtures/valgrind001.yaml
+++ b/tests/publishers/fixtures/valgrind001.yaml
@@ -10,5 +10,7 @@ publishers:
           invalid-read-write: 4
           definitely-lost: 5
           total: 6
+      fail-no-reports: true
+      fail-invalid-reports: true
       publish-if-aborted: true
       publish-if-failed: true