[Uptime] [Synthetics integration] parse inline script as json before sending it to fleet (#110118)

Co-authored-by: Kibana Machine <42973632+kibanamachine@users.noreply.github.com>
This commit is contained in:
Dominique Clarke 2021-08-30 15:01:51 -04:00 committed by GitHub
parent 4cf722fb48
commit bb9ea8413f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 27 additions and 25 deletions

View file

@ -15,7 +15,7 @@ export const browserFormatters: BrowserFormatMap = {
[ConfigKeys.SOURCE_ZIP_USERNAME]: null,
[ConfigKeys.SOURCE_ZIP_PASSWORD]: null,
[ConfigKeys.SOURCE_ZIP_FOLDER]: null,
[ConfigKeys.SOURCE_INLINE]: null,
[ConfigKeys.SOURCE_INLINE]: (fields) => JSON.stringify(fields[ConfigKeys.SOURCE_INLINE]),
[ConfigKeys.PARAMS]: null,
[ConfigKeys.SCREENSHOTS]: null,
[ConfigKeys.SYNTHETICS_ARGS]: (fields) =>

View file

@ -10,7 +10,7 @@ import {
Normalizer,
commonNormalizers,
getNormalizer,
getJsonToArrayOrObjectNormalizer,
getJsonToJavascriptNormalizer,
} from '../common/normalizers';
import { defaultBrowserSimpleFields, defaultBrowserAdvancedFields } from '../contexts';
@ -26,8 +26,8 @@ export const getBrowserNormalizer = (key: ConfigKeys) => {
return getNormalizer(key, defaultBrowserFields);
};
export const getBrowserJsonToArrayOrObjectNormalizer = (key: ConfigKeys) => {
return getJsonToArrayOrObjectNormalizer(key, defaultBrowserFields);
export const getBrowserJsonToJavascriptNormalizer = (key: ConfigKeys) => {
return getJsonToJavascriptNormalizer(key, defaultBrowserFields);
};
export const browserNormalizers: BrowserNormalizerMap = {
@ -35,9 +35,9 @@ export const browserNormalizers: BrowserNormalizerMap = {
[ConfigKeys.SOURCE_ZIP_USERNAME]: getBrowserNormalizer(ConfigKeys.SOURCE_ZIP_USERNAME),
[ConfigKeys.SOURCE_ZIP_PASSWORD]: getBrowserNormalizer(ConfigKeys.SOURCE_ZIP_PASSWORD),
[ConfigKeys.SOURCE_ZIP_FOLDER]: getBrowserNormalizer(ConfigKeys.SOURCE_ZIP_FOLDER),
[ConfigKeys.SOURCE_INLINE]: getBrowserNormalizer(ConfigKeys.SOURCE_INLINE),
[ConfigKeys.SOURCE_INLINE]: getBrowserJsonToJavascriptNormalizer(ConfigKeys.SOURCE_INLINE),
[ConfigKeys.PARAMS]: getBrowserNormalizer(ConfigKeys.PARAMS),
[ConfigKeys.SCREENSHOTS]: getBrowserNormalizer(ConfigKeys.SCREENSHOTS),
[ConfigKeys.SYNTHETICS_ARGS]: getBrowserJsonToArrayOrObjectNormalizer(ConfigKeys.SYNTHETICS_ARGS),
[ConfigKeys.SYNTHETICS_ARGS]: getBrowserJsonToJavascriptNormalizer(ConfigKeys.SYNTHETICS_ARGS),
...commonNormalizers,
};

View file

@ -5,7 +5,7 @@
* 2.0.
*/
import { cronToSecondsNormalizer, jsonToArrayOrObjectNormalizer } from './normalizers';
import { cronToSecondsNormalizer, jsonToJavascriptNormalizer } from './normalizers';
describe('normalizers', () => {
describe('cronToSecondsNormalizer', () => {
@ -14,15 +14,15 @@ describe('normalizers', () => {
});
});
describe('jsonToArrayOrObjectNormalizer', () => {
describe('jsonToJavascriptNormalizer', () => {
it('takes a json object string and returns an object', () => {
expect(jsonToArrayOrObjectNormalizer('{\n "key": "value"\n}')).toEqual({
expect(jsonToJavascriptNormalizer('{\n "key": "value"\n}')).toEqual({
key: 'value',
});
});
it('takes a json array string and returns an array', () => {
expect(jsonToArrayOrObjectNormalizer('["tag1","tag2"]')).toEqual(['tag1', 'tag2']);
expect(jsonToJavascriptNormalizer('["tag1","tag2"]')).toEqual(['tag1', 'tag2']);
});
});
});

View file

@ -23,19 +23,19 @@ export type CommonNormalizerMap = Record<keyof ICommonFields | ConfigKeys.NAME,
export const cronToSecondsNormalizer = (value: string) =>
value ? value.slice(0, value.length - 1) : null;
export const jsonToArrayOrObjectNormalizer = (value: string) => (value ? JSON.parse(value) : null);
export const jsonToJavascriptNormalizer = (value: string) => (value ? JSON.parse(value) : null);
export function getNormalizer<Fields>(key: string, defaultValues: Fields): Normalizer {
return (fields: NewPackagePolicyInput['vars']) =>
fields?.[key]?.value ?? defaultValues[key as keyof Fields];
}
export function getJsonToArrayOrObjectNormalizer<Fields>(
export function getJsonToJavascriptNormalizer<Fields>(
key: string,
defaultValues: Fields
): Normalizer {
return (fields: NewPackagePolicyInput['vars']) =>
jsonToArrayOrObjectNormalizer(fields?.[key]?.value) ?? defaultValues[key as keyof Fields];
jsonToJavascriptNormalizer(fields?.[key]?.value) ?? defaultValues[key as keyof Fields];
}
export function getCronNormalizer<Fields>(key: string, defaultValues: Fields): Normalizer {
@ -47,8 +47,8 @@ export const getCommonNormalizer = (key: ConfigKeys) => {
return getNormalizer(key, commonDefaultValues);
};
export const getCommonJsonToArrayOrObjectNormalizer = (key: ConfigKeys) => {
return getJsonToArrayOrObjectNormalizer(key, commonDefaultValues);
export const getCommonjsonToJavascriptNormalizer = (key: ConfigKeys) => {
return getJsonToJavascriptNormalizer(key, commonDefaultValues);
};
export const getCommonCronToSecondsNormalizer = (key: ConfigKeys) => {
@ -74,6 +74,6 @@ export const commonNormalizers: CommonNormalizerMap = {
}
},
[ConfigKeys.APM_SERVICE_NAME]: getCommonNormalizer(ConfigKeys.APM_SERVICE_NAME),
[ConfigKeys.TAGS]: getCommonJsonToArrayOrObjectNormalizer(ConfigKeys.TAGS),
[ConfigKeys.TAGS]: getCommonjsonToJavascriptNormalizer(ConfigKeys.TAGS),
[ConfigKeys.TIMEOUT]: getCommonCronToSecondsNormalizer(ConfigKeys.TIMEOUT),
};

View file

@ -10,7 +10,7 @@ import {
Normalizer,
commonNormalizers,
getNormalizer,
getJsonToArrayOrObjectNormalizer,
getJsonToJavascriptNormalizer,
} from '../common/normalizers';
import { tlsNormalizers } from '../tls/normalizers';
import { defaultHTTPSimpleFields, defaultHTTPAdvancedFields } from '../contexts';
@ -26,8 +26,8 @@ export const getHTTPNormalizer = (key: ConfigKeys) => {
return getNormalizer(key, defaultHTTPValues);
};
export const getHTTPJsonToArrayOrObjectNormalizer = (key: ConfigKeys) => {
return getJsonToArrayOrObjectNormalizer(key, defaultHTTPValues);
export const getHTTPJsonToJavascriptNormalizer = (key: ConfigKeys) => {
return getJsonToJavascriptNormalizer(key, defaultHTTPValues);
};
export const httpNormalizers: HTTPNormalizerMap = {
@ -36,18 +36,18 @@ export const httpNormalizers: HTTPNormalizerMap = {
[ConfigKeys.USERNAME]: getHTTPNormalizer(ConfigKeys.USERNAME),
[ConfigKeys.PASSWORD]: getHTTPNormalizer(ConfigKeys.PASSWORD),
[ConfigKeys.PROXY_URL]: getHTTPNormalizer(ConfigKeys.PROXY_URL),
[ConfigKeys.RESPONSE_BODY_CHECK_NEGATIVE]: getHTTPJsonToArrayOrObjectNormalizer(
[ConfigKeys.RESPONSE_BODY_CHECK_NEGATIVE]: getHTTPJsonToJavascriptNormalizer(
ConfigKeys.RESPONSE_BODY_CHECK_NEGATIVE
),
[ConfigKeys.RESPONSE_BODY_CHECK_POSITIVE]: getHTTPJsonToArrayOrObjectNormalizer(
[ConfigKeys.RESPONSE_BODY_CHECK_POSITIVE]: getHTTPJsonToJavascriptNormalizer(
ConfigKeys.RESPONSE_BODY_CHECK_POSITIVE
),
[ConfigKeys.RESPONSE_BODY_INDEX]: getHTTPNormalizer(ConfigKeys.RESPONSE_BODY_INDEX),
[ConfigKeys.RESPONSE_HEADERS_CHECK]: getHTTPJsonToArrayOrObjectNormalizer(
[ConfigKeys.RESPONSE_HEADERS_CHECK]: getHTTPJsonToJavascriptNormalizer(
ConfigKeys.RESPONSE_HEADERS_CHECK
),
[ConfigKeys.RESPONSE_HEADERS_INDEX]: getHTTPNormalizer(ConfigKeys.RESPONSE_HEADERS_INDEX),
[ConfigKeys.RESPONSE_STATUS_CHECK]: getHTTPJsonToArrayOrObjectNormalizer(
[ConfigKeys.RESPONSE_STATUS_CHECK]: getHTTPJsonToJavascriptNormalizer(
ConfigKeys.RESPONSE_STATUS_CHECK
),
[ConfigKeys.REQUEST_BODY_CHECK]: (fields) => {
@ -76,7 +76,7 @@ export const httpNormalizers: HTTPNormalizerMap = {
return defaultHTTPAdvancedFields[ConfigKeys.REQUEST_BODY_CHECK];
}
},
[ConfigKeys.REQUEST_HEADERS_CHECK]: getHTTPJsonToArrayOrObjectNormalizer(
[ConfigKeys.REQUEST_HEADERS_CHECK]: getHTTPJsonToJavascriptNormalizer(
ConfigKeys.REQUEST_HEADERS_CHECK
),
[ConfigKeys.REQUEST_METHOD_CHECK]: getHTTPNormalizer(ConfigKeys.REQUEST_METHOD_CHECK),

View file

@ -655,7 +655,9 @@ describe('useBarChartsHooks', () => {
config[ConfigKeys.SOURCE_ZIP_PASSWORD]
);
expect(vars?.[ConfigKeys.SOURCE_ZIP_URL].value).toEqual(config[ConfigKeys.SOURCE_ZIP_URL]);
expect(vars?.[ConfigKeys.SOURCE_INLINE].value).toEqual(config[ConfigKeys.SOURCE_INLINE]);
expect(vars?.[ConfigKeys.SOURCE_INLINE].value).toEqual(
JSON.stringify(config[ConfigKeys.SOURCE_INLINE])
);
expect(vars?.[ConfigKeys.SOURCE_ZIP_PASSWORD].value).toEqual(
config[ConfigKeys.SOURCE_ZIP_PASSWORD]
);