/*******************************************************************************
* Copyright (c) 2017 Synopsys, Inc
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Synopsys, Inc - initial implementation and documentation
*******************************************************************************/
package jenkins.plugins.coverity;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import com.thoughtworks.xstream.XStream;
import hudson.util.XStream2;
public class CoverityPublisherTest {
@Test
public void getCimStream_fromOldPre12Configuration() {
String oldJobXml = "<jenkins.plugins.coverity.CoverityPublisher plugin=\"coverity@1.2.0\">\n" +
" <cimInstance>test-cim-instance</cimInstance>\n" +
" <project>test-cim-project</project>\n" +
" <stream>test-cim-stream</stream>\n" +
" <defectFilters>\n" +
" <classifications>\n" +
" <string>Unclassified</string>\n" +
" <string>Pending</string>\n" +
" <string>Bug</string>\n" +
" <string>Untested</string>\n" +
" </classifications>\n" +
" <actions>\n" +
" <string>Undecided</string>\n" +
" <string>Fix Required</string>\n" +
" <string>Fix Submitted</string>\n" +
" <string>Modeling Required</string>\n" +
" <string>Ignore</string>\n" +
" </actions>\n" +
" <severities>\n" +
" <string>Unspecified</string>\n" +
" <string>Major</string>\n" +
" <string>Moderate</string>\n" +
" <string>Minor</string>\n" +
" </severities>\n" +
" <components>\n" +
" <string>Default.Other</string>\n" +
" </components>\n" +
" <checkers>\n" +
" <string>ALLOC_FREE_MISMATCH</string>\n" +
" <string>BAD_EQ</string>\n" +
" <string>BAD_EQ_TYPES</string>\n" +
" <string>BAD_FREE</string>\n" +
" <string>DEADCODE</string>\n" +
" <string>DELETE_ARRAY</string>\n" +
" <string>DELETE_VOID</string> \n" +
" <string>FORWARD_NULL</string>\n" +
" <string>NULL_RETURNS</string>\n" +
" <string>OVERFLOW_BEFORE_WIDEN</string>\n" +
" <string>RESOURCE_LEAK</string>\n" +
" <string>UNINIT</string>\n" +
" </checkers>\n" +
" <ignoredCheckers/>\n" +
" <impacts>\n" +
" <string>High</string>\n" +
" <string>Medium</string>\n" +
" <string>Low</string>\n" +
" </impacts>\n" +
" </defectFilters>\n" +
" <invocationAssistance>\n" +
" <javaWarFilesNames/>\n" +
" <csharpAutomaticAssemblies>false</csharpAutomaticAssemblies>\n" +
" <csharpMsvsca>false</csharpMsvsca>\n" +
" <isUsingMisra>false</isUsingMisra>\n" +
" <isCompiledSrc>false</isCompiledSrc>\n" +
" <isScriptSrc>false</isScriptSrc>\n" +
" <isUsingPostCovBuildCmd>false</isUsingPostCovBuildCmd>\n" +
" <isUsingPostCovAnalyzeCmd>false</isUsingPostCovAnalyzeCmd>\n" +
" <useAdvancedParser>false</useAdvancedParser>\n" +
" </invocationAssistance>\n" +
" <failBuild>false</failBuild>\n" +
" <unstable>true</unstable>\n" +
" <keepIntDir>false</keepIntDir>\n" +
" <skipFetchingDefects>false</skipFetchingDefects>\n" +
" <hideChart>false</hideChart>\n" +
" <unstableBuild>false</unstableBuild>\n" +
" </jenkins.plugins.coverity.CoverityPublisher>";
XStream xstream = new XStream2();
final CoverityPublisher publisher = (CoverityPublisher)xstream.fromXML(oldJobXml);
assertNotNull(publisher);
final CIMStream stream = publisher.getCimStream();
assertNotNull(stream);
assertEquals("test-cim-instance", stream.getInstance());
assertEquals("test-cim-project", stream.getProject());
assertEquals("test-cim-stream", stream.getStream());
final DefectFilters defectFilters = stream.getDefectFilters();
assertNotNull(defectFilters);
assertEquals(4, defectFilters.getClassifications().size());
assertEquals(5, defectFilters.getActions().size());
assertEquals(4, defectFilters.getSeverities().size());
assertEquals(1, defectFilters.getComponents().size());
assertEquals(12, defectFilters.getCheckersList().size());
assertEquals(0, defectFilters.getIgnoredChecker().size());
assertEquals(3, defectFilters.getImpacts().size());
}
@Test
public void getCimStream_fromOldPre190Configuration_withMultipleStreams() {
String oldJobXml = "<jenkins.plugins.coverity.CoverityPublisher plugin=\"coverity@1.8.1\">\n" +
" <cimStreams>\n" +
" <jenkins.plugins.coverity.CIMStream>\n" +
" <instance>first-cim-instance</instance>\n" +
" <project>first-cim-project</project>\n" +
" <stream>first-cim-stream</stream>\n" +
" <id>1955941757</id>\n" +
" <defectFilters>\n" +
" <classifications>\n" +
" <string>Unclassified</string>\n" +
" <string>Pending</string>\n" +
" <string>Bug</string>\n" +
" <string>Untested</string>\n" +
" </classifications>\n" +
" <actions>\n" +
" <string>Undecided</string>\n" +
" <string>Fix Required</string>\n" +
" <string>Fix Submitted</string>\n" +
" <string>Modeling Required</string>\n" +
" <string>Ignore</string>\n" +
" </actions>\n" +
" <severities>\n" +
" <string>Unspecified</string>\n" +
" <string>Major</string>\n" +
" <string>Moderate</string>\n" +
" <string>Minor</string>\n" +
" </severities>\n" +
" <components>\n" +
" <string>Default.Other</string>\n" +
" </components>\n" +
" <checkers/>\n" +
" <ignoredCheckers/>\n" +
" <impacts/>\n" +
" </defectFilters>\n" +
" <invocationAssistanceOverride>\n" +
" <buildArguments>--return-emit-failures</buildArguments>\n" +
" <analyzeArguments>-j 4 --all</analyzeArguments>\n" +
" <javaWarFilesNames/>\n" +
" <csharpAutomaticAssemblies>false</csharpAutomaticAssemblies>\n" +
" <csharpMsvsca>false</csharpMsvsca>\n" +
" <isUsingMisra>false</isUsingMisra>\n" +
" <isScriptSrc>false</isScriptSrc>\n" +
" <isUsingPostCovBuildCmd>false</isUsingPostCovBuildCmd>\n" +
" <isUsingPostCovAnalyzeCmd>false</isUsingPostCovAnalyzeCmd>\n" +
" <useAdvancedParser>false</useAdvancedParser>\n" +
" </invocationAssistanceOverride>" +
" </jenkins.plugins.coverity.CIMStream>\n" +
" <jenkins.plugins.coverity.CIMStream>\n" +
" <instance>test-cim-instance</instance>\n" +
" <project>another projectt</project>\n" +
" <stream>another stream</stream>\n" +
" <id>0123456789</id>\n" +
" <defectFilters>\n" +
" <classifications>\n" +
" <string>Unclassified</string>\n" +
" </classifications>\n" +
" <actions>\n" +
" <string>Undecided</string>\n" +
" </actions>\n" +
" <severities>\n" +
" <string>Unspecified</string>\n" +
" </severities>\n" +
" <components>\n" +
" <string>Default.Other</string>\n" +
" </components>\n" +
" <checkers>\n" +
" <string>DEADCODE</string>\n" +
" <string>FORWARD_NULL</string>\n" +
" <string>RESOURCE_LEAK</string>\n" +
" </checkers>\n" +
" <ignoredCheckers/>\n" +
" <impacts>\n" +
" <string>High</string>\n" +
" <string>Medium</string>\n" +
" <string>Low</string>\n" +
" </impacts>\n" +
" </defectFilters>\n" +
" </jenkins.plugins.coverity.CIMStream>\n" +
" </cimStreams>\n" +
" <invocationAssistance>\n" +
" <javaWarFilesNames/>\n" +
" <csharpAutomaticAssemblies>false</csharpAutomaticAssemblies>\n" +
" <csharpMsvsca>false</csharpMsvsca>\n" +
" <isUsingMisra>false</isUsingMisra>\n" +
" <isCompiledSrc>false</isCompiledSrc>\n" +
" <isScriptSrc>true</isScriptSrc>\n" +
" <isUsingPostCovBuildCmd>false</isUsingPostCovBuildCmd>\n" +
" <isUsingPostCovAnalyzeCmd>false</isUsingPostCovAnalyzeCmd>\n" +
" <useAdvancedParser>false</useAdvancedParser>\n" +
" </invocationAssistance>\n" +
" <failBuild>false</failBuild>\n" +
" <unstable>false</unstable>\n" +
" <keepIntDir>false</keepIntDir>\n" +
" <skipFetchingDefects>false</skipFetchingDefects>\n" +
" <hideChart>false</hideChart>\n" +
" <unstableBuild>false</unstableBuild>\n" +
" </jenkins.plugins.coverity.CoverityPublisher>";
XStream xstream = new XStream2();
final CoverityPublisher publisher = (CoverityPublisher)xstream.fromXML(oldJobXml);
assertNotNull(publisher);
final CIMStream stream = publisher.getCimStream();
assertNotNull(stream);
assertEquals("first-cim-instance", stream.getInstance());
assertEquals("first-cim-project", stream.getProject());
assertEquals("first-cim-stream", stream.getStream());
final DefectFilters defectFilters = stream.getDefectFilters();
assertNotNull(defectFilters);
assertEquals(4, defectFilters.getClassifications().size());
assertEquals(5, defectFilters.getActions().size());
assertEquals(4, defectFilters.getSeverities().size());
assertEquals(1, defectFilters.getComponents().size());
assertEquals(0, defectFilters.getCheckersList().size());
assertEquals(0, defectFilters.getIgnoredChecker().size());
assertEquals(0, defectFilters.getImpacts().size());
// verify invocation assistance overrides
final InvocationAssistance invocationAssistance = publisher.getInvocationAssistance();
assertNotNull(invocationAssistance);
assertEquals("--return-emit-failures", invocationAssistance.getBuildArguments());
assertEquals("-j 4 --all", invocationAssistance.getAnalyzeArguments());
}
@Test
public void getInvocationAssistance_fromOldPre190Configuration() {
String oldJobXml = "<jenkins.plugins.coverity.CoverityPublisher plugin=\"coverity@1.8.1\">\n" +
" <cimStreams>\n" +
" <jenkins.plugins.coverity.CIMStream>\n" +
" <instance>first-cim-instance</instance>\n" +
" <project>first-cim-project</project>\n" +
" <stream>first-cim-stream</stream>\n" +
" <id>1955941757</id>\n" +
" <defectFilters/>\n" +
" </jenkins.plugins.coverity.CIMStream>\n" +
" </cimStreams>\n" +
" <invocationAssistance>\n" +
" <javaWarFilesNames/>\n" +
" <csharpAutomaticAssemblies>false</csharpAutomaticAssemblies>\n" +
" <csharpMsvsca>false</csharpMsvsca>\n" +
" <isUsingMisra>true</isUsingMisra>\n" +
" <misraConfigFile>misra.config</misraConfigFile>\n" +
" <isCompiledSrc>false</isCompiledSrc>\n" +
" <isScriptSrc>true</isScriptSrc>\n" +
" <isUsingPostCovBuildCmd>true</isUsingPostCovBuildCmd>\n" +
" <postCovBuildCmd>post cov build</postCovBuildCmd>\n" +
" <isUsingPostCovAnalyzeCmd>true</isUsingPostCovAnalyzeCmd>\n" +
" <postCovAnalyzeCmd>post cov analyze</postCovAnalyzeCmd>\n" +
" <useAdvancedParser>false</useAdvancedParser>\n" +
" </invocationAssistance>\n" +
" <failBuild>false</failBuild>\n" +
" <unstable>false</unstable>\n" +
" <keepIntDir>false</keepIntDir>\n" +
" <skipFetchingDefects>false</skipFetchingDefects>\n" +
" <hideChart>false</hideChart>\n" +
" <unstableBuild>false</unstableBuild>\n" +
" </jenkins.plugins.coverity.CoverityPublisher>";
XStream xstream = new XStream2();
final CoverityPublisher publisher = (CoverityPublisher)xstream.fromXML(oldJobXml);
assertNotNull(publisher);
final InvocationAssistance invocationAssistance = publisher.getInvocationAssistance();
assertNotNull(invocationAssistance);
assertTrue(invocationAssistance.getIsUsingMisra());
assertEquals("misra.config", invocationAssistance.getMisraConfigFile());
assertTrue(invocationAssistance.getIsUsingPostCovBuildCmd());
assertEquals("post cov build", invocationAssistance.getPostCovBuildCmd());
assertTrue(invocationAssistance.getIsUsingPostCovAnalyzeCmd());
assertEquals("post cov analyze", invocationAssistance.getPostCovAnalyzeCmd());
}
}