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