// Copyright (c) Microsoft Corporation. // Licensed under the MIT license. 'use strict'; import { Deferred } from 'ts-deferred'; import { Provider } from 'typescript-ioc'; import { MethodNotImplementedError } from '../../common/errors'; import { TrainingService, TrialJobApplicationForm, TrialJobDetail, TrialJobMetric } from '../../common/trainingService'; const testTrainingServiceProvider: Provider = { get: () => { return new MockedTrainingService(); } }; class MockedTrainingService extends TrainingService { public mockedMetaDataValue: string = "default"; public jobDetail1: TrialJobDetail = { id: '1234', status: 'SUCCEEDED', submitTime: Date.now(), startTime: Date.now(), endTime: Date.now(), tags: ['test'], url: 'http://test', workingDirectory: '/tmp/mocked', form: { sequenceId: 0, hyperParameters: { value: '', index: 0 } }, }; public jobDetail2: TrialJobDetail = { id: '3456', status: 'SUCCEEDED', submitTime: Date.now(), startTime: Date.now(), endTime: Date.now(), tags: ['test'], url: 'http://test', workingDirectory: '/tmp/mocked', form: { sequenceId: 1, hyperParameters: { value: '', index: 1 } }, }; public listTrialJobs(): Promise { const deferred = new Deferred(); deferred.resolve([this.jobDetail1, this.jobDetail2]); return deferred.promise; } public getTrialJob(trialJobId: string): Promise { const deferred = new Deferred(); if(trialJobId === '1234'){ deferred.resolve(this.jobDetail1); }else if(trialJobId === '3456'){ deferred.resolve(this.jobDetail2); }else{ deferred.reject(); } return deferred.promise; } public getTrialFile(_trialJobId: string, _fileName: string): Promise { throw new MethodNotImplementedError(); } async run(): Promise { } public addTrialJobMetricListener(_listener: (_metric: TrialJobMetric) => void): void { } public removeTrialJobMetricListener(_listener: (_metric: TrialJobMetric) => void): void { } public submitTrialJob(_form: TrialJobApplicationForm): Promise { const deferred = new Deferred(); return deferred.promise; } public updateTrialJob(_trialJobId: string, _form: TrialJobApplicationForm): Promise { throw new MethodNotImplementedError(); } public get isMultiPhaseJobSupported(): boolean { return false; } public cancelTrialJob(trialJobId: string, _isEarlyStopped: boolean = false): Promise { const deferred = new Deferred(); if(trialJobId === '1234' || trialJobId === '3456'){ deferred.resolve(); }else{ deferred.reject('job id error'); } return deferred.promise; } public setClusterMetadata(key: string, value: string): Promise { const deferred = new Deferred(); if(key == 'mockedMetadataKey'){ this.mockedMetaDataValue = value; deferred.resolve(); }else{ deferred.reject('key error'); } return deferred.promise; } public getClusterMetadata(key: string): Promise { const deferred = new Deferred(); if(key == 'mockedMetadataKey'){ deferred.resolve(this.mockedMetaDataValue); }else{ deferred.reject('key error'); } return deferred.promise; } public cleanUp(): Promise { return Promise.resolve(); } public getTrialOutputLocalPath(_trialJobId: string): Promise { throw new MethodNotImplementedError(); } public fetchTrialOutput(_trialJobId: string, _subpath: string): Promise { throw new MethodNotImplementedError(); } } export{MockedTrainingService, testTrainingServiceProvider}