From dad0dae4fb2bd3c4c044784729521a413bd2b767 Mon Sep 17 00:00:00 2001 From: Adam Weidman <65992621+adamfweidman@users.noreply.github.com> Date: Tue, 20 Feb 2024 16:19:14 -0500 Subject: [PATCH 1/9] blc-api-integration-def (#102) --- package-lock.json | 24 ++--- .../google-cloud-synthetics-sdk-api-0.5.1.tgz | Bin 0 -> 96938 bytes .../synthetics-sdk-broken-links/package.json | 4 +- .../src/broken_links.ts | 27 +++--- .../src/link_utils.ts | 2 + .../src/navigation_func.ts | 5 ++ .../src/options_func.ts | 82 ++++++++++++++++-- .../test/integration/integration.spec.ts | 27 +++++- .../test/unit/broken_links.spec.ts | 26 ++++++ .../test/unit/link_utils.spec.ts | 2 + .../test/unit/navigation_func.spec.ts | 17 ++++ .../test/unit/options_func.spec.ts | 49 ++++++++++- 12 files changed, 231 insertions(+), 34 deletions(-) create mode 100644 packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz diff --git a/package-lock.json b/package-lock.json index 70c12324..e8ba6ddf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10554,7 +10554,7 @@ "version": "0.2.0", "license": "Apache-2.0", "dependencies": { - "@google-cloud/synthetics-sdk-api": "^0.5.1", + "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", "puppeteer": "21.3.6" }, "devDependencies": { @@ -10577,8 +10577,9 @@ }, "packages/synthetics-sdk-broken-links/node_modules/@google-cloud/synthetics-sdk-api": { "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@google-cloud/synthetics-sdk-api/-/synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-pzfCLlL2MvlxnGTqnSTKEE4icU+79Fuucm++Mnvifx9RMeq0gDwSRJYcx4nb1oKgfMS7TFoL+ejkIBn9uFDCOw==", + "resolved": "file:packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz", + "integrity": "sha512-L3kMURi+mUb3C5tKpFHK5bZbZqL1qXDlTMDnqvg4wJt74Xkokld1fFYh9i11erjMSMro4KDc/T/RPeGTF3gIqw==", + "license": "Apache-2.0", "dependencies": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", @@ -10587,6 +10588,7 @@ "@opentelemetry/sdk-node": "0.43.0", "@opentelemetry/sdk-trace-base": "1.17.0", "@opentelemetry/sdk-trace-node": "1.17.0", + "axios": "1.6.7", "error-stack-parser": "2.1.4", "google-auth-library": "9.0.0", "ts-proto": "1.148.1", @@ -11806,7 +11808,7 @@ "version": "file:packages/synthetics-sdk-broken-links", "requires": { "@google-cloud/functions-framework": "^3.1.3", - "@google-cloud/synthetics-sdk-api": "^0.5.1", + "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", "@types/chai": "^4.3.4", "@types/express": "^4.17.17", "@types/node": "^18.15.10", @@ -11822,9 +11824,8 @@ }, "dependencies": { "@google-cloud/synthetics-sdk-api": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@google-cloud/synthetics-sdk-api/-/synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-pzfCLlL2MvlxnGTqnSTKEE4icU+79Fuucm++Mnvifx9RMeq0gDwSRJYcx4nb1oKgfMS7TFoL+ejkIBn9uFDCOw==", + "version": "file:google-cloud-synthetics-sdk-api-0.5.1.tgz", + "integrity": "sha512-L3kMURi+mUb3C5tKpFHK5bZbZqL1qXDlTMDnqvg4wJt74Xkokld1fFYh9i11erjMSMro4KDc/T/RPeGTF3gIqw==", "requires": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", @@ -11833,6 +11834,7 @@ "@opentelemetry/sdk-node": "0.43.0", "@opentelemetry/sdk-trace-base": "1.17.0", "@opentelemetry/sdk-trace-node": "1.17.0", + "axios": "1.6.7", "error-stack-parser": "2.1.4", "google-auth-library": "9.0.0", "ts-proto": "1.148.1", @@ -18431,7 +18433,7 @@ "version": "file:packages/synthetics-sdk-broken-links", "requires": { "@google-cloud/functions-framework": "^3.1.3", - "@google-cloud/synthetics-sdk-api": "^0.5.1", + "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", "@types/chai": "^4.3.4", "@types/express": "^4.17.17", "@types/node": "^18.15.10", @@ -18447,9 +18449,8 @@ }, "dependencies": { "@google-cloud/synthetics-sdk-api": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/@google-cloud/synthetics-sdk-api/-/synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-pzfCLlL2MvlxnGTqnSTKEE4icU+79Fuucm++Mnvifx9RMeq0gDwSRJYcx4nb1oKgfMS7TFoL+ejkIBn9uFDCOw==", + "version": "file:google-cloud-synthetics-sdk-api-0.5.1.tgz", + "integrity": "sha512-L3kMURi+mUb3C5tKpFHK5bZbZqL1qXDlTMDnqvg4wJt74Xkokld1fFYh9i11erjMSMro4KDc/T/RPeGTF3gIqw==", "requires": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", @@ -18458,6 +18459,7 @@ "@opentelemetry/sdk-node": "0.43.0", "@opentelemetry/sdk-trace-base": "1.17.0", "@opentelemetry/sdk-trace-node": "1.17.0", + "axios": "1.6.7", "error-stack-parser": "2.1.4", "google-auth-library": "9.0.0", "ts-proto": "1.148.1", diff --git a/packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz b/packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..c09925a90c071da77858c9b1b51e63701baeb619 GIT binary patch literal 96938 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%0A(enC#Xz9HkHF@ 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 f59?G{c)`V#JP=@3yUdhHu*QEs;?K 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 L;U(Zdc)=18" }, "dependencies": { - "@google-cloud/synthetics-sdk-api": "^0.5.1", + "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", "puppeteer": "21.3.6" } } diff --git a/packages/synthetics-sdk-broken-links/src/broken_links.ts b/packages/synthetics-sdk-broken-links/src/broken_links.ts index 5e5f9865..437457fb 100644 --- a/packages/synthetics-sdk-broken-links/src/broken_links.ts +++ b/packages/synthetics-sdk-broken-links/src/broken_links.ts @@ -35,7 +35,7 @@ import { retrieveLinksFromPage, openNewPage, } from './navigation_func'; -import { setDefaultOptions, validateInputOptions } from './options_func'; +import { processOptions } from './options_func'; export interface BrokenLinkCheckerOptions { origin_uri: string; @@ -48,6 +48,7 @@ export interface BrokenLinkCheckerOptions { wait_for_selector?: string; per_link_options?: { [key: string]: PerLinkOption }; total_synthetic_timeout_millis?: number; + screenshot_options?: ScreenshotOptions; } export interface PerLinkOption { @@ -70,6 +71,17 @@ export enum StatusClass { STATUS_CLASS_ANY = 'STATUS_CLASS_ANY', } +export interface ScreenshotOptions { + storage_location?: string; + screenshot_condition?: ScreenshotCondition; +} + +export enum ScreenshotCondition { + NONE = 'NONE', + FAILING = 'FAILING', + ALL = 'ALL', +} + let synthetics_sdk_broken_links_package; try { synthetics_sdk_broken_links_package = require('../package.json'); @@ -263,16 +275,3 @@ async function scrapeLinks( options.link_order ); } - -/** - * Validates input options and sets defaults in `options`. - * - * @param inputOptions - The input options for the broken link checker. - * @returns The processed broken link checker options. - */ -function processOptions( - inputOptions: BrokenLinkCheckerOptions -): BrokenLinksResultV1_BrokenLinkCheckerOptions { - const validOptions = validateInputOptions(inputOptions); - return setDefaultOptions(validOptions); -} diff --git a/packages/synthetics-sdk-broken-links/src/link_utils.ts b/packages/synthetics-sdk-broken-links/src/link_utils.ts index fa46dedf..460ebe07 100644 --- a/packages/synthetics-sdk-broken-links/src/link_utils.ts +++ b/packages/synthetics-sdk-broken-links/src/link_utils.ts @@ -153,6 +153,8 @@ function parseFollowedLinks( options: {} as BrokenLinksResultV1_BrokenLinkCheckerOptions, origin_link_result: {} as BrokenLinksResultV1_SyntheticLinkResult, followed_link_results: [], + execution_data_storage_path: '', // TODO: make sure that when this is set it begins with gs:// + errors: [], }; for (const link of followed_links) { diff --git a/packages/synthetics-sdk-broken-links/src/navigation_func.ts b/packages/synthetics-sdk-broken-links/src/navigation_func.ts index 030b705e..1c094ab4 100644 --- a/packages/synthetics-sdk-broken-links/src/navigation_func.ts +++ b/packages/synthetics-sdk-broken-links/src/navigation_func.ts @@ -16,6 +16,7 @@ import { Browser, HTTPResponse, Page } from 'puppeteer'; import { BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_SyntheticLinkResult, + BaseError, ResponseStatusCode, ResponseStatusCode_StatusClass, } from '@google-cloud/synthetics-sdk-api'; @@ -220,6 +221,10 @@ export async function checkLink( link_start_time: linkStartTime, link_end_time: linkEndTime, is_origin: isOrigin, + screenshot_output: { + screenshot_file: '', + screenshot_error: {} as BaseError, + }, // TODO: this is temporary in an effort to make PRs more manageable }; } diff --git a/packages/synthetics-sdk-broken-links/src/options_func.ts b/packages/synthetics-sdk-broken-links/src/options_func.ts index 72b7d620..d997ae8a 100644 --- a/packages/synthetics-sdk-broken-links/src/options_func.ts +++ b/packages/synthetics-sdk-broken-links/src/options_func.ts @@ -16,6 +16,8 @@ import { BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, BrokenLinksResultV1_BrokenLinkCheckerOptions_PerLinkOption, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition, ResponseStatusCode, ResponseStatusCode_StatusClass, } from '@google-cloud/synthetics-sdk-api'; @@ -23,8 +25,22 @@ import { BrokenLinkCheckerOptions, LinkOrder, StatusClass, + ScreenshotCondition, } from './broken_links'; +/** + * Validates input options and sets defaults in `options`. + * + * @param inputOptions - The input options for the broken link checker. + * @returns The processed broken link checker options. + */ +export function processOptions( + inputOptions: BrokenLinkCheckerOptions +): BrokenLinksResultV1_BrokenLinkCheckerOptions { + const validOptions = validateInputOptions(inputOptions); + return setDefaultOptions(validOptions); +} + /** * Validates the input options for the Broken Link Checker. * @@ -130,6 +146,26 @@ export function validateInputOptions( ); } + // Check storage_location + if ( + inputOptions.screenshot_options?.storage_location !== undefined && + typeof inputOptions.screenshot_options?.storage_location !== 'string' + ) { + throw new Error('Invalid storage_location value, must be a string'); + } + + // check storage_condition + if ( + inputOptions.screenshot_options?.screenshot_condition !== undefined && + !Object.values(ScreenshotCondition).includes( + inputOptions.screenshot_options?.screenshot_condition + ) + ) { + throw new Error( + 'Invalid screenshot_condition value, must be `ALL`, `FAILING`, OR `NONE`' + ); + } + // per_link_options for (const [key, value] of Object.entries( inputOptions.per_link_options || {} @@ -180,6 +216,11 @@ export function validateInputOptions( wait_for_selector: inputOptions.wait_for_selector, per_link_options: inputOptions.per_link_options, total_synthetic_timeout_millis: inputOptions.total_synthetic_timeout_millis, + screenshot_options: { + screenshot_condition: + inputOptions.screenshot_options?.screenshot_condition, + storage_location: inputOptions.screenshot_options?.storage_location, + }, }; } @@ -192,7 +233,7 @@ export function validateInputOptions( export function setDefaultOptions( inputOptions: BrokenLinkCheckerOptions ): BrokenLinksResultV1_BrokenLinkCheckerOptions { - const defaulOptions: BrokenLinksResultV1_BrokenLinkCheckerOptions = { + const defaultOptions: BrokenLinksResultV1_BrokenLinkCheckerOptions = { origin_uri: '', link_limit: 10, query_selector_all: 'a', @@ -203,17 +244,26 @@ export function setDefaultOptions( wait_for_selector: '', per_link_options: {}, total_synthetic_timeout_millis: 60000, + screenshot_options: { + screenshot_condition: + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition.FAILING, + storage_location: '', + }, }; const outputOptions: BrokenLinksResultV1_BrokenLinkCheckerOptions = {} as BrokenLinksResultV1_BrokenLinkCheckerOptions; - const optionsKeys = Object.keys(defaulOptions) as Array< + const optionsKeys = Object.keys(defaultOptions) as Array< keyof BrokenLinksResultV1_BrokenLinkCheckerOptions >; for (const optionName of optionsKeys) { // per_link_options and linkorder are handled below - if (optionName === 'per_link_options' || optionName === 'link_order') + if ( + optionName === 'per_link_options' || + optionName === 'link_order' || + optionName === 'screenshot_options' + ) continue; if ( @@ -222,13 +272,35 @@ export function setDefaultOptions( (inputOptions as any)[optionName] === undefined ) { // eslint-disable-next-line @typescript-eslint/no-explicit-any - (outputOptions as any)[optionName] = defaulOptions[optionName]; + (outputOptions as any)[optionName] = defaultOptions[optionName]; } else { // eslint-disable-next-line @typescript-eslint/no-explicit-any (outputOptions as any)[optionName] = inputOptions[optionName]; } } + // converting inputOptions.screenshot_options to + // BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions + outputOptions.screenshot_options = + {} as BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions; + if (inputOptions.screenshot_options?.screenshot_condition) { + outputOptions.screenshot_options!.screenshot_condition = + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition[ + inputOptions.screenshot_options.screenshot_condition + ]; + } else { + outputOptions.screenshot_options!.screenshot_condition = + defaultOptions.screenshot_options!.screenshot_condition; + } + + if (outputOptions.screenshot_options?.storage_location) { + outputOptions.screenshot_options.storage_location = + inputOptions.screenshot_options!.storage_location!; + } else { + outputOptions.screenshot_options.storage_location = + defaultOptions.screenshot_options!.storage_location!; + } + // converting inputOptions.link_order, type: LinkOrder to // outputOptions.link_order, type BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder if (inputOptions.link_order) { @@ -237,7 +309,7 @@ export function setDefaultOptions( inputOptions.link_order ]; } else { - outputOptions.link_order = defaulOptions.link_order; + outputOptions.link_order = defaultOptions.link_order; } // Convert `inputOptions.per_link_options`, type: {[key: string]: PerLinkOption} diff --git a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts index bdc873e2..e0392aa7 100644 --- a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts @@ -13,8 +13,12 @@ // limitations under the License. import { - ResponseStatusCode_StatusClass, + BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition, + BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput, + ResponseStatusCode_StatusClass, SyntheticResult, } from '@google-cloud/synthetics-sdk-api'; @@ -29,6 +33,17 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { const status_class_2xx = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_2XX, }; + const default_screenshot_options: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions = + { + screenshot_condition: + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition.FAILING, + storage_location: '', + }; + + const default_screenshot_output : BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput = { + screenshot_file: '', + screenshot_error: {} as BaseError, + } it('Handles error when trying to visit page that does not exist', async () => { const server = getTestServer('BrokenLinksPageDoesNotExist'); @@ -79,6 +94,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, + screenshot_output : default_screenshot_output }); expect(followed_links).to.deep.equal([]); @@ -137,6 +153,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { wait_for_selector: '', per_link_options: {}, total_synthetic_timeout_millis: 60000, + screenshot_options: default_screenshot_options, }); expect(origin_link) @@ -154,6 +171,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, + screenshot_output : default_screenshot_output }); expect(followed_links).to.deep.equal([]); @@ -244,6 +262,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { wait_for_selector: '', per_link_options: {}, total_synthetic_timeout_millis: 60000, + screenshot_options: default_screenshot_options, }); expect(origin_link) @@ -261,6 +280,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, + screenshot_output : default_screenshot_output }); const sorted_followed_links = followed_links?.sort((a, b) => @@ -289,6 +309,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, + screenshot_output : default_screenshot_output }, { link_passed: false, @@ -302,6 +323,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, + screenshot_output : default_screenshot_output }, ]); @@ -367,6 +389,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { wait_for_selector: '', per_link_options: {}, total_synthetic_timeout_millis: 60000, + screenshot_options: default_screenshot_options, }); expect(origin_link) @@ -384,6 +407,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, + screenshot_output : default_screenshot_output }); expect(followed_links) @@ -402,6 +426,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, + screenshot_output : default_screenshot_output }, ]); diff --git a/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts index edb18d6c..7c15e29e 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts @@ -18,8 +18,11 @@ use(chaiExclude); import { BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition, BrokenLinksResultV1_SyntheticLinkResult, ResponseStatusCode, + BaseError, ResponseStatusCode_StatusClass, } from '@google-cloud/synthetics-sdk-api'; import { @@ -32,6 +35,12 @@ describe('runBrokenLinks', async () => { const status_class_2xx: ResponseStatusCode = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_2XX, }; + const default_screenshot_options: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions = + { + screenshot_condition: + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition.FAILING, + storage_location: '', + }; it('returns generic_result with appropriate error information if error thrown', async () => { const inputOptions: BrokenLinkCheckerOptions = { @@ -104,6 +113,10 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, + screenshot_output: { + screenshot_file: '', + screenshot_error: {} as BaseError, + }, }; expect(broken_links_result?.origin_link_result) @@ -138,6 +151,7 @@ describe('runBrokenLinks', async () => { wait_for_selector: '', per_link_options: {}, total_synthetic_timeout_millis: 60000, + screenshot_options: default_screenshot_options, }; const expectedOriginLinkResult: BrokenLinksResultV1_SyntheticLinkResult = { @@ -153,6 +167,10 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, + screenshot_output: { + screenshot_file: '', + screenshot_error: {} as BaseError, + }, }; const file_doesnt_exist_path = `file://${path.join( @@ -176,6 +194,10 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, + screenshot_output: { + screenshot_file: '', + screenshot_error: {} as BaseError, + }, }, { link_passed: false, @@ -190,6 +212,10 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, + screenshot_output: { + screenshot_file: '', + screenshot_error: {} as BaseError, + }, }, ]; diff --git a/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts index 9f52f2cb..c4840a9f 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts @@ -138,6 +138,8 @@ describe('GCM Synthetics Broken Links Utilies', async () => { options: options, origin_link_result: origin_link, followed_link_results: followed_links, + execution_data_storage_path: '', + errors: [] }); expect( diff --git a/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts index c6256797..486c6e19 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts @@ -20,6 +20,7 @@ import puppeteer, { Browser, HTTPResponse, Page } from 'puppeteer'; import sinon from 'sinon'; import { BrokenLinksResultV1_SyntheticLinkResult, + BaseError, ResponseStatusCode, ResponseStatusCode_StatusClass, } from '@google-cloud/synthetics-sdk-api'; @@ -135,6 +136,10 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, + screenshot_output: { + screenshot_file: '', + screenshot_error: {} as BaseError, + }, }; expect(synLinkResult) @@ -174,6 +179,10 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, + screenshot_output: { + screenshot_file: '', + screenshot_error: {} as BaseError, + }, }; expect(synLinkResult) @@ -216,6 +225,10 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, + screenshot_output: { + screenshot_file: '', + screenshot_error: {} as BaseError, + }, }; expect(synLinkResult) @@ -271,6 +284,10 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, + screenshot_output: { + screenshot_file: '', + screenshot_error: {} as BaseError, + }, }; expect(synLinkResult) diff --git a/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts index c431a8a1..f7d58b4a 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts @@ -368,6 +368,45 @@ describe('GCM Synthetics Broken Links options_func suite testing', () => { validateInputOptions(options); }).to.not.throw(); }); + it('throws error if storage_condition is not a valid StorageCondition value', () => { + const options = { + origin_uri: 'http://example.com', + screenshot_options: { screenshot_condition: 'invalid' }, + } as any as BrokenLinkCheckerOptions; + expect(() => { + validateInputOptions(options); + }).to.throw( + Error, + 'Invalid screenshot_condition value, must be `ALL`, `FAILING`, OR `NONE`' + ); + }); + it('storage_condition accepts string', () => { + const options = { + origin_uri: 'http://example.com', + screenshot_options: { screenshot_condition: 'FAILING' }, + } as any as BrokenLinkCheckerOptions; + expect(() => { + validateInputOptions(options); + }).to.not.throw(); + }); + it('throws error if storage_location is not a string', () => { + const options = { + origin_uri: 'http://example.com', + screenshot_options: { storage_location: 123 }, + } as any as BrokenLinkCheckerOptions; + expect(() => { + validateInputOptions(options); + }).to.throw(Error, 'Invalid storage_location value, must be a string'); + }); + it('storage_location can be an empty string', () => { + const options = { + origin_uri: 'http://example.com', + screenshot_options: { storage_location: '' }, + } as BrokenLinkCheckerOptions; + expect(() => { + validateInputOptions(options); + }).not.to.throw(); + }); it('validates input options when all values are valid', () => { const options = { origin_uri: 'http://example.com', @@ -384,6 +423,10 @@ describe('GCM Synthetics Broken Links options_func suite testing', () => { expected_status_code: StatusClass.STATUS_CLASS_2XX, }, }, + screenshot_options: { + storage_location: '', + screenshot_condition: 'FAILING', + }, } as BrokenLinkCheckerOptions; expect(() => { @@ -406,7 +449,11 @@ describe('GCM Synthetics Broken Links options_func suite testing', () => { max_retries: undefined, wait_for_selector: undefined, per_link_options: undefined, - total_synthetic_timeout_millis: undefined + total_synthetic_timeout_millis: undefined, + screenshot_options: { + storage_location: undefined, + screenshot_condition: undefined, + }, } as BrokenLinkCheckerOptions; expect(() => { From a6d82b8151da9b102b2785db2d38229b291e3f9c Mon Sep 17 00:00:00 2001 From: Adam Weidman <65992621+adamfweidman@users.noreply.github.com> Date: Fri, 23 Feb 2024 15:35:58 -0500 Subject: [PATCH 2/9] resolveProjectId present (#106) --- package-lock.json | 764 ++++++++++++++++-- .../google-cloud-synthetics-sdk-api-0.5.1.tgz | Bin 96938 -> 97185 bytes .../synthetics-sdk-broken-links/package.json | 2 + .../src/broken_links.ts | 26 +- .../src/link_utils.ts | 5 +- .../src/storage_func.ts | 119 +++ .../test/integration/integration.spec.ts | 19 +- .../test/unit/link_utils.spec.ts | 9 +- .../test/unit/options_func.spec.ts | 2 +- .../test/unit/storage_func.spec.ts | 151 ++++ 10 files changed, 1003 insertions(+), 94 deletions(-) create mode 100644 packages/synthetics-sdk-broken-links/src/storage_func.ts create mode 100644 packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts diff --git a/package-lock.json b/package-lock.json index e8ba6ddf..3815627b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -665,6 +665,157 @@ "@opentelemetry/semantic-conventions": "^1.0.0" } }, + "node_modules/@google-cloud/paginator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.0.tgz", + "integrity": "sha512-87aeg6QQcEPxGCOthnpUjvw4xAZ57G7pL8FS0C4e/81fr3FjkpUpibf1s2v5XGyGhUVGF4Jfg7yEcxqn2iUw1w==", + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/paginator/node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "engines": { + "node": ">=8" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", + "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", + "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.7.0.tgz", + "integrity": "sha512-EMCEY+6JiIkx7Dt8NXVGGjy1vRdSGdHkoqZoqjJw7cEBkT7ZkX0c7puedfn1MamnzW5SX4xoa2jVq5u7OWBmkQ==", + "dependencies": { + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "abort-controller": "^3.0.0", + "async-retry": "^1.3.3", + "compressible": "^2.0.12", + "duplexify": "^4.0.0", + "ent": "^2.2.0", + "fast-xml-parser": "^4.3.0", + "gaxios": "^6.0.2", + "google-auth-library": "^9.0.0", + "mime": "^3.0.0", + "mime-types": "^2.0.8", + "p-limit": "^3.0.1", + "retry-request": "^7.0.0", + "teeny-request": "^9.0.0", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@google-cloud/storage/node_modules/gaxios": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.3.0.tgz", + "integrity": "sha512-p+ggrQw3fBwH2F5N/PAI4k/G/y1art5OxKpb2J2chwNNHM4hHuAOtivjPuirMF4KNKwTTUal/lPfL2+7h2mEcg==", + "dependencies": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage/node_modules/gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "dependencies": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage/node_modules/google-auth-library": { + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.6.3.tgz", + "integrity": "sha512-4CacM29MLC2eT9Cey5GDVK4Q8t+MMp8+OEdOaqD9MG6b0dOyLORaaeJMPQ7EESVgm/+z5EKYyFLxgzBJlJgyHQ==", + "dependencies": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@google-cloud/storage/node_modules/gtoken": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", + "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", + "dependencies": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@google-cloud/storage/node_modules/https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@google-cloud/storage/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@google-cloud/synthetics-sdk-api": { "resolved": "packages/synthetics-sdk-api", "link": true @@ -2889,6 +3040,14 @@ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "engines": { + "node": ">= 10" + } + }, "node_modules/@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", @@ -2948,6 +3107,11 @@ "@types/node": "*" } }, + "node_modules/@types/caseless": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", + "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==" + }, "node_modules/@types/chai": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", @@ -3206,6 +3370,30 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, + "node_modules/@types/request": { + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", + "dependencies": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + } + }, + "node_modules/@types/request/node_modules/form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, "node_modules/@types/send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", @@ -3271,6 +3459,11 @@ "@types/node": "*" } }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" + }, "node_modules/@types/triple-beam": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.3.tgz", @@ -3783,6 +3976,14 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "dependencies": { + "retry": "0.13.1" + } + }, "node_modules/asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -4379,6 +4580,17 @@ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -4795,6 +5007,17 @@ "detect-libc": "^1.0.3" } }, + "node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -4849,6 +5072,11 @@ "node": ">=8.6" } }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" + }, "node_modules/error": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", @@ -5483,6 +5711,27 @@ "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" }, + "node_modules/fast-xml-parser": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.4.tgz", + "integrity": "sha512-utnwm92SyozgA3hhH2I8qldf2lBqm6qHOICawRNRFu1qMe3+oqr+GcXjGqTmXTMGE5T4eC03kr/rlh5C1IRdZA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -5551,6 +5800,19 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/fill-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", + "integrity": "sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA==", + "dev": true, + "dependencies": { + "is-object": "~1.0.1", + "merge-descriptors": "~1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -6705,6 +6967,15 @@ "node": ">=8" } }, + "node_modules/is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -7532,6 +7803,12 @@ "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" }, + "node_modules/module-not-found-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", + "integrity": "sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==", + "dev": true + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -8228,6 +8505,17 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "node_modules/proxyquire": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", + "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", + "dev": true, + "dependencies": { + "fill-keys": "^1.0.2", + "module-not-found-error": "^1.0.1", + "resolve": "^1.11.1" + } + }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -8620,6 +8908,27 @@ "node": ">=8" } }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/retry-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", + "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", + "dependencies": { + "@types/request": "^2.48.8", + "extend": "^3.0.2", + "teeny-request": "^9.0.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -8891,9 +9200,9 @@ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" }, "node_modules/sinon": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.0.0.tgz", - "integrity": "sha512-B8AaZZm9CT5pqe4l4uWJztfD/mOTa7dL8Qo0W4+s+t74xECOgSZDDQCBjNgIK3+n4kyxQrSTv2V5ul8K25qkiQ==", + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.1.3.tgz", + "integrity": "sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA==", "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0", @@ -9087,6 +9396,19 @@ "node": ">= 0.8" } }, + "node_modules/stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "dependencies": { + "stubs": "^3.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + }, "node_modules/streamx": { "version": "2.15.2", "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.2.tgz", @@ -9178,6 +9500,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "node_modules/stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" + }, "node_modules/superagent": { "version": "8.0.9", "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz", @@ -9315,6 +9647,46 @@ "streamx": "^2.15.0" } }, + "node_modules/teeny-request": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", + "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", + "dependencies": { + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.9", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/teeny-request/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/teeny-request/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", @@ -10554,6 +10926,7 @@ "version": "0.2.0", "license": "Apache-2.0", "dependencies": { + "@google-cloud/storage": "^7.7.0", "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", "puppeteer": "21.3.6" }, @@ -10567,7 +10940,8 @@ "chai": "^4.3.7", "chai-exclude": "^2.1.0", "express": "^4.18.2", - "sinon": "^15.2.0", + "proxyquire": "^2.1.3", + "sinon": "^16.1.1", "supertest": "^6.3.3", "synthetics-sdk-broken-links": "file:./" }, @@ -10578,7 +10952,7 @@ "packages/synthetics-sdk-broken-links/node_modules/@google-cloud/synthetics-sdk-api": { "version": "0.5.1", "resolved": "file:packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-L3kMURi+mUb3C5tKpFHK5bZbZqL1qXDlTMDnqvg4wJt74Xkokld1fFYh9i11erjMSMro4KDc/T/RPeGTF3gIqw==", + "integrity": "sha512-5qsL50gnQ2Ifl22Gr5NzozKJ4J8tHEZ0IXerzsTxKfvfoPaesB9loY2pTAEiOjalfPZYmLXuYyepGuUlQ5ndnA==", "license": "Apache-2.0", "dependencies": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", @@ -10851,15 +11225,6 @@ "node": ">= 14" } }, - "packages/synthetics-sdk-broken-links/node_modules/diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, "packages/synthetics-sdk-broken-links/node_modules/gaxios": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", @@ -10955,25 +11320,6 @@ "node": ">=12.0.0" } }, - "packages/synthetics-sdk-broken-links/node_modules/sinon": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz", - "integrity": "sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==", - "deprecated": "16.1.1", - "dev": true, - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.3.0", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.1.0", - "nise": "^5.1.4", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, "packages/synthetics-sdk-mocha": { "name": "@google-cloud/synthetics-sdk-mocha", "version": "0.1.1", @@ -11496,6 +11842,122 @@ "gcp-metadata": "^5.0.1" } }, + "@google-cloud/paginator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-5.0.0.tgz", + "integrity": "sha512-87aeg6QQcEPxGCOthnpUjvw4xAZ57G7pL8FS0C4e/81fr3FjkpUpibf1s2v5XGyGhUVGF4Jfg7yEcxqn2iUw1w==", + "requires": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "dependencies": { + "arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==" + } + } + }, + "@google-cloud/projectify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-4.0.0.tgz", + "integrity": "sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==" + }, + "@google-cloud/promisify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-4.0.0.tgz", + "integrity": "sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==" + }, + "@google-cloud/storage": { + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.7.0.tgz", + "integrity": "sha512-EMCEY+6JiIkx7Dt8NXVGGjy1vRdSGdHkoqZoqjJw7cEBkT7ZkX0c7puedfn1MamnzW5SX4xoa2jVq5u7OWBmkQ==", + "requires": { + "@google-cloud/paginator": "^5.0.0", + "@google-cloud/projectify": "^4.0.0", + "@google-cloud/promisify": "^4.0.0", + "abort-controller": "^3.0.0", + "async-retry": "^1.3.3", + "compressible": "^2.0.12", + "duplexify": "^4.0.0", + "ent": "^2.2.0", + "fast-xml-parser": "^4.3.0", + "gaxios": "^6.0.2", + "google-auth-library": "^9.0.0", + "mime": "^3.0.0", + "mime-types": "^2.0.8", + "p-limit": "^3.0.1", + "retry-request": "^7.0.0", + "teeny-request": "^9.0.0", + "uuid": "^8.0.0" + }, + "dependencies": { + "agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "requires": { + "debug": "^4.3.4" + } + }, + "gaxios": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.3.0.tgz", + "integrity": "sha512-p+ggrQw3fBwH2F5N/PAI4k/G/y1art5OxKpb2J2chwNNHM4hHuAOtivjPuirMF4KNKwTTUal/lPfL2+7h2mEcg==", + "requires": { + "extend": "^3.0.2", + "https-proxy-agent": "^7.0.1", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.9" + } + }, + "gcp-metadata": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", + "requires": { + "gaxios": "^6.0.0", + "json-bigint": "^1.0.0" + } + }, + "google-auth-library": { + "version": "9.6.3", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.6.3.tgz", + "integrity": "sha512-4CacM29MLC2eT9Cey5GDVK4Q8t+MMp8+OEdOaqD9MG6b0dOyLORaaeJMPQ7EESVgm/+z5EKYyFLxgzBJlJgyHQ==", + "requires": { + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", + "gtoken": "^7.0.0", + "jws": "^4.0.0" + } + }, + "gtoken": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-7.1.0.tgz", + "integrity": "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==", + "requires": { + "gaxios": "^6.0.0", + "jws": "^4.0.0" + } + }, + "https-proxy-agent": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" + } + } + }, "@google-cloud/synthetics-sdk-api": { "version": "file:packages/synthetics-sdk-api", "requires": { @@ -11808,6 +12270,7 @@ "version": "file:packages/synthetics-sdk-broken-links", "requires": { "@google-cloud/functions-framework": "^3.1.3", + "@google-cloud/storage": "^7.7.0", "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", "@types/chai": "^4.3.4", "@types/express": "^4.17.17", @@ -11817,15 +12280,16 @@ "chai": "^4.3.7", "chai-exclude": "^2.1.0", "express": "^4.18.2", + "proxyquire": "^2.1.3", "puppeteer": "21.3.6", - "sinon": "^15.2.0", + "sinon": "^16.1.1", "supertest": "^6.3.3", "synthetics-sdk-broken-links": "file:" }, "dependencies": { "@google-cloud/synthetics-sdk-api": { "version": "file:google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-L3kMURi+mUb3C5tKpFHK5bZbZqL1qXDlTMDnqvg4wJt74Xkokld1fFYh9i11erjMSMro4KDc/T/RPeGTF3gIqw==", + "integrity": "sha512-5qsL50gnQ2Ifl22Gr5NzozKJ4J8tHEZ0IXerzsTxKfvfoPaesB9loY2pTAEiOjalfPZYmLXuYyepGuUlQ5ndnA==", "requires": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", @@ -12014,12 +12478,6 @@ "debug": "^4.3.4" } }, - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true - }, "gaxios": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", @@ -12095,20 +12553,6 @@ "@types/node": ">=13.7.0", "long": "^5.0.0" } - }, - "sinon": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz", - "integrity": "sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.3.0", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.1.0", - "nise": "^5.1.4", - "supports-color": "^7.2.0" - } } } }, @@ -13680,6 +14124,11 @@ "integrity": "sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==", "dev": true }, + "@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + }, "@tootallnate/quickjs-emscripten": { "version": "0.23.0", "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", @@ -13739,6 +14188,11 @@ "@types/node": "*" } }, + "@types/caseless": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", + "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==" + }, "@types/chai": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.5.tgz", @@ -13993,6 +14447,29 @@ "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" }, + "@types/request": { + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", + "requires": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + }, + "dependencies": { + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + } + } + }, "@types/send": { "version": "0.17.1", "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", @@ -14058,6 +14535,11 @@ "@types/node": "*" } }, + "@types/tough-cookie": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" + }, "@types/triple-beam": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.3.tgz", @@ -14393,6 +14875,14 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" }, + "async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "requires": { + "retry": "0.13.1" + } + }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", @@ -14847,6 +15337,14 @@ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -15149,6 +15647,17 @@ "detect-libc": "^1.0.3" } }, + "duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "requires": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, "ecdsa-sig-formatter": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", @@ -15196,6 +15705,11 @@ "ansi-colors": "^4.1.1" } }, + "ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==" + }, "error": { "version": "7.0.2", "resolved": "https://registry.npmjs.org/error/-/error-7.0.2.tgz", @@ -15665,6 +16179,14 @@ "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==" }, + "fast-xml-parser": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.4.tgz", + "integrity": "sha512-utnwm92SyozgA3hhH2I8qldf2lBqm6qHOICawRNRFu1qMe3+oqr+GcXjGqTmXTMGE5T4eC03kr/rlh5C1IRdZA==", + "requires": { + "strnum": "^1.0.5" + } + }, "fastq": { "version": "1.15.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", @@ -15719,6 +16241,16 @@ "flat-cache": "^3.0.4" } }, + "fill-keys": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/fill-keys/-/fill-keys-1.0.2.tgz", + "integrity": "sha512-tcgI872xXjwFF4xgQmLxi76GnwJG3g/3isB1l4/G5Z4zrbddGpBjqZCO9oEAcB5wX0Hj/5iQB3toxfO7in1hHA==", + "dev": true, + "requires": { + "is-object": "~1.0.1", + "merge-descriptors": "~1.0.0" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -16548,6 +17080,12 @@ "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, + "is-object": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", + "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", + "dev": true + }, "is-plain-obj": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", @@ -17174,6 +17712,12 @@ "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" }, + "module-not-found-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/module-not-found-error/-/module-not-found-error-1.0.1.tgz", + "integrity": "sha512-pEk4ECWQXV6z2zjhRZUongnLJNUeGQJ3w6OQ5ctGwD+i5o93qjRQUk2Rt6VdNeu3sEP0AB4LcfvdebpxBRVr4g==", + "dev": true + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -17676,6 +18220,17 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, + "proxyquire": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/proxyquire/-/proxyquire-2.1.3.tgz", + "integrity": "sha512-BQWfCqYM+QINd+yawJz23tbBM40VIGXOdDw3X344KcclI/gtBbdWF6SlQ4nK/bYhF9d27KYug9WzljHC6B9Ysg==", + "dev": true, + "requires": { + "fill-keys": "^1.0.2", + "module-not-found-error": "^1.0.1", + "resolve": "^1.11.1" + } + }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", @@ -17955,6 +18510,21 @@ "signal-exit": "^3.0.2" } }, + "retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==" + }, + "retry-request": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.2.tgz", + "integrity": "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==", + "requires": { + "@types/request": "^2.48.8", + "extend": "^3.0.2", + "teeny-request": "^9.0.0" + } + }, "reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -18155,9 +18725,9 @@ } }, "sinon": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.0.0.tgz", - "integrity": "sha512-B8AaZZm9CT5pqe4l4uWJztfD/mOTa7dL8Qo0W4+s+t74xECOgSZDDQCBjNgIK3+n4kyxQrSTv2V5ul8K25qkiQ==", + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-16.1.3.tgz", + "integrity": "sha512-mjnWWeyxcAf9nC0bXcPmiDut+oE8HYridTNzBbF98AYVLmWwGRp2ISEpyhYflG1ifILT+eNn3BmKUJPxjXUPlA==", "dev": true, "requires": { "@sinonjs/commons": "^3.0.0", @@ -18313,6 +18883,19 @@ "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, + "stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "requires": { + "stubs": "^3.0.0" + } + }, + "stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==" + }, "streamx": { "version": "2.15.2", "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.2.tgz", @@ -18380,6 +18963,16 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, + "strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==" + }, + "stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==" + }, "superagent": { "version": "8.0.9", "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz", @@ -18433,6 +19026,7 @@ "version": "file:packages/synthetics-sdk-broken-links", "requires": { "@google-cloud/functions-framework": "^3.1.3", + "@google-cloud/storage": "^7.7.0", "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", "@types/chai": "^4.3.4", "@types/express": "^4.17.17", @@ -18442,15 +19036,16 @@ "chai": "^4.3.7", "chai-exclude": "^2.1.0", "express": "^4.18.2", + "proxyquire": "^2.1.3", "puppeteer": "21.3.6", - "sinon": "^15.2.0", + "sinon": "^16.1.1", "supertest": "^6.3.3", "synthetics-sdk-broken-links": "file:" }, "dependencies": { "@google-cloud/synthetics-sdk-api": { "version": "file:google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-L3kMURi+mUb3C5tKpFHK5bZbZqL1qXDlTMDnqvg4wJt74Xkokld1fFYh9i11erjMSMro4KDc/T/RPeGTF3gIqw==", + "integrity": "sha512-5qsL50gnQ2Ifl22Gr5NzozKJ4J8tHEZ0IXerzsTxKfvfoPaesB9loY2pTAEiOjalfPZYmLXuYyepGuUlQ5ndnA==", "requires": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", @@ -18639,12 +19234,6 @@ "debug": "^4.3.4" } }, - "diff": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.1.0.tgz", - "integrity": "sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==", - "dev": true - }, "gaxios": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-6.1.1.tgz", @@ -18720,20 +19309,6 @@ "@types/node": ">=13.7.0", "long": "^5.0.0" } - }, - "sinon": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/sinon/-/sinon-15.2.0.tgz", - "integrity": "sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==", - "dev": true, - "requires": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.3.0", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.1.0", - "nise": "^5.1.4", - "supports-color": "^7.2.0" - } } } }, @@ -18825,6 +19400,35 @@ "streamx": "^2.15.0" } }, + "teeny-request": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-9.0.0.tgz", + "integrity": "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==", + "requires": { + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.9", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "dependencies": { + "http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "requires": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + } + }, + "uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==" + } + } + }, "test-exclude": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", diff --git a/packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz b/packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz index c09925a90c071da77858c9b1b51e63701baeb619..66d19bf45ad7fbe5f17b84a84f1c10ff86879fed 100644 GIT binary patch delta 78358 zcmV)0K+eCa^#!5#1%Drl2mk;800092?7ewk8%dG?I)D39)UfX@&@IFbKDK98NCMOC z6L9zRdi@w76;MW~)KwCg?)7(n5s{gdcU9>EAM&s5R#jz2hK>ULHi4Z?J=8h&bB_q*XKKAfIM-7sB!)K9{}APSSDUHzCo`rG`^ zH}bHKH{xe;5}Lh(#ux28(fF2UNC^34#MO*4S!m_PSB2f9abwikCR}ShLs=* z`$^mxw()g^gTk_%C>$)^cR_17xQvtNPr}FHxM~b8TY~_QUL-B3 z*t?)Ye19C2280)_ZqOvqRwITz>>#y13|ei1B3c2%0A)Ft7z*$PMq$cO!+;KwxLXNY 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 delta 78162 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 >o|JaQQJpfet24G$h?<$k2*3J_oFsT9D6v%@u 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" }, "dependencies": { + "@google-cloud/storage": "^7.7.0", "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", "puppeteer": "21.3.6" } diff --git a/packages/synthetics-sdk-broken-links/src/broken_links.ts b/packages/synthetics-sdk-broken-links/src/broken_links.ts index 437457fb..af1e0c57 100644 --- a/packages/synthetics-sdk-broken-links/src/broken_links.ts +++ b/packages/synthetics-sdk-broken-links/src/broken_links.ts @@ -13,7 +13,9 @@ // limitations under the License. import puppeteer, { Browser, Page } from 'puppeteer'; +import { Bucket } from '@google-cloud/storage'; import { + BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_SyntheticLinkResult, instantiateMetadata, @@ -36,6 +38,10 @@ import { openNewPage, } from './navigation_func'; import { processOptions } from './options_func'; +import { + createStorageClientIfStorageSelected, + getOrCreateStorageBucket, +} from './storage_func'; export interface BrokenLinkCheckerOptions { origin_uri: string; @@ -103,6 +109,23 @@ export async function runBrokenLinks( const adjusted_synthetic_timeout_millis = options.total_synthetic_timeout_millis! - 7000; + const errors: BaseError[] = []; + + // Initialize Storage Client with Error Handling. Set to `null` if + // screenshot_condition is 'None' + const storageClient = createStorageClientIfStorageSelected( + errors, + options.screenshot_options!.screenshot_condition + ); + + // TODO. Just to show where this will be called. uncommented in next PR + // Bucket Validation + // const bucket: Bucket | null = await getOrCreateStorageBucket( + // storageClient, + // options.screenshot_options!.storage_location, + // errors + // ); + // Create Promise and variables used to set and resolve the time limit // imposed by `adjusted_synthetic_timeout` const [timeLimitPromise, timeLimitTimeout, timeLimitresolver] = @@ -161,7 +184,8 @@ export async function runBrokenLinks( startTime, runtime_metadata, options, - followed_links + followed_links, + errors ); } catch (err) { const errorMessage = diff --git a/packages/synthetics-sdk-broken-links/src/link_utils.ts b/packages/synthetics-sdk-broken-links/src/link_utils.ts index 460ebe07..e133bc14 100644 --- a/packages/synthetics-sdk-broken-links/src/link_utils.ts +++ b/packages/synthetics-sdk-broken-links/src/link_utils.ts @@ -14,6 +14,7 @@ import { HTTPResponse } from 'puppeteer'; import { + BaseError, BrokenLinksResultV1, BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, @@ -218,12 +219,14 @@ export function createSyntheticResult( start_time: string, runtime_metadata: { [key: string]: string }, options: BrokenLinksResultV1_BrokenLinkCheckerOptions, - followed_links: BrokenLinksResultV1_SyntheticLinkResult[] + followed_links: BrokenLinksResultV1_SyntheticLinkResult[], + errors: BaseError[] ): SyntheticResult { // Create BrokenLinksResultV1 by parsing followed links and setting options const broken_links_result: BrokenLinksResultV1 = parseFollowedLinks(followed_links); broken_links_result.options = options; + broken_links_result.errors = errors; // Create SyntheticResult object const synthetic_result: SyntheticResult = { diff --git a/packages/synthetics-sdk-broken-links/src/storage_func.ts b/packages/synthetics-sdk-broken-links/src/storage_func.ts new file mode 100644 index 00000000..d0ed7cc5 --- /dev/null +++ b/packages/synthetics-sdk-broken-links/src/storage_func.ts @@ -0,0 +1,119 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { Storage, Bucket } from '@google-cloud/storage'; +import { + BaseError, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition, + resolveProjectId, + getExecutionRegion, +} from '@google-cloud/synthetics-sdk-api'; + +/** + * Attempts to get an existing storage bucket if provided by the user OR + * create/use a dedicated synthetics bucket. + * Handles various errors gracefully, providing structured details in the `errors` array. + * + * @param storageClient - An initialized Storage client from the + * '@google-cloud/storage' SDK. + * @param storageLocation - The desired storage location (bucket or folder) + * provided by the user. Can be empty. + * @param errors - An array to accumulate potential errors of type `BaseError`. + * @returns A 'Bucket' object if successful, or null if errors occurred. + */ +export async function getOrCreateStorageBucket( + storageClient: Storage | null, + storageLocation: string, + errors: BaseError[] +): Promise { + let bucketName = ''; + + try { + const projectId = await resolveProjectId(); + const region = await getExecutionRegion(); + + // if storageClient was not properly initialized OR the user chose to + // use/create the default bucket but we were not able to resolve projectId + // or cloudRegion + if (!storageClient || (!storageLocation && (!projectId || !region))) + return null; + + bucketName = storageLocation + ? storageLocation.split('/')[0] + : `gcm-${projectId}-synthetics-${region}`; + + const bucket = storageClient.bucket(bucketName); + const [bucketExists] = await bucket.exists(); + + if (bucketExists) { + return bucket; // Bucket exists, return it + } else if (!storageLocation) { + // Create only if no location was provided + const [newBucket] = await bucket.create({ + location: region, + storageClass: 'STANDARD', + }); + return newBucket; + } else { + // User-provided invalid location + errors.push({ + error_type: 'InvalidStorageLocation', + error_message: `Invalid storage_location: Bucket ${bucketName} does not exist.`, + }); + } + } catch (err) { + if (err instanceof Error) process.stderr.write(err.message); + errors.push({ + // General error handling + error_type: storageLocation + ? 'StorageValidationError' + : 'BucketCreationError', + error_message: `Failed to ${ + storageLocation ? 'validate' : 'create' + } bucket ${bucketName}. Please reference server logs for further information.`, + }); + } + + return null; // Return null if bucket retrieval or creation failed +} + +/** + * Initializes a Google Cloud Storage client, if storage is selected. Handles + * both expected and unexpected errors during initialization. + * + * @param errors - An array to accumulate potential errors of type `BaseError`. + * @returns A Storage client object if successful, or null if errors occurred. + */ +export function createStorageClientIfStorageSelected( + errors: BaseError[], + storage_condition: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition +): Storage | null { + if ( + storage_condition === + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition.NONE + ) + return null; + + try { + return new Storage(); + } catch (err) { + if (err instanceof Error) process.stderr.write(err.message); + errors.push({ + error_type: 'StorageClientInitializationError', + error_message: + 'Failed to initialize Storage client. Please reference server logs for further information.', + }); + return null; + } +} diff --git a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts index e0392aa7..28adc47f 100644 --- a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts @@ -40,10 +40,11 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { storage_location: '', }; - const default_screenshot_output : BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput = { + const default_screenshot_output: BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput = + { screenshot_file: '', screenshot_error: {} as BaseError, - } + }; it('Handles error when trying to visit page that does not exist', async () => { const server = getTestServer('BrokenLinksPageDoesNotExist'); @@ -94,7 +95,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, - screenshot_output : default_screenshot_output + screenshot_output: default_screenshot_output, }); expect(followed_links).to.deep.equal([]); @@ -171,7 +172,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, - screenshot_output : default_screenshot_output + screenshot_output: default_screenshot_output, }); expect(followed_links).to.deep.equal([]); @@ -280,7 +281,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, - screenshot_output : default_screenshot_output + screenshot_output: default_screenshot_output, }); const sorted_followed_links = followed_links?.sort((a, b) => @@ -309,7 +310,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output : default_screenshot_output + screenshot_output: default_screenshot_output, }, { link_passed: false, @@ -323,7 +324,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output : default_screenshot_output + screenshot_output: default_screenshot_output, }, ]); @@ -407,7 +408,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, - screenshot_output : default_screenshot_output + screenshot_output: default_screenshot_output, }); expect(followed_links) @@ -426,7 +427,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output : default_screenshot_output + screenshot_output: default_screenshot_output, }, ]); diff --git a/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts index c4840a9f..6b467977 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts @@ -14,6 +14,7 @@ import { expect } from 'chai'; import { + BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, BrokenLinksResultV1_SyntheticLinkResult, @@ -48,6 +49,9 @@ describe('GCM Synthetics Broken Links Utilies', async () => { const status_class_5xx: ResponseStatusCode = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_5XX, }; + const default_errors: BaseError[] = [ + { error_type: 'fake-error-type', error_message: 'fake-error-message' }, + ]; it('checkStatusPassing returns correctly when passed a number as ResponseStatusCode', () => { // expecting success @@ -120,7 +124,8 @@ describe('GCM Synthetics Broken Links Utilies', async () => { start_time, runtime_metadata, options, - all_links + all_links, + default_errors ); // BrokenLinkResultV1 expectations (testing `parseFollowedLinks`) @@ -139,7 +144,7 @@ describe('GCM Synthetics Broken Links Utilies', async () => { origin_link_result: origin_link, followed_link_results: followed_links, execution_data_storage_path: '', - errors: [] + errors: default_errors, }); expect( diff --git a/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts index f7d58b4a..28ad5ff6 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts @@ -28,7 +28,7 @@ import { validateInputOptions, } from '../../src/options_func'; -describe('GCM Synthetics Broken Links options_func suite testing', () => { +describe('GCM Synthetics Broken Links options_func suite testing', () => { const status_value_304: ResponseStatusCode = { status_value: 304 }; const status_class_2xx: ResponseStatusCode = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_2XX, diff --git a/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts new file mode 100644 index 00000000..3842fbee --- /dev/null +++ b/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts @@ -0,0 +1,151 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import { expect } from 'chai'; +import sinon from 'sinon'; +import { Storage, Bucket } from '@google-cloud/storage'; +import * as sdkApi from '@google-cloud/synthetics-sdk-api'; +import { + createStorageClientIfStorageSelected, + getOrCreateStorageBucket, +} from '../../src/storage_func'; +const proxyquire = require('proxyquire'); + +// global test vars +const TEST_BUCKET_NAME = 'gcm-test-project-id-synthetics-test-region'; + +describe('GCM Synthetics Broken Links storage_func suite testing', () => { + let storageClientStub: sinon.SinonStubbedInstance; + let bucketStub: sinon.SinonStubbedInstance; + + const storageFunc = proxyquire('../../src/storage_func', { + '@google-cloud/synthetics-sdk-api': { + getExecutionRegion: () => 'test-region', + resolveProjectId: () => 'test-project-id', + }, + }); + + const storage_condition_failing_links = + sdkApi + .BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition + .FAILING; + const storage_condition_none = + sdkApi + .BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition + .NONE; + + beforeEach(() => { + // Stub a storage bucket + bucketStub = sinon.createStubInstance(Bucket); + bucketStub.name = TEST_BUCKET_NAME; + bucketStub.create.resolves([bucketStub]); + + // Stub the storage client + storageClientStub = sinon.createStubInstance(Storage); + storageClientStub.bucket.returns(bucketStub); + }); + + afterEach(() => { + sinon.restore(); + }); + + describe('getOrCreateStorageBucket()', () => { + it('should create a bucket if no storage_location is provided', async () => { + bucketStub.exists.resolves([false]); // Simulate the bucket not existing initially + + const result = await storageFunc.getOrCreateStorageBucket( + storageClientStub, + '', + [] + ); + expect(result).to.equal(bucketStub); + expect(result.name).to.equal(TEST_BUCKET_NAME); + }); + + it('should return null if projectId or region cannot be resolved', async () => { + const failingProjectId = proxyquire('../../src/storage_func', { + '@google-cloud/synthetics-sdk-api': { + getExecutionRegion: () => 'test-region', + resolveProjectId: () => '', + }, + }); + + const result = await failingProjectId.getOrCreateStorageBucket( + storageClientStub, + '', + [] + ); + expect(result).to.be.null; + }); + + it('should return existing synthetics bucket if found when storage_location is not provided ', async () => { + bucketStub.exists.resolves([true]); // Simulate the bucket already exists + + const result = await storageFunc.getOrCreateStorageBucket( + storageClientStub, + '', + [] + ); + expect(result).to.equal(bucketStub); + sinon.assert.notCalled(bucketStub.create); + }); + + it('should handle errors during bucket.exists()', async () => { + bucketStub.exists.throws(new Error('Simulated exists() error')); + + const errors: sdkApi.BaseError[] = []; + const result = await storageFunc.getOrCreateStorageBucket( + storageClientStub, + 'user-bucket', + errors + ); + + expect(result).to.be.null; + expect(errors.length).to.equal(1); + expect(errors[0].error_type).to.equal('StorageValidationError'); + }); + + it('should handle errors during bucket creation', async () => { + bucketStub.create.throws(new Error('Simulated creation error')); // Force an error + + const errors: sdkApi.BaseError[] = []; + const result = await storageFunc.getOrCreateStorageBucket( + storageClientStub, + '', + errors + ); + + expect(result).to.be.null; + expect(errors.length).to.equal(1); + expect(errors[0].error_type).to.equal('BucketCreationError'); + }); + }); + + describe('createStorageClient()', () => { + it('should return null if storage_condition is `None`', () => { + const result = createStorageClientIfStorageSelected( + [], + storage_condition_none + ); + expect(result).to.be.null; + }); + it('should successfully initialize a Storage client', () => { + const result = createStorageClientIfStorageSelected( + [], + storage_condition_failing_links + ); + expect(result).to.be.an.instanceOf(Storage); + }); + }); +}); From 36abd54a8e28053574d47ec65f463ce0411c631b Mon Sep 17 00:00:00 2001 From: Adam Weidman <65992621+adamfweidman@users.noreply.github.com> Date: Wed, 28 Feb 2024 11:05:38 -0500 Subject: [PATCH 3/9] take-screenshots (#107) --- .../src/storage_func.ts | 94 +++++++++- .../test/unit/storage_func.spec.ts | 166 +++++++++++++++++- 2 files changed, 251 insertions(+), 9 deletions(-) diff --git a/packages/synthetics-sdk-broken-links/src/storage_func.ts b/packages/synthetics-sdk-broken-links/src/storage_func.ts index d0ed7cc5..e906ac29 100644 --- a/packages/synthetics-sdk-broken-links/src/storage_func.ts +++ b/packages/synthetics-sdk-broken-links/src/storage_func.ts @@ -12,14 +12,24 @@ // See the License for the specific language governing permissions and // limitations under the License. +import * as path from 'path'; import { Storage, Bucket } from '@google-cloud/storage'; import { BaseError, - BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition, + BrokenLinksResultV1_BrokenLinkCheckerOptions, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition as ApiScreenshotCondition, resolveProjectId, getExecutionRegion, + BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput as ApiScreenshotOutput, } from '@google-cloud/synthetics-sdk-api'; +export interface StorageParameters { + storageClient: Storage | null; + bucket: Bucket | null; + uptimeId: string; + executionId: string; +} + /** * Attempts to get an existing storage bucket if provided by the user OR * create/use a dedicated synthetics bucket. @@ -97,13 +107,9 @@ export async function getOrCreateStorageBucket( */ export function createStorageClientIfStorageSelected( errors: BaseError[], - storage_condition: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition + storageCondition: ApiScreenshotCondition ): Storage | null { - if ( - storage_condition === - BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition.NONE - ) - return null; + if (storageCondition === ApiScreenshotCondition.NONE) return null; try { return new Storage(); @@ -117,3 +123,77 @@ export function createStorageClientIfStorageSelected( return null; } } + +/** + * Uploads a screenshot to Google Cloud Storage. + * + * @param screenshot - Base64-encoded screenshot data. + * @param filename - Desired filename for the screenshot. + * @param storageParams - An object containing storageClient and bucket. + * @param options - Broken links checker options. + * @returns An ApiScreenshotOutput object indicating success or a screenshot_error. + */ +export async function uploadScreenshotToGCS( + screenshot: string, + filename: string, + storageParams: StorageParameters, + options: BrokenLinksResultV1_BrokenLinkCheckerOptions +): Promise { + const screenshot_output: ApiScreenshotOutput = { + screenshot_file: '', + screenshot_error: {} as BaseError, + }; + try { + // Early exit if storage is not properly configured + if (!storageParams.storageClient || !storageParams.bucket) { + return screenshot_output; + } + + // Construct the destination path within the bucket if given + let writeDestination = options.screenshot_options!.storage_location + ? getFolderNameFromStorageLocation( + options.screenshot_options!.storage_location + ) + : ''; + + // Ensure writeDestination ends with a slash for proper path joining + if (writeDestination && !writeDestination.endsWith('/')) { + writeDestination += '/'; + } + + writeDestination = path.join( + writeDestination, + storageParams.uptimeId, + storageParams.executionId, + filename + ); + + // Upload to GCS + await storageParams.bucket.file(writeDestination).save(screenshot, { + contentType: 'image/png', + }); + + screenshot_output.screenshot_file = writeDestination; + } catch (err) { + // Handle upload errors + if (err instanceof Error) process.stderr.write(err.message); + screenshot_output.screenshot_error = { + error_type: 'StorageFileUploadError', + error_message: `Failed to upload screenshot for ${filename}. Please reference server logs for further information.`, + }; + } + + return screenshot_output; +} + +// Helper function to extract folder name for a given storage location. If there +// is no '/' present then the storageLocation is just a folder +export function getFolderNameFromStorageLocation( + storageLocation: string +): string { + const firstSlashIndex = storageLocation.indexOf('/'); + if (firstSlashIndex === -1) { + return ''; + } + return storageLocation.substring(firstSlashIndex + 1); +} diff --git a/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts index 3842fbee..969fec43 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts @@ -14,12 +14,16 @@ import { expect } from 'chai'; import sinon from 'sinon'; -import { Storage, Bucket } from '@google-cloud/storage'; +import { Storage, Bucket, File } from '@google-cloud/storage'; import * as sdkApi from '@google-cloud/synthetics-sdk-api'; import { createStorageClientIfStorageSelected, + getFolderNameFromStorageLocation, getOrCreateStorageBucket, + StorageParameters, + uploadScreenshotToGCS, } from '../../src/storage_func'; +import { BrokenLinksResultV1_BrokenLinkCheckerOptions } from '@google-cloud/synthetics-sdk-api'; const proxyquire = require('proxyquire'); // global test vars @@ -33,6 +37,7 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { '@google-cloud/synthetics-sdk-api': { getExecutionRegion: () => 'test-region', resolveProjectId: () => 'test-project-id', + getOrCreateStorageBucket: () => getOrCreateStorageBucket, }, }); @@ -94,10 +99,14 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { const result = await storageFunc.getOrCreateStorageBucket( storageClientStub, - '', + TEST_BUCKET_NAME + '/fake-folder', [] ); expect(result).to.equal(bucketStub); + sinon.assert.calledWithExactly( + storageClientStub.bucket, + TEST_BUCKET_NAME + ); sinon.assert.notCalled(bucketStub.create); }); @@ -148,4 +157,157 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { expect(result).to.be.an.instanceOf(Storage); }); }); + + describe('uploadScreenshotToGCS', () => { + let storageClientStub: sinon.SinonStubbedInstance; + let bucketStub: sinon.SinonStubbedInstance; + + const screenshotData = 'encoded-image-data'; + const filename = 'test-screenshot.png'; + + beforeEach(() => { + storageClientStub = sinon.createStubInstance(Storage); + bucketStub = sinon.createStubInstance(Bucket); + storageClientStub.bucket.returns(bucketStub); + }); + + afterEach(() => { + sinon.restore(); + }); + + it('should upload the screenshot and return the write_destination', async () => { + const storageParams = { + storageClient: storageClientStub, + bucket: bucketStub, + uptimeId: 'uptime123', + executionId: 'exec456', + }; + const options = { + screenshot_options: { storage_location: 'bucket/folder1/folder2' }, + } as BrokenLinksResultV1_BrokenLinkCheckerOptions; + const expectedWriteDestination = + 'folder1/folder2/uptime123/exec456/test-screenshot.png'; + + const successPartialFileMock: Partial = { + save: sinon.stub().resolves(), + }; + bucketStub.file.returns(successPartialFileMock as File); + + const result = await uploadScreenshotToGCS( + screenshotData, + filename, + storageParams, + options + ); + + expect(result.screenshot_file).to.equal(expectedWriteDestination); + expect(result.screenshot_error).to.deep.equal({}); + }); + + it('should handle GCS upload errors', async () => { + const storageParams: StorageParameters = { + storageClient: storageClientStub, + bucket: bucketStub, + uptimeId: '', + executionId: '', + }; + const options = { + screenshot_options: {}, + } as BrokenLinksResultV1_BrokenLinkCheckerOptions; + + const gcsError = new Error('Simulated GCS upload error'); + const failingPartialFileMock: Partial = { + save: sinon.stub().throws(gcsError), + }; + bucketStub.file.returns(failingPartialFileMock as File); + + const result = await uploadScreenshotToGCS( + screenshotData, + filename, + storageParams, + options + ); + + expect(result.screenshot_file).to.equal(''); + expect(result.screenshot_error).to.deep.equal({ + error_type: 'StorageFileUploadError', + error_message: `Failed to upload screenshot for ${filename}. Please reference server logs for further information.`, + }); + }); + + describe('Invalid Storage Configuration', () => { + const emptyScreenshotData = ''; + const emptyFilename = ''; + const emptyOptions = {} as BrokenLinksResultV1_BrokenLinkCheckerOptions; + it('should return an empty result if storageClient is null', async () => { + // Missing storageClient + const storageParams = { + storageClient: null, + bucket: bucketStub, + uptimeId: '', + executionId: '', + }; + + const result = await uploadScreenshotToGCS( + emptyScreenshotData, + emptyFilename, + storageParams, + emptyOptions + ); + + expect(result).to.deep.equal({ + screenshot_file: '', + screenshot_error: {}, + }); + }); + + it('should return an empty result if bucket is null', async () => { + // Missing bucket + const storageParams = { + storageClient: storageClientStub, + bucket: null, + uptimeId: '', + executionId: '', + }; + + const result = await uploadScreenshotToGCS( + emptyScreenshotData, + emptyFilename, + storageParams, + emptyOptions + ); + + expect(result).to.deep.equal({ + screenshot_file: '', + screenshot_error: {}, + }); + }); + }); + }); + + describe('getFolderNameFromStorageLocation', () => { + it('should extract folder name when storage location has a slash', () => { + const storageLocation = 'some-bucket/folder1/folder2'; + const expectedFolderName = 'folder1/folder2'; + + const result = getFolderNameFromStorageLocation(storageLocation); + expect(result).to.equal(expectedFolderName); + }); + + it('should return an empty string if storage location has no slash', () => { + const storageLocation = 'my-bucket'; + const expectedFolderName = ''; + + const result = getFolderNameFromStorageLocation(storageLocation); + expect(result).to.equal(expectedFolderName); + }); + + it('should return an empty string if given an empty string', () => { + const storageLocation = ''; + const expectedFolderName = ''; + + const result = getFolderNameFromStorageLocation(storageLocation); + expect(result).to.equal(expectedFolderName); + }); + }); }); From 95f16d9b9ca7b6318a8d50367c5a407988ea53d3 Mon Sep 17 00:00:00 2001 From: Adam Weidman <65992621+adamfweidman@users.noreply.github.com> Date: Thu, 29 Feb 2024 10:52:34 -0500 Subject: [PATCH 4/9] rebase-capture-condition (#110) --- package-lock.json | 6 ++-- .../google-cloud-synthetics-sdk-api-0.5.1.tgz | Bin 97185 -> 97194 bytes .../src/broken_links.ts | 8 ++--- .../src/options_func.ts | 30 ++++++++---------- .../src/storage_func.ts | 6 ++-- .../test/integration/integration.spec.ts | 5 ++- .../test/unit/broken_links.spec.ts | 5 ++- .../test/unit/options_func.spec.ts | 10 +++--- .../test/unit/storage_func.spec.ts | 4 +-- 9 files changed, 34 insertions(+), 40 deletions(-) diff --git a/package-lock.json b/package-lock.json index 3815627b..93189208 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10952,7 +10952,7 @@ "packages/synthetics-sdk-broken-links/node_modules/@google-cloud/synthetics-sdk-api": { "version": "0.5.1", "resolved": "file:packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-5qsL50gnQ2Ifl22Gr5NzozKJ4J8tHEZ0IXerzsTxKfvfoPaesB9loY2pTAEiOjalfPZYmLXuYyepGuUlQ5ndnA==", + "integrity": "sha512-gNUsbNYcBYt/lLSdCmx8YJWA2Tqb9THrrQrKuUtb1pAnwy1M+pukfYoUztp6rX8jVsdj2/lVgN6iMx9ARLfM0g==", "license": "Apache-2.0", "dependencies": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", @@ -12289,7 +12289,7 @@ "dependencies": { "@google-cloud/synthetics-sdk-api": { "version": "file:google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-5qsL50gnQ2Ifl22Gr5NzozKJ4J8tHEZ0IXerzsTxKfvfoPaesB9loY2pTAEiOjalfPZYmLXuYyepGuUlQ5ndnA==", + "integrity": "sha512-gNUsbNYcBYt/lLSdCmx8YJWA2Tqb9THrrQrKuUtb1pAnwy1M+pukfYoUztp6rX8jVsdj2/lVgN6iMx9ARLfM0g==", "requires": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", @@ -19045,7 +19045,7 @@ "dependencies": { "@google-cloud/synthetics-sdk-api": { "version": "file:google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-5qsL50gnQ2Ifl22Gr5NzozKJ4J8tHEZ0IXerzsTxKfvfoPaesB9loY2pTAEiOjalfPZYmLXuYyepGuUlQ5ndnA==", + "integrity": "sha512-gNUsbNYcBYt/lLSdCmx8YJWA2Tqb9THrrQrKuUtb1pAnwy1M+pukfYoUztp6rX8jVsdj2/lVgN6iMx9ARLfM0g==", "requires": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", diff --git a/packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz b/packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz index 66d19bf45ad7fbe5f17b84a84f1c10ff86879fed..81d4a1b68c1e61642ed206424f00af0b01afa958 100644 GIT binary patch delta 94653 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 delta 94513 zcmV)2K+M0Y_XVN%1%Drl2mk;800092?7ewk8%dG?I)D39)UfX@&@IFbKDK98NCMOC z6L9zRdi@w76;MW~)KwCg?)7(n5s{gdcU9>EAM&s5R#jz2hK>ULHi4Z?J=8h&bB_q*XKKAfIM-7sB!)K9{}APSSDUHzCo`rG`^ zH}bHKH{xe;5}Lh(#ux28(fF2UNC^34#MO*4S!m_PSB2f9abwikCR}ShLs=* z`$^mxw()g^gTk_%C>$)^cR_17xQvtNPr}FHxM~b8TY~_QUL-B3 z*t?)Ye19C2280)_ZqOvqRwITz>>#y13|ei1B3c2%0A)Ft7z*$PMq$cO!+;KwxLXNY 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 Dzb?UO diff --git a/packages/synthetics-sdk-broken-links/src/broken_links.ts b/packages/synthetics-sdk-broken-links/src/broken_links.ts index af1e0c57..d522fcea 100644 --- a/packages/synthetics-sdk-broken-links/src/broken_links.ts +++ b/packages/synthetics-sdk-broken-links/src/broken_links.ts @@ -79,10 +79,10 @@ export enum StatusClass { export interface ScreenshotOptions { storage_location?: string; - screenshot_condition?: ScreenshotCondition; + capture_condition?: CaptureCondition; } -export enum ScreenshotCondition { +export enum CaptureCondition { NONE = 'NONE', FAILING = 'FAILING', ALL = 'ALL', @@ -112,10 +112,10 @@ export async function runBrokenLinks( const errors: BaseError[] = []; // Initialize Storage Client with Error Handling. Set to `null` if - // screenshot_condition is 'None' + // capture_condition is 'None' const storageClient = createStorageClientIfStorageSelected( errors, - options.screenshot_options!.screenshot_condition + options.screenshot_options!.capture_condition ); // TODO. Just to show where this will be called. uncommented in next PR diff --git a/packages/synthetics-sdk-broken-links/src/options_func.ts b/packages/synthetics-sdk-broken-links/src/options_func.ts index d997ae8a..489bbf3a 100644 --- a/packages/synthetics-sdk-broken-links/src/options_func.ts +++ b/packages/synthetics-sdk-broken-links/src/options_func.ts @@ -17,7 +17,7 @@ import { BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, BrokenLinksResultV1_BrokenLinkCheckerOptions_PerLinkOption, BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions, - BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition as ApiCaptureCondition, ResponseStatusCode, ResponseStatusCode_StatusClass, } from '@google-cloud/synthetics-sdk-api'; @@ -25,7 +25,7 @@ import { BrokenLinkCheckerOptions, LinkOrder, StatusClass, - ScreenshotCondition, + CaptureCondition, } from './broken_links'; /** @@ -156,13 +156,13 @@ export function validateInputOptions( // check storage_condition if ( - inputOptions.screenshot_options?.screenshot_condition !== undefined && - !Object.values(ScreenshotCondition).includes( - inputOptions.screenshot_options?.screenshot_condition + inputOptions.screenshot_options?.capture_condition !== undefined && + !Object.values(CaptureCondition).includes( + inputOptions.screenshot_options?.capture_condition ) ) { throw new Error( - 'Invalid screenshot_condition value, must be `ALL`, `FAILING`, OR `NONE`' + 'Invalid capture_condition value, must be `ALL`, `FAILING`, OR `NONE`' ); } @@ -217,8 +217,7 @@ export function validateInputOptions( per_link_options: inputOptions.per_link_options, total_synthetic_timeout_millis: inputOptions.total_synthetic_timeout_millis, screenshot_options: { - screenshot_condition: - inputOptions.screenshot_options?.screenshot_condition, + capture_condition: inputOptions.screenshot_options?.capture_condition, storage_location: inputOptions.screenshot_options?.storage_location, }, }; @@ -245,8 +244,7 @@ export function setDefaultOptions( per_link_options: {}, total_synthetic_timeout_millis: 60000, screenshot_options: { - screenshot_condition: - BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition.FAILING, + capture_condition: ApiCaptureCondition.FAILING, storage_location: '', }, }; @@ -283,14 +281,12 @@ export function setDefaultOptions( // BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions outputOptions.screenshot_options = {} as BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions; - if (inputOptions.screenshot_options?.screenshot_condition) { - outputOptions.screenshot_options!.screenshot_condition = - BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition[ - inputOptions.screenshot_options.screenshot_condition - ]; + if (inputOptions.screenshot_options?.capture_condition) { + outputOptions.screenshot_options!.capture_condition = + ApiCaptureCondition[inputOptions.screenshot_options.capture_condition]; } else { - outputOptions.screenshot_options!.screenshot_condition = - defaultOptions.screenshot_options!.screenshot_condition; + outputOptions.screenshot_options!.capture_condition = + defaultOptions.screenshot_options!.capture_condition; } if (outputOptions.screenshot_options?.storage_location) { diff --git a/packages/synthetics-sdk-broken-links/src/storage_func.ts b/packages/synthetics-sdk-broken-links/src/storage_func.ts index e906ac29..8811e955 100644 --- a/packages/synthetics-sdk-broken-links/src/storage_func.ts +++ b/packages/synthetics-sdk-broken-links/src/storage_func.ts @@ -17,7 +17,7 @@ import { Storage, Bucket } from '@google-cloud/storage'; import { BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions, - BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition as ApiScreenshotCondition, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition as ApiCaptureCondition, resolveProjectId, getExecutionRegion, BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput as ApiScreenshotOutput, @@ -107,9 +107,9 @@ export async function getOrCreateStorageBucket( */ export function createStorageClientIfStorageSelected( errors: BaseError[], - storageCondition: ApiScreenshotCondition + captureCondition: ApiCaptureCondition ): Storage | null { - if (storageCondition === ApiScreenshotCondition.NONE) return null; + if (captureCondition === ApiCaptureCondition.NONE) return null; try { return new Storage(); diff --git a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts index 28adc47f..ebbfec32 100644 --- a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts @@ -16,7 +16,7 @@ import { BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions, - BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition as ApiCaptureCondition, BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput, ResponseStatusCode_StatusClass, SyntheticResult, @@ -35,8 +35,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { }; const default_screenshot_options: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions = { - screenshot_condition: - BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition.FAILING, + capture_condition: ApiCaptureCondition.FAILING, storage_location: '', }; diff --git a/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts index 7c15e29e..6f592c57 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts @@ -19,7 +19,7 @@ import { BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions, - BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition as ApiCaptureCondition, BrokenLinksResultV1_SyntheticLinkResult, ResponseStatusCode, BaseError, @@ -37,8 +37,7 @@ describe('runBrokenLinks', async () => { }; const default_screenshot_options: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions = { - screenshot_condition: - BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition.FAILING, + capture_condition: ApiCaptureCondition.FAILING, storage_location: '', }; diff --git a/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts index 28ad5ff6..fbe285a6 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts @@ -371,19 +371,19 @@ describe('GCM Synthetics Broken Links options_func suite testing', () => { it('throws error if storage_condition is not a valid StorageCondition value', () => { const options = { origin_uri: 'http://example.com', - screenshot_options: { screenshot_condition: 'invalid' }, + screenshot_options: { capture_condition: 'invalid' }, } as any as BrokenLinkCheckerOptions; expect(() => { validateInputOptions(options); }).to.throw( Error, - 'Invalid screenshot_condition value, must be `ALL`, `FAILING`, OR `NONE`' + 'Invalid capture_condition value, must be `ALL`, `FAILING`, OR `NONE`' ); }); it('storage_condition accepts string', () => { const options = { origin_uri: 'http://example.com', - screenshot_options: { screenshot_condition: 'FAILING' }, + screenshot_options: { capture_condition: 'FAILING' }, } as any as BrokenLinkCheckerOptions; expect(() => { validateInputOptions(options); @@ -425,7 +425,7 @@ describe('GCM Synthetics Broken Links options_func suite testing', () => { }, screenshot_options: { storage_location: '', - screenshot_condition: 'FAILING', + capture_condition: 'FAILING', }, } as BrokenLinkCheckerOptions; @@ -452,7 +452,7 @@ describe('GCM Synthetics Broken Links options_func suite testing', () => { total_synthetic_timeout_millis: undefined, screenshot_options: { storage_location: undefined, - screenshot_condition: undefined, + capture_condition: undefined, }, } as BrokenLinkCheckerOptions; diff --git a/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts index 969fec43..552d0909 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts @@ -43,11 +43,11 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { const storage_condition_failing_links = sdkApi - .BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition + .BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition .FAILING; const storage_condition_none = sdkApi - .BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_ScreenshotCondition + .BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition .NONE; beforeEach(() => { From b1d8579dfe3f5656015f442fc50e1f55e0e9d2a3 Mon Sep 17 00:00:00 2001 From: Adam Weidman <65992621+adamfweidman@users.noreply.github.com> Date: Fri, 8 Mar 2024 12:19:12 -0500 Subject: [PATCH 5/9] refactor-integrations (#112) --- .../src/broken_links.ts | 11 +- .../src/handlers.ts | 5 +- .../synthetics-sdk-broken-links/src/index.ts | 4 +- .../src/link_utils.ts | 5 +- .../src/navigation_func.ts | 7 +- .../src/options_func.ts | 13 +- .../src/storage_func.ts | 11 +- .../example_html_files/integration_server.js | 46 +-- .../test/integration/integration.spec.ts | 340 +----------------- .../test/unit/broken_links.spec.ts | 277 ++++++++++---- .../test/unit/link_utils.spec.ts | 3 + .../test/unit/navigation_func.spec.ts | 14 +- .../test/unit/options_func.spec.ts | 5 +- .../test/unit/storage_func.spec.ts | 28 +- 14 files changed, 295 insertions(+), 474 deletions(-) diff --git a/packages/synthetics-sdk-broken-links/src/broken_links.ts b/packages/synthetics-sdk-broken-links/src/broken_links.ts index d522fcea..a99650e3 100644 --- a/packages/synthetics-sdk-broken-links/src/broken_links.ts +++ b/packages/synthetics-sdk-broken-links/src/broken_links.ts @@ -12,14 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. -import puppeteer, { Browser, Page } from 'puppeteer'; -import { Bucket } from '@google-cloud/storage'; +// Internal Project Files import { BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_SyntheticLinkResult, - instantiateMetadata, getRuntimeMetadata, + instantiateMetadata, SyntheticResult, } from '@google-cloud/synthetics-sdk-api'; import { @@ -34,8 +33,8 @@ import { checkLinks, closeBrowser, closePagePool, - retrieveLinksFromPage, openNewPage, + retrieveLinksFromPage, } from './navigation_func'; import { processOptions } from './options_func'; import { @@ -43,6 +42,10 @@ import { getOrCreateStorageBucket, } from './storage_func'; +// External Dependencies +import { Bucket } from '@google-cloud/storage'; +import puppeteer, { Browser, Page } from 'puppeteer'; + export interface BrokenLinkCheckerOptions { origin_uri: string; link_limit?: number; diff --git a/packages/synthetics-sdk-broken-links/src/handlers.ts b/packages/synthetics-sdk-broken-links/src/handlers.ts index 2f55a619..fff255a6 100644 --- a/packages/synthetics-sdk-broken-links/src/handlers.ts +++ b/packages/synthetics-sdk-broken-links/src/handlers.ts @@ -12,9 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { runBrokenLinks, BrokenLinkCheckerOptions } from './broken_links'; +// Standard Libraries import { Request, Response } from 'express'; +// Internal Project Files +import { runBrokenLinks, BrokenLinkCheckerOptions } from './broken_links'; + /** * Middleware for easy invocation of SyntheticSDK broken links, and may be used to * register a GoogleCloudFunction http function, or express js compatible handler. diff --git a/packages/synthetics-sdk-broken-links/src/index.ts b/packages/synthetics-sdk-broken-links/src/index.ts index 775ecc9a..4d895a79 100644 --- a/packages/synthetics-sdk-broken-links/src/index.ts +++ b/packages/synthetics-sdk-broken-links/src/index.ts @@ -13,11 +13,11 @@ // limitations under the License. export { - runBrokenLinks, BrokenLinkCheckerOptions, + LinkOrder, PerLinkOption, + runBrokenLinks, StatusClass, - LinkOrder, } from './broken_links'; export * from './handlers'; export * from '@google-cloud/synthetics-sdk-api'; diff --git a/packages/synthetics-sdk-broken-links/src/link_utils.ts b/packages/synthetics-sdk-broken-links/src/link_utils.ts index e133bc14..94d88994 100644 --- a/packages/synthetics-sdk-broken-links/src/link_utils.ts +++ b/packages/synthetics-sdk-broken-links/src/link_utils.ts @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { HTTPResponse } from 'puppeteer'; +// Internal Project Files import { BaseError, BrokenLinksResultV1, @@ -26,6 +26,9 @@ import { SyntheticResult, } from '@google-cloud/synthetics-sdk-api'; +// External Dependencies +import { HTTPResponse } from 'puppeteer'; + /** * Represents an intermediate link with its properties. */ diff --git a/packages/synthetics-sdk-broken-links/src/navigation_func.ts b/packages/synthetics-sdk-broken-links/src/navigation_func.ts index 1c094ab4..d7d856a4 100644 --- a/packages/synthetics-sdk-broken-links/src/navigation_func.ts +++ b/packages/synthetics-sdk-broken-links/src/navigation_func.ts @@ -12,11 +12,11 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { Browser, HTTPResponse, Page } from 'puppeteer'; +// Internal Project Files import { + BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_SyntheticLinkResult, - BaseError, ResponseStatusCode, ResponseStatusCode_StatusClass, } from '@google-cloud/synthetics-sdk-api'; @@ -29,6 +29,9 @@ import { getTimeLimitPromise, } from './link_utils'; +// External Dependencies +import { Browser, HTTPResponse, Page } from 'puppeteer'; + /** * Retrieves all links on the page using Puppeteer, handling relative and * protocol-relative links and filtering for HTTP/HTTPS links. diff --git a/packages/synthetics-sdk-broken-links/src/options_func.ts b/packages/synthetics-sdk-broken-links/src/options_func.ts index 489bbf3a..1b0a61d3 100644 --- a/packages/synthetics-sdk-broken-links/src/options_func.ts +++ b/packages/synthetics-sdk-broken-links/src/options_func.ts @@ -12,6 +12,13 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Internal Project Files +import { + BrokenLinkCheckerOptions, + CaptureCondition, + LinkOrder, + StatusClass, +} from './broken_links'; import { BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, @@ -21,12 +28,6 @@ import { ResponseStatusCode, ResponseStatusCode_StatusClass, } from '@google-cloud/synthetics-sdk-api'; -import { - BrokenLinkCheckerOptions, - LinkOrder, - StatusClass, - CaptureCondition, -} from './broken_links'; /** * Validates input options and sets defaults in `options`. diff --git a/packages/synthetics-sdk-broken-links/src/storage_func.ts b/packages/synthetics-sdk-broken-links/src/storage_func.ts index 8811e955..d8a7136e 100644 --- a/packages/synthetics-sdk-broken-links/src/storage_func.ts +++ b/packages/synthetics-sdk-broken-links/src/storage_func.ts @@ -12,17 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Standard Libraries import * as path from 'path'; -import { Storage, Bucket } from '@google-cloud/storage'; + +// Internal Project Files import { BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition as ApiCaptureCondition, - resolveProjectId, - getExecutionRegion, BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput as ApiScreenshotOutput, + getExecutionRegion, + resolveProjectId, } from '@google-cloud/synthetics-sdk-api'; +// External Dependencies +import { Storage, Bucket } from '@google-cloud/storage'; + export interface StorageParameters { storageClient: Storage | null; bucket: Bucket | null; diff --git a/packages/synthetics-sdk-broken-links/test/example_html_files/integration_server.js b/packages/synthetics-sdk-broken-links/test/example_html_files/integration_server.js index 8ae8bd4b..d63ecd31 100644 --- a/packages/synthetics-sdk-broken-links/test/example_html_files/integration_server.js +++ b/packages/synthetics-sdk-broken-links/test/example_html_files/integration_server.js @@ -12,23 +12,20 @@ // See the License for the specific language governing permissions and // limitations under the License. -const functions = require('@google-cloud/functions-framework'); -const SyntheticsSdkBrokenLinks = require('synthetics-sdk-broken-links'); +// Standard Libraries const path = require('path'); +// Internal Project Files +const SyntheticsSdkBrokenLinks = require('synthetics-sdk-broken-links'); + +// External Dependencies +const functions = require('@google-cloud/functions-framework'); + /* * This is the server template that is required to run a synthetic monitor in * Google Cloud Functions. */ -// Handles error when trying to visit page that does not exist -functions.http('BrokenLinksPageDoesNotExist', SyntheticsSdkBrokenLinks.runBrokenLinksHandler({ - origin_uri: `file:${path.join( - __dirname, - '../example_html_files/file_doesnt_exist.html' - )}` -})); - // Visits and checks empty page with no links functions.http('BrokenLinksEmptyPageOk', SyntheticsSdkBrokenLinks.runBrokenLinksHandler({ origin_uri: `file:${path.join( @@ -36,32 +33,3 @@ functions.http('BrokenLinksEmptyPageOk', SyntheticsSdkBrokenLinks.runBrokenLinks '../example_html_files/200.html' )}` })); - -// Exits early when options cannot be parsed -functions.http('BrokenLinksInvalidOptionsNotOk', SyntheticsSdkBrokenLinks.runBrokenLinksHandler({ - origin_uri: `file:${path.join( - __dirname, - '../example_html_files/retrieve_links_test.html' - )}`, - link_order: 'incorrect' -})); - -// Completes full failing execution -functions.http('BrokenLinksFailingOk', SyntheticsSdkBrokenLinks.runBrokenLinksHandler({ - origin_uri: `file:${path.join( - __dirname, - '../example_html_files/retrieve_links_test.html' - )}`, - query_selector_all: 'a[src], img[href]', - get_attributes: ['href', 'src'] -})); - -// Completes full passing execution -functions.http('BrokenLinksPassingOk', SyntheticsSdkBrokenLinks.runBrokenLinksHandler({ - origin_uri: `file:${path.join( - __dirname, - '../example_html_files/retrieve_links_test.html' - )}`, - query_selector_all: 'a[src]', - get_attributes: ['src'] -})); diff --git a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts index ebbfec32..8923845b 100644 --- a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts @@ -12,6 +12,12 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Standard Libraries +import { expect } from 'chai'; +import supertest from 'supertest'; +const path = require('path'); + +// Internal Project Files import { BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, @@ -22,89 +28,26 @@ import { SyntheticResult, } from '@google-cloud/synthetics-sdk-api'; -import { expect } from 'chai'; -import supertest from 'supertest'; -const path = require('path'); - +// External Dependencies require('../../test/example_html_files/integration_server.js'); const { getTestServer } = require('@google-cloud/functions-framework/testing'); -describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { +describe.only('CloudFunctionV2 Running Broken Link Synthetics', async () => { const status_class_2xx = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_2XX, }; - const default_screenshot_options: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions = + const defaultScreenshotOptions: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions = { capture_condition: ApiCaptureCondition.FAILING, storage_location: '', }; - const default_screenshot_output: BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput = + const defaultScreenshotOutput: BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput = { screenshot_file: '', screenshot_error: {} as BaseError, }; - it('Handles error when trying to visit page that does not exist', async () => { - const server = getTestServer('BrokenLinksPageDoesNotExist'); - - // invoke SyntheticBrokenLinks with SuperTest - const response = await supertest(server) - .get('/') - .send() - .set('Content-Type', 'application/json') - .expect(200); - - const output: SyntheticResult = response.body as SyntheticResult; - const start_time = output.start_time; - const end_time = output.end_time; - const broken_links_result = output?.synthetic_broken_links_result_v1; - const origin_link = broken_links_result?.origin_link_result; - const followed_links = broken_links_result?.followed_link_results; - const runtime_metadata = output?.runtime_metadata; - - expect(start_time).to.be.a.string; - expect(end_time).to.be.a.string; - - expect(broken_links_result?.link_count).to.equal(1); - expect(broken_links_result?.passing_link_count).to.equal(0); - expect(broken_links_result?.failing_link_count).to.equal(1); - expect(broken_links_result?.unreachable_count).to.equal(1); - expect(broken_links_result?.status2xx_count).to.equal(0); - expect(broken_links_result?.status3xx_count).to.equal(0); - expect(broken_links_result?.status4xx_count).to.equal(0); - expect(broken_links_result?.status5xx_count).to.equal(0); - - const origin_uri = `file:${path.join( - __dirname, - '../example_html_files/file_doesnt_exist.html' - )}`; - - expect(origin_link) - .excluding(['link_start_time', 'link_end_time']) - .to.deep.equal({ - link_passed: false, - expected_status_code: status_class_2xx, - source_uri: origin_uri, - target_uri: origin_uri, - html_element: '', - anchor_text: '', - error_type: 'Error', - error_message: 'net::ERR_FILE_NOT_FOUND at ' + origin_uri, - link_start_time: 'NA', - link_end_time: 'NA', - is_origin: true, - screenshot_output: default_screenshot_output, - }); - - expect(followed_links).to.deep.equal([]); - - expect(runtime_metadata?.['@google-cloud/synthetics-sdk-api']).to.not.be - .undefined; - expect(runtime_metadata?.['@google-cloud/synthetics-sdk-broken-links']).to - .not.be.undefined; - }).timeout(10000); - it('Visits and checks empty page with no links', async () => { const server = getTestServer('BrokenLinksEmptyPageOk'); @@ -153,7 +96,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { wait_for_selector: '', per_link_options: {}, total_synthetic_timeout_millis: 60000, - screenshot_options: default_screenshot_options, + screenshot_options: defaultScreenshotOptions, }); expect(origin_link) @@ -171,7 +114,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, - screenshot_output: default_screenshot_output, + screenshot_output: defaultScreenshotOutput, }); expect(followed_links).to.deep.equal([]); @@ -181,263 +124,4 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { expect(runtime_metadata?.['@google-cloud/synthetics-sdk-broken-links']).to .not.be.undefined; }).timeout(10000); - - it('Exits early with generic_result when options cannot be parsed', async () => { - const server = getTestServer('BrokenLinksInvalidOptionsNotOk'); - - // invoke SyntheticBrokenLinks with SuperTest - const response = await supertest(server) - .get('/') - .send() - .set('Content-Type', 'application/json') - .expect(200); - - const output: SyntheticResult = response.body as SyntheticResult; - const start_time = output.start_time; - const end_time = output.end_time; - const synthetic_generic_result = output?.synthetic_generic_result_v1; - const runtime_metadata = output?.runtime_metadata; - - expect(synthetic_generic_result?.ok).to.be.false; - expect(synthetic_generic_result?.generic_error?.error_type).to.equal( - 'Error' - ); - expect(synthetic_generic_result?.generic_error?.error_message).to.equal( - 'Invalid link_order value, must be `FIRST_N` or `RANDOM`' - ); - expect(start_time).to.be.a.string; - expect(end_time).to.be.a.string; - - expect(runtime_metadata?.['@google-cloud/synthetics-sdk-api']).to.not.be - .undefined; - expect(runtime_metadata?.['@google-cloud/synthetics-sdk-broken-links']).to - .not.be.undefined; - }).timeout(10000); - - it('Runs a failing Broken Links suite', async () => { - const server = getTestServer('BrokenLinksFailingOk'); - - // invoke SyntheticBrokenLinks with SuperTest - const response = await supertest(server) - .get('/') - .send() - .set('Content-Type', 'application/json') - .expect(200); - - const origin_uri = `file:${path.join( - __dirname, - '../example_html_files/retrieve_links_test.html' - )}`; - - const output: SyntheticResult = response.body as SyntheticResult; - const start_time = output.start_time; - const end_time = output.end_time; - const broken_links_result = output?.synthetic_broken_links_result_v1; - const options = broken_links_result?.options; - const origin_link = broken_links_result?.origin_link_result; - const followed_links = broken_links_result?.followed_link_results; - const runtime_metadata = output?.runtime_metadata; - - expect(start_time).to.be.a.string; - expect(end_time).to.be.a.string; - - expect(broken_links_result?.link_count).to.equal(3); - expect(broken_links_result?.passing_link_count).to.equal(2); - expect(broken_links_result?.failing_link_count).to.equal(1); - expect(broken_links_result?.unreachable_count).to.equal(1); - expect(broken_links_result?.status2xx_count).to.equal(2); - expect(broken_links_result?.status3xx_count).to.equal(0); - expect(broken_links_result?.status4xx_count).to.equal(0); - expect(broken_links_result?.status5xx_count).to.equal(0); - - expect(options).to.deep.equal({ - origin_uri: origin_uri, - link_limit: 10, - query_selector_all: 'a[src], img[href]', - get_attributes: ['href', 'src'], - link_order: - BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder.FIRST_N, - link_timeout_millis: 30000, - max_retries: 0, - wait_for_selector: '', - per_link_options: {}, - total_synthetic_timeout_millis: 60000, - screenshot_options: default_screenshot_options, - }); - - expect(origin_link) - .excluding(['link_start_time', 'link_end_time']) - .to.deep.equal({ - link_passed: true, - expected_status_code: status_class_2xx, - source_uri: origin_uri, - target_uri: origin_uri, - html_element: '', - anchor_text: '', - status_code: 200, - error_type: '', - error_message: '', - link_start_time: 'NA', - link_end_time: 'NA', - is_origin: true, - screenshot_output: default_screenshot_output, - }); - - const sorted_followed_links = followed_links?.sort((a, b) => - a.target_uri.localeCompare(b.target_uri) - ); - - const doesnt_exist_path = `file://${path.join( - __dirname, - '../example_html_files/file_doesnt_exist.html' - )}` - .split(' ') - .join('%20'); - expect(sorted_followed_links) - .excluding(['target_uri', 'link_start_time', 'link_end_time']) - .to.deep.equal([ - { - link_passed: true, - expected_status_code: status_class_2xx, - source_uri: origin_uri, - target_uri: 'CHECKED_BELOW', - html_element: 'a', - anchor_text: 'External Link', - status_code: 200, - error_type: '', - error_message: '', - link_start_time: 'NA', - link_end_time: 'NA', - is_origin: false, - screenshot_output: default_screenshot_output, - }, - { - link_passed: false, - expected_status_code: { status_class: 200 }, - source_uri: origin_uri, - target_uri: 'CHECKED_BELOW', - html_element: 'img', - anchor_text: '', - error_type: 'Error', - error_message: 'net::ERR_FILE_NOT_FOUND at ' + doesnt_exist_path, - link_start_time: 'NA', - link_end_time: 'NA', - is_origin: false, - screenshot_output: default_screenshot_output, - }, - ]); - - const expectedTargetPaths = [ - 'example_html_files/200.html', - 'example_html_files/file_doesnt_exist.html', - ]; - followed_links?.forEach((link, index) => { - expect(link.target_uri.endsWith(expectedTargetPaths[index])); - }); - - expect(runtime_metadata?.['@google-cloud/synthetics-sdk-api']).to.not.be - .undefined; - expect(runtime_metadata?.['@google-cloud/synthetics-sdk-broken-links']).to - .not.be.undefined; - }).timeout(10000); - - it('Runs a passing Broken Links suite', async () => { - const server = getTestServer('BrokenLinksPassingOk'); - - // invoke SyntheticBrokenLinks with SuperTest - const response = await supertest(server) - .get('/') - .send() - .set('Content-Type', 'application/json') - .expect(200); - - const origin_uri = `file:${path.join( - __dirname, - '../example_html_files/retrieve_links_test.html' - )}`; - - const output: SyntheticResult = response.body as SyntheticResult; - const start_time = output.start_time; - const end_time = output.end_time; - const broken_links_result = output?.synthetic_broken_links_result_v1; - const options = broken_links_result?.options; - const origin_link = broken_links_result?.origin_link_result; - const followed_links = broken_links_result?.followed_link_results; - const runtime_metadata = output?.runtime_metadata; - - expect(start_time).to.be.a.string; - expect(end_time).to.be.a.string; - - expect(broken_links_result?.link_count).to.equal(2); - expect(broken_links_result?.passing_link_count).to.equal(2); - expect(broken_links_result?.failing_link_count).to.equal(0); - expect(broken_links_result?.unreachable_count).to.equal(0); - expect(broken_links_result?.status2xx_count).to.equal(2); - expect(broken_links_result?.status3xx_count).to.equal(0); - expect(broken_links_result?.status4xx_count).to.equal(0); - expect(broken_links_result?.status5xx_count).to.equal(0); - - expect(options).to.deep.equal({ - origin_uri: origin_uri, - link_limit: 10, - query_selector_all: 'a[src]', - get_attributes: ['src'], - link_order: - BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder.FIRST_N, - link_timeout_millis: 30000, - max_retries: 0, - wait_for_selector: '', - per_link_options: {}, - total_synthetic_timeout_millis: 60000, - screenshot_options: default_screenshot_options, - }); - - expect(origin_link) - .excluding(['link_start_time', 'link_end_time']) - .to.deep.equal({ - link_passed: true, - expected_status_code: status_class_2xx, - source_uri: origin_uri, - target_uri: origin_uri, - html_element: '', - anchor_text: '', - status_code: 200, - error_type: '', - error_message: '', - link_start_time: 'NA', - link_end_time: 'NA', - is_origin: true, - screenshot_output: default_screenshot_output, - }); - - expect(followed_links) - .excluding(['target_uri', 'link_start_time', 'link_end_time']) - .to.deep.equal([ - { - link_passed: true, - expected_status_code: status_class_2xx, - source_uri: origin_uri, - target_uri: 'CHECKED_BELOW', - html_element: 'a', - anchor_text: 'External Link', - status_code: 200, - error_type: '', - error_message: '', - link_start_time: 'NA', - link_end_time: 'NA', - is_origin: false, - screenshot_output: default_screenshot_output, - }, - ]); - - const expectedTargetPaths = ['example_html_files/200.html']; - followed_links?.forEach((link, index) => { - expect(link.target_uri.endsWith(expectedTargetPaths[index])); - }); - - expect(runtime_metadata?.['@google-cloud/synthetics-sdk-api']).to.not.be - .undefined; - expect(runtime_metadata?.['@google-cloud/synthetics-sdk-broken-links']).to - .not.be.undefined; - }).timeout(10000); }); diff --git a/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts index 6f592c57..a29ddc35 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts @@ -11,44 +11,55 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. + +// Standard Libraries import { expect, use } from 'chai'; import chaiExclude from 'chai-exclude'; use(chaiExclude); +const path = require('path'); +// Internal Project Files import { + BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition as ApiCaptureCondition, BrokenLinksResultV1_SyntheticLinkResult, + BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput as ApiScreenshotOutput, ResponseStatusCode, - BaseError, ResponseStatusCode_StatusClass, } from '@google-cloud/synthetics-sdk-api'; import { runBrokenLinks, BrokenLinkCheckerOptions, } from '../../src/broken_links'; -const path = require('path'); -describe('runBrokenLinks', async () => { +describe.only('runBrokenLinks', async () => { const status_class_2xx: ResponseStatusCode = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_2XX, }; - const default_screenshot_options: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions = + const defaultScreenshotOptions: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions = { capture_condition: ApiCaptureCondition.FAILING, storage_location: '', }; - it('returns generic_result with appropriate error information if error thrown', async () => { + const defaultScreenshotOutput: ApiScreenshotOutput = + { + screenshot_file: '', + screenshot_error: {} as BaseError, + }; + + it('Exits early when options cannot be parsed', async () => { const inputOptions: BrokenLinkCheckerOptions = { origin_uri: 'uri-does-not-start-with-http', }; - const syntheticResult = await runBrokenLinks(inputOptions); + const result = await runBrokenLinks(inputOptions); + + const genericResult = result.synthetic_generic_result_v1; - const genericResult = syntheticResult.synthetic_generic_result_v1; expect(genericResult).to.be.exist; expect(genericResult?.ok).to.be.false; expect(genericResult?.generic_error?.error_type).to.equal('Error'); @@ -68,10 +79,9 @@ describe('runBrokenLinks', async () => { link_timeout_millis: 3001, }; - const syntheticResult = await runBrokenLinks(inputOptions); + const result = await runBrokenLinks(inputOptions); - const broken_links_result = - syntheticResult?.synthetic_broken_links_result_v1; + const broken_links_result = result?.synthetic_broken_links_result_v1; const origin_link = broken_links_result?.origin_link_result; expect(broken_links_result?.followed_link_results).to.be.empty; @@ -124,7 +134,57 @@ describe('runBrokenLinks', async () => { expect(broken_links_result?.followed_link_results.length).to.equal(0); }).timeout(40000); - it('successful execution with 1 failing link', async () => { + + it('Handles error when trying to visit page that does not exist', async () => { + const origin_uri = `file:${path.join( + __dirname, + '../example_html_files/file_doesnt_exist.html' + )}`; + const inputOptions : BrokenLinkCheckerOptions = { + origin_uri: origin_uri + }; + + const result = await runBrokenLinks(inputOptions); + + const broken_links_result = result?.synthetic_broken_links_result_v1; + const origin_link = broken_links_result?.origin_link_result; + const followed_links = broken_links_result?.followed_link_results; + + expect(result.start_time).to.be.a.string; + expect(result.end_time).to.be.a.string; + + expect(broken_links_result?.link_count).to.equal(1); + expect(broken_links_result?.passing_link_count).to.equal(0); + expect(broken_links_result?.failing_link_count).to.equal(1); + expect(broken_links_result?.unreachable_count).to.equal(1); + expect(broken_links_result?.status2xx_count).to.equal(0); + expect(broken_links_result?.status3xx_count).to.equal(0); + expect(broken_links_result?.status4xx_count).to.equal(0); + expect(broken_links_result?.status5xx_count).to.equal(0); + + expect(origin_link) + .excluding(['link_start_time', 'link_end_time']) + .to.deep.equal({ + link_passed: false, + expected_status_code: status_class_2xx, + source_uri: origin_uri, + target_uri: origin_uri, + html_element: '', + anchor_text: '', + status_code: undefined, + error_type: 'Error', + error_message: 'net::ERR_FILE_NOT_FOUND at ' + origin_uri, + link_start_time: 'NA', + link_end_time: 'NA', + is_origin: true, + screenshot_output: defaultScreenshotOutput, + }); + + expect(followed_links).to.deep.equal([]); + }).timeout(10000); + + + it('Completes a full failing execution (1 failing link)', async () => { const origin_uri = `file:${path.join( __dirname, '../example_html_files/retrieve_links_test.html' @@ -138,7 +198,24 @@ describe('runBrokenLinks', async () => { const result = await runBrokenLinks(inputOptions); - const expectedOptions: BrokenLinksResultV1_BrokenLinkCheckerOptions = { + const broken_links_result = result?.synthetic_broken_links_result_v1; + const options = broken_links_result?.options; + const origin_link = broken_links_result?.origin_link_result; + const followed_links = broken_links_result?.followed_link_results; + + expect(result.start_time).to.be.a.string; + expect(result.end_time).to.be.a.string; + + expect(broken_links_result?.link_count).to.equal(3); + expect(broken_links_result?.passing_link_count).to.equal(2); + expect(broken_links_result?.failing_link_count).to.equal(1); + expect(broken_links_result?.unreachable_count).to.equal(1); + expect(broken_links_result?.status2xx_count).to.equal(2); + expect(broken_links_result?.status3xx_count).to.equal(0); + expect(broken_links_result?.status4xx_count).to.equal(0); + expect(broken_links_result?.status5xx_count).to.equal(0); + + expect(options).to.deep.equal({ origin_uri: origin_uri, link_limit: 10, query_selector_all: 'a[src], img[href]', @@ -150,36 +227,41 @@ describe('runBrokenLinks', async () => { wait_for_selector: '', per_link_options: {}, total_synthetic_timeout_millis: 60000, - screenshot_options: default_screenshot_options, - }; + screenshot_options: defaultScreenshotOptions, + }); - const expectedOriginLinkResult: BrokenLinksResultV1_SyntheticLinkResult = { - link_passed: true, - expected_status_code: status_class_2xx, - source_uri: origin_uri, - target_uri: origin_uri, - html_element: '', - anchor_text: '', - status_code: 200, - error_type: '', - error_message: '', - link_start_time: 'NA', - link_end_time: 'NA', - is_origin: true, - screenshot_output: { - screenshot_file: '', - screenshot_error: {} as BaseError, - }, - }; + expect(origin_link) + .excluding(['link_start_time', 'link_end_time']) + .to.deep.equal({ + link_passed: true, + expected_status_code: status_class_2xx, + source_uri: origin_uri, + target_uri: origin_uri, + html_element: '', + anchor_text: '', + status_code: 200, + error_type: '', + error_message: '', + link_start_time: 'NA', + link_end_time: 'NA', + is_origin: true, + screenshot_output: defaultScreenshotOutput, + }); + + const sorted_followed_links = followed_links?.sort((a, b) => + a.target_uri.localeCompare(b.target_uri) + ); - const file_doesnt_exist_path = `file://${path.join( + const fileDoesntExistPath = `file://${path.join( __dirname, '../example_html_files/file_doesnt_exist.html' )}` .split(' ') .join('%20'); - const expectedFollowedLinksResults: BrokenLinksResultV1_SyntheticLinkResult[] = - [ + + expect(sorted_followed_links) + .excluding(['target_uri', 'link_start_time', 'link_end_time']) + .to.deep.equal([ { link_passed: true, expected_status_code: status_class_2xx, @@ -193,64 +275,121 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output: { - screenshot_file: '', - screenshot_error: {} as BaseError, - }, + screenshot_output: defaultScreenshotOutput, }, { link_passed: false, - expected_status_code: status_class_2xx, + expected_status_code: { status_class: 200 }, source_uri: origin_uri, target_uri: 'CHECKED_BELOW', html_element: 'img', anchor_text: '', status_code: undefined, error_type: 'Error', - error_message: 'net::ERR_FILE_NOT_FOUND at ' + file_doesnt_exist_path, + error_message: 'net::ERR_FILE_NOT_FOUND at ' + fileDoesntExistPath, link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output: { - screenshot_file: '', - screenshot_error: {} as BaseError, - }, + screenshot_output: defaultScreenshotOutput, }, - ]; + ]); - const broken_links_result = result.synthetic_broken_links_result_v1; - expect(broken_links_result?.options) - .excluding(['link_start_time', 'link_end_time']) - .to.deep.equal(expectedOptions); + // these are checked separately because path and puppeteer format space differently which cause the equality assertion to fail + const expectedTargeturis = [ + '/example_html_files/200.html', + '/example_html_files/file_doesnt_exist.html', + ]; + broken_links_result?.followed_link_results?.forEach((link, index) => { + expect(link.target_uri.endsWith(expectedTargeturis[index])); + }); + }).timeout(150000); - expect(broken_links_result?.link_count).to.equal(3); + it('Completes a full passing execution', async () => { + const origin_uri = `file:${path.join( + __dirname, + '../example_html_files/retrieve_links_test.html' + )}`; + const inputOptions : BrokenLinkCheckerOptions = { + origin_uri: origin_uri, + query_selector_all: 'a[src]', + get_attributes: ['src'] + }; + + const result = await runBrokenLinks(inputOptions); + + const broken_links_result = result?.synthetic_broken_links_result_v1; + const options = broken_links_result?.options; + const origin_link = broken_links_result?.origin_link_result; + const followed_links = broken_links_result?.followed_link_results; + + expect(result.start_time).to.be.a.string; + expect(result.end_time).to.be.a.string; + + expect(broken_links_result?.link_count).to.equal(2); expect(broken_links_result?.passing_link_count).to.equal(2); - expect(broken_links_result?.failing_link_count).to.equal(1); - expect(broken_links_result?.unreachable_count).to.equal(1); + expect(broken_links_result?.failing_link_count).to.equal(0); + expect(broken_links_result?.unreachable_count).to.equal(0); expect(broken_links_result?.status2xx_count).to.equal(2); expect(broken_links_result?.status3xx_count).to.equal(0); expect(broken_links_result?.status4xx_count).to.equal(0); expect(broken_links_result?.status5xx_count).to.equal(0); - expect(broken_links_result?.origin_link_result) + expect(options).to.deep.equal({ + origin_uri: origin_uri, + link_limit: 10, + query_selector_all: 'a[src]', + get_attributes: ['src'], + link_order: + BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder.FIRST_N, + link_timeout_millis: 30000, + max_retries: 0, + wait_for_selector: '', + per_link_options: {}, + total_synthetic_timeout_millis: 60000, + screenshot_options: defaultScreenshotOptions, + }); + + expect(origin_link) .excluding(['link_start_time', 'link_end_time']) - .to.deep.equal(expectedOriginLinkResult); + .to.deep.equal({ + link_passed: true, + expected_status_code: status_class_2xx, + source_uri: origin_uri, + target_uri: origin_uri, + html_element: '', + anchor_text: '', + status_code: 200, + error_type: '', + error_message: '', + link_start_time: 'NA', + link_end_time: 'NA', + is_origin: true, + screenshot_output: defaultScreenshotOutput, + }); - const sorted_followed_links_result = - broken_links_result?.followed_link_results.sort((a, b) => - a.target_uri.localeCompare(b.target_uri) - ); - expect(sorted_followed_links_result) + expect(followed_links) .excluding(['target_uri', 'link_start_time', 'link_end_time']) - .to.deep.equal(expectedFollowedLinksResults); + .to.deep.equal([ + { + link_passed: true, + expected_status_code: status_class_2xx, + source_uri: origin_uri, + target_uri: 'CHECKED_BELOW', + html_element: 'a', + anchor_text: 'External Link', + status_code: 200, + error_type: '', + error_message: '', + link_start_time: 'NA', + link_end_time: 'NA', + is_origin: false, + screenshot_output: defaultScreenshotOutput, + }, + ]); - // these are checked separately because path and puppeteer format space differently which cause the equality assertion to fail - const expectedTargeturis = [ - '/example_html_files/200.html', - '/example_html_files/file_doesnt_exist.html', - ]; - broken_links_result?.followed_link_results?.forEach((link, index) => { - expect(link.target_uri.endsWith(expectedTargeturis[index])); + const expectedTargetPaths = ['example_html_files/200.html']; + followed_links?.forEach((link, index) => { + expect(link.target_uri.endsWith(expectedTargetPaths[index])); }); - }).timeout(150000); + }).timeout(10000); }); diff --git a/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts index 6b467977..3b177c56 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts @@ -12,7 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Standard Libraries import { expect } from 'chai'; + +// Internal Project Files import { BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions, diff --git a/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts index 486c6e19..b023a50c 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts @@ -12,21 +12,22 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Standard Libraries import { expect, use } from 'chai'; import chaiExclude from 'chai-exclude'; use(chaiExclude); - -import puppeteer, { Browser, HTTPResponse, Page } from 'puppeteer'; +const path = require('path'); import sinon from 'sinon'; + +// Internal Project Files import { - BrokenLinksResultV1_SyntheticLinkResult, BaseError, + BrokenLinksResultV1_SyntheticLinkResult, ResponseStatusCode, ResponseStatusCode_StatusClass, } from '@google-cloud/synthetics-sdk-api'; -import { LinkIntermediate } from '../../src/link_utils'; import { BrokenLinkCheckerOptions } from '../../src/broken_links'; -const path = require('path'); +import { LinkIntermediate } from '../../src/link_utils'; import { checkLink, navigate, @@ -34,6 +35,9 @@ import { } from '../../src/navigation_func'; import { setDefaultOptions } from '../../src/options_func'; +// External Dependencies +import puppeteer, { Browser, HTTPResponse, Page } from 'puppeteer'; + describe('GCM Synthetics Broken Links Navigation Functionality', async () => { // constants const link: LinkIntermediate = { diff --git a/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts index fbe285a6..9d7d49fe 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts @@ -12,7 +12,10 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Standard Libraries import { expect } from 'chai'; + +// Internal Project Files import { BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, ResponseStatusCode, @@ -20,8 +23,8 @@ import { } from '@google-cloud/synthetics-sdk-api'; import { BrokenLinkCheckerOptions, - StatusClass, LinkOrder, + StatusClass, } from '../../src/broken_links'; import { setDefaultOptions, diff --git a/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts index 552d0909..b7e583ad 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts @@ -12,10 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Standard Libraries import { expect } from 'chai'; import sinon from 'sinon'; -import { Storage, Bucket, File } from '@google-cloud/storage'; -import * as sdkApi from '@google-cloud/synthetics-sdk-api'; + +// Internal Project Files +import { + BaseError, + BrokenLinksResultV1_BrokenLinkCheckerOptions, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition as ApiCaptureCondition, +} from '@google-cloud/synthetics-sdk-api'; import { createStorageClientIfStorageSelected, getFolderNameFromStorageLocation, @@ -23,7 +29,9 @@ import { StorageParameters, uploadScreenshotToGCS, } from '../../src/storage_func'; -import { BrokenLinksResultV1_BrokenLinkCheckerOptions } from '@google-cloud/synthetics-sdk-api'; + +// External Dependencies +import { Bucket, File, Storage } from '@google-cloud/storage'; const proxyquire = require('proxyquire'); // global test vars @@ -41,14 +49,8 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { }, }); - const storage_condition_failing_links = - sdkApi - .BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition - .FAILING; - const storage_condition_none = - sdkApi - .BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition - .NONE; + const storage_condition_failing_links = ApiCaptureCondition.FAILING; + const storage_condition_none = ApiCaptureCondition.NONE; beforeEach(() => { // Stub a storage bucket @@ -113,7 +115,7 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { it('should handle errors during bucket.exists()', async () => { bucketStub.exists.throws(new Error('Simulated exists() error')); - const errors: sdkApi.BaseError[] = []; + const errors: BaseError[] = []; const result = await storageFunc.getOrCreateStorageBucket( storageClientStub, 'user-bucket', @@ -128,7 +130,7 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { it('should handle errors during bucket creation', async () => { bucketStub.create.throws(new Error('Simulated creation error')); // Force an error - const errors: sdkApi.BaseError[] = []; + const errors: BaseError[] = []; const result = await storageFunc.getOrCreateStorageBucket( storageClientStub, '', From 61122a222e279054ec374278a976e2f8696e9c97 Mon Sep 17 00:00:00 2001 From: Adam Weidman <65992621+adamfweidman@users.noreply.github.com> Date: Wed, 20 Mar 2024 10:24:51 -0400 Subject: [PATCH 6/9] sanitize strings (#113) --- .../src/link_utils.ts | 31 +++++++++++++++++++ .../src/storage_func.ts | 17 +++++----- .../test/integration/integration.spec.ts | 2 +- .../test/unit/broken_links.spec.ts | 2 +- .../test/unit/link_utils.spec.ts | 31 +++++++++++++++++++ 5 files changed, 73 insertions(+), 10 deletions(-) diff --git a/packages/synthetics-sdk-broken-links/src/link_utils.ts b/packages/synthetics-sdk-broken-links/src/link_utils.ts index 94d88994..2d7d98ea 100644 --- a/packages/synthetics-sdk-broken-links/src/link_utils.ts +++ b/packages/synthetics-sdk-broken-links/src/link_utils.ts @@ -272,6 +272,37 @@ export function shuffleAndTruncate( return linksToFollow.slice(0, link_limit! - 1); } +/** + * Sanitizes an object name string for safe use, ensuring compliance with + * naming restrictions. + * + * @param {string} inputString - The original object name string. + * @returns {string} The sanitized object name. + * + * **Sanitization Rules:** + * * Removes control characters ([\u007F-\u009F]). + * * Removes disallowed characters (#, [, ], *, ?, ", <, >, |, /). + * * Replaces the forbidden prefix ".well-known/acme-challenge/" with an underscore. + * * Replaces standalone occurrences of "." or ".." with an underscore. + */ +export function sanitizeObjectName( + inputString: string | null | undefined +): string { + if (!inputString || inputString === '.' || inputString === '..') return '_'; + + // Regular expressions for: + /*eslint no-useless-escape: "off"*/ + const invalidCharactersRegex = /[\r\n\u007F-\u009F#\[\]*?:"<>|/]/g; // Control characters, special characters, path separator + const wellKnownPrefixRegex = /^\.well-known\/acme-challenge\//; + + // Core sanitization: + return inputString + .replace(wellKnownPrefixRegex, '_') // Replace forbidden prefix + .replace(invalidCharactersRegex, '_') // replace invalid characters + .trim() // Clean up any leading/trailing spaces + .replace(/\s+/g, '_'); // Replace one or more spaces with underscores +} + export function getTimeLimitPromise( startTime: string, totalTimeoutMillis: number, diff --git a/packages/synthetics-sdk-broken-links/src/storage_func.ts b/packages/synthetics-sdk-broken-links/src/storage_func.ts index d8a7136e..a4834100 100644 --- a/packages/synthetics-sdk-broken-links/src/storage_func.ts +++ b/packages/synthetics-sdk-broken-links/src/storage_func.ts @@ -24,6 +24,7 @@ import { getExecutionRegion, resolveProjectId, } from '@google-cloud/synthetics-sdk-api'; +import { sanitizeObjectName } from './link_utils'; // External Dependencies import { Storage, Bucket } from '@google-cloud/storage'; @@ -55,14 +56,14 @@ export async function getOrCreateStorageBucket( let bucketName = ''; try { - const projectId = await resolveProjectId(); - const region = await getExecutionRegion(); - - // if storageClient was not properly initialized OR the user chose to - // use/create the default bucket but we were not able to resolve projectId - // or cloudRegion - if (!storageClient || (!storageLocation && (!projectId || !region))) - return null; + if (!storageClient) return null; + + const projectId = sanitizeObjectName(await resolveProjectId()); + const region = sanitizeObjectName(await getExecutionRegion()); + + // if the user chose to use/create the default bucket but we were not able + // to resolve projectId or cloudRegion + if (!storageLocation && (!projectId || !region)) return null; bucketName = storageLocation ? storageLocation.split('/')[0] diff --git a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts index 8923845b..aefb9181 100644 --- a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts @@ -32,7 +32,7 @@ import { require('../../test/example_html_files/integration_server.js'); const { getTestServer } = require('@google-cloud/functions-framework/testing'); -describe.only('CloudFunctionV2 Running Broken Link Synthetics', async () => { +describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { const status_class_2xx = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_2XX, }; diff --git a/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts index a29ddc35..5ee15932 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts @@ -35,7 +35,7 @@ import { BrokenLinkCheckerOptions, } from '../../src/broken_links'; -describe.only('runBrokenLinks', async () => { +describe('runBrokenLinks', async () => { const status_class_2xx: ResponseStatusCode = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_2XX, }; diff --git a/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts index 3b177c56..2c486c5b 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts @@ -30,6 +30,7 @@ import { createSyntheticResult, getGenericSyntheticResult, LinkIntermediate, + sanitizeObjectName, shuffleAndTruncate, } from '../../src/link_utils'; import { setDefaultOptions } from '../../src/options_func'; @@ -210,4 +211,34 @@ describe('GCM Synthetics Broken Links Utilies', async () => { expect(startTime).to.be.lessThan(endTime); expect(milliDifference).to.be.greaterThan(0); }); + + describe('sanitizeObjectName', () => { + it('should remove invalid characters', () => { + const input = "test/\@#$%^&*()/_+\-=[]{};':\"\|,.<>/?\r\n\t"; + const expectedOutput = "test_@_$%^&_()__+-=__{};'__\_,.______"; + expect(sanitizeObjectName(input)).to.equal(expectedOutput); + }); + + it('should replace the forbidden prefix', () => { + const input = ".well-known/acme-challenge/test"; + const expectedOutput = "_test"; + expect(sanitizeObjectName(input)).to.equal(expectedOutput); + }); + + it('should handle standalone "." and ".."', () => { + expect(sanitizeObjectName(".")).to.equal("_"); + expect(sanitizeObjectName("..")).to.equal("_"); + }); + + it('should handle null and undefined', () => { + expect(sanitizeObjectName(null)).to.equal("_"); + expect(sanitizeObjectName(undefined)).to.equal("_"); + }) + + it('should trim leading and trailing whitespace', () => { + const input = " test name "; + const expectedOutput = "test_name"; + expect(sanitizeObjectName(input)).to.equal(expectedOutput); + }); + }); }); From be99a9ff357c3e49dfa7c2199f531dbc8580a5bf Mon Sep 17 00:00:00 2001 From: Adam Weidman <65992621+adamfweidman@users.noreply.github.com> Date: Fri, 29 Mar 2024 16:09:24 -0400 Subject: [PATCH 7/9] Take and populate screenshot (#114) * screenshots-prop * broken_links.spec working * fix naming * pass-args * response to comments --- package-lock.json | 21 +- .../google-cloud-synthetics-sdk-api-0.5.1.tgz | Bin 97194 -> 97251 bytes .../synthetics-sdk-broken-links/package.json | 2 + .../src/broken_links.ts | 47 +++-- .../src/handlers.ts | 10 +- .../src/link_utils.ts | 66 ++++++- .../src/navigation_func.ts | 28 ++- .../src/options_func.ts | 2 +- .../src/storage_func.ts | 69 +++---- .../example_html_files/integration_server.js | 5 +- .../test/integration/integration.spec.ts | 6 +- .../test/unit/broken_links.spec.ts | 160 ++++++++++++---- .../test/unit/handlers.spec.ts | 60 ++++++ .../test/unit/link_utils.spec.ts | 138 ++++++++++++-- .../test/unit/navigation_func.spec.ts | 124 +++++++----- .../test/unit/storage_func.spec.ts | 180 ++++++++---------- 16 files changed, 656 insertions(+), 262 deletions(-) create mode 100644 packages/synthetics-sdk-broken-links/test/unit/handlers.spec.ts diff --git a/package-lock.json b/package-lock.json index 93189208..1f224fcb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3360,6 +3360,12 @@ "@types/pg": "*" } }, + "node_modules/@types/proxyquire": { + "version": "1.3.31", + "resolved": "https://registry.npmjs.org/@types/proxyquire/-/proxyquire-1.3.31.tgz", + "integrity": "sha512-uALowNG2TSM1HNPMMOR0AJwv4aPYPhqB0xlEhkeRTMuto5hjoSPZkvgu1nbPUkz3gEPAHv4sy4DmKsurZiEfRQ==", + "dev": true + }, "node_modules/@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -10935,6 +10941,7 @@ "@types/chai": "^4.3.4", "@types/express": "^4.17.17", "@types/node": "^18.15.10", + "@types/proxyquire": "^1.3.31", "@types/sinon": "^10.0.16", "@types/supertest": "^2.0.12", "chai": "^4.3.7", @@ -10952,7 +10959,7 @@ "packages/synthetics-sdk-broken-links/node_modules/@google-cloud/synthetics-sdk-api": { "version": "0.5.1", "resolved": "file:packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-gNUsbNYcBYt/lLSdCmx8YJWA2Tqb9THrrQrKuUtb1pAnwy1M+pukfYoUztp6rX8jVsdj2/lVgN6iMx9ARLfM0g==", + "integrity": "sha512-kCevsvEiS6DzeRJmcwoY0RvlOm4tvwGxMUGFw0H14ELTUW8QoY6Fj5paLZgSlmC9wNQ5IZZE9g3kNdJnNicm+Q==", "license": "Apache-2.0", "dependencies": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", @@ -12275,6 +12282,7 @@ "@types/chai": "^4.3.4", "@types/express": "^4.17.17", "@types/node": "^18.15.10", + "@types/proxyquire": "^1.3.31", "@types/sinon": "^10.0.16", "@types/supertest": "^2.0.12", "chai": "^4.3.7", @@ -12289,7 +12297,7 @@ "dependencies": { "@google-cloud/synthetics-sdk-api": { "version": "file:google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-gNUsbNYcBYt/lLSdCmx8YJWA2Tqb9THrrQrKuUtb1pAnwy1M+pukfYoUztp6rX8jVsdj2/lVgN6iMx9ARLfM0g==", + "integrity": "sha512-kCevsvEiS6DzeRJmcwoY0RvlOm4tvwGxMUGFw0H14ELTUW8QoY6Fj5paLZgSlmC9wNQ5IZZE9g3kNdJnNicm+Q==", "requires": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", @@ -14437,6 +14445,12 @@ "@types/pg": "*" } }, + "@types/proxyquire": { + "version": "1.3.31", + "resolved": "https://registry.npmjs.org/@types/proxyquire/-/proxyquire-1.3.31.tgz", + "integrity": "sha512-uALowNG2TSM1HNPMMOR0AJwv4aPYPhqB0xlEhkeRTMuto5hjoSPZkvgu1nbPUkz3gEPAHv4sy4DmKsurZiEfRQ==", + "dev": true + }, "@types/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", @@ -19031,6 +19045,7 @@ "@types/chai": "^4.3.4", "@types/express": "^4.17.17", "@types/node": "^18.15.10", + "@types/proxyquire": "^1.3.31", "@types/sinon": "^10.0.16", "@types/supertest": "^2.0.12", "chai": "^4.3.7", @@ -19045,7 +19060,7 @@ "dependencies": { "@google-cloud/synthetics-sdk-api": { "version": "file:google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-gNUsbNYcBYt/lLSdCmx8YJWA2Tqb9THrrQrKuUtb1pAnwy1M+pukfYoUztp6rX8jVsdj2/lVgN6iMx9ARLfM0g==", + "integrity": "sha512-kCevsvEiS6DzeRJmcwoY0RvlOm4tvwGxMUGFw0H14ELTUW8QoY6Fj5paLZgSlmC9wNQ5IZZE9g3kNdJnNicm+Q==", "requires": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", diff --git a/packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz b/packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz index 81d4a1b68c1e61642ed206424f00af0b01afa958..8e9d4a8f5922ab1e489c9ecb18d12b58aaca21c7 100644 GIT binary patch delta 37345 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 delta 37258 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 L*YL5e|nhx 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 s1{PDnWTP2X2Y@5^v { // init const startTime = new Date().toISOString(); @@ -112,6 +117,11 @@ export async function runBrokenLinks( const adjusted_synthetic_timeout_millis = options.total_synthetic_timeout_millis! - 7000; + // Create Promise and variables used to set and resolve the time limit + // imposed by `adjusted_synthetic_timeout` + const [timeLimitPromise, timeLimitTimeout, timeLimitresolver] = + getTimeLimitPromise(startTime, adjusted_synthetic_timeout_millis); + const errors: BaseError[] = []; // Initialize Storage Client with Error Handling. Set to `null` if @@ -121,18 +131,20 @@ export async function runBrokenLinks( options.screenshot_options!.capture_condition ); - // TODO. Just to show where this will be called. uncommented in next PR - // Bucket Validation - // const bucket: Bucket | null = await getOrCreateStorageBucket( - // storageClient, - // options.screenshot_options!.storage_location, - // errors - // ); + // // Bucket Validation + const bucket: Bucket | null = await getOrCreateStorageBucket( + storageClient, + options.screenshot_options!.storage_location, + errors + ); - // Create Promise and variables used to set and resolve the time limit - // imposed by `adjusted_synthetic_timeout` - const [timeLimitPromise, timeLimitTimeout, timeLimitresolver] = - getTimeLimitPromise(startTime, adjusted_synthetic_timeout_millis); + const storageParams: StorageParameters = { + storageClient: storageClient, + bucket: bucket, + checkId: args.checkId || '_', + executionId: args.executionId || '_', + screenshotNumber: 1, + }; const followed_links: BrokenLinksResultV1_SyntheticLinkResult[] = []; @@ -147,7 +159,8 @@ export async function runBrokenLinks( originPage, options, startTime, - adjusted_synthetic_timeout_millis + adjusted_synthetic_timeout_millis, + storageParams ) ); @@ -169,7 +182,8 @@ export async function runBrokenLinks( linksToFollow, options, startTime, - adjusted_synthetic_timeout_millis + adjusted_synthetic_timeout_millis, + storageParams )) ); return true; @@ -188,6 +202,7 @@ export async function runBrokenLinks( runtime_metadata, options, followed_links, + storageParams, errors ); } catch (err) { @@ -215,7 +230,8 @@ async function checkOriginLink( originPage: Page, options: BrokenLinksResultV1_BrokenLinkCheckerOptions, startTime: string, - adjusted_synthetic_timeout_millis: number + adjusted_synthetic_timeout_millis: number, + storageParams: StorageParameters ): Promise { let originLinkResult: BrokenLinksResultV1_SyntheticLinkResult; @@ -232,6 +248,7 @@ async function checkOriginLink( originPage, { target_uri: options.origin_uri, anchor_text: '', html_element: '' }, options, + storageParams, true ); diff --git a/packages/synthetics-sdk-broken-links/src/handlers.ts b/packages/synthetics-sdk-broken-links/src/handlers.ts index fff255a6..b45caccd 100644 --- a/packages/synthetics-sdk-broken-links/src/handlers.ts +++ b/packages/synthetics-sdk-broken-links/src/handlers.ts @@ -18,6 +18,9 @@ import { Request, Response } from 'express'; // Internal Project Files import { runBrokenLinks, BrokenLinkCheckerOptions } from './broken_links'; +const syntheticExecutionIdHeader = 'Synthetic-Execution-Id'; +const checkIdHeader = 'Check-Id'; + /** * Middleware for easy invocation of SyntheticSDK broken links, and may be used to * register a GoogleCloudFunction http function, or express js compatible handler. @@ -29,5 +32,10 @@ import { runBrokenLinks, BrokenLinkCheckerOptions } from './broken_links'; export function runBrokenLinksHandler(options: BrokenLinkCheckerOptions) { // eslint-disable-next-line @typescript-eslint/no-explicit-any return async (req: Request, res: Response): Promise => - res.send(await runBrokenLinks(options)); + res.send( + await runBrokenLinks(options, { + executionId: req.get(syntheticExecutionIdHeader), + checkId: req.get(checkIdHeader), + }) + ); } diff --git a/packages/synthetics-sdk-broken-links/src/link_utils.ts b/packages/synthetics-sdk-broken-links/src/link_utils.ts index 2d7d98ea..b90412c1 100644 --- a/packages/synthetics-sdk-broken-links/src/link_utils.ts +++ b/packages/synthetics-sdk-broken-links/src/link_utils.ts @@ -12,12 +12,16 @@ // See the License for the specific language governing permissions and // limitations under the License. +// Standard Libraries +import * as path from 'path'; + // Internal Project Files import { BaseError, BrokenLinksResultV1, BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition as ApiCaptureCondition, BrokenLinksResultV1_SyntheticLinkResult, GenericResultV1, getRuntimeMetadata, @@ -28,6 +32,7 @@ import { // External Dependencies import { HTTPResponse } from 'puppeteer'; +import { StorageParameters } from './storage_func'; /** * Represents an intermediate link with its properties. @@ -157,7 +162,7 @@ function parseFollowedLinks( options: {} as BrokenLinksResultV1_BrokenLinkCheckerOptions, origin_link_result: {} as BrokenLinksResultV1_SyntheticLinkResult, followed_link_results: [], - execution_data_storage_path: '', // TODO: make sure that when this is set it begins with gs:// + execution_data_storage_path: '', errors: [], }; @@ -223,6 +228,7 @@ export function createSyntheticResult( runtime_metadata: { [key: string]: string }, options: BrokenLinksResultV1_BrokenLinkCheckerOptions, followed_links: BrokenLinksResultV1_SyntheticLinkResult[], + storageParams: StorageParameters, errors: BaseError[] ): SyntheticResult { // Create BrokenLinksResultV1 by parsing followed links and setting options @@ -230,6 +236,12 @@ export function createSyntheticResult( parseFollowedLinks(followed_links); broken_links_result.options = options; broken_links_result.errors = errors; + broken_links_result.execution_data_storage_path = storageParams.bucket + ? 'gs://' + + storageParams.bucket.name + + '/' + + getStoragePathToExecution(storageParams, options) + : ''; // Create SyntheticResult object const synthetic_result: SyntheticResult = { @@ -273,6 +285,26 @@ export function shuffleAndTruncate( } /** + * Determines whether a screenshot should be taken based on screenshot options and link result. + * + * @param options - BrokenLinksResultV1_BrokenLinkCheckerOptions + * @param passed - boolean indicating whether the link navigation succeeded + * @returns true if a screenshot should be taken, false otherwise + */ +export function shouldTakeScreenshot( + options: BrokenLinksResultV1_BrokenLinkCheckerOptions, + passed: boolean +): boolean { + return ( + options.screenshot_options!.capture_condition === ApiCaptureCondition.ALL || + (options.screenshot_options!.capture_condition === + ApiCaptureCondition.FAILING && + !passed) + ); +} + +/** + * Sanitizes an object name string for safe use, ensuring compliance with * naming restrictions. * @@ -303,6 +335,38 @@ export function sanitizeObjectName( .replace(/\s+/g, '_'); // Replace one or more spaces with underscores } +export function getStoragePathToExecution( + storageParams: StorageParameters, + options: BrokenLinksResultV1_BrokenLinkCheckerOptions +) { + try { + const storageLocation = options.screenshot_options!.storage_location; + let writeDestination = ''; + + // extract folder name for a given storage location. If there is no '/' + // present then the storageLocation is just a folder + const firstSlashIndex = storageLocation.indexOf('/'); + if (firstSlashIndex !== -1) { + writeDestination = storageLocation.substring(firstSlashIndex + 1); + } + + // Ensure writeDestination ends with a slash for proper path joining + if (writeDestination && !writeDestination.endsWith('/')) { + writeDestination += '/'; + } + + writeDestination = path.join( + writeDestination, + storageParams.checkId, + storageParams.executionId + ); + + return writeDestination; + } catch (err) { + return ''; + } +} + export function getTimeLimitPromise( startTime: string, totalTimeoutMillis: number, diff --git a/packages/synthetics-sdk-broken-links/src/navigation_func.ts b/packages/synthetics-sdk-broken-links/src/navigation_func.ts index d7d856a4..dcca8fd9 100644 --- a/packages/synthetics-sdk-broken-links/src/navigation_func.ts +++ b/packages/synthetics-sdk-broken-links/src/navigation_func.ts @@ -19,6 +19,7 @@ import { BrokenLinksResultV1_SyntheticLinkResult, ResponseStatusCode, ResponseStatusCode_StatusClass, + BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput as ApiScreenshotOutput, } from '@google-cloud/synthetics-sdk-api'; import { checkStatusPassing, @@ -27,7 +28,9 @@ import { LinkIntermediate, NavigateResponse, getTimeLimitPromise, + shouldTakeScreenshot, } from './link_utils'; +import { StorageParameters, uploadScreenshotToGCS } from './storage_func'; // External Dependencies import { Browser, HTTPResponse, Page } from 'puppeteer'; @@ -104,7 +107,8 @@ export async function checkLinks( links: LinkIntermediate[], options: BrokenLinksResultV1_BrokenLinkCheckerOptions, startTime: string, - total_timeout_millis: number + total_timeout_millis: number, + storageParams: StorageParameters ): Promise { let timeLimitReached = false; const followed_links: BrokenLinksResultV1_SyntheticLinkResult[] = []; @@ -120,7 +124,9 @@ export async function checkLinks( if (timeLimitReached) return false; try { - followed_links.push(await checkLink(page, link, options)); + followed_links.push( + await checkLink(page, link, options, storageParams) + ); /** In the case of a single page app, network requests can hang and cause * timeout issues in following links. To ensure this does not happen we * need to reset the page in between every link checked @@ -165,6 +171,7 @@ export async function checkLink( page: Page, link: LinkIntermediate, options: BrokenLinksResultV1_BrokenLinkCheckerOptions, + storageParams: StorageParameters, isOrigin = false ): Promise { // Determine the expected status code for the link, using per-link setting if @@ -185,6 +192,18 @@ export async function checkLink( linkEndTime, } = await navigate(page, link, options, expectedStatusCode); + let screenshotOutput: ApiScreenshotOutput = { + screenshot_file: '', + screenshot_error: {} as BaseError, + }; + if (shouldTakeScreenshot(options, passed)) { + screenshotOutput = await uploadScreenshotToGCS( + page, + storageParams, + options + ); + } + // Initialize variables for error information let errorType = ''; let errorMessage = ''; @@ -224,10 +243,7 @@ export async function checkLink( link_start_time: linkStartTime, link_end_time: linkEndTime, is_origin: isOrigin, - screenshot_output: { - screenshot_file: '', - screenshot_error: {} as BaseError, - }, // TODO: this is temporary in an effort to make PRs more manageable + screenshot_output: screenshotOutput, }; } diff --git a/packages/synthetics-sdk-broken-links/src/options_func.ts b/packages/synthetics-sdk-broken-links/src/options_func.ts index 1b0a61d3..b8b67f97 100644 --- a/packages/synthetics-sdk-broken-links/src/options_func.ts +++ b/packages/synthetics-sdk-broken-links/src/options_func.ts @@ -290,7 +290,7 @@ export function setDefaultOptions( defaultOptions.screenshot_options!.capture_condition; } - if (outputOptions.screenshot_options?.storage_location) { + if (inputOptions.screenshot_options?.storage_location) { outputOptions.screenshot_options.storage_location = inputOptions.screenshot_options!.storage_location!; } else { diff --git a/packages/synthetics-sdk-broken-links/src/storage_func.ts b/packages/synthetics-sdk-broken-links/src/storage_func.ts index a4834100..524919be 100644 --- a/packages/synthetics-sdk-broken-links/src/storage_func.ts +++ b/packages/synthetics-sdk-broken-links/src/storage_func.ts @@ -24,16 +24,18 @@ import { getExecutionRegion, resolveProjectId, } from '@google-cloud/synthetics-sdk-api'; -import { sanitizeObjectName } from './link_utils'; +import { getStoragePathToExecution, sanitizeObjectName } from './link_utils'; // External Dependencies import { Storage, Bucket } from '@google-cloud/storage'; +import { Page } from 'puppeteer'; export interface StorageParameters { storageClient: Storage | null; bucket: Bucket | null; - uptimeId: string; + checkId: string; executionId: string; + screenshotNumber: number; } /** @@ -89,12 +91,16 @@ export async function getOrCreateStorageBucket( }); } } catch (err) { - if (err instanceof Error) process.stderr.write(err.message); + const errorType = storageLocation + ? 'StorageValidationError' + : 'BucketCreationError'; + + // Using console.error rather than stderr.write since err type is unknown + console.error(errorType, err); + errors.push({ // General error handling - error_type: storageLocation - ? 'StorageValidationError' - : 'BucketCreationError', + error_type: errorType, error_message: `Failed to ${ storageLocation ? 'validate' : 'create' } bucket ${bucketName}. Please reference server logs for further information.`, @@ -120,7 +126,8 @@ export function createStorageClientIfStorageSelected( try { return new Storage(); } catch (err) { - if (err instanceof Error) process.stderr.write(err.message); + console.error('StorageClientInitializationError', err); + errors.push({ error_type: 'StorageClientInitializationError', error_message: @@ -140,8 +147,7 @@ export function createStorageClientIfStorageSelected( * @returns An ApiScreenshotOutput object indicating success or a screenshot_error. */ export async function uploadScreenshotToGCS( - screenshot: string, - filename: string, + page: Page, storageParams: StorageParameters, options: BrokenLinksResultV1_BrokenLinkCheckerOptions ): Promise { @@ -155,22 +161,14 @@ export async function uploadScreenshotToGCS( return screenshot_output; } - // Construct the destination path within the bucket if given - let writeDestination = options.screenshot_options!.storage_location - ? getFolderNameFromStorageLocation( - options.screenshot_options!.storage_location - ) - : ''; - - // Ensure writeDestination ends with a slash for proper path joining - if (writeDestination && !writeDestination.endsWith('/')) { - writeDestination += '/'; - } + const screenshot: Buffer = await page.screenshot({ + fullPage: true, + encoding: 'binary', + }); + const filename = 'screenshot_' + storageParams.screenshotNumber + '.png'; - writeDestination = path.join( - writeDestination, - storageParams.uptimeId, - storageParams.executionId, + const writeDestination = path.join( + getStoragePathToExecution(storageParams, options), filename ); @@ -179,27 +177,16 @@ export async function uploadScreenshotToGCS( contentType: 'image/png', }); - screenshot_output.screenshot_file = writeDestination; + storageParams.screenshotNumber += 1; + screenshot_output.screenshot_file = filename; } catch (err) { - // Handle upload errors - if (err instanceof Error) process.stderr.write(err.message); + console.error('ScreenshotFileUploadError', err); + screenshot_output.screenshot_error = { - error_type: 'StorageFileUploadError', - error_message: `Failed to upload screenshot for ${filename}. Please reference server logs for further information.`, + error_type: 'ScreenshotFileUploadError', + error_message: `Failed to take and/or upload screenshot for ${await page.url()}. Please reference server logs for further information.`, }; } return screenshot_output; } - -// Helper function to extract folder name for a given storage location. If there -// is no '/' present then the storageLocation is just a folder -export function getFolderNameFromStorageLocation( - storageLocation: string -): string { - const firstSlashIndex = storageLocation.indexOf('/'); - if (firstSlashIndex === -1) { - return ''; - } - return storageLocation.substring(firstSlashIndex + 1); -} diff --git a/packages/synthetics-sdk-broken-links/test/example_html_files/integration_server.js b/packages/synthetics-sdk-broken-links/test/example_html_files/integration_server.js index d63ecd31..5e573891 100644 --- a/packages/synthetics-sdk-broken-links/test/example_html_files/integration_server.js +++ b/packages/synthetics-sdk-broken-links/test/example_html_files/integration_server.js @@ -31,5 +31,8 @@ functions.http('BrokenLinksEmptyPageOk', SyntheticsSdkBrokenLinks.runBrokenLinks origin_uri: `file:${path.join( __dirname, '../example_html_files/200.html' - )}` + )}`, + screenshot_options: { + capture_condition: 'NONE' + } })); diff --git a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts index aefb9181..93a24fff 100644 --- a/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/integration/integration.spec.ts @@ -36,9 +36,9 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { const status_class_2xx = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_2XX, }; - const defaultScreenshotOptions: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions = + const noneCaptureScreenshotOptions: BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions = { - capture_condition: ApiCaptureCondition.FAILING, + capture_condition: ApiCaptureCondition.NONE, storage_location: '', }; @@ -96,7 +96,7 @@ describe('CloudFunctionV2 Running Broken Link Synthetics', async () => { wait_for_selector: '', per_link_options: {}, total_synthetic_timeout_millis: 60000, - screenshot_options: defaultScreenshotOptions, + screenshot_options: noneCaptureScreenshotOptions, }); expect(origin_link) diff --git a/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts index 5ee15932..0599d4fd 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/broken_links.spec.ts @@ -17,11 +17,11 @@ import { expect, use } from 'chai'; import chaiExclude from 'chai-exclude'; use(chaiExclude); const path = require('path'); +import sinon from 'sinon'; // Internal Project Files import { BaseError, - BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition as ApiCaptureCondition, @@ -33,8 +33,16 @@ import { import { runBrokenLinks, BrokenLinkCheckerOptions, + CaptureCondition, } from '../../src/broken_links'; +// External Dependencies +const proxyquire = require('proxyquire'); +import { Page } from 'puppeteer'; +import { Bucket, Storage } from '@google-cloud/storage'; + +const TEST_BUCKET_NAME = 'gcm-test-project-id-synthetics-test-region'; + describe('runBrokenLinks', async () => { const status_class_2xx: ResponseStatusCode = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_2XX, @@ -44,19 +52,59 @@ describe('runBrokenLinks', async () => { capture_condition: ApiCaptureCondition.FAILING, storage_location: '', }; - - const defaultScreenshotOutput: ApiScreenshotOutput = - { - screenshot_file: '', - screenshot_error: {} as BaseError, - }; + const emptyScreenshotOutput: ApiScreenshotOutput = { + screenshot_file: '', + screenshot_error: {} as BaseError, + }; + const successfulScreenshotOuput: ApiScreenshotOutput = { + screenshot_file: 'bucket/folder/file.png', + screenshot_error: {} as BaseError, + }; + const args = { checkId: 'test-check-id', executionId: 'test-execution-id' }; + + const mockedstorageFunc = proxyquire('../../src/storage_func', { + '@google-cloud/synthetics-sdk-api': { + getExecutionRegion: () => 'test-region', + resolveProjectId: () => 'test-project-id', + }, + }); + + const mockedNavigationFunc = proxyquire('../../src/navigation_func', { + './storage_func': { + uploadScreenshotToGCS: () => successfulScreenshotOuput, + }, + }); + + let storageClientStub: sinon.SinonStubbedInstance; + let bucketStub: sinon.SinonStubbedInstance; + let pageStub: sinon.SinonStubbedInstance; + beforeEach(() => { + // Stub a storage bucket + bucketStub = sinon.createStubInstance(Bucket); + bucketStub.name = TEST_BUCKET_NAME; + bucketStub.create.resolves([bucketStub]); + // Simulate default_bucket not existing initially + bucketStub.exists.resolves([false]); // Simulate the bucket not existing initially + + // Stub the storage client + storageClientStub = sinon.createStubInstance(Storage); + storageClientStub.bucket.returns(bucketStub); + + // Stub a puppeteer page to return set Buffer when .screenshot() called + pageStub = sinon.createStubInstance(Page); + pageStub.screenshot.resolves(Buffer.from('screenshot-image-data', 'utf-8')); + }); + + afterEach(() => { + sinon.restore(); + }); it('Exits early when options cannot be parsed', async () => { const inputOptions: BrokenLinkCheckerOptions = { origin_uri: 'uri-does-not-start-with-http', }; - const result = await runBrokenLinks(inputOptions); + const result = await runBrokenLinks(inputOptions, args); const genericResult = result.synthetic_generic_result_v1; @@ -69,6 +117,16 @@ describe('runBrokenLinks', async () => { }).timeout(15000); it('returns broken_links_result with origin link failure when waitForSelector exceeds deadline', async () => { + const mockedBlc = proxyquire('../../src/broken_links', { + './storage_func': { + ...mockedstorageFunc, + createStorageClientIfStorageSelected: () => storageClientStub, + }, + './navigation_func': { + ...mockedNavigationFunc, + }, + }); + const origin_uri = `file:${path.join( __dirname, '../example_html_files/retrieve_links_test.html' @@ -77,9 +135,10 @@ describe('runBrokenLinks', async () => { origin_uri: origin_uri, wait_for_selector: 'not_present', link_timeout_millis: 3001, + screenshot_options: { capture_condition: CaptureCondition.NONE }, }; - const result = await runBrokenLinks(inputOptions); + const result = await mockedBlc.runBrokenLinks(inputOptions, args); const broken_links_result = result?.synthetic_broken_links_result_v1; const origin_link = broken_links_result?.origin_link_result; @@ -93,6 +152,16 @@ describe('runBrokenLinks', async () => { }).timeout(15000); it('Global timeout occurs during checkOriginLink waiting for `wait_for_selector', async () => { + const mockedBlc = proxyquire('../../src/broken_links', { + './storage_func': { + ...mockedstorageFunc, + createStorageClientIfStorageSelected: () => storageClientStub, + }, + './navigation_func': { + ...mockedNavigationFunc, + }, + }); + const origin_uri = `file:${path.join( __dirname, '../example_html_files/retrieve_links_test.html' @@ -104,8 +173,9 @@ describe('runBrokenLinks', async () => { wait_for_selector: 'none existent', link_timeout_millis: 35000, total_synthetic_timeout_millis: 31000, + screenshot_options: { capture_condition: CaptureCondition.NONE }, }; - const result = await runBrokenLinks(inputOptions); + const result = await mockedBlc.runBrokenLinks(inputOptions, args); const broken_links_result = result.synthetic_broken_links_result_v1; const expectedOriginLinkResult: BrokenLinksResultV1_SyntheticLinkResult = { @@ -122,10 +192,7 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, - screenshot_output: { - screenshot_file: '', - screenshot_error: {} as BaseError, - }, + screenshot_output: emptyScreenshotOutput, }; expect(broken_links_result?.origin_link_result) @@ -134,17 +201,17 @@ describe('runBrokenLinks', async () => { expect(broken_links_result?.followed_link_results.length).to.equal(0); }).timeout(40000); - it('Handles error when trying to visit page that does not exist', async () => { const origin_uri = `file:${path.join( __dirname, '../example_html_files/file_doesnt_exist.html' )}`; - const inputOptions : BrokenLinkCheckerOptions = { - origin_uri: origin_uri + const inputOptions: BrokenLinkCheckerOptions = { + origin_uri: origin_uri, + screenshot_options: { capture_condition: CaptureCondition.NONE }, }; - const result = await runBrokenLinks(inputOptions); + const result = await runBrokenLinks(inputOptions, args); const broken_links_result = result?.synthetic_broken_links_result_v1; const origin_link = broken_links_result?.origin_link_result; @@ -177,14 +244,23 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, - screenshot_output: defaultScreenshotOutput, + screenshot_output: emptyScreenshotOutput, }); expect(followed_links).to.deep.equal([]); }).timeout(10000); - it('Completes a full failing execution (1 failing link)', async () => { + const mockedBlc = proxyquire('../../src/broken_links', { + './storage_func': { + ...mockedstorageFunc, + createStorageClientIfStorageSelected: () => storageClientStub, + }, + './navigation_func': { + ...mockedNavigationFunc, + }, + }); + const origin_uri = `file:${path.join( __dirname, '../example_html_files/retrieve_links_test.html' @@ -194,9 +270,12 @@ describe('runBrokenLinks', async () => { query_selector_all: 'a[src], img[href]', get_attributes: ['href', 'src'], wait_for_selector: '', + screenshot_options: { + capture_condition: CaptureCondition.FAILING, + }, }; - const result = await runBrokenLinks(inputOptions); + const result = await mockedBlc.runBrokenLinks(inputOptions, args); const broken_links_result = result?.synthetic_broken_links_result_v1; const options = broken_links_result?.options; @@ -245,11 +324,14 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, - screenshot_output: defaultScreenshotOutput, + screenshot_output: emptyScreenshotOutput, }); - const sorted_followed_links = followed_links?.sort((a, b) => - a.target_uri.localeCompare(b.target_uri) + const sorted_followed_links = followed_links?.sort( + ( + a: BrokenLinksResultV1_SyntheticLinkResult, + b: BrokenLinksResultV1_SyntheticLinkResult + ) => a.target_uri.localeCompare(b.target_uri) ); const fileDoesntExistPath = `file://${path.join( @@ -259,7 +341,7 @@ describe('runBrokenLinks', async () => { .split(' ') .join('%20'); - expect(sorted_followed_links) + expect(sorted_followed_links) .excluding(['target_uri', 'link_start_time', 'link_end_time']) .to.deep.equal([ { @@ -275,7 +357,7 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output: defaultScreenshotOutput, + screenshot_output: emptyScreenshotOutput, }, { link_passed: false, @@ -290,7 +372,7 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output: defaultScreenshotOutput, + screenshot_output: successfulScreenshotOuput, }, ]); @@ -299,9 +381,11 @@ describe('runBrokenLinks', async () => { '/example_html_files/200.html', '/example_html_files/file_doesnt_exist.html', ]; - broken_links_result?.followed_link_results?.forEach((link, index) => { - expect(link.target_uri.endsWith(expectedTargeturis[index])); - }); + broken_links_result?.followed_link_results?.forEach( + (link: BrokenLinksResultV1_SyntheticLinkResult, index: number) => { + expect(link.target_uri.endsWith(expectedTargeturis[index])); + } + ); }).timeout(150000); it('Completes a full passing execution', async () => { @@ -309,13 +393,14 @@ describe('runBrokenLinks', async () => { __dirname, '../example_html_files/retrieve_links_test.html' )}`; - const inputOptions : BrokenLinkCheckerOptions = { + const inputOptions: BrokenLinkCheckerOptions = { origin_uri: origin_uri, query_selector_all: 'a[src]', - get_attributes: ['src'] + get_attributes: ['src'], + screenshot_options: { capture_condition: CaptureCondition.NONE }, }; - const result = await runBrokenLinks(inputOptions); + const result = await runBrokenLinks(inputOptions, args); const broken_links_result = result?.synthetic_broken_links_result_v1; const options = broken_links_result?.options; @@ -346,7 +431,10 @@ describe('runBrokenLinks', async () => { wait_for_selector: '', per_link_options: {}, total_synthetic_timeout_millis: 60000, - screenshot_options: defaultScreenshotOptions, + screenshot_options: { + capture_condition: ApiCaptureCondition.NONE, + storage_location: '', + }, }); expect(origin_link) @@ -364,7 +452,7 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: true, - screenshot_output: defaultScreenshotOutput, + screenshot_output: emptyScreenshotOutput, }); expect(followed_links) @@ -383,7 +471,7 @@ describe('runBrokenLinks', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output: defaultScreenshotOutput, + screenshot_output: emptyScreenshotOutput, }, ]); diff --git a/packages/synthetics-sdk-broken-links/test/unit/handlers.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/handlers.spec.ts new file mode 100644 index 00000000..a228db4e --- /dev/null +++ b/packages/synthetics-sdk-broken-links/test/unit/handlers.spec.ts @@ -0,0 +1,60 @@ +// Copyright 2023 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Standard Libraries +import { expect } from 'chai'; +import sinon from 'sinon'; + +// External Dependency +import httpMocks from 'node-mocks-http'; +const proxyquire = require('proxyquire'); + +import { runBrokenLinksHandler } from '../../src/handlers'; +import { BrokenLinkCheckerOptions } from '../../src/broken_links'; + +describe('Broken Links Synthetic Handler', async () => { + it('has check id and execution id available', async () => { + // Stub the runBrokenLinks function using Sinon + const mockRunBrokenLinks = sinon.stub().callsFake(async (opts, args) => { + return Promise.resolve({ mocked_response: 'is unimportant' }); + }); + const mockedBrokenLinks = proxyquire('../../src/handlers', { + './broken_links': { runBrokenLinks: mockRunBrokenLinks }, + }); + + // Options for the runBrokenLinksHandler + const options: BrokenLinkCheckerOptions = { + origin_uri: 'https://example.com', + }; + + // Create mock request and response + const req = httpMocks.createRequest({ + headers: { + ['Synthetic-Execution-Id']: 'test-execution-id', + ['Check-Id']: 'test-check-id', + }, + }); + const res = httpMocks.createResponse(); + + // Call the middleware + await mockedBrokenLinks.runBrokenLinksHandler(options)(req, res); + + // Assertions with Sinon and Chai + sinon.assert.calledWith(mockRunBrokenLinks, options, { + executionId: 'test-execution-id', + checkId: 'test-check-id', + }); + expect(res.statusCode).to.equal(200); + }).timeout(5000); +}); diff --git a/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts index 2c486c5b..e59d3f16 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/link_utils.spec.ts @@ -14,12 +14,14 @@ // Standard Libraries import { expect } from 'chai'; +import sinon from 'sinon'; // Internal Project Files import { BaseError, BrokenLinksResultV1_BrokenLinkCheckerOptions, BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition as ApiCaptureCondition, BrokenLinksResultV1_SyntheticLinkResult, ResponseStatusCode, ResponseStatusCode_StatusClass, @@ -29,12 +31,19 @@ import { checkStatusPassing, createSyntheticResult, getGenericSyntheticResult, + getStoragePathToExecution, LinkIntermediate, sanitizeObjectName, shuffleAndTruncate, + shouldTakeScreenshot, } from '../../src/link_utils'; import { setDefaultOptions } from '../../src/options_func'; +// External Dependencies +import { Bucket, Storage } from '@google-cloud/storage'; +import { StorageParameters } from '../../src/storage_func'; +import { TEST_BUCKET_NAME } from './storage_func.spec'; + describe('GCM Synthetics Broken Links Utilies', async () => { const status_value_200: ResponseStatusCode = { status_value: 200 }; const status_value_404: ResponseStatusCode = { status_value: 404 }; @@ -56,6 +65,16 @@ describe('GCM Synthetics Broken Links Utilies', async () => { const default_errors: BaseError[] = [ { error_type: 'fake-error-type', error_message: 'fake-error-message' }, ]; + const bucketStub: sinon.SinonStubbedInstance = + sinon.createStubInstance(Bucket); + bucketStub.name = TEST_BUCKET_NAME; + const storageParams = { + storageClient: {} as Storage, + bucket: bucketStub, + checkId: 'uptime123', + executionId: 'exec456', + screenshotNumber: 1, + }; it('checkStatusPassing returns correctly when passed a number as ResponseStatusCode', () => { // expecting success @@ -129,6 +148,7 @@ describe('GCM Synthetics Broken Links Utilies', async () => { runtime_metadata, options, all_links, + storageParams, default_errors ); @@ -147,7 +167,8 @@ describe('GCM Synthetics Broken Links Utilies', async () => { options: options, origin_link_result: origin_link, followed_link_results: followed_links, - execution_data_storage_path: '', + execution_data_storage_path: + 'gs://gcm-test-project-id-synthetics-test-region/uptime123/exec456', errors: default_errors, }); @@ -214,31 +235,124 @@ describe('GCM Synthetics Broken Links Utilies', async () => { describe('sanitizeObjectName', () => { it('should remove invalid characters', () => { - const input = "test/\@#$%^&*()/_+\-=[]{};':\"\|,.<>/?\r\n\t"; - const expectedOutput = "test_@_$%^&_()__+-=__{};'__\_,.______"; + const input = 'test/@#$%^&*()/_+-=[]{};\':"|,.<>/?\r\n\t'; + const expectedOutput = "test_@_$%^&_()__+-=__{};'___,.______"; expect(sanitizeObjectName(input)).to.equal(expectedOutput); }); it('should replace the forbidden prefix', () => { - const input = ".well-known/acme-challenge/test"; - const expectedOutput = "_test"; + const input = '.well-known/acme-challenge/test'; + const expectedOutput = '_test'; expect(sanitizeObjectName(input)).to.equal(expectedOutput); }); it('should handle standalone "." and ".."', () => { - expect(sanitizeObjectName(".")).to.equal("_"); - expect(sanitizeObjectName("..")).to.equal("_"); + expect(sanitizeObjectName('.')).to.equal('_'); + expect(sanitizeObjectName('..')).to.equal('_'); }); it('should handle null and undefined', () => { - expect(sanitizeObjectName(null)).to.equal("_"); - expect(sanitizeObjectName(undefined)).to.equal("_"); - }) + expect(sanitizeObjectName(null)).to.equal('_'); + expect(sanitizeObjectName(undefined)).to.equal('_'); + }); it('should trim leading and trailing whitespace', () => { - const input = " test name "; - const expectedOutput = "test_name"; + const input = ' test name '; + const expectedOutput = 'test_name'; expect(sanitizeObjectName(input)).to.equal(expectedOutput); }); }); + + describe('shouldTakeScreenshot', () => { + describe('screenshot_condition: ALL', () => { + const options = { + screenshot_options: { capture_condition: ApiCaptureCondition.ALL }, + } as BrokenLinksResultV1_BrokenLinkCheckerOptions; + + it('should return true when passed is true', () => { + const result = shouldTakeScreenshot(options, true); + expect(result).to.be.true; + }); + + it('should return true when passed is false', () => { + const result = shouldTakeScreenshot(options, false); + expect(result).to.be.true; + }); + }); + + describe('screenshot_condition: FAILING', () => { + const options = { + screenshot_options: { + capture_condition: ApiCaptureCondition.FAILING, + }, + } as BrokenLinksResultV1_BrokenLinkCheckerOptions; + + it('should return true if passed is false', () => { + const result = shouldTakeScreenshot(options, false); + expect(result).to.be.true; + }); + + it('should return false if passed is true', () => { + const result = shouldTakeScreenshot(options, true); + expect(result).to.be.false; + }); + }); + + describe('screenshot_condition: NONE', () => { + const options = { + screenshot_options: { capture_condition: ApiCaptureCondition.NONE }, + } as BrokenLinksResultV1_BrokenLinkCheckerOptions; + + it('should retrun true if passed is false', () => { + const result = shouldTakeScreenshot(options, false); + expect(result).to.be.false; + }); + + it('should retrun true if passed is true', () => { + const result = shouldTakeScreenshot(options, true); + expect(result).to.be.false; + }); + }); + }); + + describe('getStoragePathToExecution()', () => { + it('returns write_destination when given folder in storage location', () => { + const options = { + screenshot_options: { storage_location: 'bucket/folder1/folder2' }, + } as BrokenLinksResultV1_BrokenLinkCheckerOptions; + + const writeDestination = getStoragePathToExecution( + storageParams, + options + ); + expect(writeDestination).to.equal('folder1/folder2/uptime123/exec456'); + }); + + it('should handle no folder and just bucket in storage_location', () => { + const options = { + screenshot_options: { storage_location: 'bucket' }, + } as BrokenLinksResultV1_BrokenLinkCheckerOptions; + + const result = getStoragePathToExecution(storageParams, options); + expect(result).to.equal('uptime123/exec456'); + }); + + it('should handle error by returning empty string', () => { + const options = { + screenshot_options: { storage_location: 'bucket' }, + } as BrokenLinksResultV1_BrokenLinkCheckerOptions; + + const storageParamsUndefiniedCheckId = { + storageClient: {} as Storage, + bucket: {} as Bucket, + executionId: 'exec456', + } as StorageParameters; + + const result = getStoragePathToExecution( + storageParamsUndefiniedCheckId, + options + ); + expect(result).to.equal(''); + }); + }); }); diff --git a/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts index b023a50c..c7518278 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts @@ -23,6 +23,7 @@ import sinon from 'sinon'; import { BaseError, BrokenLinksResultV1_SyntheticLinkResult, + BrokenLinksResultV1_SyntheticLinkResult_ScreenshotOutput as ApiScreenshotOutput, ResponseStatusCode, ResponseStatusCode_StatusClass, } from '@google-cloud/synthetics-sdk-api'; @@ -34,34 +35,62 @@ import { retrieveLinksFromPage, } from '../../src/navigation_func'; import { setDefaultOptions } from '../../src/options_func'; +import * as storageFunc from '../../src/storage_func'; + +// External Dependencies +import { Bucket, Storage } from '@google-cloud/storage'; +const proxyquire = require('proxyquire'); // External Dependencies import puppeteer, { Browser, HTTPResponse, Page } from 'puppeteer'; describe('GCM Synthetics Broken Links Navigation Functionality', async () => { - // constants + // Constants const link: LinkIntermediate = { target_uri: 'https://example.com', anchor_text: '', html_element: '', }; - const input_options: BrokenLinkCheckerOptions = { + const defaultOptions: BrokenLinkCheckerOptions = { origin_uri: 'http://origin.com', max_retries: 2, link_timeout_millis: 5000, }; - const options = setDefaultOptions(input_options); + const options = setDefaultOptions(defaultOptions); const response2xx: Partial = { status: () => 200 }; const response4xx: Partial = { status: () => 404 }; - const status_class_2xx: ResponseStatusCode = { + const statusClass2xx: ResponseStatusCode = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_2XX, }; - const status_class_4xx: ResponseStatusCode = { + const statusClass4xx: ResponseStatusCode = { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_4XX, }; + const emptyScreenshotOutput: ApiScreenshotOutput = { + screenshot_file: '', + screenshot_error: {} as BaseError, + }; + const successfulScreenshotOuput: ApiScreenshotOutput = { + screenshot_file: 'bucket/folder/file.png', + screenshot_error: {} as BaseError, + }; - // Puppeteer constants + const storageParams: storageFunc.StorageParameters = { + storageClient: sinon.createStubInstance(Storage), + bucket: sinon.createStubInstance(Bucket), + checkId: '', + executionId: '', + screenshotNumber: 1, + }; + + const navigStorageUploadSuccMocked = proxyquire('../../src/navigation_func', { + './storage_func': { + ...storageFunc, + uploadScreenshotToGCS: () => successfulScreenshotOuput, + }, + }); + + // Puppeteer Setup let browser: Browser; let page: Page; before(async () => { @@ -71,21 +100,35 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { }); beforeEach(async () => { - // Create a new page for each test page = await browser.newPage(); page.setCacheEnabled(false); + + sinon + .stub(page, 'screenshot') + .resolves(Buffer.from('encoded-image-data', 'utf-8')); + }); + + afterEach(() => { + sinon.restore(); }); after(async () => { - // Close the browser after all tests browser && (await browser.close()); }); describe('navigate', async () => { - it('should pass after retries', async () => { - const pageStub = sinon.createStubInstance(Page); + let pageStub: sinon.SinonStubbedInstance; + + beforeEach(() => { + pageStub = sinon.createStubInstance(Page); pageStub.url.returns('fake-current-uri'); + }); + + afterEach(() => { + sinon.restore(); + }); + it('should pass after retries', async () => { // Configure the stub to simulate a failed navigation on the first call // and a successful one on the second pageStub.goto @@ -102,9 +145,6 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { }); it('should fail after maximum retries', async () => { - const pageStub = sinon.createStubInstance(Page); - pageStub.url.returns('fake-current-uri'); - // Configure the stub to simulate a failed navigation on three // consecutive calls pageStub.goto @@ -125,11 +165,11 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { describe('checkLink', async () => { it('passes when navigating to real uri', async () => { - const synLinkResult = await checkLink(page, link, options); + const synLinkResult = await checkLink(page, link, options, storageParams); const expectations: BrokenLinksResultV1_SyntheticLinkResult = { link_passed: true, - expected_status_code: status_class_2xx, + expected_status_code: statusClass2xx, source_uri: 'http://origin.com', target_uri: 'https://example.com', html_element: '', @@ -140,10 +180,7 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output: { - screenshot_file: '', - screenshot_error: {} as BaseError, - }, + screenshot_output: emptyScreenshotOutput, }; expect(synLinkResult) @@ -165,11 +202,16 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { anchor_text: '', html_element: '', }; - const synLinkResult = await checkLink(page, json_link, options); + const synLinkResult = await checkLink( + page, + json_link, + options, + storageParams + ); const expectations: BrokenLinksResultV1_SyntheticLinkResult = { link_passed: true, - expected_status_code: status_class_2xx, + expected_status_code: statusClass2xx, source_uri: 'http://origin.com', target_uri: `file:${path.join( __dirname, @@ -183,10 +225,7 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output: { - screenshot_file: '', - screenshot_error: {} as BaseError, - }, + screenshot_output: emptyScreenshotOutput, }; expect(synLinkResult) @@ -210,15 +249,16 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { html_element: 'img', }; - const synLinkResult = await checkLink( + const synLinkResult = await navigStorageUploadSuccMocked.checkLink( page, timeout_link, - options_with_timeout + options_with_timeout, + storageParams ); const expectations: BrokenLinksResultV1_SyntheticLinkResult = { link_passed: false, - expected_status_code: status_class_2xx, + expected_status_code: statusClass2xx, source_uri: 'http://origin.com', target_uri: target_uri, html_element: 'img', @@ -229,10 +269,7 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output: { - screenshot_file: '', - screenshot_error: {} as BaseError, - }, + screenshot_output: successfulScreenshotOuput, }; expect(synLinkResult) @@ -241,14 +278,14 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { }).timeout(5000); it('returns error when the actual response code does not match the expected', async () => { - // add expected 404 status to options of broken link checker - const optionsExp404 = Object.assign({}, options); const per_link_expected_404 = { expected_status_code: { status_class: ResponseStatusCode_StatusClass.STATUS_CLASS_4XX, }, link_timeout_millis: options.link_timeout_millis, }; + + const optionsExp404 = Object.assign({}, options); optionsExp404.per_link_options['https://expecting404.com'] = per_link_expected_404; @@ -268,15 +305,16 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { .onThirdCall() .resolves(response2xx as HTTPResponse); - const synLinkResult = await checkLink( + const synLinkResult = await navigStorageUploadSuccMocked.checkLink( pageStub, timeoutLink, - optionsExp404 + optionsExp404, + storageParams ); const expectations: BrokenLinksResultV1_SyntheticLinkResult = { link_passed: false, - expected_status_code: status_class_4xx, + expected_status_code: statusClass4xx, source_uri: 'http://origin.com', target_uri: 'https://expecting404.com', html_element: 'a', @@ -288,10 +326,7 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output: { - screenshot_file: '', - screenshot_error: {} as BaseError, - }, + screenshot_output: successfulScreenshotOuput, }; expect(synLinkResult) @@ -305,13 +340,11 @@ describe('retrieveLinksFromPage', async () => { // Puppeteer constants let browser: Browser; let page: Page; - let pageuriStub: sinon.SinonStub<[], string>; before(async () => { browser = await puppeteer.launch({ headless: 'new' }); }); beforeEach(async () => { - // Create a new page for each test page = await browser.newPage(); await page.goto( `file:${path.join( @@ -320,11 +353,10 @@ describe('retrieveLinksFromPage', async () => { )}` ); // Mock page.uri() to return a custom uri - pageuriStub = sinon.stub(page, 'url').returns('https://mocked.com'); + sinon.stub(page, 'url').returns('https://mocked.com'); }); after(async () => { - // Close the browser after all tests browser && (await browser.close()); }); @@ -378,7 +410,7 @@ describe('retrieveLinksFromPage', async () => { // note: does not return `mailto:...` link expect(results).to.deep.equal(expectations); - }); + }).timeout(5000); it('handles complicated query_selector_all', async () => { const query_selector_all = 'img[href], a[src]'; diff --git a/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts index b7e583ad..9a29019a 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/storage_func.spec.ts @@ -24,8 +24,6 @@ import { } from '@google-cloud/synthetics-sdk-api'; import { createStorageClientIfStorageSelected, - getFolderNameFromStorageLocation, - getOrCreateStorageBucket, StorageParameters, uploadScreenshotToGCS, } from '../../src/storage_func'; @@ -33,9 +31,10 @@ import { // External Dependencies import { Bucket, File, Storage } from '@google-cloud/storage'; const proxyquire = require('proxyquire'); +import { Page } from 'puppeteer'; // global test vars -const TEST_BUCKET_NAME = 'gcm-test-project-id-synthetics-test-region'; +export const TEST_BUCKET_NAME = 'gcm-test-project-id-synthetics-test-region'; describe('GCM Synthetics Broken Links storage_func suite testing', () => { let storageClientStub: sinon.SinonStubbedInstance; @@ -45,7 +44,6 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { '@google-cloud/synthetics-sdk-api': { getExecutionRegion: () => 'test-region', resolveProjectId: () => 'test-project-id', - getOrCreateStorageBucket: () => getOrCreateStorageBucket, }, }); @@ -163,13 +161,14 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { describe('uploadScreenshotToGCS', () => { let storageClientStub: sinon.SinonStubbedInstance; let bucketStub: sinon.SinonStubbedInstance; - - const screenshotData = 'encoded-image-data'; - const filename = 'test-screenshot.png'; + let pageStub: sinon.SinonStubbedInstance; beforeEach(() => { storageClientStub = sinon.createStubInstance(Storage); bucketStub = sinon.createStubInstance(Bucket); + pageStub = sinon.createStubInstance(Page); + pageStub.url.resolves('https://fake-url'); + storageClientStub.bucket.returns(bucketStub); }); @@ -177,82 +176,97 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { sinon.restore(); }); - it('should upload the screenshot and return the write_destination', async () => { - const storageParams = { - storageClient: storageClientStub, - bucket: bucketStub, - uptimeId: 'uptime123', - executionId: 'exec456', - }; - const options = { - screenshot_options: { storage_location: 'bucket/folder1/folder2' }, - } as BrokenLinksResultV1_BrokenLinkCheckerOptions; - const expectedWriteDestination = - 'folder1/folder2/uptime123/exec456/test-screenshot.png'; - - const successPartialFileMock: Partial = { - save: sinon.stub().resolves(), - }; - bucketStub.file.returns(successPartialFileMock as File); - - const result = await uploadScreenshotToGCS( - screenshotData, - filename, - storageParams, - options - ); + describe('Valid Storage Configuration', () => { + it('should upload the screenshots and return updated write_destination', async () => { + const storageParams = { + storageClient: storageClientStub, + bucket: bucketStub, + checkId: 'uptime123', + executionId: 'exec456', + screenshotNumber: 1, + }; + const options = { + screenshot_options: { storage_location: 'bucket/folder1/folder2' }, + } as BrokenLinksResultV1_BrokenLinkCheckerOptions; - expect(result.screenshot_file).to.equal(expectedWriteDestination); - expect(result.screenshot_error).to.deep.equal({}); - }); + const successPartialFileMock: Partial = { + save: sinon.stub().resolves(), + }; + bucketStub.file.returns(successPartialFileMock as File); - it('should handle GCS upload errors', async () => { - const storageParams: StorageParameters = { - storageClient: storageClientStub, - bucket: bucketStub, - uptimeId: '', - executionId: '', - }; - const options = { - screenshot_options: {}, - } as BrokenLinksResultV1_BrokenLinkCheckerOptions; - - const gcsError = new Error('Simulated GCS upload error'); - const failingPartialFileMock: Partial = { - save: sinon.stub().throws(gcsError), - }; - bucketStub.file.returns(failingPartialFileMock as File); - - const result = await uploadScreenshotToGCS( - screenshotData, - filename, - storageParams, - options - ); + const result = await uploadScreenshotToGCS( + pageStub, + storageParams, + options + ); + + expect(result.screenshot_file).to.equal('screenshot_1.png'); + expect(result.screenshot_error).to.deep.equal({}); + + const result2 = await uploadScreenshotToGCS( + pageStub, + storageParams, + options + ); + + expect(result2.screenshot_file).to.equal('screenshot_2.png'); + expect(result2.screenshot_error).to.deep.equal({}); + }); + + it('should handle GCS upload errors', async () => { + const storageParams: StorageParameters = { + storageClient: storageClientStub, + bucket: bucketStub, + checkId: '', + executionId: '', + screenshotNumber: 1, + }; + const options = { + screenshot_options: {}, + } as BrokenLinksResultV1_BrokenLinkCheckerOptions; + + const gcsError = new Error('Simulated GCS upload error'); + const failingPartialFileMock: Partial = { + save: sinon.stub().throws(gcsError), + }; + bucketStub.file.returns(failingPartialFileMock as File); + + const result = await uploadScreenshotToGCS( + pageStub, + storageParams, + options + ); - expect(result.screenshot_file).to.equal(''); - expect(result.screenshot_error).to.deep.equal({ - error_type: 'StorageFileUploadError', - error_message: `Failed to upload screenshot for ${filename}. Please reference server logs for further information.`, + expect(result.screenshot_file).to.equal(''); + expect(result.screenshot_error).to.deep.equal({ + error_type: 'ScreenshotFileUploadError', + error_message: + 'Failed to take and/or upload screenshot for https://fake-url. Please reference server logs for further information.', + }); }); }); describe('Invalid Storage Configuration', () => { - const emptyScreenshotData = ''; - const emptyFilename = ''; const emptyOptions = {} as BrokenLinksResultV1_BrokenLinkCheckerOptions; + + beforeEach(() => { + pageStub.screenshot.resolves( + Buffer.from('encoded-image-data', 'utf-8') + ); + }); + it('should return an empty result if storageClient is null', async () => { // Missing storageClient const storageParams = { storageClient: null, bucket: bucketStub, - uptimeId: '', + checkId: '', executionId: '', + screenshotNumber: 1, }; const result = await uploadScreenshotToGCS( - emptyScreenshotData, - emptyFilename, + pageStub, storageParams, emptyOptions ); @@ -268,13 +282,13 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { const storageParams = { storageClient: storageClientStub, bucket: null, - uptimeId: '', + checkId: '', executionId: '', - }; + screenshotNumber: 1, + } as StorageParameters; const result = await uploadScreenshotToGCS( - emptyScreenshotData, - emptyFilename, + pageStub, storageParams, emptyOptions ); @@ -286,30 +300,4 @@ describe('GCM Synthetics Broken Links storage_func suite testing', () => { }); }); }); - - describe('getFolderNameFromStorageLocation', () => { - it('should extract folder name when storage location has a slash', () => { - const storageLocation = 'some-bucket/folder1/folder2'; - const expectedFolderName = 'folder1/folder2'; - - const result = getFolderNameFromStorageLocation(storageLocation); - expect(result).to.equal(expectedFolderName); - }); - - it('should return an empty string if storage location has no slash', () => { - const storageLocation = 'my-bucket'; - const expectedFolderName = ''; - - const result = getFolderNameFromStorageLocation(storageLocation); - expect(result).to.equal(expectedFolderName); - }); - - it('should return an empty string if given an empty string', () => { - const storageLocation = ''; - const expectedFolderName = ''; - - const result = getFolderNameFromStorageLocation(storageLocation); - expect(result).to.equal(expectedFolderName); - }); - }); }); From 2b3d94302f25cc0e01393093e5234ae1f440c13c Mon Sep 17 00:00:00 2001 From: Adam Weidman <65992621+adamfweidman@users.noreply.github.com> Date: Mon, 15 Apr 2024 10:29:27 -0400 Subject: [PATCH 8/9] change default (#118) --- package-lock.json | 3 +++ packages/synthetics-sdk-broken-links/src/options_func.ts | 2 +- .../test/unit/navigation_func.spec.ts | 4 ++-- .../test/unit/options_func.spec.ts | 5 +++++ 4 files changed, 11 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1f224fcb..2bb9e0f8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10947,6 +10947,7 @@ "chai": "^4.3.7", "chai-exclude": "^2.1.0", "express": "^4.18.2", + "node-mocks-http": "^1.13.0", "proxyquire": "^2.1.3", "sinon": "^16.1.1", "supertest": "^6.3.3", @@ -12288,6 +12289,7 @@ "chai": "^4.3.7", "chai-exclude": "^2.1.0", "express": "^4.18.2", + "node-mocks-http": "^1.13.0", "proxyquire": "^2.1.3", "puppeteer": "21.3.6", "sinon": "^16.1.1", @@ -19051,6 +19053,7 @@ "chai": "^4.3.7", "chai-exclude": "^2.1.0", "express": "^4.18.2", + "node-mocks-http": "^1.13.0", "proxyquire": "^2.1.3", "puppeteer": "21.3.6", "sinon": "^16.1.1", diff --git a/packages/synthetics-sdk-broken-links/src/options_func.ts b/packages/synthetics-sdk-broken-links/src/options_func.ts index b8b67f97..017eb2b2 100644 --- a/packages/synthetics-sdk-broken-links/src/options_func.ts +++ b/packages/synthetics-sdk-broken-links/src/options_func.ts @@ -245,7 +245,7 @@ export function setDefaultOptions( per_link_options: {}, total_synthetic_timeout_millis: 60000, screenshot_options: { - capture_condition: ApiCaptureCondition.FAILING, + capture_condition: ApiCaptureCondition.NONE, storage_location: '', }, }; diff --git a/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts index c7518278..2f2a8e8d 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/navigation_func.spec.ts @@ -269,7 +269,7 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output: successfulScreenshotOuput, + screenshot_output: emptyScreenshotOutput, }; expect(synLinkResult) @@ -326,7 +326,7 @@ describe('GCM Synthetics Broken Links Navigation Functionality', async () => { link_start_time: 'NA', link_end_time: 'NA', is_origin: false, - screenshot_output: successfulScreenshotOuput, + screenshot_output: emptyScreenshotOutput, }; expect(synLinkResult) diff --git a/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts b/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts index 9d7d49fe..0b8b0a87 100644 --- a/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts +++ b/packages/synthetics-sdk-broken-links/test/unit/options_func.spec.ts @@ -18,6 +18,7 @@ import { expect } from 'chai'; // Internal Project Files import { BrokenLinksResultV1_BrokenLinkCheckerOptions_LinkOrder, + BrokenLinksResultV1_BrokenLinkCheckerOptions_ScreenshotOptions_CaptureCondition as ApiCaptureCondition, ResponseStatusCode, ResponseStatusCode_StatusClass, } from '@google-cloud/synthetics-sdk-api'; @@ -95,6 +96,10 @@ describe('GCM Synthetics Broken Links options_func suite testing', () => { }, }; expect(options.per_link_options).to.deep.equal(link_options); + + expect(options.screenshot_options?.capture_condition).to.equal( + ApiCaptureCondition.NONE + ); }); describe('validateInputOptions', () => { From 8eb8f420f1c717f42507656b0ab83fd65931fc27 Mon Sep 17 00:00:00 2001 From: Adam Weidman Date: Thu, 18 Apr 2024 15:36:06 -0400 Subject: [PATCH 9/9] update synthetics-sdk-api to point to new npm pkg --- package-lock.json | 23 +++++++++--------- .../google-cloud-synthetics-sdk-api-0.5.1.tgz | Bin 97251 -> 0 bytes .../synthetics-sdk-broken-links/package.json | 2 +- 3 files changed, 13 insertions(+), 12 deletions(-) delete mode 100644 packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz diff --git a/package-lock.json b/package-lock.json index 2bb9e0f8..108a717e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10933,7 +10933,7 @@ "license": "Apache-2.0", "dependencies": { "@google-cloud/storage": "^7.7.0", - "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", + "@google-cloud/synthetics-sdk-api": "^0.6.0", "puppeteer": "21.3.6" }, "devDependencies": { @@ -10958,10 +10958,9 @@ } }, "packages/synthetics-sdk-broken-links/node_modules/@google-cloud/synthetics-sdk-api": { - "version": "0.5.1", - "resolved": "file:packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-kCevsvEiS6DzeRJmcwoY0RvlOm4tvwGxMUGFw0H14ELTUW8QoY6Fj5paLZgSlmC9wNQ5IZZE9g3kNdJnNicm+Q==", - "license": "Apache-2.0", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@google-cloud/synthetics-sdk-api/-/synthetics-sdk-api-0.6.0.tgz", + "integrity": "sha512-dRS3x7NAYUdET6SQ6+scu3eUGUtgH2PAY8Zx+0DDvB7Zo5ymVIP1b0hbAkLLDZzg9wNQFSDAh59A0lEuU3Zpyw==", "dependencies": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", @@ -12279,7 +12278,7 @@ "requires": { "@google-cloud/functions-framework": "^3.1.3", "@google-cloud/storage": "^7.7.0", - "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", + "@google-cloud/synthetics-sdk-api": "^0.6.0", "@types/chai": "^4.3.4", "@types/express": "^4.17.17", "@types/node": "^18.15.10", @@ -12298,8 +12297,9 @@ }, "dependencies": { "@google-cloud/synthetics-sdk-api": { - "version": "file:google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-kCevsvEiS6DzeRJmcwoY0RvlOm4tvwGxMUGFw0H14ELTUW8QoY6Fj5paLZgSlmC9wNQ5IZZE9g3kNdJnNicm+Q==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@google-cloud/synthetics-sdk-api/-/synthetics-sdk-api-0.6.0.tgz", + "integrity": "sha512-dRS3x7NAYUdET6SQ6+scu3eUGUtgH2PAY8Zx+0DDvB7Zo5ymVIP1b0hbAkLLDZzg9wNQFSDAh59A0lEuU3Zpyw==", "requires": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", @@ -19043,7 +19043,7 @@ "requires": { "@google-cloud/functions-framework": "^3.1.3", "@google-cloud/storage": "^7.7.0", - "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", + "@google-cloud/synthetics-sdk-api": "^0.6.0", "@types/chai": "^4.3.4", "@types/express": "^4.17.17", "@types/node": "^18.15.10", @@ -19062,8 +19062,9 @@ }, "dependencies": { "@google-cloud/synthetics-sdk-api": { - "version": "file:google-cloud-synthetics-sdk-api-0.5.1.tgz", - "integrity": "sha512-kCevsvEiS6DzeRJmcwoY0RvlOm4tvwGxMUGFw0H14ELTUW8QoY6Fj5paLZgSlmC9wNQ5IZZE9g3kNdJnNicm+Q==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@google-cloud/synthetics-sdk-api/-/synthetics-sdk-api-0.6.0.tgz", + "integrity": "sha512-dRS3x7NAYUdET6SQ6+scu3eUGUtgH2PAY8Zx+0DDvB7Zo5ymVIP1b0hbAkLLDZzg9wNQFSDAh59A0lEuU3Zpyw==", "requires": { "@google-cloud/opentelemetry-cloud-trace-exporter": "2.1.0", "@opentelemetry/api": "1.6.0", diff --git a/packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz b/packages/synthetics-sdk-broken-links/google-cloud-synthetics-sdk-api-0.5.1.tgz deleted file mode 100644 index 8e9d4a8f5922ab1e489c9ecb18d12b58aaca21c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97251 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

{YZXZ9bU-ENrb^dskkUcf^8iRUDj<{N2 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 diff --git a/packages/synthetics-sdk-broken-links/package.json b/packages/synthetics-sdk-broken-links/package.json index ad7a0512..841b8a35 100644 --- a/packages/synthetics-sdk-broken-links/package.json +++ b/packages/synthetics-sdk-broken-links/package.json @@ -44,7 +44,7 @@ }, "dependencies": { "@google-cloud/storage": "^7.7.0", - "@google-cloud/synthetics-sdk-api": "google-cloud-synthetics-sdk-api-0.5.1.tgz", + "@google-cloud/synthetics-sdk-api": "^0.6.0", "puppeteer": "21.3.6" } }