dev-utils/test-config.js (173 lines of code) (raw):

/** * MIT License * * Copyright (c) 2017-present, Elasticsearch BV * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN * THE SOFTWARE. * */ const DEFAULT_APM_SERVER_URL = 'http://localhost:8200' function getSauceConnectOptions() { return { username: process.env.SAUCE_USERNAME, accessKey: process.env.SAUCE_ACCESS_KEY, logger: console.log, noSslBumpDomains: 'all', tunnelIdentifier: process.env.BUILD_NUMBER, connectRetries: 3 } } function getTestEnvironmentVariables() { return { branch: process.env.BRANCH_NAME, mode: process.env.MODE, sauceLabs: process.env.MODE && process.env.MODE.startsWith('saucelabs'), isCI: process.env.CI, serverUrl: process.env.APM_SERVER_URL || DEFAULT_APM_SERVER_URL, mockBackendUrl: 'http://localhost:8003', stackVersion: process.env.STACK_VERSION || '' } } function getGlobalConfig(packageName = 'rum') { const testEnv = getTestEnvironmentVariables() return { agentConfig: { serverUrl: testEnv.serverUrl, serviceName: `test`, name: `${packageName}` }, testConfig: testEnv, useMocks: false, mockApmServer: false } } /** * Supported lowest and highest versions across major browser platform * * The list below is based purely on the market share distribution. */ function getDefaultBrowsers() { return [ { browserName: 'chrome', browserVersion: '76' }, { browserName: 'chrome', browserVersion: '84' }, { browserName: 'chrome', browserVersion: 'latest' }, { browserName: 'firefox', browserVersion: '60' }, { browserName: 'safari', platformName: 'macOS 10.15', browserVersion: '13' }, { browserName: 'internet explorer', platformName: 'Windows 10', browserVersion: '11' }, { browserName: 'MicrosoftEdge', platformName: 'Windows 10', browserVersion: '17' } ] } /** * It returns the appium configuration compatible with karma-sauce-launcher */ function getAppiumBrowsersForKarma() { return [ { platformName: 'Android', browserName: 'Browser', appiumVersion: '1.20.2', deviceName: 'Android Emulator', platformVersion: '5.1' }, { platformName: 'iOS', browserName: 'safari', appiumVersion: '1.13.0', deviceName: 'iPhone Simulator', deviceOrientation: 'portrait', platformVersion: '12.2' } ] } /** * It returns the appium configuration compatible with @wdio/sauce-service */ function getAppiumBrowsersForWebdriver() { return [ { platformName: 'Android', browserName: 'Browser', 'appium:deviceName': 'Android Emulator', 'appium:platformVersion': '5.1', 'sauce:options': { appiumVersion: '1.20.2' } }, { platformName: 'iOS', browserName: 'Safari', 'appium:deviceName': 'iPad Simulator', 'appium:platformVersion': '12.2', 'sauce:options': { appiumVersion: '1.13.0', deviceOrientation: 'portrait' } } ] } function getBrowserList(pkg = 'default') { let browsers = [] if (pkg === 'default') { browsers = getDefaultBrowsers() } else if (pkg === 'react') { // react router 6 doesn't support IE 11, we get rid of it // https://github.com/remix-run/react-router/issues/8220#issuecomment-961326123 return getDefaultBrowsers().filter( browser => browser.browserName != 'internet explorer' ) } else if (pkg === 'vue') { // Vue 3 dropped support for IE 11 and older browsers, // so we use modern browsers ro run the tests browsers = [ { browserName: 'chrome', browserVersion: 'latest' }, { browserName: 'firefox', // beware that if we update to 99 or more we will need to cope with https://github.com/karma-runner/karma-sauce-launcher/issues/275 browserVersion: '98', platformName: 'Windows 10', 'sauce:options': { geckodriverVersion: '0.30.0' // reason: https://github.com/karma-runner/karma-sauce-launcher/issues/275 } } ] } return browsers } function parseVersion(version) { const parts = version.split('.') return { full: version, major: parts[0], minor: parts[1], patch: parts[2] } } function isVersionInRange(version, min) { let isInRange = true if (version) { let parsedVersion = parseVersion(version) if (min) { let minParsed = parseVersion(min) isInRange = isInRange && parsedVersion.major >= minParsed.major && parsedVersion.minor >= minParsed.minor && parsedVersion.patch >= minParsed.patch } } return isInRange } module.exports = { getSauceConnectOptions, getTestEnvironmentVariables, getGlobalConfig, getBrowserList, getAppiumBrowsersForKarma, getAppiumBrowsersForWebdriver, parseVersion, isVersionInRange, DEFAULT_APM_SERVER_URL }