This is an automated email from the ASF dual-hosted git repository.
erisu pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cordova-paramedic.git
The following commit(s) were added to refs/heads/master by this push:
new 62a8466 feat!: remove sauce labs & related logic (#273)
62a8466 is described below
commit 62a8466c4fb95ab0d8d5933879f956db45b5fa96
Author: エリス <[email protected]>
AuthorDate: Thu Dec 4 20:14:26 2025 +0900
feat!: remove sauce labs & related logic (#273)
---
README.md | 153 +++-------
conf/pr/android-10.0.config.json | 9 -
conf/pr/android-5.1.config.json | 8 -
conf/pr/android-6.0.config.json | 8 -
conf/pr/android-7.0.config.json | 9 -
conf/pr/android-7.1.config.json | 9 -
conf/pr/android-8.0.config.json | 9 -
conf/pr/android-8.1.config.json | 9 -
conf/pr/android-9.0.config.json | 9 -
conf/pr/browser-chrome.config.json | 9 -
conf/pr/browser-edge.config.json | 9 -
conf/pr/browser-firefox.config.json | 9 -
conf/pr/browser-safari.config.json | 9 -
conf/pr/ios-11.3.config.json | 9 -
conf/pr/ios-12.0.config.json | 9 -
conf/pr/ios-12.2.config.json | 10 -
conf/pr/windows-10-store.config.json | 9 -
event-cache-plugin/EventCache.js | 94 ------
event-cache-plugin/package.json | 14 -
event-cache-plugin/paramedic.js | 48 ---
event-cache-plugin/plugin.xml | 35 ---
lib/ParamedicApp.js | 22 --
lib/ParamedicConfig.js | 107 -------
lib/ParamedicSauceLabs.js | 569 -----------------------------------
lib/appium/AppiumRunner.js | 30 +-
lib/appium/helpers/wdHelper.js | 58 ++--
lib/paramedic.js | 63 +---
lib/utils/utilities.js | 14 -
main.js | 43 ---
package-lock.json | 188 +-----------
package.json | 13 +-
31 files changed, 90 insertions(+), 1504 deletions(-)
diff --git a/README.md b/README.md
index aa0aedf..9a208c4 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
`cordova-paramedic` is a tool to automate execution of Cordova plugins tests
(via
[`cordova-plugin-test-framework`](https://github.com/apache/cordova-plugin-test-framework)).
-You can use Paramedic to build and run a Cordova app with plugin tests, run
these tests on local and remote emulators on [Sauce
Labs](https://saucelabs.com/), and report the results. It can be used on a
local or Continuous Integration environment.
+You can use Paramedic to build and run a Cordova app with plugin tests, run
these tests on local emulators, and report the results. It can be used on a
local or Continuous Integration environment.
Cordova Paramedic is currently used to automatically run all plugin tests on
CI.
@@ -37,21 +37,37 @@ Cordova Paramedic is currently used to automatically run
all plugin tests on CI.
## Table of Contents
-- [Supported Cordova Platforms](#supported-cordova-platforms)
-- [What does it do?](#what-does-it-do)
-- [Installation](#installation)
-- [Usage](#usage)
- - [Common usages](#common-usages)
-- [Command Line Interface](#command-line-interface)
- - [What to build and test](#what-to-build-and-test)
- - [Emulator/Device to use for tests](#emulatordevice-to-use-for-tests)
- - [Test Result Server](#test-result-server)
- - [Test Configuration](#test-configuration)
- - [Sauce Labs](#sauce-labs)
-- [Configuration file](#configuration-file)
-- [API Interface](#api-interface)
-- [Quirks](#quirks)
- - [Windows](#windows)
+- [Cordova Paramedic (Test Automation)](#cordova-paramedic-test-automation)
+ - [Table of Contents](#table-of-contents)
+ - [Supported Cordova Platforms](#supported-cordova-platforms)
+ - [What does it do?](#what-does-it-do)
+ - [Installation](#installation)
+ - [Usage](#usage)
+ - [Common usages](#common-usages)
+ - [Command Line Interface](#command-line-interface)
+ - [What to build and test](#what-to-build-and-test)
+ - [`--platform` (required)](#--platform-required)
+ - [`--plugin` (required)](#--plugin-required)
+ - [`--verbose` (optional)](#--verbose-optional)
+ - [`--cli` (optional)](#--cli-optional)
+ - [`--justbuild` (optional)](#--justbuild-optional)
+ - [Emulator/Device to use for tests](#emulatordevice-to-use-for-tests)
+ - [`--target` (optional)](#--target-optional)
+ - [Test Result Server](#test-result-server)
+ - [`--useTunnel` (optional)](#--usetunnel-optional)
+ - [`--externalServerUrl` (optional)](#--externalserverurl-optional)
+ - [`--port` (optional)](#--port-optional)
+ - [Test configuration](#test-configuration)
+ - [`--timeout` (optional)](#--timeout-optional)
+ - [`--outputDir` (optional)](#--outputdir-optional)
+ - [`--cleanUpAfterRun` (optional)](#--cleanupafterrun-optional)
+ - [`--logMins` (optional)](#--logmins-optional)
+ - [`--tccDb` (optional)](#--tccdb-optional)
+ - [`--args` (optional)](#--args-optional)
+ - [Configuration file](#configuration-file)
+ - [API Interface](#api-interface)
+ - [Quirks](#quirks)
+ - [Windows](#windows)
<!--<small><i><a href='http://ecotrust-canada.github.io/markdown-toc/'>Table
of contents generated with markdown-toc</a></i></small>-->
@@ -97,62 +113,15 @@ A full Paramedic run will:
1. Time out if "connection takes to long" TODO (failure) <!--
8-479-->
1. Receive and handle "tests are done" (success) and "device
disconnected" (failure) events <!-- 8-485-->
1. (browser) Close the running browser <!-- 6-368 -->
- 1. Run the Appium tests (with sauce = false) <!-- 7-465 -->
</details>
- - <details>
- <summary>... or on Sauce Labs</summary>
-
- 1. Build, package and upload the app to Sauce Labs or (platform =
browser) open the app in a browser
- 1. (platform = browser) Connect to Sauce Connect (Proxy)
- 1. Connect to Web Driver on Sauce Labs
- 1. Navigate Web Driver to correct page (browser) or webview (apps)
- 1. Click "Auto Tests" if a plugin `*wkwebview*` is installed
- 1. Find out if the "permission buster" should be skipped (plugins
splashscreen or inappbrowser, browser): `skipBuster`
- 1. Start polling in the background for events using the Web Driver
(submitting `skipBuster` as well) every 2.5 seconds
- 1. Wait for the tests results
- 1. Time out if "connection takes to long" TODO (failure) <!--
8-479-->
- 1. Receive and handle "tests are done" (success) and "device
disconnected" (failure) events<!-- 8-485-->
- 1. Log success or failure
- 1. Quit Web Driver
- 1. (platform = browser) Close the open browser <!-- 16-1056 -->
- 1. Close connection to Sauce Connect (Proxy)
- 1. Run the Appium tests on Sauce Labs (with sauce = true) <!-- 7-454
-->
- </details>
- - <details>
- <summary>Run the Appium tests <!-- 6-379 --></summary>
-
- 1. Skip if action = build <!-- 6-384 -->
- 1. Skip is Appium should be skipped <!-- 6-388 -->
- 1. Skip if platform != android or ios <!-- 6-392 -->
- 1. !sauce: Error when no targetObj TODO <!-- 6-397 -->
- 1. Create Appium options <!-- 7-403 -->
- 1. Create AppiumRunner with options <!-- 7-426 -->
- 1. Prepare the submitted options <!-- AppiumRunner 151 -->
- 1. Create screenshot directory <!-- AppiumRunner 147 -->
- 1. Find the tests in plugin paths <!-- AppiumRunner 307 -->
- 1. Set globals for the tests <!-- AppiumRunner 334 -->
- 1. Skip if no Appium tests were found <!-- 7-427 -->
- 1. Prepare App in AppiumRunner <!-- 7-433 -->
- 1. Remove server address from app
- 2. Reconfigure app (modify preferences + CSP, add plugin) <!--
367, 375, 385 -- >
- 3. Build app
- 1. (sauce) Package and Upload the App to Sauce Labs <!-- 7-436 -->
- 1. Run tests via AppiumRunner <!-- 7-442 -->
- 1. (!sauce) Start iOS Proxy (`ios_webkit_debug_proxy`) <!--
AppiumRunner 231 -->
- 1. (!sauce) Install (`npm install appium`) <!-- AppiumRunner 231
--> and start Appium server <!-- AppiumRunner 252 -->
- 1. Start to run the Appium tests <!-- AppiumRunner 170 -->
- 1. Handle eventual exceptions, return the result
- </details>
-1. <details>
+2. <details>
<summary>Clean up</summary>
-
- 1. (!sauce) <!-- 2-107 -->
- 1. Handle timeouts of test execution above
- 1. Collect Device Logs
- 1. Uninstall App
- 1. Kill Emulator Process
- 1. (sauce) Display Sauce run details <!-- 2-118 -->
- 1. Clean up Project <!-- 2-121 -->
+ <!-- 2-107 -->
+ 1. Handle timeouts of test execution above
+ 2. Collect Device Logs
+ 3. Uninstall App
+ 4. Kill Emulator Process
+ 5. Clean up Project <!-- 2-121 -->
</details>
## Installation
@@ -221,12 +190,6 @@ cordova-paramedic --platform android --plugin ./
cordova-paramedic --platform android --plugin ./ --target 02e7f7e9215da7f8
--useTunnel
```
-**Test your current plugin on an Android 7.0 emulator on Sauce Labs:**
-
-```shell
-cordova-paramedic --config conf/pr/android-7.0 --plugin ./
-```
-
## Command Line Interface
### What to build and test
@@ -373,44 +336,6 @@ Add additional parameters to the `cordova build` and
`cordova run` commands.
cordova-paramedic --platform ios --plugin cordova-plugin-contacts
--args=--buildFlag='-UseModernBuildSystem=0'
```
-### Sauce Labs
-
-#### `--shouldUseSauce` (optional)
-
-Run tests on [Sauce Labs](https://saucelabs.com/). You'll need to specify
Sauce Labs username and access key using either `--sauceUser` and `--sauceKey`
arguments or `SAUCE_USERNAME` and `SAUCE_ACCESS_KEY` environment variables.
-
-#### `--sauceUser` (optional)
-
-Sauce Labs username. Alternatively set via the `SAUCE_USERNAME` environment
variable.
-
-#### `--sauceKey` (optional)
-
-Sauce Labs access key. Alternatively set via the `SAUCE_ACCESS_KEY`
environment variable.
-
-```shell
-cordova-paramedic --platform ios --plugin cordova-plugin-contacts
--shouldUseSauce --sauceUser ***** --sauceKey ***** --buildName
"paramedic-test-01"
-```
-
-#### `--buildName` (optional)
-
-Build name to show on Sauce Labs dashboard. If omitted, will use "Paramedic
sauce test" and a timestamp.
-
-#### `--sauceDeviceName` (optional)
-
-Name of the Sauce Labs emulator or browser. For example, "iPhone Simulator" or
"firefox". Please refer to the [Sauce Labs platforms
list](https://saucelabs.com/platforms) to see available device names.
-
-#### `--saucePlatformVersion` (optional)
-
-Platform version of the Sauce Labs emulator OS, or version of the browser (if
testing `browser` platform). For example, "9.3" or "54.0". Please refer to the
[Sauce Labs platforms list](https://saucelabs.com/platforms) to see available
platform versions.
-
-#### `--sauceAppiumVersion` (optional)
-
-Appium version to use when running on Sauce Labs. For example, "1.5.3".
-
-```shell
-cordova-paramedic --platform ios --plugin cordova-plugin-contacts
--shouldUseSauce --sauceUser ***** --sauceKey ***** --sauceDeviceName 'iPad
Simulator" --saucePlatformVersion 9.1 --appiumVersion 1.5.2
-```
-
## Configuration file
Configuration file is used when no parameters are passed to
`cordova-paramedic` call or explicitly specified via `--config` parameter:
diff --git a/conf/pr/android-10.0.config.json b/conf/pr/android-10.0.config.json
deleted file mode 100644
index 48105cb..0000000
--- a/conf/pr/android-10.0.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "android@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "saucePlatformVersion": "10.0",
- "sauceDeviceName": "Android GoogleAPI Emulator",
- "verbose": true
-}
diff --git a/conf/pr/android-5.1.config.json b/conf/pr/android-5.1.config.json
deleted file mode 100644
index a5b6ed8..0000000
--- a/conf/pr/android-5.1.config.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "platform": "android@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "saucePlatformVersion": "5.1",
- "verbose": true
-}
diff --git a/conf/pr/android-6.0.config.json b/conf/pr/android-6.0.config.json
deleted file mode 100644
index df3dc7f..0000000
--- a/conf/pr/android-6.0.config.json
+++ /dev/null
@@ -1,8 +0,0 @@
-{
- "platform": "android@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "saucePlatformVersion": "6.0",
- "verbose": true
-}
diff --git a/conf/pr/android-7.0.config.json b/conf/pr/android-7.0.config.json
deleted file mode 100644
index e3c2255..0000000
--- a/conf/pr/android-7.0.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "android@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "saucePlatformVersion": "7.0",
- "sauceDeviceName": "Android GoogleAPI Emulator",
- "verbose": true
-}
diff --git a/conf/pr/android-7.1.config.json b/conf/pr/android-7.1.config.json
deleted file mode 100644
index 9081246..0000000
--- a/conf/pr/android-7.1.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "android@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "saucePlatformVersion": "7.1",
- "sauceDeviceName": "Android GoogleAPI Emulator",
- "verbose": true
-}
diff --git a/conf/pr/android-8.0.config.json b/conf/pr/android-8.0.config.json
deleted file mode 100644
index 97cb711..0000000
--- a/conf/pr/android-8.0.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "android@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "saucePlatformVersion": "8.0",
- "sauceDeviceName": "Android GoogleAPI Emulator",
- "verbose": true
-}
diff --git a/conf/pr/android-8.1.config.json b/conf/pr/android-8.1.config.json
deleted file mode 100644
index ec58a24..0000000
--- a/conf/pr/android-8.1.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "android@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "saucePlatformVersion": "8.1",
- "sauceDeviceName": "Android GoogleAPI Emulator",
- "verbose": true
-}
diff --git a/conf/pr/android-9.0.config.json b/conf/pr/android-9.0.config.json
deleted file mode 100644
index 53fb72e..0000000
--- a/conf/pr/android-9.0.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "android@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "saucePlatformVersion": "9.0",
- "sauceDeviceName": "Android GoogleAPI Emulator",
- "verbose": true
-}
diff --git a/conf/pr/browser-chrome.config.json
b/conf/pr/browser-chrome.config.json
deleted file mode 100644
index 51d8539..0000000
--- a/conf/pr/browser-chrome.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "browser@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "sauceDeviceName": "chrome",
- "saucePlatformVersion": "59.0",
- "verbose": true
-}
diff --git a/conf/pr/browser-edge.config.json b/conf/pr/browser-edge.config.json
deleted file mode 100644
index 7f9284b..0000000
--- a/conf/pr/browser-edge.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "browser@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "sauceDeviceName": "MicrosoftEdge",
- "saucePlatformVersion": "15.15063",
- "verbose": true
-}
diff --git a/conf/pr/browser-firefox.config.json
b/conf/pr/browser-firefox.config.json
deleted file mode 100644
index 5d75458..0000000
--- a/conf/pr/browser-firefox.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "browser@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "sauceDeviceName": "firefox",
- "saucePlatformVersion": "54.0",
- "verbose": true
-}
diff --git a/conf/pr/browser-safari.config.json
b/conf/pr/browser-safari.config.json
deleted file mode 100644
index 1aacf7d..0000000
--- a/conf/pr/browser-safari.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "browser@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "sauceDeviceName": "safari",
- "saucePlatformVersion": "11.1",
- "verbose": true
-}
diff --git a/conf/pr/ios-11.3.config.json b/conf/pr/ios-11.3.config.json
deleted file mode 100644
index b9a1a7e..0000000
--- a/conf/pr/ios-11.3.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "ios@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "saucePlatformVersion": "11.3",
- "sauceAppiumVersion": "1.8.1",
- "verbose": true
-}
diff --git a/conf/pr/ios-12.0.config.json b/conf/pr/ios-12.0.config.json
deleted file mode 100644
index 7362b58..0000000
--- a/conf/pr/ios-12.0.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "ios@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "saucePlatformVersion": "12.0",
- "sauceAppiumVersion": "1.9.1",
- "verbose": true
-}
diff --git a/conf/pr/ios-12.2.config.json b/conf/pr/ios-12.2.config.json
deleted file mode 100644
index 7faa03f..0000000
--- a/conf/pr/ios-12.2.config.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "platform": "ios@latest",
- "action": "run",
- "cleanUpAfterRun": true,
- "shouldUseSauce": true,
- "saucePlatformVersion": "12.2",
- "sauceAppiumVersion": "1.13.0",
- "sauceDeviceName": "iPhone XR Simulator",
- "verbose": true
-}
diff --git a/conf/pr/windows-10-store.config.json
b/conf/pr/windows-10-store.config.json
deleted file mode 100644
index 645b707..0000000
--- a/conf/pr/windows-10-store.config.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "platform": "windows@latest",
- "action": "run",
- "args": " -- --appx=uap --archs=x64",
- "cleanUpAfterRun": true,
- "logMins": 15,
- "shouldUseSauce": true,
- "verbose": true
-}
diff --git a/event-cache-plugin/EventCache.js b/event-cache-plugin/EventCache.js
deleted file mode 100644
index 0309c6f..0000000
--- a/event-cache-plugin/EventCache.js
+++ /dev/null
@@ -1,94 +0,0 @@
-/* global window, cordova, device */
-/**
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you 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
-
- http://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.
-*/
-
-var platformMap = {
- 'ipod touch':'ios',
- 'iphone':'ios'
-};
-
-function JasmineParamedicProxy() {
- this.specExecuted = 0;
- this.specFailed = 0;
- window._jasmineParamedicProxyCache = [];
-}
-
-function cacheEvent (eventName, eventObject) {
- window._jasmineParamedicProxyCache.push({
- eventName: eventName,
- eventObject: eventObject
- });
-}
-
-JasmineParamedicProxy.prototype.jasmineStarted = function (o) {
- cacheEvent('jasmineStarted', o);
-};
-
-JasmineParamedicProxy.prototype.specStarted = function (o) {
- cacheEvent('specStarted', o);
-};
-
-JasmineParamedicProxy.prototype.specDone = function (o) {
- if (o.status !== 'disabled') {
- this.specExecuted++;
- }
- if (o.status === 'failed') {
- this.specFailed++;
- }
-
- cacheEvent('specDone', o);
-};
-
-JasmineParamedicProxy.prototype.suiteStarted = function (o) {
- cacheEvent('suiteStarted', o);
-};
-
-JasmineParamedicProxy.prototype.suiteDone = function (o) {
- cacheEvent('suiteDone', o);
-};
-
-JasmineParamedicProxy.prototype.jasmineDone = function (o) {
- var p = 'Desktop';
- var devmodel = 'none';
- var version = cordova.version;
- if (typeof device !== 'undefined') {
- p = device.platform.toLowerCase();
- devmodel = device.model || device.name;
- version = device.version.toLowerCase();
- }
-
- o = o || {};
-
- // include platform info
- /*o.cordova = {
- platform: (platformMap.hasOwnProperty(p) ? platformMap[p] : p),
- version: version,
- model: devmodel
- };*/
-
- // include common spec results
- o.specResults = {
- specExecuted : this.specExecuted,
- specFailed : this.specFailed
- };
-
- cacheEvent('jasmineDone', o);
-};
-
-module.exports = JasmineParamedicProxy;
diff --git a/event-cache-plugin/package.json b/event-cache-plugin/package.json
deleted file mode 100644
index 7d1d16d..0000000
--- a/event-cache-plugin/package.json
+++ /dev/null
@@ -1,14 +0,0 @@
-{
- "name": "cordova-paramedic-event-cache",
- "version": "0.5.0",
- "license": "Apache 2.0",
- "description": "Cordova Paramedic Event Cache Plugin",
- "main": "paramedic.js",
- "engines" : {
- "node" : ">=0.11.2"
- },
- "repository": {
- "type": "git",
- "url": "git://github.com/apache/cordova-paramedic.git"
- }
-}
diff --git a/event-cache-plugin/paramedic.js b/event-cache-plugin/paramedic.js
deleted file mode 100644
index 1bd297e..0000000
--- a/event-cache-plugin/paramedic.js
+++ /dev/null
@@ -1,48 +0,0 @@
-/* global jasmine, cordova */
-/**
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you 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
-
- http://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.
-*/
-
-/* global window */
-
-// CB-11430 Inject SAUCELABS_ENV global variable to indicate we're running on
Saucelabs
-window.SAUCELABS_ENV = true;
-
-function Paramedic() {
-
-}
-
-Paramedic.prototype.initialize = function() {
- this.injectJasmineReporter();
-};
-
-Paramedic.prototype.injectJasmineReporter = function () {
- var EventCache =
require('cordova-plugin-paramedic-event-cache.EventCache');
- var eventCache = new EventCache();
- var testsModule =
cordova.require("cordova-plugin-test-framework.cdvtests");
- var defineAutoTestsOriginal = testsModule.defineAutoTests;
-
- testsModule.defineAutoTests = function () {
- defineAutoTestsOriginal();
- jasmine.getEnv().addReporter(eventCache);
- };
-};
-
-new Paramedic().initialize();
-
-module.exports = Paramedic;
diff --git a/event-cache-plugin/plugin.xml b/event-cache-plugin/plugin.xml
deleted file mode 100644
index df85801..0000000
--- a/event-cache-plugin/plugin.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you 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
-
- http://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.
--->
-
-<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
- id="cordova-plugin-paramedic-event-cache"
- version="1.0.0-dev">
-
- <name>Paramedic Event Cache</name>
- <description>Cordova Paramedic Event Cache Plugin</description>
- <license>Apache 2.0</license>
-
- <js-module src="EventCache.js" name="EventCache" />
-
- <js-module src="paramedic.js" name="paramedic">
- <runs/>
- </js-module>
-
-</plugin>
diff --git a/lib/ParamedicApp.js b/lib/ParamedicApp.js
index e9cbae7..c57a065 100644
--- a/lib/ParamedicApp.js
+++ b/lib/ParamedicApp.js
@@ -70,10 +70,6 @@ class ParamedicApp {
const ciFrameworkPlugins =
['github:apache/cordova-plugin-test-framework', path.join(__dirname, '..',
'paramedic-plugin')];
- if (this.config.shouldUseSauce() && !this.config.getUseTunnel()) {
- ciFrameworkPlugins.push(path.join(__dirname, '..',
'event-cache-plugin'));
- }
-
if (this.isWindows) {
ciFrameworkPlugins.push(path.join(__dirname, '..',
'debug-mode-plugin'));
}
@@ -116,24 +112,6 @@ class ParamedicApp {
} else {
logger.info('cordova-paramedic: couldn\'t apply the
patch. It must be good news: does cordova-android not hard-code gradle daemon
anymore?');
}
- } else if (this.isBrowser && this.config.shouldUseSauce()) {
- logger.info('cordova-paramedic: I like patching stuff,
so...');
- logger.info('cordova-paramedic: monkey patching browser
platform to disable browser pop-up.');
- let cordovaRunFile = path.join(this.tempFolder.name,
'platforms', 'browser', 'cordova', 'run');
- // we need to supply some replacement string so this
method can properly return a result
- if (appPatcher.monkeyPatch(cordovaRunFile, /return
cordovaServe\.launchBrowser\(.*\);/, '// no pop-up please')) {
- logger.info('cordova-paramedic: success!');
- this.runner.browserPatched = true;
- } else {
- cordovaRunFile = path.join(this.tempFolder.name,
'platforms', 'browser', 'cordova', 'lib', 'run.js');
- if (appPatcher.monkeyPatch(cordovaRunFile, /return
server\.launchBrowser\(\{'target': args\.target, 'url': projectUrl\}\);/, '//
no pop-up please')) {
- logger.info('cordova-paramedic: success!');
- this.runner.browserPatched = true;
- } else {
- logger.info('cordova-paramedic: couldn\'t apply
the patch. Not a big deal, though: things should work anyway.');
- this.runner.browserPatched = false;
- }
- }
}
});
}
diff --git a/lib/ParamedicConfig.js b/lib/ParamedicConfig.js
index 474bed8..dee6a16 100644
--- a/lib/ParamedicConfig.js
+++ b/lib/ParamedicConfig.js
@@ -20,41 +20,13 @@
const DEFAULT_START_PORT = 7008;
const DEFAULT_END_PORT = 7208;
const DEFAULT_TIMEOUT = 60 * 60 * 1000; // 60 minutes in msec - this will
become a param
-const DEFAULT_SAUCE_DEVICE_NAME_ANDROID = 'Android GoogleAPI Emulator';
-const DEFAULT_SAUCE_PLATFORM_VERSION_ANDROID = '8.0';
-const DEFAULT_SAUCE_DEVICE_NAME_IOS = 'iPhone Simulator';
-const DEFAULT_SAUCE_PLATFORM_VERSION_IOS = '9.3';
-const DEFAULT_SAUCE_APPIUM_VERSION = '1.9.1';
-const DEFAULT_BUILD_NAME = 'Paramedic sauce test';
const DEFAULT_CLI = 'cordova'; // use globally installed cordova by default
-const { utilities } = require('./utils');
-
class ParamedicConfig {
constructor (json) {
this._config = json;
}
- getDefaultSauceDeviceName () {
- if (this.getPlatformId() === utilities.ANDROID) {
- return DEFAULT_SAUCE_DEVICE_NAME_ANDROID;
- } else if (this.getPlatformId() === utilities.IOS) {
- return DEFAULT_SAUCE_DEVICE_NAME_IOS;
- } else {
- throw new Error('Don\'t know a default device name for platform: '
+ this.getPlatformId());
- }
- }
-
- getDefaultSaucePlatformVersion () {
- if (this.getPlatformId() === utilities.ANDROID) {
- return DEFAULT_SAUCE_PLATFORM_VERSION_ANDROID;
- } else if (this.getPlatformId() === utilities.IOS) {
- return DEFAULT_SAUCE_PLATFORM_VERSION_IOS;
- } else {
- throw new Error('Don\'t know a default platform version for
platform: ' + this.getPlatformId());
- }
- }
-
getUseTunnel () {
return this._config.useTunnel;
}
@@ -127,77 +99,6 @@ class ParamedicConfig {
return this._config.justbuild;
}
- shouldUseSauce () {
- return this._config.shouldUseSauce;
- }
-
- setShouldUseSauce (sus) {
- this._config.shouldUseSauce = sus;
- }
-
- getBuildName () {
- return this._config.buildName || this.getDefaultBuildName();
- }
-
- setBuildName (buildName) {
- this._config.buildName = buildName;
- }
-
- getDefaultBuildName () {
- return DEFAULT_BUILD_NAME + ' ' + Date.now();
- }
-
- getSauceUser () {
- return this._config.sauceUser ||
process.env[utilities.SAUCE_USER_ENV_VAR];
- }
-
- setSauceUser (sauceUser) {
- this._config.sauceUser = sauceUser;
- }
-
- getSauceKey () {
- return this._config.sauceKey ||
process.env[utilities.SAUCE_KEY_ENV_VAR];
- }
-
- setSauceKey (sauceKey) {
- this._config.sauceKey = sauceKey;
- }
-
- getSauceDeviceName () {
- return this._config.sauceDeviceName ||
this.getDefaultSauceDeviceName();
- }
-
- setSauceDeviceName (sauceDeviceName) {
- this._config.sauceDeviceName = sauceDeviceName.toString();
- }
-
- getSaucePlatformVersion () {
- return this._config.saucePlatformVersion ||
this.getDefaultSaucePlatformVersion();
- }
-
- setSaucePlatformVersion (saucePlatformVersion) {
- this._config.saucePlatformVersion = saucePlatformVersion.toString();
- }
-
- getSauceAppiumVersion () {
- return this._config.sauceAppiumVersion || DEFAULT_SAUCE_APPIUM_VERSION;
- }
-
- setSauceAppiumVersion (sauceAppiumVersion) {
- this._config.sauceAppiumVersion = sauceAppiumVersion.toString();
- }
-
- getSauceTunnelId () {
- if (typeof this._config.sauceTunnelId === 'boolean') {
- this._config.sauceTunnelId = undefined;
- }
- return this._config.sauceTunnelId;
- }
-
- setSauceTunnelId (tid) {
- this._config.sauceTunnelId = tid;
- }
-
runMainTests () {
return !this._config.skipMainTests;
}
@@ -296,14 +197,6 @@ ParamedicConfig.parseFromArguments = function (argv) {
logMins: argv.logMins ? argv.logMins : null,
tccDb: argv.tccDbPath ? argv.tccDb : null,
cleanUpAfterRun: !!argv.cleanUpAfterRun,
- shouldUseSauce: !!argv.shouldUseSauce || false,
- buildName: argv.buildName,
- sauceUser: argv.sauceUser,
- sauceKey: argv.sauceKey,
- sauceDeviceName: argv.sauceDeviceName &&
argv.sauceDeviceName.toString(),
- saucePlatformVersion: argv.saucePlatformVersion &&
argv.saucePlatformVersion.toString(),
- sauceAppiumVersion: argv.sauceAppiumVersion &&
argv.sauceAppiumVersion.toString(),
- sauceTunnelId: argv.sauceTunnelId,
skipAppiumTests: argv.skipAppium,
skipMainTests: argv.skipMainTests,
ci: argv.ci,
diff --git a/lib/ParamedicSauceLabs.js b/lib/ParamedicSauceLabs.js
deleted file mode 100644
index 3723d18..0000000
--- a/lib/ParamedicSauceLabs.js
+++ /dev/null
@@ -1,569 +0,0 @@
-#!/usr/bin/env node
-
-/**
- Licensed to the Apache Software Foundation (ASF) under one
- or more contributor license agreements. See the NOTICE file
- distributed with this work for additional information
- regarding copyright ownership. The ASF licenses this file
- to you 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
-
- http://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.
-*/
-const path = require('path');
-const cp = require('child_process');
-const Q = require('q');
-const shell = require('shelljs');
-const randomstring = require('randomstring');
-const fs = require('fs');
-const wd = require('wd');
-const SauceLabs = require('saucelabs');
-const sauceConnectLauncher = require('sauce-connect-launcher');
-const { logger, exec, execPromise, utilities } = require('./utils');
-const appPatcher = require('./appium/helpers/appPatcher');
-
-class ParamedicSauceLabs {
- constructor (config, runner) {
- this.config = config;
- this.runner = runner;
-
- this.platformId = this.config.getPlatformId();
- this.isAndroid = this.platformId === utilities.ANDROID;
- this.isBrowser = this.platformId === utilities.BROWSER;
- this.isIos = this.platformId === utilities.IOS;
- }
-
- checkSauceRequirements () {
- if (!this.isAndroid && !this.isIos && !this.isBrowser) {
- logger.warn('Saucelabs only supports Android and iOS (and
browser), falling back to testing locally.');
- this.config.setShouldUseSauce(false);
- } else if (!this.config.getSauceKey()) {
- throw new Error('Saucelabs key not set. Please set it via
environmental variable ' +
- utilities.SAUCE_KEY_ENV_VAR + ' or pass it with the --sauceKey
parameter.');
- } else if (!this.config.getSauceUser()) {
- throw new Error('Saucelabs user not set. Please set it via
environmental variable ' +
- utilities.SAUCE_USER_ENV_VAR + ' or pass it with the
--sauceUser parameter.');
- } else if (!this.runner.shouldWaitForTestResult()) {
- // don't throw, just silently disable Sauce
- this.config.setShouldUseSauce(false);
- }
- }
-
- packageApp () {
- switch (this.platformId) {
- case utilities.IOS: {
- return Q.Promise((resolve, reject) => {
- const zipCommand = 'zip -r ' + this.getPackageName() + ' ' +
this.getBinaryName();
- shell.pushd(this.getPackageFolder());
- shell.rm('-rf', this.getPackageName());
- console.log('Running command: ' + zipCommand + ' in dir: ' +
shell.pwd());
- exec(zipCommand, (code) => {
- shell.popd();
- if (code) {
- reject('zip command returned with error code ' + code);
- } else {
- resolve();
- }
- });
- });
- }
- case utilities.ANDROID:
- break; // don't need to zip the app for Android
- case utilities.BROWSER:
- break; // don't need to bundle the app on Browser platform at all
- default:
- throw new Error('Don\'t know how to package the app for platform:
' + this.platformId);
- }
- return Q.resolve();
- }
-
- uploadApp () {
- logger.normal('cordova-paramedic: uploading ' + this.getAppName() + '
to Sauce Storage');
-
- const sauceUser = this.config.getSauceUser();
- const key = this.config.getSauceKey();
- const uploadURI = encodeURI('https://saucelabs.com/rest/v1/storage/' +
sauceUser + '/' + this.getAppName() + '?overwrite=true');
- const filePath = this.getPackagedPath();
- const uploadCommand =
- 'curl -u ' + sauceUser + ':' + key +
- ' -X POST -H "Content-Type: application/octet-stream" ' +
- uploadURI + ' --data-binary "@' + filePath + '"';
-
- return execPromise(uploadCommand);
- }
-
- getPackagedPath () {
- return path.join(this.getPackageFolder(), this.getPackageName());
- }
-
- getPackageFolder () {
- const packageDirs = this.getPackageFolders();
- let foundDir = null;
-
- packageDirs.forEach((dir) => {
- if (fs.existsSync(dir) && fs.statSync(dir).isDirectory()) {
- foundDir = dir;
- }
- });
-
- if (foundDir) return foundDir;
-
- throw new Error('Couldn\'t locate a built app directory. Looked here:
' + packageDirs);
- }
-
- getPackageFolders () {
- let packageFolders;
-
- switch (this.platformId) {
- case utilities.ANDROID:
- packageFolders = [
- path.join(this.runner.tempFolder.name, 'platforms', 'android',
'app', 'build', 'outputs', 'apk', 'debug'),
- path.join(this.runner.tempFolder.name, 'platforms', 'android',
'build', 'outputs', 'apk')
- ];
- break;
-
- case utilities.IOS:
- packageFolders = [path.join(this.runner.tempFolder.name,
'platforms', 'ios', 'build', 'Debug-iphonesimulator')];
- break;
-
- default:
- throw new Error('Don\t know where the package folder is for the
platform: ' + this.platformId);
- }
-
- return packageFolders;
- }
-
- getPackageName () {
- let packageName;
-
- switch (this.platformId) {
- case utilities.IOS:
- packageName = 'HelloCordova.zip';
- break;
-
- case utilities.ANDROID:
- packageName = this.getBinaryName();
- break;
-
- default:
- throw new Error('Don\'t know what the package name is for
platform: ' + this.platformId);
- }
-
- return packageName;
- }
-
- getBinaryName () {
- let binaryName;
-
- switch (this.platformId) {
- case utilities.ANDROID: {
- shell.pushd(this.getPackageFolder());
- const apks = shell.ls('*debug.apk');
-
- if (apks.length > 0) {
- binaryName = apks.reduce((previous, current) => {
- // if there is any apk for x86, take it
- if (current.indexOf('x86') >= 0) return current;
-
- // if not, just take the first one
- return previous;
- });
- } else {
- throw new Error('Couldn\'t locate built apk');
- }
-
- shell.popd();
- break;
- }
- case utilities.IOS:
- binaryName = 'HelloCordova.app';
- break;
-
- default:
- throw new Error('Don\'t know the binary name for the platform: ' +
this.platformId);
- }
-
- return binaryName;
- }
-
- // Returns a name of the file at the SauceLabs storage
- getAppName () {
- // exit if we did this before
- if (this.appName) return this.appName;
-
- let appName = randomstring.generate();
-
- switch (this.platformId) {
- case utilities.ANDROID:
- appName += '.apk';
- break;
-
- case utilities.IOS:
- appName += '.zip';
- break;
-
- default:
- throw new Error('Don\'t know the app name for the platform: ' +
this.platformId);
- }
-
- this.appName = appName; // save for additional function calls
- return appName;
- }
-
- displaySauceDetails (buildName) {
- if (!this.config.shouldUseSauce()) return Q();
-
- if (!buildName) {
- buildName = this.config.getBuildName();
- }
-
- const d = Q.defer();
-
- logger.normal('Getting saucelabs jobs details...\n');
-
- const sauce = new SauceLabs({
- username: this.config.getSauceUser(),
- password: this.config.getSauceKey()
- });
-
- sauce.getJobs((err, jobs) => {
- if (err) {
- console.log(err);
- }
-
- let found = false;
- for (const job in jobs) {
- if (Object.prototype.hasOwnProperty.call(jobs, job) &&
jobs[job].name && jobs[job].name.indexOf(buildName) === 0) {
- const jobUrl = 'https://saucelabs.com/beta/tests/' +
jobs[job].id;
-
logger.normal('============================================================================================');
- logger.normal('Job name: ' + jobs[job].name);
- logger.normal('Job ID: ' + jobs[job].id);
- logger.normal('Job URL: ' + jobUrl);
- logger.normal('Video: ' + jobs[job].video_url);
- logger.normal('Appium logs: ' + jobs[job].log_url);
- if (this.isAndroid) {
- logger.normal('Logcat logs: ' +
'https://saucelabs.com/jobs/' + jobs[job].id + '/logcat.log');
- }
-
logger.normal('============================================================================================');
- logger.normal('');
- found = true;
- }
- }
-
- if (!found) {
- logger.warn('Can not find saucelabs job. Logs and video will
be unavailable.');
- }
- d.resolve();
- });
-
- return d.promise;
- }
-
- getSauceCaps () {
- this.runner.sauceBuildName = this.runner.sauceBuildName ||
this.config.getBuildName();
- const caps = {
- name: this.runner.sauceBuildName,
- idleTimeout: '100', // in seconds
- maxDuration: utilities.SAUCE_MAX_DURATION,
- tunnelIdentifier: this.config.getSauceTunnelId()
- };
-
- switch (this.platformId) {
- case utilities.ANDROID:
- caps.platformName = 'Android';
- caps.appPackage = 'io.cordova.hellocordova';
- caps.appActivity = 'io.cordova.hellocordova.MainActivity';
- caps.app = 'sauce-storage:' + this.getAppName();
- caps.deviceType = 'phone';
- caps.deviceOrientation = 'portrait';
- caps.appiumVersion = this.config.getSauceAppiumVersion();
- caps.deviceName = this.config.getSauceDeviceName();
- caps.platformVersion = this.config.getSaucePlatformVersion();
- break;
-
- case utilities.IOS:
- caps.platformName = 'iOS';
- caps.autoAcceptAlerts = true;
- caps.waitForAppScript = 'true;';
- caps.app = 'sauce-storage:' + this.getAppName();
- caps.deviceType = 'phone';
- caps.deviceOrientation = 'portrait';
- caps.appiumVersion = this.config.getSauceAppiumVersion();
- caps.deviceName = this.config.getSauceDeviceName();
- caps.platformVersion = this.config.getSaucePlatformVersion();
- break;
-
- case utilities.BROWSER:
- caps.browserName = this.config.getSauceDeviceName() || 'chrome';
- caps.version = this.config.getSaucePlatformVersion() || '45.0';
- caps.platform = caps.browserName.indexOf('Edge') > 0 ? 'Windows
10' : 'macOS 10.13';
- // setting from env.var here and not in the config
- // because for any other platform we don't need to put the sauce
connect up
- // unless the tunnel id is explicitly passed (means that user
wants it anyway)
- if (!caps.tunnelIdentifier &&
process.env[utilities.SAUCE_TUNNEL_ID_ENV_VAR]) {
- caps.tunnelIdentifier =
process.env[utilities.SAUCE_TUNNEL_ID_ENV_VAR];
- } else if (!caps.tunnelIdentifier) {
- throw new Error('Testing browser platform on Sauce Labs
requires Sauce Connect tunnel. Please specify tunnel identifier via
--sauceTunnelId');
- }
- break;
-
- default:
- throw new Error('Don\'t know the Sauce caps for the platform: ' +
this.platformId);
- }
-
- return caps;
- }
-
- connectWebdriver () {
- const user = this.config.getSauceUser();
- const key = this.config.getSauceKey();
- const caps = this.getSauceCaps();
-
- logger.normal('cordova-paramedic: connecting webdriver');
- const spamDots = setInterval(() => {
- process.stdout.write('.');
- }, 1000);
-
- wd.configureHttp({
- timeout: utilities.WD_TIMEOUT,
- retryDelay: utilities.WD_RETRY_DELAY,
- retries: utilities.WD_RETRIES
- });
-
- const driver = wd.promiseChainRemote(utilities.SAUCE_HOST,
utilities.SAUCE_PORT, user, key);
- return driver
- .init(caps)
- .then(() => {
- clearInterval(spamDots);
- process.stdout.write('\n');
- }, (error) => {
- clearInterval(spamDots);
- process.stdout.write('\n');
- throw (error);
- });
- }
-
- connectSauceConnect () {
- const isBrowser = this.isBrowser;
-
- // on platforms other than browser, only run sauce connect if user
explicitly asks for it
- if (!isBrowser && !this.config.getSauceTunnelId()) return Q();
- // on browser, run sauce connect in any case
- if (isBrowser && !this.config.getSauceTunnelId()) {
-
this.config.setSauceTunnelId(process.env[utilities.SAUCE_TUNNEL_ID_ENV_VAR] ||
this.config.getBuildName());
- }
-
- return Q.Promise((resolve, reject) => {
- logger.info('cordova-paramedic: Starting Sauce Connect...');
- sauceConnectLauncher({
- username: this.config.getSauceUser(),
- accessKey: this.config.getSauceKey(),
- tunnelIdentifier: this.config.getSauceTunnelId(),
- connectRetries: utilities.SAUCE_CONNECT_CONNECTION_RETRIES,
- connectRetryTimeout:
utilities.SAUCE_CONNECT_CONNECTION_TIMEOUT,
- downloadRetries: utilities.SAUCE_CONNECT_DOWNLOAD_RETRIES,
- downloadRetryTimeout: utilities.SAUCE_CONNECT_DOWNLOAD_TIMEOUT
- }, (err, sauceConnectProcess) => {
- if (err) reject(err);
-
- this.sauceConnectProcess = sauceConnectProcess;
- logger.info('cordova-paramedic: Sauce Connect ready');
- resolve();
- });
- });
- }
-
- runSauceTests () {
- logger.warn('... on SauceLabs');
-
logger.warn('---------------------------------------------------------');
-
- let isTestPassed = false;
- let pollForResults;
- let driver;
- let runProcess = null;
-
- if (!this.config.runMainTests()) {
- logger.normal('Skipping main tests...');
- return Q(utilities.TEST_PASSED);
- }
-
- logger.info('cordova-paramedic: running tests with sauce');
-
- return Q()
- .then(() => {
- // Build + "Upload" app
- if (!this.isBrowser) {
- return this.buildApp()
- .then(() => this.packageApp())
- .then(() => this.uploadApp());
- }
-
- // for browser, we need to serve the app for Sauce Connect
- // we do it by just running "cordova run" and ignoring the
chrome instance that pops up
- return Q().then(() => {
- appPatcher.addCspSource(this.runner.tempFolder.name,
'connect-src', 'http://*');
- appPatcher.permitAccess(this.runner.tempFolder.name, '*');
- return this.runner.getCommandForStartingTests();
- }).then((command) => {
- console.log('$ ' + command);
- runProcess = cp.exec(command, () => {
- // a precaution not to try to kill some other process
- runProcess = null;
- });
- });
- })
- .then(() => this.connectSauceConnect())
- .then(() => {
- driver = this.connectWebdriver();
-
- if (this.isBrowser) {
- return
driver.get('http://localhost:8000/cdvtests/index.html');
- }
-
- return driver;
- })
- .then(() => {
- if (this.config.getUseTunnel() || this.isBrowser) {
- return driver;
- }
-
- return driver
- .getWebviewContext()
- .then((webview) => driver.context(webview));
- })
- .then(() => {
- if (this.isIos) {
- logger.normal('cordova-paramedic: navigating to a test
page');
- return driver
- .sleep(1000)
- .elementByXPath('//*[text() = "Auto Tests"]')
- .click();
- }
-
- return driver;
- })
- .then(() => {
- logger.normal('cordova-paramedic: connecting to app');
-
- const plugins = this.config.getPlugins();
- let skipBuster = false;
-
- // skip permission buster for splashscreen and inappbrowser
plugins
- // it hangs the test run on Android 7 for some reason
- for (let i = 0; i < plugins.length; i++) {
- if (plugins[i].indexOf('cordova-plugin-splashscreen') >= 0
|| plugins[i].indexOf('cordova-plugin-inappbrowser') >= 0) {
- skipBuster = true;
- }
- }
- // always skip buster for browser platform
- if (this.isBrowser) {
- skipBuster = true;
- }
-
- if (!this.config.getUseTunnel()) {
- let polling = false;
-
- pollForResults = setInterval(() => {
- if (!polling) {
- polling = true;
- driver.pollForEvents(this.platformId, skipBuster)
- .then((events) => {
- for (let i = 0; i < events.length; i++) {
-
this.runner.server.emit(events[i].eventName, events[i].eventObject);
- }
-
- polling = false;
- })
- .fail((error) => {
- logger.warn('cordova-paramedic,
pollForResults error: ' + error);
- polling = false;
- });
- }
- }, 2500);
- }
-
- return this.runner.waitForTests();
- })
- .then((result) => {
- logger.normal('cordova-paramedic: Tests finished');
- isTestPassed = result;
- }, (error) => {
- logger.normal('cordova-paramedic: Tests failed to complete;
ending session. The error is:\n' + error.stack);
- })
- .fin(() => {
- if (pollForResults) {
- clearInterval(pollForResults);
- }
- if (driver && typeof driver.quit === 'function') {
- return driver.quit();
- }
- })
- .fin(() => {
- if (this.isBrowser && !this.runner.browserPatched) {
- // we need to kill chrome
- this.runner.killEmulatorProcess();
- }
- if (runProcess) {
- // as well as we need to kill the spawned node process serving
our app
- return Q.Promise((resolve) => {
- utilities.killProcess(runProcess.pid, () => {
- resolve();
- });
- });
- }
- })
- .fin(() => {
- if (this.sauceConnectProcess) {
- logger.info('cordova-paramedic: Closing Sauce Connect
process...');
- return Q.Promise((resolve) => {
- this.sauceConnectProcess.close(() => {
- logger.info('cordova-paramedic: Successfully
closed Sauce Connect process');
- resolve();
- });
- });
- }
- })
- .then(() => {
- return isTestPassed;
- });
- }
-
- buildApp () {
- const command = this.getCommandForBuilding();
-
- logger.normal('cordova-paramedic: running command ' + command);
-
- return execPromise(command)
- .then((output) => {
- if (output.indexOf('BUILD FAILED') >= 0) {
- throw new Error('Unable to build the project.');
- }
- }, (output) => {
- // this trace is automatically available in verbose mode
- // so we check for this flag to not trace twice
- if (!this.config.verbose) {
- logger.normal(output);
- }
-
- throw new Error('Unable to build the project.');
- });
- }
-
- getCommandForBuilding () {
- let cmd = this.config.getCli() + ' build ' + this.platformId +
utilities.PARAMEDIC_COMMON_CLI_ARGS;
- if (this.config.getArgs()) {
- cmd += ' ' + this.config.getArgs();
- }
- return cmd;
- }
-}
-
-module.exports = ParamedicSauceLabs;
diff --git a/lib/appium/AppiumRunner.js b/lib/appium/AppiumRunner.js
index ff32e90..78e20a1 100644
--- a/lib/appium/AppiumRunner.js
+++ b/lib/appium/AppiumRunner.js
@@ -247,13 +247,7 @@ class AppiumRunner {
global.UNORM = unorm;
global.UDID = this.options.udid;
global.VERBOSE = this.options.verbose;
- global.USE_SAUCE = this.options.sauce;
- global.SAUCE_USER = this.options.sauceUser;
- global.SAUCE_KEY = this.options.sauceKey;
- global.SAUCE_CAPS = this.options.sauceCaps;
global.VERBOSE = this.options.verbose;
- global.SAUCE_SERVER_HOST = utilities.SAUCE_HOST;
- global.SAUCE_SERVER_PORT = utilities.SAUCE_PORT;
}
prepareApp () {
@@ -297,19 +291,17 @@ class AppiumRunner {
return d.promise;
}
- runTests (useSauce) {
+ runTests () {
return Q().then(() => {
- if (!useSauce) {
- this.startIosProxy();
- // check if Appium is already running
- return portChecker.check(4723).then((isInUse) => {
- if (!isInUse) {
- return installAppiumServer()
- .then(this.startAppiumServer.bind(this));
- }
- logger.info('paramedic-appium: Appium port is taken, looks
like it is already running. Jumping straight to running tests.');
- });
- }
+ this.startIosProxy();
+ // check if Appium is already running
+ return portChecker.check(4723).then((isInUse) => {
+ if (!isInUse) {
+ return installAppiumServer()
+ .then(this.startAppiumServer.bind(this));
+ }
+ logger.info('paramedic-appium: Appium port is taken, looks
like it is already running. Jumping straight to running tests.');
+ });
})
.then(this.startTests.bind(this))
.then(() => this.passed);
@@ -331,8 +323,6 @@ function getFullAppPath (appPath) {
}
function getPackagePath (options) {
- if (options.sauce) return options.sauceAppPath;
-
const fullAppPath = getFullAppPath(options.appPath);
switch (options.platform) {
diff --git a/lib/appium/helpers/wdHelper.js b/lib/appium/helpers/wdHelper.js
index 6c97c92..45e3534 100644
--- a/lib/appium/helpers/wdHelper.js
+++ b/lib/appium/helpers/wdHelper.js
@@ -37,7 +37,6 @@ module.exports.getDriver = function (platform) {
let automationName;
let driverConfig = {};
let serverConfig = {};
- let driver;
switch (platform.toLowerCase()) {
case utilities.ANDROID:
@@ -60,42 +59,31 @@ module.exports.getDriver = function (platform) {
retries: utilities.WD_RETRIES
});
- if (global.USE_SAUCE) {
- serverConfig = {
- host: global.SAUCE_SERVER_HOST,
- port: global.SAUCE_SERVER_PORT
- };
-
- driverConfig = global.SAUCE_CAPS;
-
- driver = global.WD.promiseChainRemote(serverConfig.host,
serverConfig.port, global.SAUCE_USER, global.SAUCE_KEY);
- } else {
- serverConfig = {
- host: APPIUM_SERVER_HOST,
- port: APPIUM_SERVER_PORT
- };
-
- driverConfig = {
- browserName: '',
- platformName: normalizedPlatform,
- platformVersion: global.PLATFORM_VERSION || '',
- deviceName: global.DEVICE_NAME || '',
- app: global.PACKAGE_PATH,
- autoAcceptAlerts: true,
- automationName
- };
-
- if (platform.toLowerCase() === utilities.IOS) {
- driverConfig.wdaLaunchTimeout = 150000;
- }
-
- if (global.UDID) {
- driverConfig.udid = global.UDID;
- }
+ serverConfig = {
+ host: APPIUM_SERVER_HOST,
+ port: APPIUM_SERVER_PORT
+ };
+
+ driverConfig = {
+ browserName: '',
+ platformName: normalizedPlatform,
+ platformVersion: global.PLATFORM_VERSION || '',
+ deviceName: global.DEVICE_NAME || '',
+ app: global.PACKAGE_PATH,
+ autoAcceptAlerts: true,
+ automationName
+ };
+
+ if (platform.toLowerCase() === utilities.IOS) {
+ driverConfig.wdaLaunchTimeout = 150000;
+ }
- driver = global.WD.promiseChainRemote(serverConfig);
+ if (global.UDID) {
+ driverConfig.udid = global.UDID;
}
+ const driver = global.WD.promiseChainRemote(serverConfig);
+
module.exports.configureLogging(driver);
const spamDots = setInterval(function () {
process.stdout.write('.');
@@ -247,7 +235,7 @@ module.exports.pollForEvents = function (driver, platform,
skipBuster, windowOff
// not found
if (isBrowser && retries > 0) {
- // the odds are that we're hitting "bad gateway" error on Sauce,
refreshing the page should fix it
+ // the odds are that we're hitting "bad gateway", refreshing the
page should fix it
return driver
.get('http://localhost:8000/cdvtests/index.html')
.then(function () {
diff --git a/lib/paramedic.js b/lib/paramedic.js
index 22c1282..4e47013 100644
--- a/lib/paramedic.js
+++ b/lib/paramedic.js
@@ -32,7 +32,6 @@ const ParamediciOSPermissions =
require('./ParamediciOSPermissions');
const ParamedicTargetChooser = require('./ParamedicTargetChooser');
const ParamedicAppUninstall = require('./ParamedicAppUninstall');
const ParamedicApp = require('./ParamedicApp');
-const ParamedicSauceLabs = require('./ParamedicSauceLabs');
// this will add custom promise chain methods to the driver prototype
require('./appium/helpers/wdHelper');
@@ -48,7 +47,6 @@ class ParamedicRunner {
this.tempFolder = null;
this.config = config;
this.targetObj = undefined;
- this.paramedicSauceLabs = null;
this.isBrowser = this.config.getPlatformId() === utilities.BROWSER;
this.isWindows = this.config.getPlatformId() === utilities.WINDOWS;
@@ -71,8 +69,8 @@ class ParamedicRunner {
})
.then(() => {
if (this.config.runMainTests()) {
- // start server
- const noListener = (this.isBrowser) &&
this.config.shouldUseSauce();
+ // start server
+ const noListener = false;
return Server.startServer(this.config.getPorts(),
this.config.getExternalServerUrl(), this.config.getUseTunnel(), noListener);
}
})
@@ -106,12 +104,7 @@ class ParamedicRunner {
isTestPassed = result;
logger.normal('Completed tests at ' + (new
Date()).toLocaleTimeString());
- // If we run --shouldUseSauce immedatly fetch and return Sauce
details.
- if (this.config.shouldUseSauce()) {
- return
this.paramedicSauceLabs.displaySauceDetails.apply(this.paramedicSauceLabs,
[this.sauceBuildName]); // eslint-disable-line
- }
-
- // When --shouldUseSauce and --justbuild is not set, fetch
logs from the device.
+ // When --justbuild is not set, fetch logs from the device.
if (this.config.getAction() !== 'build') {
// collect logs and uninstall app
this.collectDeviceLogs();
@@ -143,10 +136,6 @@ class ParamedicRunner {
}
logger.warn('---------------------------------------------------------');
- if (this.config.shouldUseSauce()) {
- this.paramedicSauceLabs = new ParamedicSauceLabs(this.config,
this);
-
this.paramedicSauceLabs.checkSauceRequirements.apply(this.paramedicSauceLabs);
- }
if (!this.config.runMainTests() && !this.config.runAppiumTests()) {
throw new Error('No tests to run: both --skipAppiumTests and
--skipMainTests are used');
}
@@ -292,7 +281,7 @@ class ParamedicRunner {
});
}
- runAppiumTests (useSauce) {
+ runAppiumTests () {
logger.warn('---------------------------------------------------------');
logger.warn('5. Run Appium tests');
logger.warn('---------------------------------------------------------');
@@ -313,11 +302,11 @@ class ParamedicRunner {
// just skip Appium tests
return Q(utilities.TEST_PASSED);
}
- if (!useSauce && (!this.targetObj || !this.targetObj.target)) {
+ if (!this.targetObj || !this.targetObj.target) {
throw new Error('Cannot determine local device name for Appium');
}
- logger.normal('Running Appium tests ' + (useSauce ? 'on Sauce Labs' :
'locally'));
+ logger.normal('Running Appium tests locally');
const options = {
platform: platform,
@@ -329,18 +318,9 @@ class ParamedicRunner {
screenshotPath: path.join(process.cwd(), 'appium_screenshots'),
output: this.config.getOutputDir(),
verbose: this.config.isVerbose(),
- sauce: useSauce,
cli: this.config.getCli()
};
- if (useSauce) {
- options.sauceAppPath = 'sauce-storage:' +
this.paramedicSauceLabs.getAppName.apply(this.paramedicSauceLabs);
- options.sauceUser = this.config.getSauceUser();
- options.sauceKey = this.config.getSauceKey();
- options.sauceCaps =
this.paramedicSauceLabs.getSauceCaps.apply(this.paramedicSauceLabs);
- options.sauceCaps.name += '_Appium';
- }
-
const appiumRunner = new AppiumRunner(options);
if (appiumRunner.options.testPaths &&
appiumRunner.options.testPaths.length === 0) {
logger.warn('Couldn\'t find Appium tests, skipping...');
@@ -349,13 +329,7 @@ class ParamedicRunner {
return Q()
.then(() => appiumRunner.prepareApp())
- .then(() => {
- if (useSauce) {
- return
this.paramedicSauceLabs.packageApp.apply(this.paramedicSauceLabs)
- .then(() =>
this.paramedicSauceLabs.uploadApp.apply(this.paramedicSauceLabs));
- }
- })
- .then(() => appiumRunner.runTests(useSauce));
+ .then(() => appiumRunner.runTests());
}
runTests () {
@@ -364,23 +338,12 @@ class ParamedicRunner {
logger.warn('---------------------------------------------------------');
logger.warn('4. Run (Jasmine) tests...');
- // Sauce Labs
- if (this.config.shouldUseSauce()) {
- return
this.paramedicSauceLabs.runSauceTests.apply(this.paramedicSauceLabs)
- .then((result) => {
- isTestPassed = result;
- })
- .then(() => this.runAppiumTests(true))
- .then(isAppiumTestPassed => isTestPassed ===
utilities.TEST_PASSED && isAppiumTestPassed === utilities.TEST_PASSED);
- // Not Sauce Labs
- } else {
- return this.runLocalTests()
- .then((result) => {
- isTestPassed = result;
- })
- .then(() => this.runAppiumTests())
- .then(isAppiumTestPassed => isTestPassed ===
utilities.TEST_PASSED && isAppiumTestPassed === utilities.TEST_PASSED);
- }
+ return this.runLocalTests()
+ .then((result) => {
+ isTestPassed = result;
+ })
+ .then(() => this.runAppiumTests())
+ .then(isAppiumTestPassed => isTestPassed === utilities.TEST_PASSED
&& isAppiumTestPassed === utilities.TEST_PASSED);
}
waitForTests () {
diff --git a/lib/utils/utilities.js b/lib/utils/utilities.js
index d7c6b5f..e8dee19 100644
--- a/lib/utils/utilities.js
+++ b/lib/utils/utilities.js
@@ -249,20 +249,6 @@ module.exports = {
PARAMEDIC_COMMON_ARGS: ['--no-telemetry', '--no-update-notifier'],
PARAMEDIC_PLUGIN_ADD_ARGS: '',
PARAMEDIC_PLATFORM_ADD_ARGS: '',
- SAUCE_USER_ENV_VAR: 'SAUCE_USERNAME',
- SAUCE_KEY_ENV_VAR: 'SAUCE_ACCESS_KEY',
- SAUCE_TUNNEL_ID_ENV_VAR: 'TRAVIS_JOB_NUMBER',
- // retry to establish a tunnel multiple times.
- SAUCE_CONNECT_CONNECTION_RETRIES: 5,
- // time to wait between connection retries in ms.
- SAUCE_CONNECT_CONNECTION_TIMEOUT: 50000,
- // retry to download the sauce connect archive multiple times.
- SAUCE_CONNECT_DOWNLOAD_RETRIES: 5,
- // time to wait between download retries in ms.
- SAUCE_CONNECT_DOWNLOAD_TIMEOUT: 1000,
- SAUCE_HOST: 'ondemand.saucelabs.com',
- SAUCE_PORT: 80,
- SAUCE_MAX_DURATION: 5400, // in seconds
DEFAULT_ENCODING: 'utf-8',
WD_TIMEOUT: 30 * 60 * 1000,
WD_RETRY_DELAY: 15000,
diff --git a/main.js b/main.js
index 1190dd2..6aca4e0 100755
--- a/main.js
+++ b/main.js
@@ -40,7 +40,6 @@ var USAGE = "Error missing args. \n" +
"\tbe installed and tested together.\n" +
"\n" +
"--args: (optional) add command line args to the \"cordova build\" and
\"cordov run\" commands \n" +
- "--buildName : (optional) Build name to show in Saucelabs dashboard\n" +
"--ci : (optional) Skip tests that require user interaction\n" +
"--cleanUpAfterRun : (optional) cleans up the application after the run\n"
+
"--cli : (optional) A path to Cordova CLI\n" +
@@ -49,13 +48,6 @@ var USAGE = "Error missing args. \n" +
"--justbuild : (optional) just builds the project, without running the
tests \n" +
"--logMins : (optional) Windows only - specifies number of minutes to get
logs\n" +
"--outputDir : (optional) path to save Junit results file & Device logs\n"
+
- "--sauceAppiumVersion : (optional) Appium version to use when running on
Saucelabs. For example, \"1.5.3\"\n" +
- "--sauceDeviceName : (optional) Name of the SauceLabs emulator/browser.
For example, \"iPhone Simulator\" or \"firefox\"\n" +
- "--sauceKey : (optional) Saucelabs access key\n" +
- "--saucePlatformVersion : (optional) Version of the emulator OS or version
of the browser. For example, \"9.3\" or \"54.0\"\n" +
- "--sauceTunnelId : (optional) Tunnel identifier to use. Only usable if you
have Sauce Connect up\n" +
- "--sauceUser : (optional) Saucelabs username\n" +
- "--shouldUseSauce : (optional) run tests on Sauce Labs\n" +
"--skipAppiumTests : (optional) Do not run Appium tests\n" +
"--skipMainTests : (optional) Do not run main (cordova-test-framework)
tests\n" +
"--startport/--endport `PORTNUM` : (optional) ports to find available and
use for posting results from emulator back to paramedic server (default is from
8008 to 8009)\n" +
@@ -111,41 +103,6 @@ if (argv.version) {
paramedicConfig.setAction(argv.action);
}
- if (argv.shouldUseSauce) {
- if (argv.shouldUseSauce === 'false') {
- argv.shouldUseSauce = false;
- }
- paramedicConfig.setShouldUseSauce(argv.shouldUseSauce);
- }
-
- if (argv.buildName) {
- paramedicConfig.setBuildName(argv.buildName);
- }
-
- if (argv.sauceUser) {
- paramedicConfig.setSauceUser(argv.sauceUser);
- }
-
- if (argv.sauceKey) {
- paramedicConfig.setSauceKey(argv.sauceKey);
- }
-
- if (argv.sauceDeviceName) {
- paramedicConfig.setSauceDeviceName(argv.sauceDeviceName);
- }
-
- if (argv.saucePlatformVersion) {
- paramedicConfig.setSaucePlatformVersion(argv.saucePlatformVersion);
- }
-
- if (argv.sauceAppiumVersion) {
- paramedicConfig.setSauceAppiumVersion(argv.sauceAppiumVersion);
- }
-
- if (argv.sauceTunnelId) {
- paramedicConfig.setSauceTunnelId(argv.sauceTunnelId);
- }
-
if (argv.useTunnel) {
if (argv.useTunnel === 'false') {
argv.useTunnel = false;
diff --git a/package-lock.json b/package-lock.json
index b3d9611..258cbc7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,8 +20,6 @@
"minimist": "^1.2.5",
"q": "^1.5.1",
"randomstring": "^1.2.1",
- "sauce-connect-launcher": "^1.3.2",
- "saucelabs": "^1.2.0",
"shelljs": "^0.8.4",
"socket.io": "^4.6.2",
"tcp-port-used": "^1.0.2",
@@ -204,25 +202,6 @@
"acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
}
},
- "node_modules/adm-zip": {
- "version": "0.4.16",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
- "integrity":
"sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==",
- "engines": {
- "node": ">=0.3.0"
- }
- },
- "node_modules/agent-base": {
- "version": "6.0.2",
- "resolved":
"https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity":
"sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
"node_modules/ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -6692,19 +6671,6 @@
"url": "https://github.com/sponsors/ljharb"
}
},
- "node_modules/es6-promise": {
- "version": "4.2.8",
- "resolved":
"https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
- "integrity":
"sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
- },
- "node_modules/es6-promisify": {
- "version": "5.0.0",
- "resolved":
"https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
- "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
- "dependencies": {
- "es6-promise": "^4.0.3"
- }
- },
"node_modules/escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -7651,18 +7617,6 @@
"npm": ">=1.3.7"
}
},
- "node_modules/https-proxy-agent": {
- "version": "5.0.0",
- "resolved":
"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity":
"sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
"node_modules/human-signals": {
"version": "2.1.0",
"resolved":
"https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@@ -8995,6 +8949,7 @@
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
"integrity":
"sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
"dependencies": {
"glob": "^7.1.3"
},
@@ -9069,64 +9024,6 @@
"resolved":
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity":
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
- "node_modules/sauce-connect-launcher": {
- "version": "1.3.2",
- "resolved":
"https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.3.2.tgz",
- "integrity":
"sha512-wf0coUlidJ7rmeClgVVBh6Kw55/yalZCY/Un5RgjSnTXRAeGqagnTsTYpZaqC4dCtrY4myuYpOAZXCdbO7lHfQ==",
- "hasInstallScript": true,
- "dependencies": {
- "adm-zip": "~0.4.3",
- "async": "^2.1.2",
- "https-proxy-agent": "^5.0.0",
- "lodash": "^4.16.6",
- "rimraf": "^2.5.4"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/saucelabs": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz",
- "integrity":
"sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==",
- "dependencies": {
- "https-proxy-agent": "^2.2.1"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/saucelabs/node_modules/agent-base": {
- "version": "4.3.0",
- "resolved":
"https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
- "integrity":
"sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
- "dependencies": {
- "es6-promisify": "^5.0.0"
- },
- "engines": {
- "node": ">= 4.0.0"
- }
- },
- "node_modules/saucelabs/node_modules/debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity":
"sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/saucelabs/node_modules/https-proxy-agent": {
- "version": "2.2.4",
- "resolved":
"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
- "integrity":
"sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
- "dependencies": {
- "agent-base": "^4.3.0",
- "debug": "^3.1.0"
- },
- "engines": {
- "node": ">= 4.5.0"
- }
- },
"node_modules/sax": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
@@ -10084,19 +9981,6 @@
"dev": true,
"requires": {}
},
- "adm-zip": {
- "version": "0.4.16",
- "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz",
- "integrity":
"sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg=="
- },
- "agent-base": {
- "version": "6.0.2",
- "resolved":
"https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
- "integrity":
"sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
- "requires": {
- "debug": "4"
- }
- },
"ajv": {
"version": "6.12.6",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
@@ -16492,19 +16376,6 @@
"is-symbol": "^1.0.2"
}
},
- "es6-promise": {
- "version": "4.2.8",
- "resolved":
"https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz",
- "integrity":
"sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w=="
- },
- "es6-promisify": {
- "version": "5.0.0",
- "resolved":
"https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
- "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
- "requires": {
- "es6-promise": "^4.0.3"
- }
- },
"escalade": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
@@ -17201,15 +17072,6 @@
"sshpk": "^1.7.0"
}
},
- "https-proxy-agent": {
- "version": "5.0.0",
- "resolved":
"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
- "integrity":
"sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
- "requires": {
- "agent-base": "6",
- "debug": "4"
- }
- },
"human-signals": {
"version": "2.1.0",
"resolved":
"https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
@@ -18187,6 +18049,7 @@
"version": "2.6.3",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
"integrity":
"sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
"requires": {
"glob": "^7.1.3"
}
@@ -18224,53 +18087,6 @@
"resolved":
"https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
"integrity":
"sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
- "sauce-connect-launcher": {
- "version": "1.3.2",
- "resolved":
"https://registry.npmjs.org/sauce-connect-launcher/-/sauce-connect-launcher-1.3.2.tgz",
- "integrity":
"sha512-wf0coUlidJ7rmeClgVVBh6Kw55/yalZCY/Un5RgjSnTXRAeGqagnTsTYpZaqC4dCtrY4myuYpOAZXCdbO7lHfQ==",
- "requires": {
- "adm-zip": "~0.4.3",
- "async": "^2.1.2",
- "https-proxy-agent": "^5.0.0",
- "lodash": "^4.16.6",
- "rimraf": "^2.5.4"
- }
- },
- "saucelabs": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/saucelabs/-/saucelabs-1.5.0.tgz",
- "integrity":
"sha512-jlX3FGdWvYf4Q3LFfFWS1QvPg3IGCGWxIc8QBFdPTbpTJnt/v17FHXYVAn7C8sHf1yUXo2c7yIM0isDryfYtHQ==",
- "requires": {
- "https-proxy-agent": "^2.2.1"
- },
- "dependencies": {
- "agent-base": {
- "version": "4.3.0",
- "resolved":
"https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
- "integrity":
"sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
- "requires": {
- "es6-promisify": "^5.0.0"
- }
- },
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity":
"sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "https-proxy-agent": {
- "version": "2.2.4",
- "resolved":
"https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz",
- "integrity":
"sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==",
- "requires": {
- "agent-base": "^4.3.0",
- "debug": "^3.1.0"
- }
- }
- }
- },
"sax": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.1.4.tgz",
diff --git a/package.json b/package.json
index 6e94453..c9ba98b 100644
--- a/package.json
+++ b/package.json
@@ -13,20 +13,15 @@
"repository": "github:apache/cordova-paramedic",
"bugs": "https://github.com/apache/cordova-paramedic/issues",
"scripts": {
- "test": "npm run lint & npm run test-local && npm run test-saucelabs",
- "test-on-windows": "npm run lint & npm run test-local-on-windows && npm
run test-saucelabs-on-windows",
+ "test": "npm run lint & npm run test-local",
+ "test-on-windows": "npm run lint & npm run test-local-on-windows",
"lint": "eslint lib",
"test-local": "npm run test-browser && npm run test-android && npm run
test-ios",
"test-local-on-windows": "npm run test-browser && npm run test-android",
"test-android": "node main.js --platform android --plugin
./spec/testable-plugin/",
"test-ios": "node main.js --platform ios --plugin ./spec/testable-plugin/
--verbose",
"test-windows": "node main.js --platform windows --plugin
./spec/testable-plugin/",
- "test-browser": "node main.js --platform browser --plugin
./spec/testable-plugin/",
- "test-saucelabs": "npm run test-saucelabs-browser && npm run
test-saucelabs-ios && npm run test-saucelabs-android",
- "test-saucelabs-on-windows": "npm run test-saucelabs-browser && npm run
test-saucelabs-android",
- "test-saucelabs-browser": "node main.js --config ./pr/browser-chrome
--plugin ./spec/testable-plugin/ --shouldUseSauce",
- "test-saucelabs-ios": "node main.js --config ./pr/ios-10.0 --plugin
./spec/testable-plugin/ --shouldUseSauce",
- "test-saucelabs-android": "node main.js --config ./pr/android-7.0 --plugin
./spec/testable-plugin/ --shouldUseSauce"
+ "test-browser": "node main.js --platform browser --plugin
./spec/testable-plugin/"
},
"keywords": [
"cordova",
@@ -47,8 +42,6 @@
"minimist": "^1.2.5",
"q": "^1.5.1",
"randomstring": "^1.2.1",
- "sauce-connect-launcher": "^1.3.2",
- "saucelabs": "^1.2.0",
"shelljs": "^0.8.4",
"socket.io": "^4.6.2",
"tcp-port-used": "^1.0.2",
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]