Пример #1
0
        public static void Grade(Submission submission)
        {
            if (!submission.Submitted || !submission.Valid)
            {
                Logger.Log("Skipping invalid submission");
                IncrementGradeCount(0f);
                return;
            }

            // todo figure this bad boy out
            int tries = 10;

            while (true)
            {
                try {
                    string exe = AutoGrader.Config.TestExecutablePath;
                    File.Copy(submission.ResultPath, exe, true);
                    File.SetAttributes(exe, FileAttributes.Normal);
                    break;
                }
                catch (UnauthorizedAccessException e) {
                    Logger.Log("Unauthorized: " + e.Message);
                    Thread.Sleep(1000);
                }
                catch (IOException e) {
                    Logger.Log("IO: " + e.Message);
                    Thread.Sleep(1000);
                }

                if (tries-- != 0)
                {
                    continue;
                }
                submission.Invalidate(UNKNOWN_INVALID);
                return;
            }

            string arguments = "/inisolation "
                               + (AutoGrader.Config.TestbedAdapterPath ?? " ")
                               + $" {AutoGrader.Config.TestbedDLLPath}";

            var startinfo = new ProcessStartInfo {
                FileName  = AutoGrader.Config.VSTestPath,
                Arguments = arguments,
                RedirectStandardOutput = true,
                RedirectStandardError  = true
            };

            var test = Process.Start(startinfo);

            if (test == null)
            {
                return;
            }
            ProcessResults(submission, test.StandardOutput);
            test.WaitForExit();
        }