Unverified Commit 5fc73ba6 authored by liuzhe-lz's avatar liuzhe-lz Committed by GitHub
Browse files

Refactor NNI Manager UT (Stage 1) - setup toolchain (#4109)

parent 2b9f5f8c
...@@ -11,7 +11,7 @@ import { execCopydir, tarAdd, validateCodeDir } from '../../training_service/com ...@@ -11,7 +11,7 @@ import { execCopydir, tarAdd, validateCodeDir } from '../../training_service/com
const deleteFolderRecursive = (filePath: string) => { const deleteFolderRecursive = (filePath: string) => {
if (fs.existsSync(filePath)) { if (fs.existsSync(filePath)) {
fs.readdirSync(filePath).forEach((file, index) => { fs.readdirSync(filePath).forEach((file, _index) => {
const curPath = path.join(filePath, file); const curPath = path.join(filePath, file);
if (fs.lstatSync(curPath).isDirectory()) { // recurse if (fs.lstatSync(curPath).isDirectory()) { // recurse
deleteFolderRecursive(curPath); deleteFolderRecursive(curPath);
......
...@@ -3,10 +3,10 @@ ...@@ -3,10 +3,10 @@
'use strict'; 'use strict';
import * as chai from 'chai'; import chai from 'chai';
import * as chaiAsPromised from 'chai-as-promised'; import chaiAsPromised from 'chai-as-promised';
import * as fs from 'fs'; import fs from 'fs';
import * as tmp from 'tmp'; import tmp from 'tmp';
import * as component from '../../common/component'; import * as component from '../../common/component';
import { cleanupUnitTest, prepareUnitTest } from '../../common/utils'; import { cleanupUnitTest, prepareUnitTest } from '../../common/utils';
import { TrialConfigMetadataKey } from '../../training_service/common/trialConfigMetadataKey'; import { TrialConfigMetadataKey } from '../../training_service/common/trialConfigMetadataKey';
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
'use strict'; 'use strict';
import * as chai from 'chai'; import chai from 'chai';
import * as chaiAsPromised from 'chai-as-promised'; import chaiAsPromised from 'chai-as-promised';
import * as fs from 'fs'; import fs from 'fs';
import * as path from 'path'; import path from 'path';
import * as tmp from 'tmp'; import tmp from 'tmp';
import * as component from '../../common/component'; import * as component from '../../common/component';
import { TrialJobApplicationForm, TrialJobDetail} from '../../common/trainingService'; import { TrialJobApplicationForm, TrialJobDetail} from '../../common/trainingService';
import { cleanupUnitTest, delay, prepareUnitTest, getExperimentRootDir } from '../../common/utils'; import { cleanupUnitTest, delay, prepareUnitTest, getExperimentRootDir } from '../../common/utils';
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
'use strict'; 'use strict';
import * as chai from 'chai'; import chai from 'chai';
import * as chaiAsPromised from 'chai-as-promised'; import chaiAsPromised from 'chai-as-promised';
import * as component from '../../../common/component'; import * as component from '../../../common/component';
import { cleanupUnitTest, prepareUnitTest } from '../../../common/utils'; import { cleanupUnitTest, prepareUnitTest } from '../../../common/utils';
import { LinuxCommands } from '../../../training_service/remote_machine/extends/linuxCommands'; import { LinuxCommands } from '../../../training_service/remote_machine/extends/linuxCommands';
......
...@@ -3,10 +3,10 @@ ...@@ -3,10 +3,10 @@
'use strict'; 'use strict';
import * as cpp from 'child-process-promise'; import cpp from 'child-process-promise';
import * as fs from 'fs'; import fs from 'fs';
import * as chai from 'chai'; import chai from 'chai';
import * as chaiAsPromised from 'chai-as-promised'; import chaiAsPromised from 'chai-as-promised';
import { ShellExecutor } from '../../../training_service/remote_machine/shellExecutor'; import { ShellExecutor } from '../../../training_service/remote_machine/shellExecutor';
import { prepareUnitTest, cleanupUnitTest } from '../../../common/utils'; import { prepareUnitTest, cleanupUnitTest } from '../../../common/utils';
......
...@@ -3,8 +3,8 @@ ...@@ -3,8 +3,8 @@
'use strict'; 'use strict';
import * as chai from 'chai'; import chai from 'chai';
import * as chaiAsPromised from 'chai-as-promised'; import chaiAsPromised from 'chai-as-promised';
import * as component from '../../../common/component'; import * as component from '../../../common/component';
import { cleanupUnitTest, prepareUnitTest } from '../../../common/utils'; import { cleanupUnitTest, prepareUnitTest } from '../../../common/utils';
import { WindowsCommands } from '../../../training_service/remote_machine/extends/windowsCommands'; import { WindowsCommands } from '../../../training_service/remote_machine/extends/windowsCommands';
......
...@@ -3,11 +3,11 @@ ...@@ -3,11 +3,11 @@
'use strict'; 'use strict';
import * as assert from 'assert'; import assert from 'assert';
import * as chai from 'chai'; import chai from 'chai';
import * as chaiAsPromised from 'chai-as-promised'; import chaiAsPromised from 'chai-as-promised';
import * as fs from 'fs'; import fs from 'fs';
import * as tmp from 'tmp'; import tmp from 'tmp';
import * as component from '../../common/component'; import * as component from '../../common/component';
import { TrialJobApplicationForm, TrialJobDetail, TrainingService } from '../../common/trainingService'; import { TrialJobApplicationForm, TrialJobDetail, TrainingService } from '../../common/trainingService';
import { cleanupUnitTest, delay, prepareUnitTest } from '../../common/utils'; import { cleanupUnitTest, delay, prepareUnitTest } from '../../common/utils';
...@@ -133,10 +133,10 @@ describe('Unit Test for RemoteMachineTrainingService', () => { ...@@ -133,10 +133,10 @@ describe('Unit Test for RemoteMachineTrainingService', () => {
}; };
const jobDetail: TrialJobDetail = await remoteMachineTrainingService.submitTrialJob(form); const jobDetail: TrialJobDetail = await remoteMachineTrainingService.submitTrialJob(form);
// Add metrics listeners // Add metrics listeners
const listener1 = function f1(metric: any) { const listener1 = function f1(_metric: any) {
} }
const listener2 = function f1(metric: any) { const listener2 = function f1(_metric: any) {
} }
remoteMachineTrainingService.addTrialJobMetricListener(listener1); remoteMachineTrainingService.addTrialJobMetricListener(listener1);
......
...@@ -26,7 +26,7 @@ export class UtCommandChannel extends CommandChannel { ...@@ -26,7 +26,7 @@ export class UtCommandChannel extends CommandChannel {
return this.receivedCommands.shift(); return this.receivedCommands.shift();
} }
public async config(_key: string, value: any): Promise<void> { public async config(_key: string, _value: any): Promise<void> {
// do nothing // do nothing
} }
......
...@@ -58,7 +58,7 @@ export class UtEnvironmentService extends EnvironmentService { ...@@ -58,7 +58,7 @@ export class UtEnvironmentService extends EnvironmentService {
// do nothing // do nothing
} }
public async refreshEnvironmentsStatus(environments: EnvironmentInformation[]): Promise<void> { public async refreshEnvironmentsStatus(_environments: EnvironmentInformation[]): Promise<void> {
// do nothing // do nothing
} }
......
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
'use strict'; import assert from 'assert';
import bodyParser from 'body-parser';
import * as assert from 'assert';
import * as bodyParser from 'body-parser';
import { Request, Response, Router } from 'express'; import { Request, Response, Router } from 'express';
import * as fs from 'fs'; import fs from 'fs';
import * as path from 'path'; import path from 'path';
import { Writable } from 'stream'; import { Writable } from 'stream';
import { String } from 'typescript-string-operations'; import { String } from 'typescript-string-operations';
import * as component from '../../common/component'; import * as component from 'common/component';
import { getBasePort, getExperimentId } from '../../common/experimentStartupInfo'; import { getBasePort, getExperimentId } from 'common/experimentStartupInfo';
import { RestServer } from '../../common/restServer'; import { RestServer } from 'common/restServer';
import { getExperimentRootDir, mkDirPSync } from '../../common/utils'; import { getExperimentRootDir, mkDirPSync } from 'common/utils';
/** /**
* Cluster Job Training service Rest server, provides rest API to support Cluster job metrics update * Cluster Job Training service Rest server, provides rest API to support Cluster job metrics update
...@@ -108,7 +106,7 @@ export abstract class ClusterJobRestServer extends RestServer { ...@@ -108,7 +106,7 @@ export abstract class ClusterJobRestServer extends RestServer {
router.post(`/update-metrics/${this.expId}/:trialId`, (req: Request, res: Response) => { router.post(`/update-metrics/${this.expId}/:trialId`, (req: Request, res: Response) => {
try { try {
this.log.info(`Get update-metrics request, trial job id is ${req.params.trialId}`); this.log.info(`Get update-metrics request, trial job id is ${req.params['trialId']}`);
this.log.info('update-metrics body is', req.body); this.log.info('update-metrics body is', req.body);
this.handleTrialMetrics(req.body.jobId, req.body.metrics); this.handleTrialMetrics(req.body.jobId, req.body.metrics);
...@@ -127,7 +125,7 @@ export abstract class ClusterJobRestServer extends RestServer { ...@@ -127,7 +125,7 @@ export abstract class ClusterJobRestServer extends RestServer {
this.errorMessage = `Version check failed, didn't get version check response from trialKeeper,` this.errorMessage = `Version check failed, didn't get version check response from trialKeeper,`
+ ` please check your NNI version in NNIManager and TrialKeeper!`; + ` please check your NNI version in NNIManager and TrialKeeper!`;
} }
const trialLogDir: string = path.join(getExperimentRootDir(), 'trials', req.params.trialId); const trialLogDir: string = path.join(getExperimentRootDir(), 'trials', req.params['trialId']);
mkDirPSync(trialLogDir); mkDirPSync(trialLogDir);
const trialLogPath: string = path.join(trialLogDir, 'stdout_log_collection.log'); const trialLogPath: string = path.join(trialLogDir, 'stdout_log_collection.log');
try { try {
...@@ -136,7 +134,7 @@ export abstract class ClusterJobRestServer extends RestServer { ...@@ -136,7 +134,7 @@ export abstract class ClusterJobRestServer extends RestServer {
const metricsContent: any = req.body.msg.match(this.NNI_METRICS_PATTERN); const metricsContent: any = req.body.msg.match(this.NNI_METRICS_PATTERN);
if (metricsContent && metricsContent.groups) { if (metricsContent && metricsContent.groups) {
const key: string = 'metrics'; const key: string = 'metrics';
this.handleTrialMetrics(req.params.trialId, [metricsContent.groups[key]]); this.handleTrialMetrics(req.params['trialId'], [metricsContent.groups[key]]);
skipLogging = true; skipLogging = true;
} }
} }
......
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
'use strict';
export const CONTAINER_INSTALL_NNI_SHELL_FORMAT: string = export const CONTAINER_INSTALL_NNI_SHELL_FORMAT: string =
`#!/bin/bash `#!/bin/bash
if python3 -c 'import nni' > /dev/null 2>&1; then if python3 -c 'import nni' > /dev/null 2>&1; then
......
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
'use strict';
export enum ScheduleResultType { export enum ScheduleResultType {
// Schedule succeeded // Schedule succeeded
SUCCEED, SUCCEED,
...@@ -65,7 +63,9 @@ export class GPUSummary { ...@@ -65,7 +63,9 @@ export class GPUSummary {
export function parseGpuIndices(gpuIndices?: string): Set<number> | undefined { export function parseGpuIndices(gpuIndices?: string): Set<number> | undefined {
if (gpuIndices !== undefined) { if (gpuIndices === undefined) {
return undefined;
}
const indices: number[] = gpuIndices.split(',') const indices: number[] = gpuIndices.split(',')
.map((x: string) => parseInt(x, 10)); .map((x: string) => parseInt(x, 10));
if (indices.length > 0) { if (indices.length > 0) {
...@@ -73,7 +73,6 @@ export function parseGpuIndices(gpuIndices?: string): Set<number> | undefined { ...@@ -73,7 +73,6 @@ export function parseGpuIndices(gpuIndices?: string): Set<number> | undefined {
} else { } else {
throw new Error('gpuIndices can not be empty if specified.'); throw new Error('gpuIndices can not be empty if specified.');
} }
}
} }
export const GPU_INFO_COLLECTOR_FORMAT_WINDOWS: string = export const GPU_INFO_COLLECTOR_FORMAT_WINDOWS: string =
......
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
'use strict'; import { TrialJobStatus } from 'common/trainingService';
import { TrialJobStatus } from '../../common/trainingService';
/** /**
* Trial job metrics class * Trial job metrics class
......
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
'use strict';
/** /**
* Trial job configuration class * Trial job configuration class
* Representing trial job configurable properties * Representing trial job configurable properties
......
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
'use strict';
/** /**
* Enum of metadata keys for configuration * Enum of metadata keys for configuration
*/ */
......
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
'use strict'; import cpp from 'child-process-promise';
import cp from 'child_process';
import * as cpp from 'child-process-promise'; import fs from 'fs';
import * as cp from 'child_process';
import * as fs from 'fs';
import ignore from 'ignore'; import ignore from 'ignore';
import * as path from 'path'; import path from 'path';
import * as tar from 'tar'; import tar from 'tar';
import { getLogger } from '../../common/log'; import { getLogger } from 'common/log';
import { String } from 'typescript-string-operations'; import { String } from 'typescript-string-operations';
import { GPU_INFO_COLLECTOR_FORMAT_WINDOWS } from './gpuData'; import { GPU_INFO_COLLECTOR_FORMAT_WINDOWS } from './gpuData';
......
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
'use strict'; import fs from 'fs';
import * as fs from 'fs';
import { GeneralK8sClient, KubernetesCRDClient } from '../kubernetesApiClient'; import { GeneralK8sClient, KubernetesCRDClient } from '../kubernetesApiClient';
/** /**
......
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
'use strict';
import {KubernetesTrialConfig} from "../kubernetesConfig"; import {KubernetesTrialConfig} from "../kubernetesConfig";
/** /**
......
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
'use strict';
import { AdlClientV1 } from './adlApiClient'; import { AdlClientV1 } from './adlApiClient';
import { KubernetesTrialJobDetail} from '../kubernetesData'; import { KubernetesTrialJobDetail} from '../kubernetesData';
import { KubernetesJobInfoCollector } from '../kubernetesJobInfoCollector'; import { KubernetesJobInfoCollector } from '../kubernetesJobInfoCollector';
......
// Copyright (c) Microsoft Corporation. // Copyright (c) Microsoft Corporation.
// Licensed under the MIT license. // Licensed under the MIT license.
'use strict'; import * as component from 'common/component';
import * as component from '../../../common/component';
import { KubernetesJobRestServer } from '../kubernetesJobRestServer'; import { KubernetesJobRestServer } from '../kubernetesJobRestServer';
import { AdlTrainingService } from './adlTrainingService'; import { AdlTrainingService } from './adlTrainingService';
......
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