Skip to content

Commit 3d08fec

Browse files
committed
Merge branch 'submission_pipeline' of https://github.com/coding-blocks/judge-taskmaster into submission_pipeline
2 parents bf8a993 + 6df30c6 commit 3d08fec

15 files changed

+299
-21
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
"build": "tsc",
4040
"prestart": "npm run build",
4141
"start": "./wait-for-it.sh ${AMQP_HOST}:${AMQP_PORT} -- node dist/taskmaster.js",
42+
"dev": "NODE_PATH=dist nodemon dist/taskmaster.js",
4243
"test": "docker build . -t codingblocks/judge-taskmaster && mocha --timeout 10000 --exit --require ts-node/register test/**/*.ts",
4344
"test.parallel": "mocha-parallel-tests --timeout 10000 --exit --require ts-node/register test/**/*.ts",
4445
"cover": "nyc npm test"

src/taskmaster.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,17 @@ amqp.connect(`amqp://${config.AMQP.USER}:${config.AMQP.PASS}@${config.AMQP.HOST}
2626
channel.assertQueue(jobQ);
2727
channel.consume(jobQ, async (msg) => {
2828
try {
29-
const payload = JSON.parse(msg.content.toString())
29+
const payload = JSON.parse(msg.content.toString())
30+
3031
let job
3132
if (payload.testcases) {
3233
job = new SubmitJob(payload)
3334
} else {
3435
job = new RunJob(payload)
3536
}
37+
3638
const jobResult = await execute(job)
37-
39+
3840
// TODO
3941
channel.sendToQueue(successQ, (new Buffer(JSON.stringify(jobResult))))
4042
channel.ack(msg)

src/tasks/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { RunJob, SubmitJob, Job } from "./job";
1010
export function execute(job: RunJob): Promise<RunResult>
1111
export function execute(job: SubmitJob): Promise<SubmissionResult>
1212
export async function execute (job: Job) {
13-
// Create RUNBOX
13+
// Create RUNBOX
1414
rm('-rf', config.RUNBOX.DIR)
1515
mkdir('-p', config.RUNBOX.DIR)
1616
const currentJobDir = path.join(config.RUNBOX.DIR, job.id.toString())

src/tasks/submission.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ class SubmissionScenario implements Scenario {
3333

3434
return Promise.all(job.testcases.map(async testcase => {
3535
const rootDir = path.join(testCasesDir, '' + testcase.id)
36-
mkdir('-p', rootDir)
37-
console.log(rootDir)
36+
mkdir('-p', rootDir)
3837
const input = await download(testcase.input, path.join(rootDir, 'stdin'))
3938
const output = await download(testcase.output, path.join(rootDir, 'stdout'))
4039
}))

test/runScenario.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { mkdir, rm } from 'shelljs'
33
import RunScenario from '../src/tasks/run'
44
import config = require('../config.js')
55
import * as path from 'path'
6-
import { RunJob } from '../src/types/job'
6+
import { RunJob } from '../src/tasks/job'
77
import * as fs from 'fs'
88

99
describe('Run Scenario', () => {

test/submission/submit.c.spec.ts

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import { execute } from '../../src/tasks/'
2+
import { expect } from 'chai'
3+
import { SubmitJob } from '../../src/tasks/job'
4+
import { SubmissionResult } from '../../src/types/result'
5+
6+
describe('submit - c', () => {
7+
it('.c file submits correctly', async () => {
8+
const source = `
9+
#include <stdio.h>
10+
int main () {
11+
char in[10];
12+
scanf("%s", in);
13+
printf("Hello %s", in);
14+
return 0;
15+
}
16+
`
17+
18+
const submitResult = await execute(new SubmitJob({
19+
id: 1,
20+
lang: 'c',
21+
source: (new Buffer(source)).toString('base64'),
22+
testcases: [{
23+
id: 1,
24+
input: 'https://minio.cb.lk/public/input',
25+
output: 'https://minio.cb.lk/public/output'
26+
}]
27+
}))
28+
29+
console.log(submitResult)
30+
31+
// assertions
32+
expect(submitResult.testcases[0].result).to.eq('Success')
33+
expect(submitResult.testcases[0].score).to.eq(100)
34+
})
35+
})
36+

test/submission/submit.cpp.spec.ts

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {execute} from '../../src/tasks/'
2-
import {expect} from 'chai'
1+
import { execute } from '../../src/tasks/'
2+
import { expect } from 'chai'
33
import { SubmitJob } from '../../src/tasks/job'
44
import { SubmissionResult } from '../../src/types/result'
55

@@ -15,21 +15,22 @@ describe('submit - cpp', () => {
1515
return 0;
1616
}`
1717

18-
const submitResult = <SubmissionResult>await execute(new SubmitJob({
18+
const submitResult = await execute(new SubmitJob({
1919
id: 1,
2020
lang: 'cpp',
2121
source: (new Buffer(source)).toString('base64'),
22-
testcases: [{
23-
id: 1,
24-
input: 'https://minio.cb.lk/public/input',
25-
output: 'https://minio.cb.lk/public/output'
22+
testcases: [{
23+
id: 1,
24+
input: 'https://minio.cb.lk/public/input',
25+
output: 'https://minio.cb.lk/public/output'
2626
}]
2727
}))
28-
28+
2929
console.log(submitResult)
3030

3131
// assertions
32-
expect(1).to.eq(1)
32+
expect(submitResult.testcases[0].result).to.eq('Success')
33+
expect(submitResult.testcases[0].score).to.eq(100)
3334
})
3435
})
3536

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { execute } from '../../src/tasks/'
2+
import { expect } from 'chai'
3+
import { SubmitJob } from '../../src/tasks/job'
4+
import { SubmissionResult } from '../../src/types/result'
5+
6+
describe('submit - csharp', () => {
7+
it('.cs file submits correctly', async () => {
8+
const source = `
9+
using System;
10+
public class HelloWorld {
11+
static public void Main () {
12+
Console.WriteLine ("Hello " + Console.ReadLine());
13+
}
14+
}
15+
`
16+
const submitResult = await execute(new SubmitJob({
17+
id: 1,
18+
lang: 'csharp',
19+
source: (new Buffer(source)).toString('base64'),
20+
testcases: [{
21+
id: 1,
22+
input: 'https://minio.cb.lk/public/input',
23+
output: 'https://minio.cb.lk/public/output'
24+
}]
25+
}))
26+
27+
console.log(submitResult)
28+
29+
//assertion
30+
expect(submitResult.testcases[0].result).to.eq('Success')
31+
expect(submitResult.testcases[0].score).to.eq(100)
32+
33+
})
34+
})
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { execute } from '../../src/tasks/'
2+
import { expect } from 'chai'
3+
import { SubmitJob } from '../../src/tasks/job'
4+
import { SubmissionResult } from '../../src/types/result'
5+
6+
describe('submit - java8', () => {
7+
it('.java file submits correctly (java8)', async () => {
8+
const source = `
9+
import java.util.Scanner;
10+
public class Main {
11+
public static void main(String[] args) {
12+
Scanner in = new Scanner(System.in);
13+
String input = in.next();
14+
System.out.println("Hello " + input);
15+
}
16+
}
17+
`
18+
19+
const submitResult = await execute(new SubmitJob({
20+
id: 1,
21+
lang: 'java8',
22+
source: (new Buffer(source)).toString('base64'),
23+
testcases: [{
24+
id: 1,
25+
input: 'https://minio.cb.lk/public/input',
26+
output: 'https://minio.cb.lk/public/output'
27+
}]
28+
}))
29+
30+
console.log(submitResult)
31+
32+
// assertions
33+
expect(submitResult.testcases[0].result).to.eq('Success')
34+
expect(submitResult.testcases[0].score).to.eq(100)
35+
})
36+
})
37+
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { execute } from '../../src/tasks/'
2+
import { expect } from 'chai'
3+
import { SubmitJob } from '../../src/tasks/job'
4+
import { SubmissionResult } from '../../src/types/result'
5+
6+
describe('submit - nodejs10', () => {
7+
it('.js file submits correctly (nodejs10)', async () => {
8+
const source = `
9+
const readline = require('readline');
10+
const rl = readline.createInterface({
11+
input: process.stdin,
12+
output: process.stdout,
13+
terminal: false
14+
});
15+
rl.on('line', function (line) {
16+
console.log("Hello " + line);
17+
})
18+
`
19+
20+
const submitResult = await execute(new SubmitJob({
21+
id: 1,
22+
lang: 'nodejs10',
23+
source: (new Buffer(source)).toString('base64'),
24+
testcases: [{
25+
id: 1,
26+
input: 'https://minio.cb.lk/public/input',
27+
output: 'https://minio.cb.lk/public/output'
28+
}]
29+
}))
30+
31+
console.log(submitResult)
32+
33+
// assertions
34+
expect(submitResult.testcases[0].result).to.eq('Success')
35+
expect(submitResult.testcases[0].score).to.eq(100)
36+
})
37+
})
38+

0 commit comments

Comments
 (0)