From cd948bc79b73bfe8255f4856025c77edcc7348fa Mon Sep 17 00:00:00 2001 From: Sander Elias Date: Tue, 4 Aug 2020 14:36:14 +0200 Subject: [PATCH] Sander/rework wait fix (#808) * fix(scully): Add wait time before spawning new browser instance If there are more than 500 routes rendered, when this limit is reached a new browser instance is spawned. The async jobs rendering the routes at that moment in the initial browser instance are not waited and thus they are failing with exception and cause the process to stop. Update and add testserver data for 500+ routes. Update test server to hold and serve 501 users. Update snapshots for the newly added users Add test to check extra routes. * fix(scully): rework time calculation to not take minutes and poll for outstanding tasks on browser r * test(scully): upds test for user1&2 and snapshots Co-authored-by: Septimiu Criste --- .../src/lib/renderPlugins/launchedBrowser.ts | 33 +- libs/scully/src/lib/utils/startup.ts | 19 +- package.json | 2 +- scully.heavy.config.ts | 5 +- scully.sample-blog.config.ts | 1 + .../__tests__/__snapshots__/home.spec.ts.snap | 5988 ----------------- tests/jest/src/__tests__/extra-users.spec.ts | 5 +- 7 files changed, 40 insertions(+), 6013 deletions(-) diff --git a/libs/scully/src/lib/renderPlugins/launchedBrowser.ts b/libs/scully/src/lib/renderPlugins/launchedBrowser.ts index ac3408dea..37a47fddf 100644 --- a/libs/scully/src/lib/renderPlugins/launchedBrowser.ts +++ b/libs/scully/src/lib/renderPlugins/launchedBrowser.ts @@ -1,6 +1,6 @@ import { Browser, launch, LaunchOptions } from 'puppeteer'; -import { BehaviorSubject, from, merge, Observable, of, timer } from 'rxjs'; -import { filter, shareReplay, switchMap, take, tap, delayWhen, throttleTime } from 'rxjs/operators'; +import { BehaviorSubject, from, merge, Observable, of, timer, interval } from 'rxjs'; +import { filter, shareReplay, switchMap, take, tap, delayWhen, throttleTime, catchError } from 'rxjs/operators'; import { showBrowser } from '../utils/cli-options'; import { loadConfig, scullyConfig } from '../utils/config'; import { green, log, logError } from '../utils/log'; @@ -30,6 +30,7 @@ export const launchedBrowser: () => Promise = async () => { let browser: Browser; /** ICE relaunch puppeteer. */ +// eslint-disable-next-line @typescript-eslint/no-unused-vars export const reLaunch = (reason?: string): Promise => { // if (reason) { // logWarn( @@ -94,17 +95,27 @@ function obsBrowser(options: LaunchOptions = scullyConfig.puppeteerLaunchOptions .pipe( /** ignore request while the browser is already starting, we can only launch 1 */ filter(() => !isLaunching), - // tap(() => log(green('relaunch cmd received'))), - /** the long trottletime is to cater for the concurrently running browsers to crash and burn. */ + /** the long throttleTime is to cater for the concurrently running browsers to crash and burn. */ throttleTime(15000), // provide enough time for the current async operations to finish before killing the current browser instance - delayWhen(() => { - if (!browser) { - return of(0); - } - - return timer(15000); - }) + delayWhen(() => + merge( + /** timout at 25 seconds */ + timer(25000), + /** or then the number of pages hits <=1 */ + interval(500).pipe( + /** if the browser is active get the pages promise */ + switchMap(() => (browser ? browser.pages() : of([]))), + /** only go ahead when there is <=1 pages (the browser itself) */ + filter((p) => browser === undefined || p.length <= 1) + ) + ).pipe( + /** use take 1 to make sure we complete when one of the above fires */ + take(1), + /** if something _really_ unwieldy happens with the browser, ignore and go ahead */ + catchError(() => of([])) + ) + ) ) .subscribe({ next: () => { diff --git a/libs/scully/src/lib/utils/startup.ts b/libs/scully/src/lib/utils/startup.ts index d9b912345..f40dff484 100644 --- a/libs/scully/src/lib/utils/startup.ts +++ b/libs/scully/src/lib/utils/startup.ts @@ -3,11 +3,12 @@ import { performance, PerformanceObserver, PerformanceObserverCallback } from 'p import { watch, ssl } from './cli-options'; import { scullyConfig } from './config'; import { generateAll } from './handlers/defaultAction'; -import { log, yellow, green } from './log'; +import { log, yellow, green, printProgress } from './log'; import { performanceIds } from './performanceIds'; import { reloadAll } from '../watchMode'; import { findPlugin } from '../pluginManagement'; +let measurePerfPerf: number; /** * Starts the entire process * @param config:ScullyConfig @@ -22,10 +23,15 @@ export const startScully = (url?: string) => { obs.observe({ entryTypes: ['measure'], buffered: true }); const numberOfRoutesProm = findPlugin(generateAll)(url) .then((routes) => { + log(`measuring performance`); + measurePerfPerf = Date.now(); performance.mark('stopDuration'); /** measure all performance checks */ try { - [...performanceIds.values()].forEach((id) => performance.measure(id, `start${id}`, `stop${id}`)); + let i = performanceIds.size; + for (const id of performanceIds) { + performance.measure(id, `start${id}`, `stop${id}`); + } } catch (e) { console.error(e); } @@ -68,18 +74,13 @@ ${yellow('------------------------------------------------------------')}` function measurePerformance(resolve: (value?: unknown) => void): PerformanceObserverCallback { return (list, observer) => { - const durations = list.getEntries().reduce( - (acc, entry) => ({ - ...acc, - [entry.name]: Math.floor(entry.duration * 100) / 100, - }), - {} - ); + const durations = Object.fromEntries(list.getEntries().map((entry) => [entry.name, Math.floor(entry.duration * 100) / 100])); // console.log(durations); performance.clearMarks(); observer.disconnect(); performanceIds.clear(); resolve(durations); + log(`measuring performance took ${Math.floor((Date.now() - measurePerfPerf) * 100) / 100}Ms`); }; } diff --git a/package.json b/package.json index 172dbc6d6..4c78f9ad4 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "debug": "nodemon --legacy-watch --watch ./dist/libs/scully --inspect=0.0.0.0:5858 --nolazy \"./dist/libs/scully/scully --pr sample-blog\"", "nozspredeb": "npm run build:scully", "nopreduration": "npx tsc -m commonjs scully.sample-blog.config.ts", - "duration": "rm scully.log && npm run scully -- --cf=scully.heavy.config.ts --tds --RSD --nl", + "duration": "rm scully.log && npm run scully -- --cf=scully.heavy.config.ts --tds --RSD ", "deb": "node --inspect=0.0.0.0:5858 --nolazy ./dist/libs/scully/scully --pr sample-blog", "deploy:docs": "echo No deploy script yet", "affected:apps": "nx affected:apps", diff --git a/scully.heavy.config.ts b/scully.heavy.config.ts index a933f5052..50a49f68c 100644 --- a/scully.heavy.config.ts +++ b/scully.heavy.config.ts @@ -2,6 +2,7 @@ import { config as original } from './scully.sample-blog.config'; export const config = Object.assign({}, original); -config.routes['/demo/:id'].numberOfPages = 2500; +config.routes['/demo/:id'].numberOfPages = 50000; +config.routes['/user/:userId'].userId.resultsHandler = undefined; /** crank it up a notch, more threads seems more likely to fail. */ -config.maxRenderThreads = 64; +config.maxRenderThreads = 32; diff --git a/scully.sample-blog.config.ts b/scully.sample-blog.config.ts index ee3c7b949..8e8a2408d 100644 --- a/scully.sample-blog.config.ts +++ b/scully.sample-blog.config.ts @@ -55,6 +55,7 @@ export const config: ScullyConfig = { */ userId: { url: 'http://localhost:8200/users', + resultsHandler: (raw) => raw.filter((row) => row.id < 3), property: 'id', }, }, diff --git a/tests/jest/src/__tests__/__snapshots__/home.spec.ts.snap b/tests/jest/src/__tests__/__snapshots__/home.spec.ts.snap index 36adcbdfb..bbfabea1a 100644 --- a/tests/jest/src/__tests__/__snapshots__/home.spec.ts.snap +++ b/tests/jest/src/__tests__/__snapshots__/home.spec.ts.snap @@ -311,5994 +311,6 @@ exports[`Check list of all Check clean all list from scully 1`] = ` /user/2 -
  • - - /user/3 - - - /user/3 - -
  • -
  • - - /user/4 - - - /user/4 - -
  • -
  • - - /user/5 - - - /user/5 - -
  • -
  • - - /user/6 - - - /user/6 - -
  • -
  • - - /user/7 - - - /user/7 - -
  • -
  • - - /user/8 - - - /user/8 - -
  • -
  • - - /user/9 - - - /user/9 - -
  • -
  • - - /user/10 - - - /user/10 - -
  • -
  • - - /user/11 - - - /user/11 - -
  • -
  • - - /user/12 - - - /user/12 - -
  • -
  • - - /user/13 - - - /user/13 - -
  • -
  • - - /user/14 - - - /user/14 - -
  • -
  • - - /user/15 - - - /user/15 - -
  • -
  • - - /user/16 - - - /user/16 - -
  • -
  • - - /user/17 - - - /user/17 - -
  • -
  • - - /user/18 - - - /user/18 - -
  • -
  • - - /user/19 - - - /user/19 - -
  • -
  • - - /user/20 - - - /user/20 - -
  • -
  • - - /user/21 - - - /user/21 - -
  • -
  • - - /user/22 - - - /user/22 - -
  • -
  • - - /user/23 - - - /user/23 - -
  • -
  • - - /user/24 - - - /user/24 - -
  • -
  • - - /user/25 - - - /user/25 - -
  • -
  • - - /user/26 - - - /user/26 - -
  • -
  • - - /user/27 - - - /user/27 - -
  • -
  • - - /user/28 - - - /user/28 - -
  • -
  • - - /user/29 - - - /user/29 - -
  • -
  • - - /user/30 - - - /user/30 - -
  • -
  • - - /user/31 - - - /user/31 - -
  • -
  • - - /user/32 - - - /user/32 - -
  • -
  • - - /user/33 - - - /user/33 - -
  • -
  • - - /user/34 - - - /user/34 - -
  • -
  • - - /user/35 - - - /user/35 - -
  • -
  • - - /user/36 - - - /user/36 - -
  • -
  • - - /user/37 - - - /user/37 - -
  • -
  • - - /user/38 - - - /user/38 - -
  • -
  • - - /user/39 - - - /user/39 - -
  • -
  • - - /user/40 - - - /user/40 - -
  • -
  • - - /user/41 - - - /user/41 - -
  • -
  • - - /user/42 - - - /user/42 - -
  • -
  • - - /user/43 - - - /user/43 - -
  • -
  • - - /user/44 - - - /user/44 - -
  • -
  • - - /user/45 - - - /user/45 - -
  • -
  • - - /user/46 - - - /user/46 - -
  • -
  • - - /user/47 - - - /user/47 - -
  • -
  • - - /user/48 - - - /user/48 - -
  • -
  • - - /user/49 - - - /user/49 - -
  • -
  • - - /user/50 - - - /user/50 - -
  • -
  • - - /user/51 - - - /user/51 - -
  • -
  • - - /user/52 - - - /user/52 - -
  • -
  • - - /user/53 - - - /user/53 - -
  • -
  • - - /user/54 - - - /user/54 - -
  • -
  • - - /user/55 - - - /user/55 - -
  • -
  • - - /user/56 - - - /user/56 - -
  • -
  • - - /user/57 - - - /user/57 - -
  • -
  • - - /user/58 - - - /user/58 - -
  • -
  • - - /user/59 - - - /user/59 - -
  • -
  • - - /user/60 - - - /user/60 - -
  • -
  • - - /user/61 - - - /user/61 - -
  • -
  • - - /user/62 - - - /user/62 - -
  • -
  • - - /user/63 - - - /user/63 - -
  • -
  • - - /user/64 - - - /user/64 - -
  • -
  • - - /user/65 - - - /user/65 - -
  • -
  • - - /user/66 - - - /user/66 - -
  • -
  • - - /user/67 - - - /user/67 - -
  • -
  • - - /user/68 - - - /user/68 - -
  • -
  • - - /user/69 - - - /user/69 - -
  • -
  • - - /user/70 - - - /user/70 - -
  • -
  • - - /user/71 - - - /user/71 - -
  • -
  • - - /user/72 - - - /user/72 - -
  • -
  • - - /user/73 - - - /user/73 - -
  • -
  • - - /user/74 - - - /user/74 - -
  • -
  • - - /user/75 - - - /user/75 - -
  • -
  • - - /user/76 - - - /user/76 - -
  • -
  • - - /user/77 - - - /user/77 - -
  • -
  • - - /user/78 - - - /user/78 - -
  • -
  • - - /user/79 - - - /user/79 - -
  • -
  • - - /user/80 - - - /user/80 - -
  • -
  • - - /user/81 - - - /user/81 - -
  • -
  • - - /user/82 - - - /user/82 - -
  • -
  • - - /user/83 - - - /user/83 - -
  • -
  • - - /user/84 - - - /user/84 - -
  • -
  • - - /user/85 - - - /user/85 - -
  • -
  • - - /user/86 - - - /user/86 - -
  • -
  • - - /user/87 - - - /user/87 - -
  • -
  • - - /user/88 - - - /user/88 - -
  • -
  • - - /user/89 - - - /user/89 - -
  • -
  • - - /user/90 - - - /user/90 - -
  • -
  • - - /user/91 - - - /user/91 - -
  • -
  • - - /user/92 - - - /user/92 - -
  • -
  • - - /user/93 - - - /user/93 - -
  • -
  • - - /user/94 - - - /user/94 - -
  • -
  • - - /user/95 - - - /user/95 - -
  • -
  • - - /user/96 - - - /user/96 - -
  • -
  • - - /user/97 - - - /user/97 - -
  • -
  • - - /user/98 - - - /user/98 - -
  • -
  • - - /user/99 - - - /user/99 - -
  • -
  • - - /user/100 - - - /user/100 - -
  • -
  • - - /user/101 - - - /user/101 - -
  • -
  • - - /user/102 - - - /user/102 - -
  • -
  • - - /user/103 - - - /user/103 - -
  • -
  • - - /user/104 - - - /user/104 - -
  • -
  • - - /user/105 - - - /user/105 - -
  • -
  • - - /user/106 - - - /user/106 - -
  • -
  • - - /user/107 - - - /user/107 - -
  • -
  • - - /user/108 - - - /user/108 - -
  • -
  • - - /user/109 - - - /user/109 - -
  • -
  • - - /user/110 - - - /user/110 - -
  • -
  • - - /user/111 - - - /user/111 - -
  • -
  • - - /user/112 - - - /user/112 - -
  • -
  • - - /user/113 - - - /user/113 - -
  • -
  • - - /user/114 - - - /user/114 - -
  • -
  • - - /user/115 - - - /user/115 - -
  • -
  • - - /user/116 - - - /user/116 - -
  • -
  • - - /user/117 - - - /user/117 - -
  • -
  • - - /user/118 - - - /user/118 - -
  • -
  • - - /user/119 - - - /user/119 - -
  • -
  • - - /user/120 - - - /user/120 - -
  • -
  • - - /user/121 - - - /user/121 - -
  • -
  • - - /user/122 - - - /user/122 - -
  • -
  • - - /user/123 - - - /user/123 - -
  • -
  • - - /user/124 - - - /user/124 - -
  • -
  • - - /user/125 - - - /user/125 - -
  • -
  • - - /user/126 - - - /user/126 - -
  • -
  • - - /user/127 - - - /user/127 - -
  • -
  • - - /user/128 - - - /user/128 - -
  • -
  • - - /user/129 - - - /user/129 - -
  • -
  • - - /user/130 - - - /user/130 - -
  • -
  • - - /user/131 - - - /user/131 - -
  • -
  • - - /user/132 - - - /user/132 - -
  • -
  • - - /user/133 - - - /user/133 - -
  • -
  • - - /user/134 - - - /user/134 - -
  • -
  • - - /user/135 - - - /user/135 - -
  • -
  • - - /user/136 - - - /user/136 - -
  • -
  • - - /user/137 - - - /user/137 - -
  • -
  • - - /user/138 - - - /user/138 - -
  • -
  • - - /user/139 - - - /user/139 - -
  • -
  • - - /user/140 - - - /user/140 - -
  • -
  • - - /user/141 - - - /user/141 - -
  • -
  • - - /user/142 - - - /user/142 - -
  • -
  • - - /user/143 - - - /user/143 - -
  • -
  • - - /user/144 - - - /user/144 - -
  • -
  • - - /user/145 - - - /user/145 - -
  • -
  • - - /user/146 - - - /user/146 - -
  • -
  • - - /user/147 - - - /user/147 - -
  • -
  • - - /user/148 - - - /user/148 - -
  • -
  • - - /user/149 - - - /user/149 - -
  • -
  • - - /user/150 - - - /user/150 - -
  • -
  • - - /user/151 - - - /user/151 - -
  • -
  • - - /user/152 - - - /user/152 - -
  • -
  • - - /user/153 - - - /user/153 - -
  • -
  • - - /user/154 - - - /user/154 - -
  • -
  • - - /user/155 - - - /user/155 - -
  • -
  • - - /user/156 - - - /user/156 - -
  • -
  • - - /user/157 - - - /user/157 - -
  • -
  • - - /user/158 - - - /user/158 - -
  • -
  • - - /user/159 - - - /user/159 - -
  • -
  • - - /user/160 - - - /user/160 - -
  • -
  • - - /user/161 - - - /user/161 - -
  • -
  • - - /user/162 - - - /user/162 - -
  • -
  • - - /user/163 - - - /user/163 - -
  • -
  • - - /user/164 - - - /user/164 - -
  • -
  • - - /user/165 - - - /user/165 - -
  • -
  • - - /user/166 - - - /user/166 - -
  • -
  • - - /user/167 - - - /user/167 - -
  • -
  • - - /user/168 - - - /user/168 - -
  • -
  • - - /user/169 - - - /user/169 - -
  • -
  • - - /user/170 - - - /user/170 - -
  • -
  • - - /user/171 - - - /user/171 - -
  • -
  • - - /user/172 - - - /user/172 - -
  • -
  • - - /user/173 - - - /user/173 - -
  • -
  • - - /user/174 - - - /user/174 - -
  • -
  • - - /user/175 - - - /user/175 - -
  • -
  • - - /user/176 - - - /user/176 - -
  • -
  • - - /user/177 - - - /user/177 - -
  • -
  • - - /user/178 - - - /user/178 - -
  • -
  • - - /user/179 - - - /user/179 - -
  • -
  • - - /user/180 - - - /user/180 - -
  • -
  • - - /user/181 - - - /user/181 - -
  • -
  • - - /user/182 - - - /user/182 - -
  • -
  • - - /user/183 - - - /user/183 - -
  • -
  • - - /user/184 - - - /user/184 - -
  • -
  • - - /user/185 - - - /user/185 - -
  • -
  • - - /user/186 - - - /user/186 - -
  • -
  • - - /user/187 - - - /user/187 - -
  • -
  • - - /user/188 - - - /user/188 - -
  • -
  • - - /user/189 - - - /user/189 - -
  • -
  • - - /user/190 - - - /user/190 - -
  • -
  • - - /user/191 - - - /user/191 - -
  • -
  • - - /user/192 - - - /user/192 - -
  • -
  • - - /user/193 - - - /user/193 - -
  • -
  • - - /user/194 - - - /user/194 - -
  • -
  • - - /user/195 - - - /user/195 - -
  • -
  • - - /user/196 - - - /user/196 - -
  • -
  • - - /user/197 - - - /user/197 - -
  • -
  • - - /user/198 - - - /user/198 - -
  • -
  • - - /user/199 - - - /user/199 - -
  • -
  • - - /user/200 - - - /user/200 - -
  • -
  • - - /user/201 - - - /user/201 - -
  • -
  • - - /user/202 - - - /user/202 - -
  • -
  • - - /user/203 - - - /user/203 - -
  • -
  • - - /user/204 - - - /user/204 - -
  • -
  • - - /user/205 - - - /user/205 - -
  • -
  • - - /user/206 - - - /user/206 - -
  • -
  • - - /user/207 - - - /user/207 - -
  • -
  • - - /user/208 - - - /user/208 - -
  • -
  • - - /user/209 - - - /user/209 - -
  • -
  • - - /user/210 - - - /user/210 - -
  • -
  • - - /user/211 - - - /user/211 - -
  • -
  • - - /user/212 - - - /user/212 - -
  • -
  • - - /user/213 - - - /user/213 - -
  • -
  • - - /user/214 - - - /user/214 - -
  • -
  • - - /user/215 - - - /user/215 - -
  • -
  • - - /user/216 - - - /user/216 - -
  • -
  • - - /user/217 - - - /user/217 - -
  • -
  • - - /user/218 - - - /user/218 - -
  • -
  • - - /user/219 - - - /user/219 - -
  • -
  • - - /user/220 - - - /user/220 - -
  • -
  • - - /user/221 - - - /user/221 - -
  • -
  • - - /user/222 - - - /user/222 - -
  • -
  • - - /user/223 - - - /user/223 - -
  • -
  • - - /user/224 - - - /user/224 - -
  • -
  • - - /user/225 - - - /user/225 - -
  • -
  • - - /user/226 - - - /user/226 - -
  • -
  • - - /user/227 - - - /user/227 - -
  • -
  • - - /user/228 - - - /user/228 - -
  • -
  • - - /user/229 - - - /user/229 - -
  • -
  • - - /user/230 - - - /user/230 - -
  • -
  • - - /user/231 - - - /user/231 - -
  • -
  • - - /user/232 - - - /user/232 - -
  • -
  • - - /user/233 - - - /user/233 - -
  • -
  • - - /user/234 - - - /user/234 - -
  • -
  • - - /user/235 - - - /user/235 - -
  • -
  • - - /user/236 - - - /user/236 - -
  • -
  • - - /user/237 - - - /user/237 - -
  • -
  • - - /user/238 - - - /user/238 - -
  • -
  • - - /user/239 - - - /user/239 - -
  • -
  • - - /user/240 - - - /user/240 - -
  • -
  • - - /user/241 - - - /user/241 - -
  • -
  • - - /user/242 - - - /user/242 - -
  • -
  • - - /user/243 - - - /user/243 - -
  • -
  • - - /user/244 - - - /user/244 - -
  • -
  • - - /user/245 - - - /user/245 - -
  • -
  • - - /user/246 - - - /user/246 - -
  • -
  • - - /user/247 - - - /user/247 - -
  • -
  • - - /user/248 - - - /user/248 - -
  • -
  • - - /user/249 - - - /user/249 - -
  • -
  • - - /user/250 - - - /user/250 - -
  • -
  • - - /user/251 - - - /user/251 - -
  • -
  • - - /user/252 - - - /user/252 - -
  • -
  • - - /user/253 - - - /user/253 - -
  • -
  • - - /user/254 - - - /user/254 - -
  • -
  • - - /user/255 - - - /user/255 - -
  • -
  • - - /user/256 - - - /user/256 - -
  • -
  • - - /user/257 - - - /user/257 - -
  • -
  • - - /user/258 - - - /user/258 - -
  • -
  • - - /user/259 - - - /user/259 - -
  • -
  • - - /user/260 - - - /user/260 - -
  • -
  • - - /user/261 - - - /user/261 - -
  • -
  • - - /user/262 - - - /user/262 - -
  • -
  • - - /user/263 - - - /user/263 - -
  • -
  • - - /user/264 - - - /user/264 - -
  • -
  • - - /user/265 - - - /user/265 - -
  • -
  • - - /user/266 - - - /user/266 - -
  • -
  • - - /user/267 - - - /user/267 - -
  • -
  • - - /user/268 - - - /user/268 - -
  • -
  • - - /user/269 - - - /user/269 - -
  • -
  • - - /user/270 - - - /user/270 - -
  • -
  • - - /user/271 - - - /user/271 - -
  • -
  • - - /user/272 - - - /user/272 - -
  • -
  • - - /user/273 - - - /user/273 - -
  • -
  • - - /user/274 - - - /user/274 - -
  • -
  • - - /user/275 - - - /user/275 - -
  • -
  • - - /user/276 - - - /user/276 - -
  • -
  • - - /user/277 - - - /user/277 - -
  • -
  • - - /user/278 - - - /user/278 - -
  • -
  • - - /user/279 - - - /user/279 - -
  • -
  • - - /user/280 - - - /user/280 - -
  • -
  • - - /user/281 - - - /user/281 - -
  • -
  • - - /user/282 - - - /user/282 - -
  • -
  • - - /user/283 - - - /user/283 - -
  • -
  • - - /user/284 - - - /user/284 - -
  • -
  • - - /user/285 - - - /user/285 - -
  • -
  • - - /user/286 - - - /user/286 - -
  • -
  • - - /user/287 - - - /user/287 - -
  • -
  • - - /user/288 - - - /user/288 - -
  • -
  • - - /user/289 - - - /user/289 - -
  • -
  • - - /user/290 - - - /user/290 - -
  • -
  • - - /user/291 - - - /user/291 - -
  • -
  • - - /user/292 - - - /user/292 - -
  • -
  • - - /user/293 - - - /user/293 - -
  • -
  • - - /user/294 - - - /user/294 - -
  • -
  • - - /user/295 - - - /user/295 - -
  • -
  • - - /user/296 - - - /user/296 - -
  • -
  • - - /user/297 - - - /user/297 - -
  • -
  • - - /user/298 - - - /user/298 - -
  • -
  • - - /user/299 - - - /user/299 - -
  • -
  • - - /user/300 - - - /user/300 - -
  • -
  • - - /user/301 - - - /user/301 - -
  • -
  • - - /user/302 - - - /user/302 - -
  • -
  • - - /user/303 - - - /user/303 - -
  • -
  • - - /user/304 - - - /user/304 - -
  • -
  • - - /user/305 - - - /user/305 - -
  • -
  • - - /user/306 - - - /user/306 - -
  • -
  • - - /user/307 - - - /user/307 - -
  • -
  • - - /user/308 - - - /user/308 - -
  • -
  • - - /user/309 - - - /user/309 - -
  • -
  • - - /user/310 - - - /user/310 - -
  • -
  • - - /user/311 - - - /user/311 - -
  • -
  • - - /user/312 - - - /user/312 - -
  • -
  • - - /user/313 - - - /user/313 - -
  • -
  • - - /user/314 - - - /user/314 - -
  • -
  • - - /user/315 - - - /user/315 - -
  • -
  • - - /user/316 - - - /user/316 - -
  • -
  • - - /user/317 - - - /user/317 - -
  • -
  • - - /user/318 - - - /user/318 - -
  • -
  • - - /user/319 - - - /user/319 - -
  • -
  • - - /user/320 - - - /user/320 - -
  • -
  • - - /user/321 - - - /user/321 - -
  • -
  • - - /user/322 - - - /user/322 - -
  • -
  • - - /user/323 - - - /user/323 - -
  • -
  • - - /user/324 - - - /user/324 - -
  • -
  • - - /user/325 - - - /user/325 - -
  • -
  • - - /user/326 - - - /user/326 - -
  • -
  • - - /user/327 - - - /user/327 - -
  • -
  • - - /user/328 - - - /user/328 - -
  • -
  • - - /user/329 - - - /user/329 - -
  • -
  • - - /user/330 - - - /user/330 - -
  • -
  • - - /user/331 - - - /user/331 - -
  • -
  • - - /user/332 - - - /user/332 - -
  • -
  • - - /user/333 - - - /user/333 - -
  • -
  • - - /user/334 - - - /user/334 - -
  • -
  • - - /user/335 - - - /user/335 - -
  • -
  • - - /user/336 - - - /user/336 - -
  • -
  • - - /user/337 - - - /user/337 - -
  • -
  • - - /user/338 - - - /user/338 - -
  • -
  • - - /user/339 - - - /user/339 - -
  • -
  • - - /user/340 - - - /user/340 - -
  • -
  • - - /user/341 - - - /user/341 - -
  • -
  • - - /user/342 - - - /user/342 - -
  • -
  • - - /user/343 - - - /user/343 - -
  • -
  • - - /user/344 - - - /user/344 - -
  • -
  • - - /user/345 - - - /user/345 - -
  • -
  • - - /user/346 - - - /user/346 - -
  • -
  • - - /user/347 - - - /user/347 - -
  • -
  • - - /user/348 - - - /user/348 - -
  • -
  • - - /user/349 - - - /user/349 - -
  • -
  • - - /user/350 - - - /user/350 - -
  • -
  • - - /user/351 - - - /user/351 - -
  • -
  • - - /user/352 - - - /user/352 - -
  • -
  • - - /user/353 - - - /user/353 - -
  • -
  • - - /user/354 - - - /user/354 - -
  • -
  • - - /user/355 - - - /user/355 - -
  • -
  • - - /user/356 - - - /user/356 - -
  • -
  • - - /user/357 - - - /user/357 - -
  • -
  • - - /user/358 - - - /user/358 - -
  • -
  • - - /user/359 - - - /user/359 - -
  • -
  • - - /user/360 - - - /user/360 - -
  • -
  • - - /user/361 - - - /user/361 - -
  • -
  • - - /user/362 - - - /user/362 - -
  • -
  • - - /user/363 - - - /user/363 - -
  • -
  • - - /user/364 - - - /user/364 - -
  • -
  • - - /user/365 - - - /user/365 - -
  • -
  • - - /user/366 - - - /user/366 - -
  • -
  • - - /user/367 - - - /user/367 - -
  • -
  • - - /user/368 - - - /user/368 - -
  • -
  • - - /user/369 - - - /user/369 - -
  • -
  • - - /user/370 - - - /user/370 - -
  • -
  • - - /user/371 - - - /user/371 - -
  • -
  • - - /user/372 - - - /user/372 - -
  • -
  • - - /user/373 - - - /user/373 - -
  • -
  • - - /user/374 - - - /user/374 - -
  • -
  • - - /user/375 - - - /user/375 - -
  • -
  • - - /user/376 - - - /user/376 - -
  • -
  • - - /user/377 - - - /user/377 - -
  • -
  • - - /user/378 - - - /user/378 - -
  • -
  • - - /user/379 - - - /user/379 - -
  • -
  • - - /user/380 - - - /user/380 - -
  • -
  • - - /user/381 - - - /user/381 - -
  • -
  • - - /user/382 - - - /user/382 - -
  • -
  • - - /user/383 - - - /user/383 - -
  • -
  • - - /user/384 - - - /user/384 - -
  • -
  • - - /user/385 - - - /user/385 - -
  • -
  • - - /user/386 - - - /user/386 - -
  • -
  • - - /user/387 - - - /user/387 - -
  • -
  • - - /user/388 - - - /user/388 - -
  • -
  • - - /user/389 - - - /user/389 - -
  • -
  • - - /user/390 - - - /user/390 - -
  • -
  • - - /user/391 - - - /user/391 - -
  • -
  • - - /user/392 - - - /user/392 - -
  • -
  • - - /user/393 - - - /user/393 - -
  • -
  • - - /user/394 - - - /user/394 - -
  • -
  • - - /user/395 - - - /user/395 - -
  • -
  • - - /user/396 - - - /user/396 - -
  • -
  • - - /user/397 - - - /user/397 - -
  • -
  • - - /user/398 - - - /user/398 - -
  • -
  • - - /user/399 - - - /user/399 - -
  • -
  • - - /user/400 - - - /user/400 - -
  • -
  • - - /user/401 - - - /user/401 - -
  • -
  • - - /user/402 - - - /user/402 - -
  • -
  • - - /user/403 - - - /user/403 - -
  • -
  • - - /user/404 - - - /user/404 - -
  • -
  • - - /user/405 - - - /user/405 - -
  • -
  • - - /user/406 - - - /user/406 - -
  • -
  • - - /user/407 - - - /user/407 - -
  • -
  • - - /user/408 - - - /user/408 - -
  • -
  • - - /user/409 - - - /user/409 - -
  • -
  • - - /user/410 - - - /user/410 - -
  • -
  • - - /user/411 - - - /user/411 - -
  • -
  • - - /user/412 - - - /user/412 - -
  • -
  • - - /user/413 - - - /user/413 - -
  • -
  • - - /user/414 - - - /user/414 - -
  • -
  • - - /user/415 - - - /user/415 - -
  • -
  • - - /user/416 - - - /user/416 - -
  • -
  • - - /user/417 - - - /user/417 - -
  • -
  • - - /user/418 - - - /user/418 - -
  • -
  • - - /user/419 - - - /user/419 - -
  • -
  • - - /user/420 - - - /user/420 - -
  • -
  • - - /user/421 - - - /user/421 - -
  • -
  • - - /user/422 - - - /user/422 - -
  • -
  • - - /user/423 - - - /user/423 - -
  • -
  • - - /user/424 - - - /user/424 - -
  • -
  • - - /user/425 - - - /user/425 - -
  • -
  • - - /user/426 - - - /user/426 - -
  • -
  • - - /user/427 - - - /user/427 - -
  • -
  • - - /user/428 - - - /user/428 - -
  • -
  • - - /user/429 - - - /user/429 - -
  • -
  • - - /user/430 - - - /user/430 - -
  • -
  • - - /user/431 - - - /user/431 - -
  • -
  • - - /user/432 - - - /user/432 - -
  • -
  • - - /user/433 - - - /user/433 - -
  • -
  • - - /user/434 - - - /user/434 - -
  • -
  • - - /user/435 - - - /user/435 - -
  • -
  • - - /user/436 - - - /user/436 - -
  • -
  • - - /user/437 - - - /user/437 - -
  • -
  • - - /user/438 - - - /user/438 - -
  • -
  • - - /user/439 - - - /user/439 - -
  • -
  • - - /user/440 - - - /user/440 - -
  • -
  • - - /user/441 - - - /user/441 - -
  • -
  • - - /user/442 - - - /user/442 - -
  • -
  • - - /user/443 - - - /user/443 - -
  • -
  • - - /user/444 - - - /user/444 - -
  • -
  • - - /user/445 - - - /user/445 - -
  • -
  • - - /user/446 - - - /user/446 - -
  • -
  • - - /user/447 - - - /user/447 - -
  • -
  • - - /user/448 - - - /user/448 - -
  • -
  • - - /user/449 - - - /user/449 - -
  • -
  • - - /user/450 - - - /user/450 - -
  • -
  • - - /user/451 - - - /user/451 - -
  • -
  • - - /user/452 - - - /user/452 - -
  • -
  • - - /user/453 - - - /user/453 - -
  • -
  • - - /user/454 - - - /user/454 - -
  • -
  • - - /user/455 - - - /user/455 - -
  • -
  • - - /user/456 - - - /user/456 - -
  • -
  • - - /user/457 - - - /user/457 - -
  • -
  • - - /user/458 - - - /user/458 - -
  • -
  • - - /user/459 - - - /user/459 - -
  • -
  • - - /user/460 - - - /user/460 - -
  • -
  • - - /user/461 - - - /user/461 - -
  • -
  • - - /user/462 - - - /user/462 - -
  • -
  • - - /user/463 - - - /user/463 - -
  • -
  • - - /user/464 - - - /user/464 - -
  • -
  • - - /user/465 - - - /user/465 - -
  • -
  • - - /user/466 - - - /user/466 - -
  • -
  • - - /user/467 - - - /user/467 - -
  • -
  • - - /user/468 - - - /user/468 - -
  • -
  • - - /user/469 - - - /user/469 - -
  • -
  • - - /user/470 - - - /user/470 - -
  • -
  • - - /user/471 - - - /user/471 - -
  • -
  • - - /user/472 - - - /user/472 - -
  • -
  • - - /user/473 - - - /user/473 - -
  • -
  • - - /user/474 - - - /user/474 - -
  • -
  • - - /user/475 - - - /user/475 - -
  • -
  • - - /user/476 - - - /user/476 - -
  • -
  • - - /user/477 - - - /user/477 - -
  • -
  • - - /user/478 - - - /user/478 - -
  • -
  • - - /user/479 - - - /user/479 - -
  • -
  • - - /user/480 - - - /user/480 - -
  • -
  • - - /user/481 - - - /user/481 - -
  • -
  • - - /user/482 - - - /user/482 - -
  • -
  • - - /user/483 - - - /user/483 - -
  • -
  • - - /user/484 - - - /user/484 - -
  • -
  • - - /user/485 - - - /user/485 - -
  • -
  • - - /user/486 - - - /user/486 - -
  • -
  • - - /user/487 - - - /user/487 - -
  • -
  • - - /user/488 - - - /user/488 - -
  • -
  • - - /user/489 - - - /user/489 - -
  • -
  • - - /user/490 - - - /user/490 - -
  • -
  • - - /user/491 - - - /user/491 - -
  • -
  • - - /user/492 - - - /user/492 - -
  • -
  • - - /user/493 - - - /user/493 - -
  • -
  • - - /user/494 - - - /user/494 - -
  • -
  • - - /user/495 - - - /user/495 - -
  • -
  • - - /user/496 - - - /user/496 - -
  • -
  • - - /user/497 - - - /user/497 - -
  • -
  • - - /user/498 - - - /user/498 - -
  • -
  • - - /user/499 - - - /user/499 - -
  • -
  • - - /user/500 - - - /user/500 - -
  • -
  • - - /user/501 - - - /user/501 - -
  • { - it('should generate more than 500 routes', () => { + it('should generate user-page 1 and 2', () => { let fileExists = true; // Trying to read the missing file should throw an error. If error doesn't happen, test fails. Meaning... // if the files exists (which it shouldn't, the test fails. try { - readPage('/user/501'); + readPage('/user/1'); + readPage('/user/2'); } catch ({ message }) { if (message.includes('" not found at location "')) { fileExists = false;