| 
									
										
										
										
											2020-01-13 14:40:21 -08:00
										 |  |  | /** | 
					
						
							|  |  |  |  * @license | 
					
						
							| 
									
										
										
										
											2020-05-19 12:08:49 -07:00
										 |  |  |  * Copyright Google LLC All Rights Reserved. | 
					
						
							| 
									
										
										
										
											2020-01-13 14:40:21 -08:00
										 |  |  |  * | 
					
						
							|  |  |  |  * Use of this source code is governed by an MIT-style license that can be | 
					
						
							|  |  |  |  * found in the LICENSE file at https://angular.io/license
 | 
					
						
							|  |  |  |  */ | 
					
						
							| 
									
										
										
										
											2020-05-19 12:08:49 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-13 14:40:21 -08:00
										 |  |  | 'use strict'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const shell = require('shelljs'); | 
					
						
							|  |  |  | const karmaBin = require.resolve('karma/bin/karma'); | 
					
						
							| 
									
										
										
										
											2021-04-13 19:07:12 +02:00
										 |  |  | const {runfiles} = require('@bazel/runfiles'); | 
					
						
							| 
									
										
										
										
											2020-04-08 08:28:03 -07:00
										 |  |  | const sauceService = runfiles.resolveWorkspaceRelative(process.argv[2]); | 
					
						
							| 
									
										
										
										
											2020-01-13 14:40:21 -08:00
										 |  |  | process.argv = [ | 
					
						
							|  |  |  |   process.argv[0], | 
					
						
							|  |  |  |   karmaBin, | 
					
						
							|  |  |  |   ...process.argv.splice(3), | 
					
						
							|  |  |  | ]; | 
					
						
							|  |  |  | try { | 
					
						
							|  |  |  |   console.error(`Setting up environment for SauceLabs karma tests...`); | 
					
						
							|  |  |  |   // KARMA_WEB_TEST_MODE is set which informs /karma-js.conf.js that it should
 | 
					
						
							|  |  |  |   // run the test with the karma saucelabs launcher
 | 
					
						
							|  |  |  |   process.env['KARMA_WEB_TEST_MODE'] = 'SL_REQUIRED'; | 
					
						
							| 
									
										
										
										
											2020-02-06 14:17:03 +01:00
										 |  |  |   // Saucelabs parameters read from a temporary file that is created by the `sauce-service`. This
 | 
					
						
							|  |  |  |   // will be `null` if the test runs locally without the `sauce-service` being started.
 | 
					
						
							|  |  |  |   const saucelabsParams = readLocalSauceConnectParams(); | 
					
						
							| 
									
										
										
										
											2020-01-13 14:40:21 -08:00
										 |  |  |   // Setup required SAUCE_* env if they are not already set
 | 
					
						
							|  |  |  |   if (!process.env['SAUCE_USERNAME'] || !process.env['SAUCE_ACCESS_KEY'] || | 
					
						
							|  |  |  |       !process.env['SAUCE_TUNNEL_IDENTIFIER']) { | 
					
						
							| 
									
										
										
										
											2020-02-06 14:17:03 +01:00
										 |  |  |     // We print a helpful error message below if the required Saucelabs parameters have not
 | 
					
						
							|  |  |  |     // been specified in test environment, and the `sauce-service` params file has not been
 | 
					
						
							|  |  |  |     // created either.
 | 
					
						
							|  |  |  |     if (saucelabsParams === null) { | 
					
						
							|  |  |  |       console.error(`
 | 
					
						
							|  |  |  | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | 
					
						
							| 
									
										
										
										
											2020-01-13 14:40:21 -08:00
										 |  |  | !!! Make sure that you have run "yarn bazel run //tools/saucelabs:sauce_service_setup" | 
					
						
							|  |  |  | !!! (or "./tools/saucelabs/sauce-service.sh setup") before the test target. Alternately | 
					
						
							|  |  |  | !!! you can provide the required SAUCE_* environment variables (SAUCE_USERNAME, SAUCE_ACCESS_KEY & | 
					
						
							|  |  |  | !!! SAUCE_TUNNEL_IDENTIFIER) to the test with --test_env or --define but this may prevent bazel from | 
					
						
							|  |  |  | !!! using cached test results. | 
					
						
							|  |  |  | !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!`);
 | 
					
						
							|  |  |  |       process.exit(1); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-02-06 14:17:03 +01:00
										 |  |  |     process.env['SAUCE_USERNAME'] = saucelabsParams.SAUCE_USERNAME; | 
					
						
							|  |  |  |     process.env['SAUCE_ACCESS_KEY'] = saucelabsParams.SAUCE_ACCESS_KEY; | 
					
						
							|  |  |  |     process.env['SAUCE_TUNNEL_IDENTIFIER'] = saucelabsParams.SAUCE_TUNNEL_IDENTIFIER; | 
					
						
							|  |  |  |     process.env['SAUCE_LOCALHOST_ALIAS_DOMAIN'] = saucelabsParams.SAUCE_LOCALHOST_ALIAS_DOMAIN; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   // Pass through the optional `SAUCE_LOCALHOST_ALIAS_DOMAIN` environment variable. The
 | 
					
						
							|  |  |  |   // variable is usually specified on CI, but is not required for testing with Saucelabs.
 | 
					
						
							|  |  |  |   if (!process.env['SAUCE_LOCALHOST_ALIAS_DOMAIN'] && saucelabsParams !== null) { | 
					
						
							|  |  |  |     process.env['SAUCE_LOCALHOST_ALIAS_DOMAIN'] = saucelabsParams.SAUCE_LOCALHOST_ALIAS_DOMAIN; | 
					
						
							| 
									
										
										
										
											2020-01-13 14:40:21 -08:00
										 |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   const scStart = `${sauceService} start-ready-wait`; | 
					
						
							|  |  |  |   console.error(`Starting SauceConnect (${scStart})...`); | 
					
						
							|  |  |  |   const result = shell.exec(scStart).code; | 
					
						
							|  |  |  |   if (result !== 0) { | 
					
						
							|  |  |  |     throw new Error(`Starting SauceConnect failed with code ${result}`); | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   console.error(`Launching karma ${karmaBin}...`); | 
					
						
							| 
									
										
										
										
											2020-04-08 08:28:03 -07:00
										 |  |  |   module.constructor._load(karmaBin, this, /*isMain=*/ true); | 
					
						
							| 
									
										
										
										
											2020-01-13 14:40:21 -08:00
										 |  |  | } catch (e) { | 
					
						
							|  |  |  |   console.error(e.stack || e); | 
					
						
							|  |  |  |   process.exit(1); | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2020-02-06 14:17:03 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | function readLocalSauceConnectParams() { | 
					
						
							|  |  |  |   try { | 
					
						
							|  |  |  |     // The following path comes from /tools/saucelabs/sauce-service.sh.
 | 
					
						
							|  |  |  |     // We setup the required saucelabs environment variables here for the karma test
 | 
					
						
							|  |  |  |     // from a json file under /tmp/angular/sauce-service  so that we don't break the
 | 
					
						
							|  |  |  |     // test cache with a changing SAUCE_TUNNEL_IDENTIFIER provided through --test_env
 | 
					
						
							|  |  |  |     return require('/tmp/angular/sauce-service/sauce-connect-params.json'); | 
					
						
							|  |  |  |   } catch { | 
					
						
							|  |  |  |     return null; | 
					
						
							|  |  |  |   } | 
					
						
							|  |  |  | } |