You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

109 lines
4.1 KiB

3 years ago
  1. /* global process */
  2. var WebDriver = require("selenium-webdriver");
  3. var nThen = require('nthen');
  4. if (process.env.TRAVIS_PULL_REQUEST && process.env.TRAVIS_PULL_REQUEST !== 'false') {
  5. // We can't do saucelabs on pull requests so don't fail.
  6. return;
  7. }
  8. // https://wiki.saucelabs.com/display/DOCS/Platform+Configurator#/
  9. var driver;
  10. if (process.env.SAUCE_USERNAME !== undefined) {
  11. var browserArray = process.env.BROWSER.split(':');
  12. driver = new WebDriver.Builder().usingServer(
  13. 'http://'+ process.env.SAUCE_USERNAME+':'+process.env.SAUCE_ACCESS_KEY+'@ondemand.saucelabs.com:80/wd/hub'
  14. ).withCapabilities({
  15. "tunnel-identifier": process.env.TRAVIS_JOB_NUMBER,
  16. "build": process.env.TRAVIS_JOB_NUMBER,
  17. "username": process.env.SAUCE_USERNAME,
  18. "accessKey": process.env.SAUCE_ACCESS_KEY,
  19. }).forBrowser(browserArray[0], browserArray[1], browserArray[2]).build();
  20. } else {
  21. driver = new WebDriver.Builder().withCapabilities({
  22. browserName: process.env.BROWSER || "chrome"
  23. }).build();
  24. }
  25. var SC_GET_DATA = "return (window.__CRYPTPAD_TEST__) ? window.__CRYPTPAD_TEST__.getData() : '[]'";
  26. var failed = false;
  27. var nt = nThen(function (waitFor) {
  28. driver.get('http://localhost:3000/auth/').then(waitFor());
  29. }).nThen(function (waitFor) {
  30. console.log('initialized');
  31. driver.manage().addCookie({name: 'test', value: 'auto'}).then(waitFor());
  32. }).nThen;
  33. [
  34. // login test must happen after register test
  35. ['/register/', {}],
  36. ['/login/', {}],
  37. ['/assert/', {}],
  38. ['/auth/', {}],
  39. ['/pad/#/1/edit/1KXFMz5L+nLgvHqXVJjyiQ/IUAE6IzVVg5UIYFOPglmVxvV/', {}],
  40. ['/pad/#/1/view/1KXFMz5L+nLgvHqXVJjyiQ/O4kuSnJyviGVlz3qpcr4Fxc8fIK6uTeB30MfMkh86O8/', {}],
  41. ['/code/#/1/edit/CWtkq8Qa2re7W1XvXZRDYg/2G7Gse5UZ8dLyGAXUdCV2fLL/', {}],
  42. ['/code/#/1/view/CWtkq8Qa2re7W1XvXZRDYg/G1pVa1EL26JRAjk28b43W7Ftc3AkdBblef1U58F3iDk/', {}],
  43. ['/slide/#/1/edit/uwKqgj8Ezh2dRaFUWSlrRQ/JkJtAb-hNzfESZEHreAeULU1/', {}],
  44. ['/slide/#/1/view/uwKqgj8Ezh2dRaFUWSlrRQ/Xa8jXl+jWMpwep41mlrhkqbRuVKGxlueH80Pbgeu5Go/', {}],
  45. ['/poll/#/1/edit/lHhnKHSs0HBsl2UGfSJoLw/ZXSsAq4BORIixuFaLVBFcxoq/', {}],
  46. ['/poll/#/1/view/lHhnKHSs0HBsl2UGfSJoLw/TGul8PhswwLh1klHpBto6yEntWtKES2+tetYrrYec4M/', {}]
  47. ].forEach(function (x) {
  48. if (failed) { return; }
  49. var url = 'http://localhost:3000' + x[0];
  50. nt = nt(function (waitFor) {
  51. var done = waitFor();
  52. console.log('\n\n-----TEST ' + url + ' -----');
  53. var waitTo = setTimeout(function () {
  54. console.log("no report in 20 seconds, timing out");
  55. failed = true;
  56. done();
  57. done = undefined;
  58. }, 20000);
  59. var logMore = function () {
  60. if (!done) { return; }
  61. driver.executeScript(SC_GET_DATA).then(waitFor(function (dataS) {
  62. if (!done) { return; }
  63. var data = JSON.parse(dataS);
  64. data.forEach(function (d) {
  65. if (d.type !== 'log') { return; }
  66. console.log('>' + d.val);
  67. });
  68. data.forEach(function (d) {
  69. if (d.type !== 'report') { return; }
  70. console.log('RESULT: ' + d.val);
  71. if (d.val !== 'passed') {
  72. if (d.error) {
  73. console.log(d.error.message);
  74. console.log(d.error.stack);
  75. }
  76. failed = true;
  77. }
  78. clearTimeout(waitTo);
  79. console.log('-----END TEST ' + url + ' -----');
  80. done();
  81. done = undefined;
  82. });
  83. if (done) { setTimeout(logMore, 50); }
  84. }));
  85. };
  86. driver.manage().addCookie({
  87. name: 'test',
  88. value: encodeURIComponent(JSON.stringify({ test:'auto', opts: x[1] }))
  89. });
  90. driver.get(url).then(waitFor(logMore));
  91. }).nThen;
  92. });
  93. nt(function (waitFor) {
  94. driver.quit().then(waitFor(function () {
  95. if (failed) { process.exit(100); }
  96. }));
  97. });