Skip to content

Commit f4e8240

Browse files
committed
Apply 1139 according to CSP test
1 parent 83206f0 commit f4e8240

File tree

2 files changed

+124
-0
lines changed

2 files changed

+124
-0
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
"compile": "node rebuild-all.js --ci",
1010
"start": "cd server && node index.js",
1111
"bench": "cd webdriver-ts && cross-env LANG=\"en_US.UTF-8\" node dist/benchmarkRunner.js",
12+
"checkCSP": "cd webdriver-ts && cross-env LANG=\"en_US.UTF-8\" node dist/isCSPCompliant.js",
1213
"results": "cd webdriver-ts && npm run results",
1314
"bench-all": "cd webdriver-ts && npm run bench && npm run results",
1415
"compile-webdriver-ts": "cd webdriver-ts && npm run compile",

webdriver-ts/src/isCSPCompliant.ts

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
import * as yargs from "yargs";
2+
import { checkElementContainsText, checkElementExists, clickElement, startBrowser } from "./playwrightAccess";
3+
import { config, FrameworkData, initializeFrameworks, BenchmarkOptions } from "./common";
4+
5+
import * as R from "ramda";
6+
import { valid } from "semver";
7+
import { ElementHandle, Page } from "playwright";
8+
9+
let args: any = yargs(process.argv)
10+
.usage("$0 [--framework Framework1 Framework2 ...] [--benchmark Benchmark1 Benchmark2 ...]")
11+
.help("help")
12+
.default("port", config.PORT)
13+
.string("chromeBinary")
14+
.string("chromeDriver")
15+
.boolean("headless")
16+
.array("framework").argv;
17+
18+
let allArgs = args._.length <= 2 ? [] : args._.slice(2, args._.length);
19+
20+
console.log("args.framework", args.framework, !args.framework);
21+
22+
23+
async function runBench(frameworkNames: string[]) {
24+
let runFrameworks;
25+
let matchesDirectoryArg = (directoryName: string) => allArgs.length == 0 || allArgs.some((arg: string) => arg == directoryName);
26+
runFrameworks = await initializeFrameworks(matchesDirectoryArg);
27+
console.log("Frameworks that will be checked", runFrameworks.map((f) => f.fullNameWithKeyedAndVersion).join(" "));
28+
29+
let frameworkMap = new Map<string, FrameworkData>();
30+
31+
let allCorrect = true;
32+
33+
let browser = await startBrowser(benchmarkOptions);
34+
let page = await browser.newPage();
35+
try {
36+
await page.goto(`http://${config.HOST}:${config.PORT}/startCSP`)
37+
} finally {
38+
await page.close();
39+
await browser.close();
40+
}
41+
42+
console.log("*** headless", benchmarkOptions.headless)
43+
44+
for (let i = 0; i < runFrameworks.length; i++) {
45+
let cspError = false;
46+
let browser = await startBrowser(benchmarkOptions);
47+
let page = await browser.newPage();
48+
try {
49+
let framework: FrameworkData = runFrameworks[i];
50+
51+
await page.goto(`http://${config.HOST}:${config.PORT}/${framework.uri}/index.html`, {waitUntil: "networkidle"});
52+
try {
53+
await checkElementExists(page, "#add");
54+
} catch (err) {
55+
console.log(`CSP test failed for ${runFrameworks[i].fullNameWithKeyedAndVersion} - during load`);
56+
}
57+
await clickElement(page, "#add");
58+
try {
59+
await checkElementContainsText(page, "tbody>tr:nth-of-type(1000)>td:nth-of-type(1)", "1000");
60+
} catch (err) {
61+
console.log(`CSP test failed for ${runFrameworks[i].fullNameWithKeyedAndVersion} - when clicking`);
62+
}
63+
} catch (e) {
64+
//console.log("ERROR running " + runFrameworks[i].fullNameWithKeyedAndVersion, e);
65+
allCorrect = false;
66+
} finally {
67+
try {
68+
await page.close();
69+
await browser.close();
70+
} catch (e) {
71+
console.log("error calling driver.quit - ignoring this exception");
72+
}
73+
}
74+
}
75+
76+
browser = await startBrowser(benchmarkOptions);
77+
page = await browser.newPage();
78+
try {
79+
await page.goto(`http://${config.HOST}:${config.PORT}/csp`)
80+
const extractedText = await page.$eval('*', (el:any) => el.innerText);
81+
console.log(extractedText);
82+
let failed = JSON.parse(extractedText)
83+
console.log("CSP check failed for the following frameworks:\n", failed.join("\n"));
84+
} finally {
85+
await page.close();
86+
await browser.close();
87+
}
88+
89+
if (!allCorrect) process.exit(1);
90+
91+
}
92+
93+
config.PORT = Number(args.port);
94+
95+
if (process.env.HOST) {
96+
config.HOST = process.env.HOST;
97+
console.log(`INFO: Using host ${config.HOST} instead of localhost`);
98+
}
99+
100+
let runFrameworks = (args.framework && args.framework.length > 0 ? args.framework : [""]).map((v: string) => v.toString());
101+
102+
let benchmarkOptions: BenchmarkOptions = {
103+
HOST: config.HOST,
104+
port: config.PORT.toFixed(),
105+
browser: config.BROWSER,
106+
remoteDebuggingPort: config.REMOTE_DEBUGGING_PORT,
107+
chromePort: config.CHROME_PORT,
108+
headless: args.headless,
109+
chromeBinaryPath: args.chromeBinary,
110+
numIterationsForCPUBenchmarks: config.NUM_ITERATIONS_FOR_BENCHMARK_CPU,
111+
numIterationsForMemBenchmarks: config.NUM_ITERATIONS_FOR_BENCHMARK_MEM,
112+
numIterationsForStartupBenchmark: config.NUM_ITERATIONS_FOR_BENCHMARK_STARTUP,
113+
batchSize: 1,
114+
};
115+
async function main() {
116+
if (args.help) {
117+
yargs.showHelp();
118+
} else {
119+
await runBench(runFrameworks);
120+
}
121+
}
122+
123+
main().catch(err => {console.log("Error in isKeyed", err)});

0 commit comments

Comments
 (0)