Commit 1d0e1015 authored by ioedeveloper's avatar ioedeveloper

Nightwatch config for running tests in parallel

Added drivers path for chrome and firefox Changed firefox port Installed geckodriver Changed firefox config cli_args config Fixed linting error Modified config Revert nightwatch config Fixed linting error Set drivers path Fixed linting error point driver path to new location Set marionette to false Removed cli_args option Set parallel command in ci Retry firefox in pipeline Retry firefox in ci pipeline Remove cli_args from nightwatch config Retry ci pipeline Load gecko in circleci Debug circleci Debug circleci Retry pipeline Retry pipeline Debug pipeline Debug pipeline Debug pipeline Debug pipeline Debug pipeline Debug pipeline Retry pipeline Retry pipeline Retry pipeline Retry pipeline Debug pipeline Debug pipeline Debug pipeline Debug pipeline Debug pipeline Debug pipeline Debug pipeline Changed CI selenium-server-standalone to selenium-standalone Fixed linting error Set marionette to false Add download of old firefox to ci build Set marionette to true Set permission Rearranged steps Fix ci error Remove gecko driver Use node_modules selenium standalone Change build steps Change firefox version Update firefox version Renamed firefox start step Test yml changes Test yml changes Test yml changes Test yml changes Setup workflows for running firefox and chrome tests in parallel Setup workflows for running firefox and chrome tests in parallel Setup workflows for running firefox and chrome tests in parallel Setup workflows for running firefox and chrome tests in parallel Use selenium-standalone Use selenium-standalone Set selenium-server version Added selenium config Fixed liniting error Fixed Build error path Fixed Selenium config error path Changed selenium server version Test for chrome Added config for chrome Test firefox and chrome in parallel Add firefox config to seleniumConfig Downgrade firefox driver version Download firefox browser Test circleci parallelism Test circleci parallelism Remove parallelism Added delay to ZoKrates test to fix failing test Fixed failing gist tests for firefox Disabled remixd tests for firefox browser Fix linting error Fixed failing terminal test Remove gecko driver dependency Disable remixd test for firefox Fixed failing solidity unit tests switch to .keys() to .sendKeys() since it is supported by both chrome and firefox
parent 36891313
...@@ -25,11 +25,17 @@ jobs: ...@@ -25,11 +25,17 @@ jobs:
- run: npm run lint && npm run test && npm run make-mock-compiler - run: npm run lint && npm run test && npm run make-mock-compiler
- run: - run:
name: Download Selenium name: Download Selenium
command: wget http://selenium-release.storage.googleapis.com/3.5/selenium-server-standalone-3.5.3.jar command: ./node_modules/.bin/selenium-standalone install --config=../remix-ide/seleniumConfig.js
- run: - run:
name: Start Selenium name: Start Selenium
command: java -jar selenium-server-standalone-3.5.3.jar command: ./node_modules/.bin/selenium-standalone start --config=../remix-ide/seleniumConfig.js
background: true background: true
- run:
name: Download Latest Firefox
command: sudo apt-get purge -y firefox && wget https://sourceforge.net/projects/ubuntuzilla/files/mozilla/apt/pool/main/f/firefox-mozilla-build/firefox-mozilla-build_73.0.1-0ubuntu1_amd64.deb
- run:
name: Install Firefox
command: sudo dpkg -i firefox-mozilla-build_73.0.1-0ubuntu1_amd64.deb
- run: ./ci/browser_tests.sh - run: ./ci/browser_tests.sh
- run: - run:
name: Deploy name: Deploy
...@@ -50,4 +56,4 @@ workflows: ...@@ -50,4 +56,4 @@ workflows:
version: 2 version: 2
build_all: build_all:
jobs: jobs:
- remix-ide - remix-ide
\ No newline at end of file
...@@ -21,7 +21,7 @@ setupRemixd ...@@ -21,7 +21,7 @@ setupRemixd
sleep 5 sleep 5
npm run nightwatch_local_chrome || TEST_EXITCODE=1 npm run nightwatch_parallel || TEST_EXITCODE=1
echo "$TEST_EXITCODE" echo "$TEST_EXITCODE"
if [ "$TEST_EXITCODE" -eq 1 ] if [ "$TEST_EXITCODE" -eq 1 ]
......
...@@ -2020,6 +2020,12 @@ ...@@ -2020,6 +2020,12 @@
"resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz",
"integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo=" "integrity": "sha1-anmQQ3ynNtXhKI25K9MmbV9csqo="
}, },
"adm-zip": {
"version": "0.4.11",
"resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.11.tgz",
"integrity": "sha512-L8vcjDTCOIJk7wFvmlEUN7AsSb8T+2JrdP7KINBjzr24TJ5Mwj590sLu3BC7zNZowvJWa/JtPmD8eJCzdtDWjA==",
"dev": true
},
"aes-js": { "aes-js": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz",
...@@ -5082,6 +5088,21 @@ ...@@ -5082,6 +5088,21 @@
"event-emitter": "~0.3.5" "event-emitter": "~0.3.5"
} }
}, },
"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==",
"dev": true
},
"es6-promisify": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
"integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
"dev": true,
"requires": {
"es6-promise": "^4.0.3"
}
},
"es6-set": { "es6-set": {
"version": "0.1.5", "version": "0.1.5",
"resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
...@@ -7922,6 +7943,112 @@ ...@@ -7922,6 +7943,112 @@
} }
} }
}, },
"geckodriver": {
"version": "1.19.1",
"resolved": "https://registry.npmjs.org/geckodriver/-/geckodriver-1.19.1.tgz",
"integrity": "sha512-xWL/+eEhQ6+t98rc1c+xVM3hshDJibXtZf9WJA3sshxq4k5L1PBwfmswyBmmlKUfBr4xuC256gLVC2RxFhiCsQ==",
"dev": true,
"requires": {
"adm-zip": "0.4.11",
"bluebird": "3.4.6",
"got": "5.6.0",
"https-proxy-agent": "3.0.0",
"tar": "4.4.2"
},
"dependencies": {
"agent-base": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz",
"integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==",
"dev": true,
"requires": {
"es6-promisify": "^5.0.0"
}
},
"bluebird": {
"version": "3.4.6",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.6.tgz",
"integrity": "sha1-AdqNgh2HgT0ViWfnQ9X+bGLPjA8=",
"dev": true
},
"got": {
"version": "5.6.0",
"resolved": "https://registry.npmjs.org/got/-/got-5.6.0.tgz",
"integrity": "sha1-ux1+4WO3gIK7yOuDbz85UATqb78=",
"dev": true,
"requires": {
"create-error-class": "^3.0.1",
"duplexer2": "^0.1.4",
"is-plain-obj": "^1.0.0",
"is-redirect": "^1.0.0",
"is-retry-allowed": "^1.0.0",
"is-stream": "^1.0.0",
"lowercase-keys": "^1.0.0",
"node-status-codes": "^1.0.0",
"object-assign": "^4.0.1",
"parse-json": "^2.1.0",
"pinkie-promise": "^2.0.0",
"read-all-stream": "^3.0.0",
"readable-stream": "^2.0.5",
"timed-out": "^2.0.0",
"unzip-response": "^1.0.0",
"url-parse-lax": "^1.0.0"
}
},
"https-proxy-agent": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-3.0.0.tgz",
"integrity": "sha512-y4jAxNEihqvBI5F3SaO2rtsjIOnnNA8sEbuiP+UhJZJHeM2NRm6c09ax2tgqme+SgUUvjao2fJXF4h3D6Cb2HQ==",
"dev": true,
"requires": {
"agent-base": "^4.3.0",
"debug": "^3.1.0"
}
},
"parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
"dev": true,
"requires": {
"error-ex": "^1.2.0"
}
},
"tar": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/tar/-/tar-4.4.2.tgz",
"integrity": "sha512-BfkE9CciGGgDsATqkikUHrQrraBCO+ke/1f6SFAEMnxyyfN9lxC+nW1NFWMpqH865DhHIy9vQi682gk1X7friw==",
"dev": true,
"requires": {
"chownr": "^1.0.1",
"fs-minipass": "^1.2.5",
"minipass": "^2.2.4",
"minizlib": "^1.1.0",
"mkdirp": "^0.5.0",
"safe-buffer": "^5.1.2",
"yallist": "^3.0.2"
}
},
"timed-out": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz",
"integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=",
"dev": true
},
"unzip-response": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-1.0.2.tgz",
"integrity": "sha1-uYTwh3/AqJwsdzzB73tbIytbBv4=",
"dev": true
},
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
}
}
},
"generate-function": { "generate-function": {
"version": "2.3.1", "version": "2.3.1",
"resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz",
...@@ -11031,6 +11158,12 @@ ...@@ -11031,6 +11158,12 @@
"semver": "^6.3.0" "semver": "^6.3.0"
} }
}, },
"node-status-codes": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/node-status-codes/-/node-status-codes-1.0.0.tgz",
"integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8=",
"dev": true
},
"nodent": { "nodent": {
"version": "3.2.11", "version": "3.2.11",
"resolved": "https://registry.npmjs.org/nodent/-/nodent-3.2.11.tgz", "resolved": "https://registry.npmjs.org/nodent/-/nodent-3.2.11.tgz",
...@@ -13788,6 +13921,16 @@ ...@@ -13788,6 +13921,16 @@
"integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==", "integrity": "sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q==",
"dev": true "dev": true
}, },
"read-all-stream": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz",
"integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=",
"dev": true,
"requires": {
"pinkie-promise": "^2.0.0",
"readable-stream": "^2.0.0"
}
},
"read-cmd-shim": { "read-cmd-shim": {
"version": "1.0.5", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz", "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz",
......
...@@ -65,7 +65,7 @@ ...@@ -65,7 +65,7 @@
"remixd": "0.1.8-alpha.10", "remixd": "0.1.8-alpha.10",
"request": "^2.83.0", "request": "^2.83.0",
"rimraf": "^2.6.1", "rimraf": "^2.6.1",
"selenium-standalone": "^6.0.1", "selenium-standalone": "^6.17.0",
"semver": "^6.1.2", "semver": "^6.1.2",
"solc": "^0.6.0", "solc": "^0.6.0",
"swarmgw": "^0.3.1", "swarmgw": "^0.3.1",
...@@ -162,6 +162,7 @@ ...@@ -162,6 +162,7 @@
"lint": "standard | notify-error", "lint": "standard | notify-error",
"make-mock-compiler": "node ci/makeMockCompiler.js", "make-mock-compiler": "node ci/makeMockCompiler.js",
"minify": "uglifyjs --in-source-map inline --source-map-inline -c warnings=false", "minify": "uglifyjs --in-source-map inline --source-map-inline -c warnings=false",
"nightwatch_parallel": "nightwatch -e chrome,firefox --config nightwatch.js",
"nightwatch_local_firefox": "nightwatch --config nightwatch.js --env firefox", "nightwatch_local_firefox": "nightwatch --config nightwatch.js --env firefox",
"nightwatch_local_chrome": "nightwatch --config nightwatch.js --env chrome", "nightwatch_local_chrome": "nightwatch --config nightwatch.js --env chrome",
"nightwatch_local_ballot": "nightwatch ./test-browser/tests/ballot.js --config nightwatch.js --env chrome ", "nightwatch_local_ballot": "nightwatch ./test-browser/tests/ballot.js --config nightwatch.js --env chrome ",
......
module.exports = {
version: '3.8.1',
baseURL: 'https://selenium-release.storage.googleapis.com',
drivers: {
chrome: {
version: '2.39',
arch: process.arch,
baseURL: 'https://chromedriver.storage.googleapis.com'
}
}
}
...@@ -3,11 +3,11 @@ const EventEmitter = require('events') ...@@ -3,11 +3,11 @@ const EventEmitter = require('events')
class ExecuteScript extends EventEmitter { class ExecuteScript extends EventEmitter {
command (script) { command (script) {
this.api this.api
.clearValue('span[data-id="terminalCliInput"]') .clearValue('*[data-id="terminalCliInput"]')
.click('div[data-id="terminalCli"]') .click('*[data-id="terminalCli"]')
.keys(script) .sendKeys('*[data-id="terminalCliInput"]', script)
.keys(this.api.Keys.ENTER) .sendKeys('*[data-id="terminalCliInput"]', this.api.Keys.ENTER)
.keys(this.api.Keys.ENTER) // that's a bug... sometimes we need to press 2 times to execute a command .sendKeys('*[data-id="terminalCliInput"]', this.api.Keys.ENTER)
.perform(() => { .perform(() => {
this.emit('complete') this.emit('complete')
}) })
......
...@@ -19,6 +19,8 @@ module.exports = { ...@@ -19,6 +19,8 @@ module.exports = {
- switch to a file in the new gist - switch to a file in the new gist
*/ */
console.log('token', process.env.gist_token) console.log('token', process.env.gist_token)
const runtimeBrowser = browser.capabilities.browserName
browser browser
.waitForElementVisible('*[data-id="remixIdeIconPanel"]', 10000) .waitForElementVisible('*[data-id="remixIdeIconPanel"]', 10000)
.clickLaunchIcon('fileExplorers') .clickLaunchIcon('fileExplorers')
...@@ -35,8 +37,8 @@ module.exports = { ...@@ -35,8 +37,8 @@ module.exports = {
browser browser
.modalFooterCancelClick() .modalFooterCancelClick()
.executeScript(`remix.loadgist('${gistid}')`) .executeScript(`remix.loadgist('${gistid}')`)
.switchFile('browser/gists') if (runtimeBrowser === 'chrome') browser.switchFile('browser/gists')
.switchFile(`browser/gists/${gistid}`) browser.switchFile(`browser/gists/${gistid}`)
.switchFile(`browser/gists/${gistid}/1_Storage.sol`) .switchFile(`browser/gists/${gistid}/1_Storage.sol`)
.perform(done) .perform(done)
} }
......
...@@ -52,15 +52,20 @@ module.exports = { ...@@ -52,15 +52,20 @@ module.exports = {
when a relative import is used (i.e import "openzeppelin-solidity/contracts/math/SafeMath.sol") when a relative import is used (i.e import "openzeppelin-solidity/contracts/math/SafeMath.sol")
remix (as well as truffle) try to resolve it against the node_modules and installed_contracts folder. remix (as well as truffle) try to resolve it against the node_modules and installed_contracts folder.
*/ */
browser const browserName = browser.options.desiredCapabilities.browserName
return browserName === 'chrome' ? browser
.waitForElementVisible('#icon-panel', 2000) .waitForElementVisible('#icon-panel', 2000)
.clickLaunchIcon('fileExplorers') .clickLaunchIcon('fileExplorers')
.addFile('test_import_node_modules.sol', sources[3]['browser/test_import_node_modules.sol']) .addFile('test_import_node_modules.sol', sources[3]['browser/test_import_node_modules.sol'])
.clickLaunchIcon('solidity') .clickLaunchIcon('solidity')
.testContracts('test_import_node_modules.sol', sources[3]['browser/test_import_node_modules.sol'], ['SafeMath']) .testContracts('test_import_node_modules.sol', sources[3]['browser/test_import_node_modules.sol'], ['SafeMath'])
: ''
}, },
'Import from node_modules and reference a github import': function (browser) { 'Import from node_modules and reference a github import': function (browser) {
browser const browserName = browser.options.desiredCapabilities.browserName
return browserName === 'chrome' ? browser
.waitForElementVisible('#icon-panel', 2000) .waitForElementVisible('#icon-panel', 2000)
.clickLaunchIcon('fileExplorers') .clickLaunchIcon('fileExplorers')
.addFile('test_import_node_modules_with_github_import.sol', sources[4]['browser/test_import_node_modules_with_github_import.sol']) .addFile('test_import_node_modules_with_github_import.sol', sources[4]['browser/test_import_node_modules_with_github_import.sol'])
...@@ -70,6 +75,7 @@ module.exports = { ...@@ -70,6 +75,7 @@ module.exports = {
.clickLaunchIcon('pluginManager') .clickLaunchIcon('pluginManager')
.scrollAndClick('#pluginManager article[id="remixPluginManagerListItem_remixd"] button') .scrollAndClick('#pluginManager article[id="remixPluginManagerListItem_remixd"] button')
.end() .end()
: ''
}, },
tearDown: sauce tearDown: sauce
} }
......
...@@ -26,6 +26,7 @@ function runTests (browser) { ...@@ -26,6 +26,7 @@ function runTests (browser) {
.switchFile('browser/3_Ballot.sol') .switchFile('browser/3_Ballot.sol')
.clickLaunchIcon('solidityUnitTesting') .clickLaunchIcon('solidityUnitTesting')
.scrollAndClick('#runTestsTabRunAction') .scrollAndClick('#runTestsTabRunAction')
.pause(5000)
.waitForElementPresent('#solidityUnittestsOutput div[class^="testPass"]') .waitForElementPresent('#solidityUnittestsOutput div[class^="testPass"]')
.pause(10000) .pause(10000)
.assert.containsText('#solidityUnittestsOutput', 'browser/4_Ballot_test.sol (BallotTest)') .assert.containsText('#solidityUnittestsOutput', 'browser/4_Ballot_test.sol (BallotTest)')
......
...@@ -26,7 +26,7 @@ module.exports = { ...@@ -26,7 +26,7 @@ module.exports = {
browser browser
.waitForElementVisible('*[data-id="terminalCli"]') .waitForElementVisible('*[data-id="terminalCli"]')
.click('*[data-id="terminalCli"]') .click('*[data-id="terminalCli"]')
.keys('remix.') .sendKeys('*[data-id="terminalCliInput"]', 'remix.')
.assert.visible('*[data-id="autoCompletePopUpAutoCompleteItem"]') .assert.visible('*[data-id="autoCompletePopUpAutoCompleteItem"]')
}, },
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment