Prechádzať zdrojové kódy

Merge branch 'feature_teacher_valid_list_cases' into 'DEV'

1. 批量运行

2. 读取真实题目数据

See merge request !820

menduo 7 rokov pred
rodič
commit
bab23a7e89

+ 36 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/OnlineJudgeExecuteCallBack.java

@@ -0,0 +1,36 @@
+package cn.iselab.mooctest.site.common.acyncTask;
+
+import cn.iselab.mooctest.site.web.data.OnlineJudgeResultVO;
+import cn.iselab.mooctest.site.web.data.OnlineJudgeResultsVO;
+import cn.iselab.mooctest.site.web.logic.OnlineJudgeLogic;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @program: mooctest-site
+ * @email: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2018/9/25 下午2:22
+ **/
+@Slf4j
+@Component
+public class OnlineJudgeExecuteCallBack implements AsyncTaskCallBack{
+    @Autowired
+    private OnlineJudgeLogic onlineJudgeLogic;
+
+    @Override
+    public void onSuccess(Map<String, String> context, String result) throws Exception {
+        log.info("submissionId:[{}] 执行成功! result:[{}]",context.get("submissionId"),result);
+        OnlineJudgeResultsVO onlineJudgeResultsVO = onlineJudgeLogic.generalOnlineJudgeResultsVO(result);
+        onlineJudgeResultsVO.generalMatched();
+        onlineJudgeLogic.setResultsToCache(context.get("submissionId"),onlineJudgeResultsVO);
+    }
+
+    @Override
+    public void onError(Map<String, String> context, String result) {
+        log.error("submissionId:[{}] 执行失败! result:[{}]",context.get("submissionId"),result);
+    }
+}

+ 7 - 4
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/ctrl/OnlineJudgeController.java

@@ -2,6 +2,7 @@ package cn.iselab.mooctest.site.web.ctrl;
 
 import cn.iselab.mooctest.site.common.enums.OnlineJudgeMode;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeResultVO;
+import cn.iselab.mooctest.site.web.data.OnlineJudgeResultsVO;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeVO;
 import cn.iselab.mooctest.site.web.data.SubmissionResultVO;
 import cn.iselab.mooctest.site.web.exception.HttpBadRequestException;
@@ -46,6 +47,11 @@ public class OnlineJudgeController {
         return onlineJudgeLogic.checkSubmissionById(submissionId);
     }
 
+    @RequestMapping(value = "pcheck",method = RequestMethod.GET)
+    public OnlineJudgeResultsVO getResults(@RequestParam("submissionId")String submissionId) {
+        return onlineJudgeLogic.pcheckSubmissionById(submissionId);
+    }
+
     @RequestMapping(value = "u/submit", method = RequestMethod.POST)
     public String submit(@RequestBody OnlineJudgeVO onlineJudgeVO) {
 
@@ -65,7 +71,7 @@ public class OnlineJudgeController {
         return  onlineJudgeLogic.getLatestAnswersForThisCaseAndExam(examId,caseId,userId);
     }
 
-    @RequiresRoles("manager")
+    //@RequiresRoles(value = {"manager","admin"})
     @RequestMapping(value = "u/execute",method = RequestMethod.POST)
     public String runWithInput(@RequestBody OnlineJudgeVO onlineJudgeVO) {
         Long userId = (Long)SecurityUtils.getSubject().getSession().getAttribute("userId");
@@ -76,8 +82,5 @@ public class OnlineJudgeController {
         onlineJudgeVO.setMode(OnlineJudgeMode.RUN_WITH_INPUT);
 
         return onlineJudgeLogic.postAnOnlineJudgeSubmission(onlineJudgeVO);
-
-
-
     }
 }

+ 16 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/OnlineJudgeIODataVO.java

@@ -0,0 +1,16 @@
+package cn.iselab.mooctest.site.web.data;
+
+import lombok.Data;
+
+/**
+ * @email: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2018/9/23 下午3:48
+ *
+ **/
+
+@Data
+public class OnlineJudgeIODataVO {
+    private String input;
+    private String output;
+}

+ 45 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/OnlineJudgeResultsVO.java

@@ -0,0 +1,45 @@
+package cn.iselab.mooctest.site.web.data;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @program: mooctest-site
+ * @email: menduo96@gmail.com
+ * @author: menduo
+ * @create: 2018/9/25 下午1:45
+ **/
+@Data
+public class OnlineJudgeResultsVO {
+
+    private String state;
+    private int resultCode;
+    private String resultMsg;
+    private int rightCount;
+    private int totalCount;
+    private List<String> expectOutput;
+    private List<String> realOutput;
+    private List<String> errorLog;
+    private List<Boolean> matched;
+    public OnlineJudgeResultsVO(){}
+
+    public OnlineJudgeResultsVO(String state) {
+        this.state = state;
+    }
+
+    public void generalMatched() {
+
+        matched = new ArrayList<>();
+
+        for (int i = 0; i < expectOutput.size() ; i++) {
+            if(expectOutput.get(i).equals(realOutput.get(i))) {
+                matched.add(true);
+            }else {
+                matched.add(false);
+            }
+        }
+
+    }
+}

+ 5 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/OnlineJudgeVO.java

@@ -3,6 +3,8 @@ package cn.iselab.mooctest.site.web.data;
 import cn.iselab.mooctest.site.common.enums.OnlineJudgeMode;
 import lombok.Data;
 
+import java.util.List;
+
 /**
  * @program: mooctest-site
  * @email: menduo96@gmail.com
@@ -20,7 +22,8 @@ public class OnlineJudgeVO {
     private Long userId;
     private Long caseId;
     private Long examId;
-    private String input;
-    private String output;
+    private List<OnlineJudgeIODataVO> data;
+//    private String input;
+//    private String output;
 
 }

+ 5 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/OnlineJudgeLogic.java

@@ -1,6 +1,7 @@
 package cn.iselab.mooctest.site.web.logic;
 
 import cn.iselab.mooctest.site.web.data.OnlineJudgeResultVO;
+import cn.iselab.mooctest.site.web.data.OnlineJudgeResultsVO;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeVO;
 import cn.iselab.mooctest.site.web.data.SubmissionResultVO;
 
@@ -17,12 +18,14 @@ public interface OnlineJudgeLogic {
     String postAnOnlineJudgeSubmissionAndCulScore(OnlineJudgeVO onlineJudgeVO);
 
     OnlineJudgeResultVO checkSubmissionById(String submissionId);
+    OnlineJudgeResultsVO pcheckSubmissionById(String submissionId);
 
     void setResultToCache(String submissionId,OnlineJudgeResultVO result);
     OnlineJudgeResultVO getResultFromCache(String submissionId);
-
     OnlineJudgeResultVO generalOnlineJudgeResultVO(String result);
-
     SubmissionResultVO getLatestAnswersForThisCaseAndExam(long examId,long caseId,long userId);
 
+    void setResultsToCache(String submissionId, OnlineJudgeResultsVO result);
+    OnlineJudgeResultsVO getResultsFromCache(String submissionId);
+    OnlineJudgeResultsVO generalOnlineJudgeResultsVO(String result);
 }

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/asyncProgress/OnlineJudgeProcessLogic.java

@@ -14,4 +14,6 @@ public interface OnlineJudgeProcessLogic {
     void triggerRunOnlineJudge(OnlineJudgeVO onlineJudgeVO, List<String> downloadUrl);
 
     void triggerSubmitOnlineJudge(OnlineJudgeVO onlineJudgeVO, List<String> downloadUrl);
+
+    void triggerExecuteOnlineJudge(OnlineJudgeVO onlineJudgeVO, List<String> downloadUrl);
 }

+ 53 - 30
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/asyncProgress/impl/OnlineJudgeProcessLogicImpl.java

@@ -2,9 +2,11 @@ package cn.iselab.mooctest.site.web.logic.asyncProgress.impl;
 
 import cn.iselab.mooctest.site.common.acyncTask.OnlineJudgeAndCulScoreCallBack;
 import cn.iselab.mooctest.site.common.acyncTask.OnlineJudgeCallBack;
+import cn.iselab.mooctest.site.common.acyncTask.OnlineJudgeExecuteCallBack;
 import cn.iselab.mooctest.site.common.enums.AsyncJobTool;
 import cn.iselab.mooctest.site.service.AsyncScheduleService;
 import cn.iselab.mooctest.site.service.AsyncTaskService;
+import cn.iselab.mooctest.site.web.data.OnlineJudgeResultsVO;
 import cn.iselab.mooctest.site.web.data.OnlineJudgeVO;
 import cn.iselab.mooctest.site.web.logic.asyncProgress.OnlineJudgeProcessLogic;
 import com.google.common.collect.Lists;
@@ -33,90 +35,111 @@ public class OnlineJudgeProcessLogicImpl implements OnlineJudgeProcessLogic {
     AsyncScheduleService asyncScheduleService;
 
 
+    @Override
+    public void triggerRunOnlineJudge(OnlineJudgeVO onlineJudgeVO, List<String> downloadUrl) {
+
+        List<Map<String, String>> params = prepareParams(onlineJudgeVO,downloadUrl);
+        List<Map<String,String>> contexts = prepareContexts(onlineJudgeVO);
+        asyncScheduleService.start(AsyncJobTool.ONLINEJUDGE, params, contexts, OnlineJudgeCallBack.class);
+    }
+
 
     @Override
-    public void triggerRunOnlineJudge(OnlineJudgeVO onlineJudgeVO,List<String> downloadUrl) {
-        List<Map<String,String>> params = Lists.newArrayList();
-        List<Map<String,String>> contexts = Lists.newArrayList();
+    public void triggerExecuteOnlineJudge(OnlineJudgeVO onlineJudgeVO, List<String> downloadUrl) {
+        List<Map<String, String>> params = prepareParams(onlineJudgeVO,downloadUrl);
+        List<Map<String,String>> contexts = prepareContexts(onlineJudgeVO);
+        asyncScheduleService.start(AsyncJobTool.ONLINEJUDGE, params, contexts, OnlineJudgeExecuteCallBack.class);
 
-        Map<String,String> param = Maps.newHashMap();
-        param.put("downloadURL",jointDownloadUrl(downloadUrl));
-        param.put("extraArgs",generateOnlineJudgeExtraArgs(downloadUrl, onlineJudgeVO.getLang()));
+    }
 
-        params.add(param);
+    private List<Map<String,String>> prepareParams(OnlineJudgeVO onlineJudgeVO,List<String> downloadUrl) {
+        List<Map<String, String>> params = Lists.newArrayList();
 
-        Map<String,String> context = Maps.newHashMap();
-        context.put("submissionId",onlineJudgeVO.getSubmissionId());
 
-        contexts.add(context);
+        Map<String, String> param = Maps.newHashMap();
+        param.put("downloadURL", jointDownloadUrl(downloadUrl));
+        param.put("extraArgs", generateOnlineJudgeExtraArgs(downloadUrl, onlineJudgeVO.getLang(),onlineJudgeVO.getMode().toString()));
+
+        params.add(param);
 
-        asyncScheduleService.start(AsyncJobTool.ONLINEJUDGE,params,contexts,OnlineJudgeCallBack.class);
+        return params;
     }
 
+    private List<Map<String,String>> prepareContexts(OnlineJudgeVO onlineJudgeVO) {
+        List<Map<String, String>> contexts = Lists.newArrayList();
+        Map<String, String> context = Maps.newHashMap();
+        context.put("submissionId", onlineJudgeVO.getSubmissionId());
+        contexts.add(context);
+        return contexts;
+    }
 
     @Override
     public void triggerSubmitOnlineJudge(OnlineJudgeVO onlineJudgeVO, List<String> downloadUrl) {
-        List<Map<String,String>> params = Lists.newArrayList();
+        List<Map<String, String>> params = Lists.newArrayList();
 
-        Map<String,String> param = Maps.newHashMap();
-        param.put("downloadURL",jointDownloadUrl(downloadUrl));
-        param.put("extraArgs",generateOnlineJudgeExtraArgs(downloadUrl,onlineJudgeVO.getLang()));
+        Map<String, String> param = Maps.newHashMap();
+        param.put("downloadURL", jointDownloadUrl(downloadUrl));
+        param.put("extraArgs", generateOnlineJudgeExtraArgs(downloadUrl, onlineJudgeVO.getLang(),onlineJudgeVO.getMode().toString()));
 
         params.add(param);
 
 
-        List<Map<String,String>> contexts = Lists.newArrayList();
+        List<Map<String, String>> contexts = Lists.newArrayList();
 
-        Map<String,String> context = Maps.newHashMap();
+        Map<String, String> context = Maps.newHashMap();
 
-        context.put("submissionId",onlineJudgeVO.getSubmissionId());
-        context.put("userId",String.valueOf(onlineJudgeVO.getUserId()));
-        context.put("examId",String.valueOf(onlineJudgeVO.getExamId()));
-        context.put("caseId",String.valueOf(onlineJudgeVO.getCaseId()));
+        context.put("submissionId", onlineJudgeVO.getSubmissionId());
+        context.put("userId", String.valueOf(onlineJudgeVO.getUserId()));
+        context.put("examId", String.valueOf(onlineJudgeVO.getExamId()));
+        context.put("caseId", String.valueOf(onlineJudgeVO.getCaseId()));
         contexts.add(context);
 
-        asyncScheduleService.start(AsyncJobTool.ONLINEJUDGE,params,contexts,OnlineJudgeAndCulScoreCallBack.class);
+        asyncScheduleService.start(AsyncJobTool.ONLINEJUDGE, params, contexts, OnlineJudgeAndCulScoreCallBack.class);
     }
 
     /**
      * 拼接下载链接
+     *
      * @param downloadUrls 下载链接map
      * @return 以逗号分割的下载链接字符串
      */
-    private String jointDownloadUrl(List<String> downloadUrls){
+    private String jointDownloadUrl(List<String> downloadUrls) {
         StringBuilder sb = new StringBuilder();
-        for(String x:downloadUrls){
+        for (String x : downloadUrls) {
             sb.append(x).append(";");
         }
 
         String downloadUrl = sb.toString();
-        return downloadUrl.substring(0,downloadUrl.length()-1);
+        return downloadUrl.substring(0, downloadUrl.length() - 1);
     }
 
     /**
      * 生成extraArgs的方法,onlinejudge参数为需要从oss上下载的文件名
+     *
      * @param downloadUrls 下载链接map
      * @return 参数字符串
      */
-    private String generateOnlineJudgeExtraArgs(List<String> downloadUrls,String lang){
+    private String generateOnlineJudgeExtraArgs(List<String> downloadUrls, String lang, String mode) {
         StringBuilder sb = new StringBuilder();
 
-        if(downloadUrls.size()<1){
+        if (downloadUrls.size() < 1) {
             log.error("downloadUrls的长度小于1,参数错误");
             throw new IllegalArgumentException();
         }
         String codeUrlInOss = downloadUrls.get(0);
         //code_submissionId_timestamp.txt
-        String codeFileName = codeUrlInOss.split("/")[codeUrlInOss.split("/").length-1];
+        String codeFileName = codeUrlInOss.split("/")[codeUrlInOss.split("/").length - 1];
         sb.append("-c ").append(codeFileName);
 
-        if(downloadUrls.size()==2){
+
+        if (downloadUrls.size() == 2) {
             String dataUrlInOss = downloadUrls.get(1);
-            String dataFileName = dataUrlInOss.split("/")[dataUrlInOss.split("/").length-1];
+            String dataFileName = dataUrlInOss.split("/")[dataUrlInOss.split("/").length - 1];
             sb.append(" -d ").append(dataFileName);
         }
 
         sb.append(" -l ").append(lang);
+        sb.append(" -m ").append(mode);
         return sb.toString();
     }
 }

+ 69 - 15
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/logic/impl/OnlineJudgeLogicImpl.java

@@ -2,9 +2,9 @@ package cn.iselab.mooctest.site.web.logic.impl;
 
 import cn.iselab.mooctest.site.common.enums.OnlineJudgeMode;
 import cn.iselab.mooctest.site.data.OnlineJudgeIODataDTO;
-import cn.iselab.mooctest.site.web.data.OnlineJudgeResultVO;
-import cn.iselab.mooctest.site.web.data.OnlineJudgeVO;
-import cn.iselab.mooctest.site.web.data.SubmissionResultVO;
+import cn.iselab.mooctest.site.models.Target;
+import cn.iselab.mooctest.site.service.TargetService;
+import cn.iselab.mooctest.site.web.data.*;
 import cn.iselab.mooctest.site.web.logic.OSSLogic;
 import cn.iselab.mooctest.site.web.logic.OnlineJudgeLogic;
 import cn.iselab.mooctest.site.web.logic.asyncProgress.OnlineJudgeProcessLogic;
@@ -36,14 +36,22 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
 
     @Autowired
     private OnlineJudgeProcessLogic onlineJudgeProcessLogic;
-
+    @Autowired
+    private TargetService targetService;
     @Autowired
     private OSSLogic ossLogic;
 
     private OnlineJudgeResultVO STARTED = new OnlineJudgeResultVO("started");
+    private OnlineJudgeResultsVO PSTARTED = new OnlineJudgeResultsVO("started");
     private static final String BASE_DIR = "code";
 
-    private final static Cache<String, OnlineJudgeResultVO> RESULT_CACHE_FROM_CELERY = CacheBuilder
+    private final static Cache<String,OnlineJudgeResultVO> RESULT_CACHE_FROM_CELERY = CacheBuilder
+            .newBuilder()
+            .initialCapacity(50)
+            .concurrencyLevel(5)
+            .expireAfterWrite(30, TimeUnit.SECONDS)
+            .build();
+    private final static Cache<String,OnlineJudgeResultsVO> RESULTS_CACHE_FROM_CELERY = CacheBuilder
             .newBuilder()
             .initialCapacity(50)
             .concurrencyLevel(5)
@@ -61,7 +69,9 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
 
         if (OnlineJudgeMode.RUN.equals(onlineJudgeVO.getMode())) {
             // 需要有数据文件
-            String dataOssUrl = "http://mooctest-site-dev.oss-cn-shanghai.aliyuncs.com/code/data.json";
+            Target target = targetService.getTargetByCaseId(onlineJudgeVO.getCaseId());
+            //String dataOssUrl = "http://mooctest-site-dev.oss-cn-shanghai.aliyuncs.com/code/data.json";
+            String dataOssUrl = target.getUrl();
             List<String> list = Lists.newArrayList(codeOssUrl, dataOssUrl);
             onlineJudgeProcessLogic.triggerRunOnlineJudge(onlineJudgeVO, list);
         } else if(OnlineJudgeMode.ONLYRUN.equals(onlineJudgeVO.getMode())) {
@@ -71,7 +81,7 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
             //上传数据到 {osspath}/{mode}/{userId}/{examId}/{caseId}/data_{submissionId}_{timestamp}.json
             String dataOssUrl = uploadDataToOss(onlineJudgeVO);
             List<String> list = Lists.newArrayList(codeOssUrl, dataOssUrl);
-            onlineJudgeProcessLogic.triggerRunOnlineJudge(onlineJudgeVO, list);
+            onlineJudgeProcessLogic.triggerExecuteOnlineJudge(onlineJudgeVO, list);
         }
 
         return onlineJudgeVO.getSubmissionId();
@@ -81,8 +91,9 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
     public String postAnOnlineJudgeSubmissionAndCulScore(OnlineJudgeVO onlineJudgeVO) {
         onlineJudgeVO.setSubmissionId(generalSubmissionId());
         String codeOssurl = uploadCodeToOss(onlineJudgeVO);
-        // 需要有数据文件
-        String dataOssUrl = "http://mooctest-site-dev.oss-cn-shanghai.aliyuncs.com/code/data.json";
+        Target target = targetService.getTargetByCaseId(onlineJudgeVO.getCaseId());
+        //String dataOssUrl = "http://mooctest-site-dev.oss-cn-shanghai.aliyuncs.com/code/data.json";
+        String dataOssUrl = target.getUrl();
         List<String> list = Lists.newArrayList(codeOssurl, dataOssUrl);
         // 触发onlinejudge任务
         onlineJudgeProcessLogic.triggerSubmitOnlineJudge(onlineJudgeVO, list);
@@ -100,6 +111,16 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
     }
 
     @Override
+    public OnlineJudgeResultsVO pcheckSubmissionById(String submissionId) {
+        OnlineJudgeResultsVO result = getResultsFromCache(submissionId);
+        if (result == null) {
+            return PSTARTED;
+        }
+        result.setState("success");
+        return result;
+    }
+
+    @Override
     public SubmissionResultVO getLatestAnswersForThisCaseAndExam(long examId, long caseId, long userId) {
 
         //FIXME:这里效率太低了,考虑缓存
@@ -148,6 +169,12 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
     }
 
     @Override
+    public OnlineJudgeResultsVO getResultsFromCache(String submissionId) {
+        return RESULTS_CACHE_FROM_CELERY.getIfPresent(submissionId);
+
+    }
+
+    @Override
     public OnlineJudgeResultVO generalOnlineJudgeResultVO(String result) {
         if("".equals(result)) {
             return new OnlineJudgeResultVO("failed");
@@ -157,10 +184,26 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
     }
 
     @Override
+    public OnlineJudgeResultsVO generalOnlineJudgeResultsVO(String result) {
+        if("".equals(result)) {
+            return new OnlineJudgeResultsVO("failed");
+        }
+        Gson gson = new Gson();
+        return gson.fromJson(result, OnlineJudgeResultsVO.class);
+
+    }
+
+    @Override
     public void setResultToCache(String submissionId, OnlineJudgeResultVO result) {
         RESULT_CACHE_FROM_CELERY.put(submissionId, result);
     }
 
+    @Override
+    public void setResultsToCache(String submissionId, OnlineJudgeResultsVO result) {
+        RESULTS_CACHE_FROM_CELERY.put(submissionId, result);
+    }
+
+
 
 
     /**
@@ -225,21 +268,32 @@ public class OnlineJudgeLogicImpl implements OnlineJudgeLogic {
     }
 
     private String uploadDataToOss(OnlineJudgeVO onlineJudgeVO) {
-        String data = wapperdata(onlineJudgeVO.getInput(),onlineJudgeVO.getOutput());
+        String data = wapperdata(onlineJudgeVO.getData());
         InputStream inputStream = generalCodeFileInputStream(data);
         return ossLogic.uploadByUrl(generalFileNameForUploadToOss(onlineJudgeVO,"data",".json"), inputStream);
     }
 
-    private String wapperdata(String input, String output) {
+    private String wapperdata(List<OnlineJudgeIODataVO> data) {
         //TODO 保留output接口 方便扩展
-        List<OnlineJudgeIODataDTO> list = Lists.newArrayList();
-        list.add(new OnlineJudgeIODataDTO(input,"surprise!"));
-        Gson gson = new Gson();
-        String result = gson.toJson(list);
+        Gson gson = new GsonBuilder().serializeNulls().create();
+        String result = gson.toJson(data);
         log.info("general data is:{}",result);
         return result;
     }
 
+    public static void main(String[] args) {
+        OnlineJudgeLogicImpl onlineJudgeLogic = new OnlineJudgeLogicImpl();
+        List<OnlineJudgeIODataVO> list = Lists.newArrayList();
+        OnlineJudgeIODataVO data1 = new OnlineJudgeIODataVO();
+        data1.setInput("1 2");
+        //data1.setOutput("3");
+
+        OnlineJudgeIODataVO data2 = new OnlineJudgeIODataVO();
+        data2.setInput("3 4");
+        list.add(data1);
+        list.add(data2);
+        onlineJudgeLogic.wapperdata(list);
+    }
     private InputStream generalCodeFileInputStream(String code) {
         if(code==null) code = "";
         return new ByteArrayInputStream(code.getBytes());