Merge branch 'develop'

This commit is contained in:
wangwei10061 2017-04-14 09:12:48 +08:00
commit 3f10f7a549
2 changed files with 283 additions and 11 deletions

View File

@ -0,0 +1,229 @@
package com.educoder.jenkins.controller;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.educoder.jenkins.api.JenkinsApi;
import com.educoder.jenkins.settings.AppConfig;
import com.educoder.jenkins.utils.Base64Helper;
import com.offbytwo.jenkins.JenkinsServer;
import com.offbytwo.jenkins.JenkinsTriggerHelper;
import com.offbytwo.jenkins.model.JobWithDetails;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.io.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;
/**
* Created by weishao on 2017/4/13.
*/
@Api(value = "game控制器用于trustie相关的操作", hidden = true)
@RestController
@RequestMapping("/game")
public class GameController extends BaseController {
@Autowired
JenkinsController jenkinsController;
@Autowired
JenkinsApi jenkinsApi;
@Autowired
AppConfig appConfig;
private final static Logger logger = LoggerFactory.getLogger(GameController.class);
@ApiOperation(value = "发布实训", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
@RequestMapping(path = "/publishGame ")
public JSONObject publishGame (@ApiParam(name = "gameInfo", required = true, value = "游戏信息") @RequestParam String gameInfo) {
// 生成脚本
JSONObject result = generatePipelineScriptForGame(gameInfo);
logger.debug("/pipeline/publishGame gameInfo: " + gameInfo);
JSONObject info = JSONObject.parseObject(gameInfo);
// 写case
try {
generateTestCasesForGame(info.getString("gameID"), JSONArray.toJSONString(info.getJSONArray("testCases")));
} catch (Exception e) {
result.put("code", "-1");
try {
result.put("msg", Base64Helper.encode("write case failed"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
}
return result;
}
@ApiOperation(value = "生成每一个关卡的脚本", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
@RequestMapping(path = "/generatePipelineScriptForChallenge")
public JSONObject generatePipelineScriptForChallenge (@ApiParam(name = "challengeInfo", required = true, value = "关卡信息") @RequestParam String challengeInfo) {
JSONObject result = new JSONObject();
// 提取trustie传递来的信息
JSONObject info = JSONObject.parseObject(challengeInfo);
String challengeID = info.getString("challengeID");
String challengeType = info.getString("challengeType");
String challengeEditableFile = info.getString("challengeEditableFile");
String gameID = info.getString("gameID");
logger.debug("/pipeline/generatePipelineScriptForChallenge challengeID: " + challengeID + ", challengeType:" + challengeType
+ ", challengeEditableFile: " + challengeEditableFile + ", gameID: " + gameID);
String pipeline = "";
if ("in_out".equals(challengeType)) {
try {
InputStream resourceAsStream = PipeLineController.class.getResourceAsStream("/in_out.template.pipeline");
pipeline = IOUtils.toString(resourceAsStream, Charset.forName("UTF-8"));
String sourceClassName = challengeEditableFile.substring(0, challengeEditableFile.indexOf("."));
pipeline = pipeline.replace("CHALLENGEID", challengeID);
pipeline = pipeline.replace("CHALLENGEEDITABLEFILE", challengeEditableFile);
pipeline = pipeline.replace("SOURCECLASSNAME", sourceClassName);
pipeline = pipeline.replace("GAMEID", gameID);
result.put("code", 0);
result.put("msg", Base64Helper.encode(pipeline));
} catch (IOException e) {
e.printStackTrace();
result.put("code", -1);
try {
result.put("msg", Base64Helper.encode("error"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
}
}
return result;
}
@ApiOperation(value = "生成游戏总的脚本", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
@RequestMapping(path = "/generatePipelineScriptForGame")
public JSONObject generatePipelineScriptForGame (@ApiParam(name = "gameInfo", required = true, value = "游戏信息脚本用base64编码") @RequestParam String gameInfo) {
JSONObject result = new JSONObject();
// 提取trustie传递来的信息
JSONObject info = JSONObject.parseObject(gameInfo);
String operationEnvironment = info.getString("operationEnvironment");
JSONArray challengePipelines = info.getJSONArray("challengePipelines");
logger.debug("/pipeline/generatePipelineScriptForGame operationEnvironment: " + operationEnvironment + ", challengePipelines:" + challengePipelines);
//组装pipeline
String pipeline = "";
if ("java".equals(operationEnvironment)) {
try {
InputStream resourceAsStream = PipeLineController.class.getResourceAsStream("/java.template.pipeline");
pipeline = IOUtils.toString(resourceAsStream, Charset.forName("UTF-8"));
StringBuffer tempScript = new StringBuffer();
for (int i = 0; i < challengePipelines.size(); i++) {
tempScript.append(Base64Helper.decode((challengePipelines.getJSONObject(i)).getString("challengePipeline")));
tempScript.append("\n");
}
pipeline = pipeline.replace("CHALLENGEPIPELINES", tempScript);
pipeline = pipeline.replace("OPERATIONENVIRONMENT", operationEnvironment);
result.put("code", 0);
result.put("msg", Base64Helper.encode(pipeline));
} catch (IOException e) {
e.printStackTrace();
result.put("code", -1);
try {
result.put("msg", Base64Helper.encode("error"));
} catch (UnsupportedEncodingException e1) {
e1.printStackTrace();
}
}
}
return result;
}
@ApiOperation(value = "开启实训", httpMethod = "POST", produces = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
@RequestMapping(path = "/openGameInstance")
public JSONObject openGameInstance(@ApiParam(name = "jobNameForInstance", required = true, value = "job名字") @RequestParam String jobNameForInstance,
@ApiParam(name = "gamePipelineScript", required = true, value = "job的pipeline脚本") @RequestParam String gamePipelineScript,
@ApiParam(name = "instanceGitURL", required = true, value = "job的gitUrl") @RequestParam String instanceGitURL) {
JSONObject result = jenkinsController.createJobForInstance(jobNameForInstance, gamePipelineScript);
jenkinsController.buildJobForInstance(jobNameForInstance, instanceGitURL, 0, 0);
return result;
}
public void generateTestCasesForGame (String gameID, String testCases) throws Exception {
JenkinsServer server = null;
server = new JenkinsServer(new URI(appConfig.getJenkinsUrl()),
appConfig.getJenkisUserName(), appConfig.getJenkisPassWord());
// 创建临时job用以写文件
Map params = new HashMap();
params.put("gameID", "0");
params.put("challengeID", "0");
params.put("caseID", "");
params.put("input", "");
params.put("expected_output", "");
String pipeline = "node () {\n" +
" writeFile file: '../testCases/' + gameID + '/' + challengeID + '/' + caseID + '.in', text: input\n" +
" writeFile file: '../testCases/' + gameID + '/' + challengeID + '/' + caseID + '.out', text: output\n" +
"}";
try {
jenkinsApi.createJob(gameID + "_SaveCase", pipeline, params);
} catch (Exception e) {
e.printStackTrace();
}
// 循环构建job写文件
JSONArray cases = JSONObject.parseArray(testCases);
StringBuffer sb = new StringBuffer();
for (int i = 0; i < cases.size(); i++) {
// 获取每个关卡的信息
JSONObject challenge = cases.getJSONObject(i);
String challegeID = challenge.getString("challengeID");
JSONArray challengeTestCases = challenge.getJSONArray("challengeTestCases");
// 获取所有的测试用例
for (int j = 0; j < challengeTestCases.size(); j++) {
JSONObject testCase = challengeTestCases.getJSONObject(i);
String input = testCase.getString("input");
String output = testCase.getString("output");
JobWithDetails job = server.getJob(gameID + "_SaveCase");
Map<String, String> buildParams = new HashMap();
params.put("gameID", gameID);
params.put("challengeID", challegeID);
params.put("caseID", j + 1 + "");
params.put("input", input);
params.put("output", output);
job.build(params);
}
}
// 构建完成之后删除job
if (server.getJob(gameID + "_SaveCase") != null) {
server.deleteJob(gameID + "_SaveCase");
}
}
}

View File

@ -1,37 +1,80 @@
package cn.wangwei.app.jenkins;
import cn.guange.app.jenkins.SpringTestBase;
import com.educoder.jenkins.controller.PipeLineController;
import com.educoder.jenkins.controller.GameController;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
/**
* Created by weishao on 2017/4/12.
*/
public class PipeLineControllerTest extends SpringTestBase {
public class GameControllerTest extends SpringTestBase {
@Autowired
PipeLineController pipeLineController;
GameController gameController;
@Test
public void testGenerateScriptPerChallenge() {
String params = "{\n" +
" \"stageID\" : \"2\",\n" +
" \"stageType\" : \"in_out\",\n" +
" \"filePath\" : \"Calculator.java\",\n" +
" \"challengeID\" : \"2\",\n" +
" \"challengeType\" : \"in_out\",\n" +
" \"challengeEditableFile\" : \"Calculator.java\",\n" +
" \"gameID\" : \"1\"\n" +
" }";
System.out.println(pipeLineController.generateScriptForStage(params));
System.out.println(gameController.generatePipelineScriptForChallenge(params));
}
@Test
public void testGenerateScript() {
String params = "{\n" +
"\t\"stagePipelines\":[\n" +
"\t\t\t{\"stageID\":\"1\",\"stagePipeline\":\"CQkJaWYgKGN1cnJlbnRTdGFnZSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOivu+WPlui+k+WFpeWSjOmihOacn+i+k+WHugogICAgICAgICAgICAgICAgICAgICAgICBkZWYgaW4gPSByZWFkRmlsZSAnLi4vdGVzdENhc2VzLzFfMV8uaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBleHBlY3RlZE91dCA9IHJlYWRGaWxlICcuLi90ZXN0Q2FzZXMvMV8xXy5vdXQnCgogICAgICAgICAgICAgICAgICAgICAgICAvLyDnvJbor5HnqIvluo8KICAgICAgICAgICAgICAgICAgICAgICAgc2ggc2NyaXB0OiAnZWNobyAiJChqYXZhYyBDYWxjdWxhdG9yLmphdmEgMj4mMSkiID4gY29tcGlsZV9yZXN1bHRfMS5vdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVSZXN1bHQgPSByZWFkRmlsZSAoJ2NvbXBpbGVfcmVzdWx0XzEub3V0JykKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOe8luivkemUmeivrwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGlsZVJlc3VsdC50cmltKCkgPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFRyYWluaW5nSW5zdGFuY2VSZXN1bHRUb0JEV2ViKGNvbXBpbGVSZXN1bHQ6IGNvbXBpbGVSZXN1bHQsIG91dDogJycsIGluOmluLCBleHBlY3RlZE91dDpleHBlY3RlZE91dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g5LuOaW4udHh06K+75YWl77yM56iL5bqP6L+Q6KGM6L6T5Ye66YeN5a6a5ZCR5Yiwb3V0LnR4dAogICAgICAgICAgICAgICAgICAgICAgICBzaCBzY3JpcHQ6ICdlY2hvICIkKGphdmEgQ2FsY3VsYXRvciA8IC4uL3Rlc3RDYXNlcy8xXzEuaW4gIDI+JjEpIiA+IGFjdHVhbF9yZXN1bHRfMS5vdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBvdXQgPSByZWFkRmlsZSAiYWN0dWFsX3Jlc3VsdF8xLm91dCIKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOeUseS4remXtOWxguWIpOaWree7k+aenOS5i+WQjuWPkemAgee7mUJEV2ViCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RUcmFpbmluZ0luc3RhbmNlUmVzdWx0VG9CRFdlYihjb21waWxlUmVzdWx0OiBjb21waWxlUmVzdWx0LCBvdXQ6IG91dCwgaW46aW4sIGV4cGVjdGVkT3V0OmV4cGVjdGVkT3V0KQogICAgICAgICAgICB9\"},\n" +
"\t\t\t{\"stageID\":\"2\",\"stagePipeline\":\"aWYgKGN1cnJlbnRTdGFnZSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOivu+WPlui+k+WFpeWSjOmihOacn+i+k+WHugogICAgICAgICAgICAgICAgICAgICAgICBkZWYgaW4gPSByZWFkRmlsZSAnLi4vdGVzdENhc2VzLzFfMl8uaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBleHBlY3RlZE91dCA9IHJlYWRGaWxlICcuLi90ZXN0Q2FzZXMvMV8yXy5vdXQnCgogICAgICAgICAgICAgICAgICAgICAgICAvLyDnvJbor5HnqIvluo8KICAgICAgICAgICAgICAgICAgICAgICAgc2ggc2NyaXB0OiAnZWNobyAiJChqYXZhYyBDYWxjdWxhdG9yLmphdmEgMj4mMSkiID4gY29tcGlsZV9yZXN1bHRfMi5vdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVSZXN1bHQgPSByZWFkRmlsZSAoJ2NvbXBpbGVfcmVzdWx0XzIub3V0JykKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOe8luivkemUmeivrwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGlsZVJlc3VsdC50cmltKCkgPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFRyYWluaW5nSW5zdGFuY2VSZXN1bHRUb0JEV2ViKGNvbXBpbGVSZXN1bHQ6IGNvbXBpbGVSZXN1bHQsIG91dDogJycsIGluOmluLCBleHBlY3RlZE91dDpleHBlY3RlZE91dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g5LuOaW4udHh06K+75YWl77yM56iL5bqP6L+Q6KGM6L6T5Ye66YeN5a6a5ZCR5Yiwb3V0LnR4dAogICAgICAgICAgICAgICAgICAgICAgICBzaCBzY3JpcHQ6ICdlY2hvICIkKGphdmEgQ2FsY3VsYXRvciA8IC4uL3Rlc3RDYXNlcy8xXzIuaW4gIDI+JjEpIiA+IGFjdHVhbF9yZXN1bHRfMi5vdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBvdXQgPSByZWFkRmlsZSAiYWN0dWFsX3Jlc3VsdF8yLm91dCIKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOeUseS4remXtOWxguWIpOaWree7k+aenOS5i+WQjuWPkemAgee7mUJEV2ViCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RUcmFpbmluZ0luc3RhbmNlUmVzdWx0VG9CRFdlYihjb21waWxlUmVzdWx0OiBjb21waWxlUmVzdWx0LCBvdXQ6IG91dCwgaW46aW4sIGV4cGVjdGVkT3V0OmV4cGVjdGVkT3V0KQogICAgICAgICAgICB9\"}\n" +
"\t\"challengePipelines\":[\n" +
"\t\t\t{\"challengeID\":\"1\",\"challengePipeline\":\"CQkJaWYgKGN1cnJlbnRTdGFnZSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOivu+WPlui+k+WFpeWSjOmihOacn+i+k+WHugogICAgICAgICAgICAgICAgICAgICAgICBkZWYgaW4gPSByZWFkRmlsZSAnLi4vdGVzdENhc2VzLzFfMV8uaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBleHBlY3RlZE91dCA9IHJlYWRGaWxlICcuLi90ZXN0Q2FzZXMvMV8xXy5vdXQnCgogICAgICAgICAgICAgICAgICAgICAgICAvLyDnvJbor5HnqIvluo8KICAgICAgICAgICAgICAgICAgICAgICAgc2ggc2NyaXB0OiAnZWNobyAiJChqYXZhYyBDYWxjdWxhdG9yLmphdmEgMj4mMSkiID4gY29tcGlsZV9yZXN1bHRfMS5vdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVSZXN1bHQgPSByZWFkRmlsZSAoJ2NvbXBpbGVfcmVzdWx0XzEub3V0JykKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOe8luivkemUmeivrwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGlsZVJlc3VsdC50cmltKCkgPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFRyYWluaW5nSW5zdGFuY2VSZXN1bHRUb0JEV2ViKGNvbXBpbGVSZXN1bHQ6IGNvbXBpbGVSZXN1bHQsIG91dDogJycsIGluOmluLCBleHBlY3RlZE91dDpleHBlY3RlZE91dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g5LuOaW4udHh06K+75YWl77yM56iL5bqP6L+Q6KGM6L6T5Ye66YeN5a6a5ZCR5Yiwb3V0LnR4dAogICAgICAgICAgICAgICAgICAgICAgICBzaCBzY3JpcHQ6ICdlY2hvICIkKGphdmEgQ2FsY3VsYXRvciA8IC4uL3Rlc3RDYXNlcy8xXzEuaW4gIDI+JjEpIiA+IGFjdHVhbF9yZXN1bHRfMS5vdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBvdXQgPSByZWFkRmlsZSAiYWN0dWFsX3Jlc3VsdF8xLm91dCIKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOeUseS4remXtOWxguWIpOaWree7k+aenOS5i+WQjuWPkemAgee7mUJEV2ViCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RUcmFpbmluZ0luc3RhbmNlUmVzdWx0VG9CRFdlYihjb21waWxlUmVzdWx0OiBjb21waWxlUmVzdWx0LCBvdXQ6IG91dCwgaW46aW4sIGV4cGVjdGVkT3V0OmV4cGVjdGVkT3V0KQogICAgICAgICAgICB9\"},\n" +
"\t\t\t{\"challengeID\":\"2\",\"challengePipeline\":\"aWYgKGN1cnJlbnRTdGFnZSA9PSAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOivu+WPlui+k+WFpeWSjOmihOacn+i+k+WHugogICAgICAgICAgICAgICAgICAgICAgICBkZWYgaW4gPSByZWFkRmlsZSAnLi4vdGVzdENhc2VzLzFfMl8uaW4nCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBleHBlY3RlZE91dCA9IHJlYWRGaWxlICcuLi90ZXN0Q2FzZXMvMV8yXy5vdXQnCgogICAgICAgICAgICAgICAgICAgICAgICAvLyDnvJbor5HnqIvluo8KICAgICAgICAgICAgICAgICAgICAgICAgc2ggc2NyaXB0OiAnZWNobyAiJChqYXZhYyBDYWxjdWxhdG9yLmphdmEgMj4mMSkiID4gY29tcGlsZV9yZXN1bHRfMi5vdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVSZXN1bHQgPSByZWFkRmlsZSAoJ2NvbXBpbGVfcmVzdWx0XzIub3V0JykKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOWmguaenOe8luivkemUmeivrwogICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tcGlsZVJlc3VsdC50cmltKCkgPT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zdFRyYWluaW5nSW5zdGFuY2VSZXN1bHRUb0JEV2ViKGNvbXBpbGVSZXN1bHQ6IGNvbXBpbGVSZXN1bHQsIG91dDogJycsIGluOmluLCBleHBlY3RlZE91dDpleHBlY3RlZE91dCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgLy8g5LuOaW4udHh06K+75YWl77yM56iL5bqP6L+Q6KGM6L6T5Ye66YeN5a6a5ZCR5Yiwb3V0LnR4dAogICAgICAgICAgICAgICAgICAgICAgICBzaCBzY3JpcHQ6ICdlY2hvICIkKGphdmEgQ2FsY3VsYXRvciA8IC4uL3Rlc3RDYXNlcy8xXzIuaW4gIDI+JjEpIiA+IGFjdHVhbF9yZXN1bHRfMi5vdXQnCiAgICAgICAgICAgICAgICAgICAgICAgIGRlZiBvdXQgPSByZWFkRmlsZSAiYWN0dWFsX3Jlc3VsdF8yLm91dCIKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOeUseS4remXtOWxguWIpOaWree7k+aenOS5i+WQjuWPkemAgee7mUJEV2ViCiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3RUcmFpbmluZ0luc3RhbmNlUmVzdWx0VG9CRFdlYihjb21waWxlUmVzdWx0OiBjb21waWxlUmVzdWx0LCBvdXQ6IG91dCwgaW46aW4sIGV4cGVjdGVkT3V0OmV4cGVjdGVkT3V0KQogICAgICAgICAgICB9\"}\n" +
"\t],\n" +
"\t\"operationEnvironment\":\"java\"\n" +
"}";
System.out.println(pipeLineController.generatePipelineScriptForGame(params));
System.out.println(gameController.generatePipelineScriptForGame(params));
}
@Test
public void testPublishGame() {
String params = "{\n" +
"\t\"gameID\": \"1\",\n" +
"\t\"operationEnvironment\": \"java\",\n" +
"\t\"challengePipelines\":[\n" +
"\t\t{\"challengeID\":\"1\",\"challengePipeline\":\"aWYgKGN1cnJlbnRTdGFnZSA9PSAxKSB7fQ==\"},\n" +
"\t\t{\"challengeID\":\"2\",\"challengePipeline\":\"aWYgKGN1cnJlbnRTdGFnZSA9PSAyKSB7fQ==\"}\n" +
"\t],\n" +
"\t\n" +
"\t\"testCases\":[\n" +
"\t\t{\"challengeID\":\"1\",\"challengeTestCases\":[{\"input\":\"1,2\",\"output\":\"3\"},{\"input\":\"4,5\",\"output\":\"9\"}]}\n" +
"\t]\n" +
"}\n";
System.out.println(gameController.publishGame(params));
}
@Test
public void testGenerateTestCasesForGame() {
String gameID = "2";
String params = "[\n" +
"\t\t{\n" +
"\t\t\t\"challengeID\":\"1\",\n" +
"\t\t\t\"challengeTestCases\":[\n" +
"\t\t\t\t{\"input\":\"1,2\",\"output\":\"3\"},{\"input\":\"4,5\",\"output\":\"9\"}\n" +
"\t\t\t]\n" +
"\t\t},\n" +
"\t\t{\n" +
"\t\t\t\"challengeID\":\"2\",\n" +
"\t\t\t\"challengeTestCases\":[\n" +
"\t\t\t\t{\"input\":\"1,3\",\"output\":\"4\"},{\"input\":\"4,4\",\"output\":\"8\"}\n" +
"\t\t\t]\n" +
"\t\t}\n" +
"\t]";
try {
gameController.generateTestCasesForGame(gameID, params);
} catch (Exception e) {
e.printStackTrace();
}
}
}