Package cn.edu.zju.acm.onlinejudge.judgeservice

Source Code of cn.edu.zju.acm.onlinejudge.judgeservice.JudgeClientUnitTest

package cn.edu.zju.acm.onlinejudge.judgeservice;

import java.net.InetAddress;
import java.net.Socket;

import org.junit.After;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

import cn.edu.zju.acm.onlinejudge.bean.Limit;
import cn.edu.zju.acm.onlinejudge.bean.Problem;
import cn.edu.zju.acm.onlinejudge.bean.Reference;
import cn.edu.zju.acm.onlinejudge.bean.Submission;
import cn.edu.zju.acm.onlinejudge.bean.enumeration.JudgeReply;
import cn.edu.zju.acm.onlinejudge.bean.enumeration.ReferenceType;
import cn.edu.zju.acm.onlinejudge.dao.DAOFactory;
import cn.xuchuan.util.ReflectionUtil;

import static org.junit.Assert.*;

public class JudgeClientUnitTest {
    private Submission[] submissions;

    private static MockClient mockServer;

    private SubmissionQueueReader queue;

    private JudgeClient judgeClient;

    @BeforeClass
    public static void init() throws Exception {
  ReflectionUtil.setFieldValue(DAOFactory.class, "languageDAO", new MockLanguageDAO());
  ReflectionUtil.setFieldValue(DAOFactory.class, "problemDAO", new MockProblemDAO());
  ReflectionUtil.setFieldValue(DAOFactory.class, "submissionDAO", new MockSubmissionDAO());
  ReflectionUtil.setFieldValue(DAOFactory.class, "referenceDAO", new MockReferenceDAO());
  Problem problem = new Problem();
  problem.setId(0);
  problem.setRevision(0);
  Limit limit = new Limit();
  limit.setTimeLimit(1);
  limit.setMemoryLimit(1024);
  limit.setOutputLimit(1);
  problem.setLimit(limit);
  Reference reference = new Reference();
  reference.setReferenceType(ReferenceType.INPUT);
  reference.setContent("0 0\n1 2\n2 3\n".getBytes("ASCII"));
  DAOFactory.getReferenceDAO().save(reference, 0);
  DAOFactory.getReferenceDAO().save(reference, 1);
  reference = new Reference();
  reference.setReferenceType(ReferenceType.OUTPUT);
  reference.setContent("0\n3\n5\n".getBytes("ASCII"));
  DAOFactory.getReferenceDAO().save(reference, 0);
  DAOFactory.getProblemDAO().update(problem);
    }

    @Before
    public void setUp() throws Exception {
  mockServer = new MockClient(true);
  queue = new SubmissionQueueReader();
  judgeClient = new JudgeClient(queue, new Socket(InetAddress.getLocalHost(), mockServer.getPort()), 3);
  judgeClient.start();
  submissions = new Submission[10];
  for (int i = 0; i < submissions.length; i++) {
      submissions[i] = new Submission();
      submissions[i].setId(i);
      submissions[i].setLanguage(LanguageManager.getLanguage(0));
      submissions[i].setProblemId(0);
      submissions[i].setContent("test");
      DAOFactory.getSubmissionDAO().update(submissions[i]);
  }
    }

    @After
    public void tearDown() throws Exception {
  judgeClient.stop();
  mockServer.stop();
    }

    @Test
    public void testNormal() throws Exception {
  for (int i = 0; i < submissions.length + 1; i++) {
      mockServer.addReply(MockClient.ACCEPTED);
  }
  for (int i = 0; i < submissions.length; i++) {
      queue.add(submissions[i]);
  }
  for (int i = 0; i < submissions.length; i++) {
      for (;;) {
    Submission submission = DAOFactory.getSubmissionDAO().getSubmission(i);
    if (submission.getJudgeReply() == JudgeReply.ACCEPTED) {
        break;
    }
    Thread.sleep(10);
      }
  }
  assertEquals(0, mockServer.getReplies().size());
    }

    @Test
    public void testWaitForServer() throws Exception {
  mockServer.addReply(MockClient.SAVE_SERVER_ERROR);
  for (int i = 0; i < submissions.length + 1; i++) {
      mockServer.addReply(MockClient.ACCEPTED);
  }
  for (int i = 0; i < submissions.length; i++) {
      queue.add(submissions[i]);
  }
  for (int i = 0; i < submissions.length; i++) {
      for (;;) {
    Submission submission = DAOFactory.getSubmissionDAO().getSubmission(i);
    if (submission.getJudgeReply() == JudgeReply.ACCEPTED) {
        break;
    }
    Thread.sleep(10);
      }
  }
  assertEquals(0, mockServer.getReplies().size());
    }

    @Test
    public void testRestartServer() throws Exception {
  mockServer.addReply(MockClient.ACCEPTED);
  mockServer.addReply(MockClient.COMPILATION_SERVER_ERROR);
  for (int i = 0; i < submissions.length - 1; i++) {
      mockServer.addReply(MockClient.ACCEPTED);
  }
  mockServer.addReply(MockClient.COMPILATION_SERVER_ERROR);
  mockServer.addReply(MockClient.ACCEPTED);
  mockServer.addReply(MockClient.ACCEPTED);
  for (int i = 0; i < submissions.length; i++) {
      queue.add(submissions[i]);
  }
  for (int i = 0; i < submissions.length; i++) {
      for (;;) {
    Submission submission = DAOFactory.getSubmissionDAO().getSubmission(i);
    if (submission.getJudgeReply() == JudgeReply.ACCEPTED) {
        break;
    }
    Thread.sleep(10);
      }
  }
  assertEquals(0, mockServer.getReplies().size());
    }
}
TOP

Related Classes of cn.edu.zju.acm.onlinejudge.judgeservice.JudgeClientUnitTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.