Skip to content

Commit

Permalink
Run ATH with CSP (report only)
Browse files Browse the repository at this point in the history
  • Loading branch information
basil committed Oct 10, 2024
1 parent 854ae6c commit ad7e3b7
Show file tree
Hide file tree
Showing 3 changed files with 96 additions and 1 deletion.
2 changes: 1 addition & 1 deletion Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ if (needSplittingFromWorkspace) {
}

def axes = [
jenkinsVersions: ['lts', 'latest'],
jenkinsVersions: ['latest'],
platforms: ['linux'],
jdks: [17, 21],
browsers: ['firefox'],
Expand Down
45 changes: 45 additions & 0 deletions src/main/java/org/jenkinsci/test/acceptance/junit/CspRule.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
package org.jenkinsci.test.acceptance.junit;

import com.google.inject.Inject;
import com.google.inject.Injector;
import java.util.List;
import java.util.logging.Logger;
import org.jenkinsci.test.acceptance.plugins.csp.ContentSecurityPolicyReport;
import org.jenkinsci.test.acceptance.po.Jenkins;
import org.jenkinsci.test.acceptance.update_center.PluginSpec;
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;

@GlobalRule
public final class CspRule implements TestRule {

private static final Logger LOGGER = Logger.getLogger(CspRule.class.getName());

@Inject
Injector injector;

@Override
public Statement apply(final Statement base, final Description d) {
return new Statement() {
private Jenkins jenkins;

@Override
public void evaluate() throws Throwable {
jenkins = injector.getInstance(Jenkins.class);
final PluginSpec plugin = new PluginSpec("csp");
LOGGER.info("Installing plugin for test: " + plugin);
jenkins.getPluginManager().installPlugins(plugin);
try {
base.evaluate();
} finally {
ContentSecurityPolicyReport csp = new ContentSecurityPolicyReport(jenkins);
List<String> lines = csp.getReport();
if (lines.size() > 2) {
throw new AssertionError(String.join("\n", csp.getReport()));
}
}
}
};
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package org.jenkinsci.test.acceptance.plugins.csp;

import java.util.ArrayList;
import java.util.List;
import org.jenkinsci.test.acceptance.po.Jenkins;
import org.jenkinsci.test.acceptance.po.PageObject;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.WebElement;

public class ContentSecurityPolicyReport extends PageObject {
public ContentSecurityPolicyReport(Jenkins context) {
super(context, context.url("content-security-policy-reports/"));
}

public List<String> getReport() {
List<String> lines = new ArrayList<>();
WebElement table;
try {
open();
table = find(By.className("bigtable"));
} catch (NoSuchElementException e) {
try {
getContext().getJenkins().logout();
} catch (Exception ignored) {
// Ignore
}
getContext().getJenkins().login().doLogin("admin");
open();
table = find(By.className("bigtable"));
}
List<WebElement> headers = table.findElements(By.tagName("th"));
StringBuilder sb = new StringBuilder();
for (WebElement header : headers) {
sb.append(header.getText()).append("\t");
}
lines.add(sb.toString());
sb = new StringBuilder();
List<WebElement> rows = table.findElements(By.tagName("tr"));
for (WebElement row : rows) {
List<WebElement> cells = row.findElements(By.tagName("td"));
for (WebElement cell : cells) {
sb.append(cell.getText()).append("\t");
}
lines.add(sb.toString());
sb = new StringBuilder();
}
return lines;
}
}

0 comments on commit ad7e3b7

Please sign in to comment.