blob: 92c86c9d990502cac6e3687e0c6091f44f1cf57f [file] [log] [blame]
import {
AddSkipTaskRuleRequest,
AddSkipTaskRuleResponse,
CancelJobRequest,
CancelJobResponse,
DeleteSkipTaskRuleRequest,
DeleteSkipTaskRuleResponse,
GetJobRequest,
GetJobResponse,
GetTaskRequest,
GetTaskResponse,
GetSkipTaskRulesRequest,
GetSkipTaskRulesResponse,
Job,
SearchJobsRequest,
SearchJobsResponse,
SearchTasksRequest,
SearchTasksResponse,
Task,
TaskSchedulerService,
TriggerJobsRequest,
TriggerJobsResponse,
} from '../rpc';
import {
job1,
task0,
task1,
task2,
task3,
task4,
job2,
skipRule1,
skipRule2,
skipRule3,
} from './fake-data';
import { JobStatus, SkipTaskRule } from '../rpc/rpc';
export * from './fake-data';
/**
* FakeTaskSchedulerService provides a mocked implementation of
* TaskSchedulerService.
*/
export class FakeTaskSchedulerService implements TaskSchedulerService {
private jobs: { [key: string]: Job } = {
[job1.id]: job1,
[job2.id]: job2,
};
private tasks: { [key: string]: Task } = {
[task0.id]: task0,
[task1.id]: task1,
[task2.id]: task2,
[task3.id]: task3,
[task4.id]: task4,
};
private jobID: number = 0;
private skipRules = [skipRule1, skipRule2, skipRule3];
triggerJobs(
triggerJobsRequest: TriggerJobsRequest,
): Promise<TriggerJobsResponse> {
const ids = triggerJobsRequest.jobs!.map((job) => `${this.jobID++}`);
return Promise.resolve({
jobIds: ids,
});
}
getJob(getJobRequest: GetJobRequest): Promise<GetJobResponse> {
return Promise.resolve({
job: this.jobs[getJobRequest.id],
});
}
cancelJob(cancelJobRequest: CancelJobRequest): Promise<CancelJobResponse> {
const job = this.jobs[cancelJobRequest.id];
job.status = JobStatus.JOB_STATUS_CANCELED;
return Promise.resolve({
job: job,
});
}
searchJobs(req: SearchJobsRequest): Promise<SearchJobsResponse> {
console.log(req);
const results: Job[] = Object.values(this.jobs).filter((job: Job) => {
if (req.hasRepo && job.repoState?.repo != req.repo) {
return false;
} if (req.hasRevision && job.repoState?.revision != req.revision) {
return false;
} if (req.hasIssue && req.issue != job.repoState!.patch!.issue) {
return false;
} if (
req.hasPatchset
&& req.patchset != job.repoState?.patch?.patchset
) {
return false;
} if (req.hasName && job.name != req.name) {
return false;
} if (
req.hasBuildbucketBuildId
&& job.buildbucketBuildId != req.buildbucketBuildId
) {
return false;
} if (req.hasStatus && job.status != req.status) {
return false;
} if (
req.hasTimeStart
&& new Date(job.createdAt!).getTime() <= new Date(req.timeStart!).getTime()
) {
return false;
} if (
req.hasTimeEnd
&& new Date(job.createdAt!).getTime() > new Date(req.timeEnd!).getTime()
) {
return false;
} if (req.hasIsForce && job.isForce != req.isForce) {
return false;
}
return true;
});
console.log(results);
return Promise.resolve({
jobs: results,
});
}
getTask(getTaskRequest: GetTaskRequest): Promise<GetTaskResponse> {
return Promise.resolve({
task: this.tasks[getTaskRequest.id],
});
}
searchTasks(
searchTasksRequest: SearchTasksRequest,
): Promise<SearchTasksResponse> {
return new Promise((_, reject) => {
reject('not implemented');
});
}
getSkipTaskRules(
getSkipTaskRulesRequest: GetSkipTaskRulesRequest,
): Promise<GetSkipTaskRulesResponse> {
return Promise.resolve({ rules: this.skipRules.slice() });
}
addSkipTaskRule(
addSkipTaskRuleRequest: AddSkipTaskRuleRequest,
): Promise<AddSkipTaskRuleResponse> {
this.skipRules.push({
addedBy: 'you@google.com',
taskSpecPatterns: addSkipTaskRuleRequest.taskSpecPatterns,
commits: addSkipTaskRuleRequest.commits,
description: addSkipTaskRuleRequest.description,
name: addSkipTaskRuleRequest.name,
});
return Promise.resolve({ rules: this.skipRules.slice() });
}
deleteSkipTaskRule(
deleteSkipTaskRuleRequest: DeleteSkipTaskRuleRequest,
): Promise<DeleteSkipTaskRuleResponse> {
this.skipRules = this.skipRules.filter(
(rule: SkipTaskRule) => rule.name != deleteSkipTaskRuleRequest.id,
);
return Promise.resolve({ rules: this.skipRules.slice() });
}
}