Skip to content

Commit 46a4593

Browse files
authored
Add tests for messages that are too big. (#300)
Signed-off-by: Greg Allen <[email protected]>
1 parent 333fae4 commit 46a4593

File tree

3 files changed

+109
-84
lines changed

3 files changed

+109
-84
lines changed

plugin/src/main/java/com/redhat/jenkins/plugins/ci/CIBuildTrigger.java

Lines changed: 0 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,6 @@
2626
import java.io.File;
2727
import java.io.FileOutputStream;
2828
import java.io.IOException;
29-
import java.lang.reflect.Constructor;
30-
import java.lang.reflect.Field;
31-
import java.lang.reflect.Modifier;
3229
import java.nio.charset.StandardCharsets;
3330
import java.util.ArrayList;
3431
import java.util.HashMap;
@@ -312,87 +309,6 @@ public void clearJobActions() {
312309
getJobActions().clear();
313310
}
314311

315-
/**
316-
* Inspects {@link ParametersAction} to see what kind of capabilities it has in regards to SECURITY-170. Assuming
317-
* the safeParameters constructor could not be found.
318-
*
319-
* @return the inspection result
320-
*/
321-
private static synchronized ParametersActionInspection getParametersInspection() {
322-
if (parametersInspectionCache == null) {
323-
parametersInspectionCache = new ParametersActionInspection();
324-
}
325-
return parametersInspectionCache;
326-
}
327-
328-
/**
329-
* Stored cache of the inspection.
330-
*
331-
* @see #getParametersInspection()
332-
*/
333-
private static volatile ParametersActionInspection parametersInspectionCache = null;
334-
335-
/**
336-
* Data structure with information regarding what kind of capabilities {@link ParametersAction} has.
337-
*/
338-
private static class ParametersActionInspection {
339-
private static final Class<ParametersAction> KLASS = ParametersAction.class;
340-
private boolean inspectionFailure;
341-
private boolean keepUndefinedParameters = false;
342-
private boolean hasSafeParameterConfig = false;
343-
344-
/**
345-
* Constructor that performs the inspection.
346-
*/
347-
ParametersActionInspection() {
348-
try {
349-
for (Field field : KLASS.getDeclaredFields()) {
350-
if (Modifier.isStatic(field.getModifiers())
351-
&& (field.getName().equals("KEEP_UNDEFINED_PARAMETERS_SYSTEM_PROPERTY_NAME")
352-
|| field.getName().equals("SAFE_PARAMETERS_SYSTEM_PROPERTY_NAME"))) {
353-
this.hasSafeParameterConfig = true;
354-
break;
355-
}
356-
}
357-
if (hasSafeParameterConfig) {
358-
if (Boolean.getBoolean(KLASS.getName() + ".keepUndefinedParameters")) {
359-
this.keepUndefinedParameters = true;
360-
}
361-
}
362-
this.inspectionFailure = false;
363-
} catch (Exception e) {
364-
this.inspectionFailure = true;
365-
}
366-
}
367-
368-
/**
369-
* If the system property .keepUndefinedParameters is set and set to true.
370-
*
371-
* @return true if so.
372-
*/
373-
boolean isKeepUndefinedParameters() {
374-
return keepUndefinedParameters;
375-
}
376-
377-
/**
378-
* If any of the constant fields regarding safeParameters are declared in {@link ParametersAction}.
379-
*
380-
* @return true if so.
381-
*/
382-
boolean isHasSafeParameterConfig() {
383-
return hasSafeParameterConfig;
384-
}
385-
386-
/**
387-
* If there was an exception when inspecting the class.
388-
*
389-
* @return true if so.
390-
*/
391-
public boolean isInspectionFailure() {
392-
return inspectionFailure;
393-
}
394-
}
395-
396312
public void scheduleBuild(Map<String, String> params) {
397313
if (job == null) {
398314
throw new IllegalStateException("Trigger not started yet");

plugin/src/test/java/com/redhat/jenkins/plugins/ci/integration/AmqMessagingPluginIntegrationTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -532,4 +532,19 @@ public void testWaitForCIMessageStepWithFiles() throws Exception {
532532
public void testWaitForCIMessagePipelineWithFiles() throws Exception {
533533
_testWaitForCIMessagePipelineWithFiles(List.of("CI_MESSAGE", "CI_MESSAGE_HEADERS"));
534534
}
535+
536+
@Test
537+
public void testCITriggerWithMessageTooLong() throws Exception {
538+
_testCITriggerWithMessageTooLong();
539+
}
540+
541+
@Test
542+
public void testWaitForCIMessageStepWithMessageTooLong() throws Exception {
543+
_testWaitForCIMessageStepWithMessageTooLong();
544+
}
545+
546+
@Test
547+
public void testWaitForCIMessagePipelineWithMessageTooLong() throws Exception {
548+
_testWaitForCIMessagePipelineWithMessageTooLong();
549+
}
535550
}

plugin/src/test/java/com/redhat/jenkins/plugins/ci/integration/SharedMessagingPluginIntegrationTest.java

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.jenkinsci.plugins.workflow.job.WorkflowJob;
2222
import org.jenkinsci.plugins.workflow.job.WorkflowRun;
2323

24+
import com.google.common.base.Strings;
2425
import com.redhat.jenkins.plugins.ci.CIBuildTrigger;
2526
import com.redhat.jenkins.plugins.ci.CIMessageBuilder;
2627
import com.redhat.jenkins.plugins.ci.CIMessageNotifier;
@@ -1235,6 +1236,99 @@ public void _testWaitForCIMessagePipelineWithFiles(List<String> filenames) throw
12351236
jobB.delete();
12361237
}
12371238

1239+
public void _testCITriggerWithMessageTooLong() throws Exception {
1240+
FreeStyleProject jobA = j.createFreeStyleProject();
1241+
jobA.getBuildersList().add(new Shell("env | sort"));
1242+
attachTrigger(
1243+
new CIBuildTrigger(false,
1244+
Collections.singletonList(getSubscriberProviderData(testName.getMethodName(), null, null))),
1245+
jobA);
1246+
1247+
FreeStyleProject jobB = j.createFreeStyleProject();
1248+
jobB.getPublishersList().add(new CIMessageNotifier(getPublisherProviderData(testName.getMethodName(), "",
1249+
"{\"msg\": \"" + Strings.repeat("a", 131061) + "\"}")));
1250+
1251+
j.buildAndAssertSuccess(jobB);
1252+
1253+
waitUntilTriggeredBuildCompletes(jobA);
1254+
j.assertBuildStatus(Result.FAILURE, jobA.getLastBuild());
1255+
j.assertLogContains("Argument list too long", jobA.getLastBuild());
1256+
1257+
jobA.addProperty(new ParametersDefinitionProperty(
1258+
Collections.singletonList(new FileParameterDefinition("CI_MESSAGE", ""))));
1259+
1260+
j.buildAndAssertSuccess(jobB);
1261+
1262+
waitUntilTriggeredBuildCompletes(jobA, 2);
1263+
j.assertBuildStatusSuccess(jobA.getLastBuild());
1264+
1265+
jobA.delete();
1266+
jobB.delete();
1267+
}
1268+
1269+
public void _testWaitForCIMessageStepWithMessageTooLong() throws Exception {
1270+
FreeStyleProject jobA = j.createFreeStyleProject();
1271+
jobA.getBuildersList().add(new CIMessageSubscriberBuilder(
1272+
getSubscriberProviderData(DEFAULT_PROVIDER_NAME, testName.getMethodName(), "CI_MESSAGE", false, "")));
1273+
jobA.getBuildersList().add(new Shell("env | sort"));
1274+
1275+
scheduleAwaitStep(jobA);
1276+
1277+
FreeStyleProject jobB = j.createFreeStyleProject();
1278+
jobB.getPublishersList().add(new CIMessageNotifier(getPublisherProviderData(testName.getMethodName(), "",
1279+
"{\"msg\": \"" + Strings.repeat("a", 131061) + "\"}")));
1280+
1281+
j.buildAndAssertSuccess(jobB);
1282+
waitUntilTriggeredBuildCompletes(jobA);
1283+
1284+
j.assertBuildStatus(Result.FAILURE, jobA.getLastBuild());
1285+
j.assertLogContains("Argument list too long", jobA.getLastBuild());
1286+
1287+
jobA.getBuildersList().clear();
1288+
jobA.getBuildersList().add(new CIMessageSubscriberBuilder(
1289+
getSubscriberProviderData(DEFAULT_PROVIDER_NAME, testName.getMethodName(), "CI_MESSAGE", true, "")));
1290+
jobA.getBuildersList().add(new Shell("env | sort"));
1291+
scheduleAwaitStep(jobA, 2);
1292+
1293+
j.buildAndAssertSuccess(jobB);
1294+
waitUntilTriggeredBuildCompletes(jobA, 2);
1295+
j.assertBuildStatusSuccess(jobA.getLastBuild());
1296+
1297+
jobA.delete();
1298+
jobB.delete();
1299+
}
1300+
1301+
public void _testWaitForCIMessagePipelineWithMessageTooLong() throws Exception {
1302+
WorkflowJob jobA = j.jenkins.createProject(WorkflowJob.class, "wait");
1303+
ProviderData pd = getSubscriberProviderData(DEFAULT_PROVIDER_NAME, testName.getMethodName(), "CI_MESSAGE",
1304+
false, "");
1305+
String postStatements = "sh 'printenv'";
1306+
jobA.setDefinition(new CpsFlowDefinition(buildWaitForCIMessageScript(pd, null, postStatements)));
1307+
1308+
scheduleAwaitStep(jobA);
1309+
1310+
FreeStyleProject jobB = j.createFreeStyleProject();
1311+
jobB.getPublishersList().add(new CIMessageNotifier(getPublisherProviderData(testName.getMethodName(), "",
1312+
"{\"msg\": \"" + Strings.repeat("a", 131061) + "\"}")));
1313+
1314+
j.buildAndAssertSuccess(jobB);
1315+
waitUntilTriggeredBuildCompletes(jobA);
1316+
1317+
j.assertBuildStatus(Result.FAILURE, jobA.getLastBuild());
1318+
j.assertLogContains("Argument list too long", jobA.getLastBuild());
1319+
1320+
pd = getSubscriberProviderData(DEFAULT_PROVIDER_NAME, testName.getMethodName(), "CI_MESSAGE", true, "");
1321+
jobA.setDefinition(new CpsFlowDefinition(buildWaitForCIMessageScript(pd, null, postStatements)));
1322+
scheduleAwaitStep(jobA, 2);
1323+
1324+
j.buildAndAssertSuccess(jobB);
1325+
waitUntilTriggeredBuildCompletes(jobA, 2);
1326+
j.assertBuildStatusSuccess(jobA.getLastBuild());
1327+
1328+
jobA.delete();
1329+
jobB.delete();
1330+
}
1331+
12381332
protected String stringFrom(Process proc) throws InterruptedException, IOException {
12391333
int exit = proc.waitFor();
12401334
if (exit != 0) {

0 commit comments

Comments
 (0)