92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			92 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								 * @license
							 | 
						||
| 
								 | 
							
								 * Copyright Google Inc. All Rights Reserved.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * 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
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/// <reference types="node" />
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import * as cluster from 'cluster';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import {ClusterExecutor} from '../../../src/execution/cluster/executor';
							 | 
						||
| 
								 | 
							
								import {ClusterMaster} from '../../../src/execution/cluster/master';
							 | 
						||
| 
								 | 
							
								import {ClusterWorker} from '../../../src/execution/cluster/worker';
							 | 
						||
| 
								 | 
							
								import {PackageJsonUpdater} from '../../../src/writing/package_json_updater';
							 | 
						||
| 
								 | 
							
								import {MockLogger} from '../../helpers/mock_logger';
							 | 
						||
| 
								 | 
							
								import {mockProperty} from '../../helpers/spy_utils';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								describe('ClusterExecutor', () => {
							 | 
						||
| 
								 | 
							
								  const runAsClusterMaster = mockProperty(cluster, 'isMaster');
							 | 
						||
| 
								 | 
							
								  let masterRunSpy: jasmine.Spy;
							 | 
						||
| 
								 | 
							
								  let workerRunSpy: jasmine.Spy;
							 | 
						||
| 
								 | 
							
								  let mockLogger: MockLogger;
							 | 
						||
| 
								 | 
							
								  let executor: ClusterExecutor;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  beforeEach(() => {
							 | 
						||
| 
								 | 
							
								    masterRunSpy = spyOn(ClusterMaster.prototype, 'run');
							 | 
						||
| 
								 | 
							
								    workerRunSpy = spyOn(ClusterWorker.prototype, 'run');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    mockLogger = new MockLogger();
							 | 
						||
| 
								 | 
							
								    executor = new ClusterExecutor(42, mockLogger, null as unknown as PackageJsonUpdater);
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  describe('execute()', () => {
							 | 
						||
| 
								 | 
							
								    describe('(on cluster master)', () => {
							 | 
						||
| 
								 | 
							
								      beforeEach(() => runAsClusterMaster(true));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      it('should log debug info about the executor', () => {
							 | 
						||
| 
								 | 
							
								        const anyFn: () => any = () => undefined;
							 | 
						||
| 
								 | 
							
								        executor.execute(anyFn, anyFn);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        expect(mockLogger.logs.debug).toEqual([
							 | 
						||
| 
								 | 
							
								          ['Running ngcc on ClusterExecutor (using 42 worker processes).'],
							 | 
						||
| 
								 | 
							
								        ]);
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      it('should delegate to `ClusterMaster#run()`', async() => {
							 | 
						||
| 
								 | 
							
								        masterRunSpy.and.returnValue('CusterMaster#run()');
							 | 
						||
| 
								 | 
							
								        const analyzeEntryPointsSpy = jasmine.createSpy('analyzeEntryPoints');
							 | 
						||
| 
								 | 
							
								        const createCompilerFnSpy = jasmine.createSpy('createCompilerFn');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        expect(await executor.execute(analyzeEntryPointsSpy, createCompilerFnSpy))
							 | 
						||
| 
								 | 
							
								            .toBe('CusterMaster#run()' as any);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        expect(masterRunSpy).toHaveBeenCalledWith();
							 | 
						||
| 
								 | 
							
								        expect(workerRunSpy).not.toHaveBeenCalled();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        expect(analyzeEntryPointsSpy).toHaveBeenCalledWith();
							 | 
						||
| 
								 | 
							
								        expect(createCompilerFnSpy).not.toHaveBeenCalled();
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    describe('(on cluster worker)', () => {
							 | 
						||
| 
								 | 
							
								      beforeEach(() => runAsClusterMaster(false));
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      it('should not log debug info about the executor', () => {
							 | 
						||
| 
								 | 
							
								        const anyFn: () => any = () => undefined;
							 | 
						||
| 
								 | 
							
								        executor.execute(anyFn, anyFn);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        expect(mockLogger.logs.debug).toEqual([]);
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								      it('should delegate to `ClusterWorker#run()`', async() => {
							 | 
						||
| 
								 | 
							
								        workerRunSpy.and.returnValue('CusterWorker#run()');
							 | 
						||
| 
								 | 
							
								        const analyzeEntryPointsSpy = jasmine.createSpy('analyzeEntryPoints');
							 | 
						||
| 
								 | 
							
								        const createCompilerFnSpy = jasmine.createSpy('createCompilerFn');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        expect(await executor.execute(analyzeEntryPointsSpy, createCompilerFnSpy))
							 | 
						||
| 
								 | 
							
								            .toBe('CusterWorker#run()' as any);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        expect(masterRunSpy).not.toHaveBeenCalledWith();
							 | 
						||
| 
								 | 
							
								        expect(workerRunSpy).toHaveBeenCalled();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        expect(analyzeEntryPointsSpy).not.toHaveBeenCalled();
							 | 
						||
| 
								 | 
							
								        expect(createCompilerFnSpy).toHaveBeenCalledWith(jasmine.any(Function));
							 | 
						||
| 
								 | 
							
								      });
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |