mirror of
https://github.com/QuiteAFancyEmerald/Holy-Unblocker.git
synced 2025-05-12 11:30:01 -04:00
fix: scramjet implementation
This commit is contained in:
parent
214716e28c
commit
f7665d88ef
5 changed files with 176 additions and 55 deletions
|
@ -312,12 +312,107 @@ xx xx
|
|||
return uvTestPassed;
|
||||
};
|
||||
|
||||
// Run tests for Rammerhead and Ultraviolet.
|
||||
const testScramjet = async () => {
|
||||
const omniboxId = 'pr-sj',
|
||||
errorPrefix = 'failure',
|
||||
// For the hacky URL test further below, use the URL page's EXACT title.
|
||||
website = Object.freeze({
|
||||
path: 'example.com',
|
||||
title: 'Example Domain',
|
||||
});
|
||||
await page.goto('http://localhost:8080/scramjet');
|
||||
const generatedUrl = await page.evaluate(
|
||||
generateUrl,
|
||||
omniboxId,
|
||||
website.path,
|
||||
errorPrefix
|
||||
);
|
||||
|
||||
const testResults = await page.evaluate(
|
||||
async (generatedUrl, pageTitle) => {
|
||||
const results = [{}, {}];
|
||||
|
||||
await new Promise((resolve) => {
|
||||
const waitForDocument = () => {
|
||||
if (document.readyState === 'complete') resolve();
|
||||
else window.addEventListener('load', resolve);
|
||||
},
|
||||
// Wait until a service worker is registered before continuing.
|
||||
// Also check again to make sure the document is loaded.
|
||||
waitForWorker = async () => {
|
||||
setTimeout(async () => {
|
||||
(await navigator.serviceWorker.getRegistrations()).length > 0
|
||||
? waitForDocument()
|
||||
: waitForWorker();
|
||||
}, 1000);
|
||||
};
|
||||
|
||||
waitForWorker();
|
||||
});
|
||||
|
||||
try {
|
||||
results[0].scramjet = generatedUrl;
|
||||
|
||||
// Test to see if the document title for example.com has loaded,
|
||||
// by appending an IFrame to the document and grabbing its content.
|
||||
const testGeneratedUrlHacky = async (url) => {
|
||||
const exampleIFrame = document.createElement('iframe');
|
||||
const waitForDocument = new Promise((resolve) => {
|
||||
document.documentElement.appendChild(exampleIFrame);
|
||||
exampleIFrame.addEventListener('load', () => {
|
||||
resolve(
|
||||
exampleIFrame.contentWindow.document.title === pageTitle
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
// Give 10 seconds for the IFrame to load before manually checking.
|
||||
const timeout = new Promise((resolve) => {
|
||||
setTimeout(() => {
|
||||
resolve(
|
||||
exampleIFrame.contentWindow.document.title === pageTitle
|
||||
);
|
||||
}, 10000);
|
||||
});
|
||||
|
||||
exampleIFrame.src = url;
|
||||
exampleIFrame.style.display = 'none';
|
||||
return await Promise.race([waitForDocument, timeout]);
|
||||
};
|
||||
|
||||
results[1].sjTestPassed =
|
||||
!!results[0].scramjet.indexOf(errorPrefix) &&
|
||||
(await testGeneratedUrlHacky(results[0].scramjet));
|
||||
} catch (e) {
|
||||
results[0].scramjet = errorPrefix + ': ' + e.message;
|
||||
}
|
||||
|
||||
return results;
|
||||
},
|
||||
generatedUrl,
|
||||
website.title,
|
||||
errorPrefix
|
||||
);
|
||||
|
||||
console.log('Scramjet test results:', testResults[0]);
|
||||
const sjTestPassed =
|
||||
testResults[0].scramjet &&
|
||||
testResults[0].scramjet !== 'failure' &&
|
||||
testResults[1].scramjet;
|
||||
console.log(
|
||||
'Scramjet test result:',
|
||||
sjTestPassed ? 'success' : 'failure'
|
||||
);
|
||||
return sjTestPassed;
|
||||
};
|
||||
|
||||
// Run tests for Rammerhead, Ultraviolet and Scramjet
|
||||
const rammerheadPassed = await testRammerhead();
|
||||
const ultravioletPassed = await testUltraviolet();
|
||||
const scramjetPassed = await testScramjet();
|
||||
|
||||
if (rammerheadPassed && ultravioletPassed) {
|
||||
console.log('Both tests passed.');
|
||||
if (rammerheadPassed && ultravioletPassed && scramjetPassed) {
|
||||
console.log('All proxy endpoint tests passed.');
|
||||
process.exitCode = 0;
|
||||
} else {
|
||||
console.error('Tests failed.');
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue