public ExerciseBlockResponse(AbstractExerciseBlock exerciseBlock, ExerciseSlideRendererContext context) { var reviewId2Comments = context.CodeReviewComments ?.GroupBy(c => c.ReviewId) .ToDictionary(g => g.Key, g => g.AsEnumerable()); if (exerciseBlock is PolygonExerciseBlock polygonExerciseBlock) { Languages = PolygonExerciseBlock.LanguagesInfo.Keys.ToArray(); LanguageInfo = PolygonExerciseBlock.LanguagesInfo; DefaultLanguage = polygonExerciseBlock.DefaultLanguage; } else { Languages = exerciseBlock.Language != null ? new[] { exerciseBlock.Language.Value } : new Language[0]; LanguageInfo = null; DefaultLanguage = null; } RenderedHints = exerciseBlock.Hints.Select(h => RenderHtmlWithHint(h, context.SlideFile)).ToArray(); ExerciseInitialCode = exerciseBlock.ExerciseInitialCode.RemoveEmptyLinesFromStart().TrimEnd().EnsureEnoughLines(4); HideSolutions = exerciseBlock.HideShowSolutionsButton; ExpectedOutput = exerciseBlock.HideExpectedOutputOnError ? null : exerciseBlock.ExpectedOutput?.NormalizeEoln(); AttemptsStatistics = context.AttemptsStatistics; Submissions = context.Submissions .EmptyIfNull() .Select(s => SubmissionInfo.Build(s, reviewId2Comments, context.CanSeeCheckerLogs)) .ToList(); }
public void ProcessSpecialFieldsNullDictionariesTest() { // Create a new SubmissionInfo object SubmissionInfo info = new SubmissionInfo() { CommonDiscInfo = new CommonDiscInfoSection() { Comments = "This is a comments line\n[T:ISBN] ISBN Value", CommentsSpecialFields = null, Contents = "This is a contents line\n[T:GF] Game Footage", ContentsSpecialFields = null, } }; // Process the special fields InfoTool.ProcessSpecialFields(info); // Validate the basics Assert.NotNull(info.CommonDiscInfo.Comments); Assert.Null(info.CommonDiscInfo.CommentsSpecialFields); Assert.NotNull(info.CommonDiscInfo.Contents); Assert.Null(info.CommonDiscInfo.ContentsSpecialFields); // Split the values string[] splitComments = info.CommonDiscInfo.Comments.Split('\n'); string[] splitContents = info.CommonDiscInfo.Contents.Split('\n'); // Validate the lines Assert.Equal(2, splitComments.Length); Assert.Equal(2, splitContents.Length); }
public void PrepareSubmission(string solutionName, string languageId) { submissionInfo = new SubmissionInfo { RunAllTests = false, Source = new ProgramSource { Code = File.ReadAllText(Path.Combine(problemsDirectory, solutionName)), LanguageId = languageId, }, SubmissionId = 42, TestInfoId = testInfoId, SubmissionLimits = new ResourceUsage { TimeInMilliseconds = 1000, MemoryInBytes = 256 * 1024 * 1024, }, InputFileName = "input.txt", OutputFileName = "output.txt", }; testInfo = new TestInfo { Id = testInfoId, Checker = new ProgramSource { LanguageId = "MSVC90Testlib", Code = File.ReadAllText(Path.Combine(problemsDirectory, "check.cpp")), }, Tests = new TestsZipper("", "ans").UnzipTests(File.ReadAllBytes(Path.Combine(problemsDirectory, "tests.zip"))), }; }
public void Consume(JudgeSubmission msg) { var submission = session.Get <Submission>(msg.SubmissionId); var submissionInfo = new SubmissionInfo(submission); queue.Enqueue(submissionInfo, Priority.High); }
/// <summary> /// Generate a SubmissionInfo for the output files /// </summary> /// <param name="info">Base submission info to fill in specifics for</param> /// <param name="basePath">Base filename and path to use for checking</param> /// <param name="system">KnownSystem type representing the media</param> /// <param name="type">MediaType type representing the media</param> /// <param name="drive">Drive representing the disc to get information from</param> /// <returns></returns> public override void GenerateSubmissionInfo(SubmissionInfo info, string basePath, KnownSystem?system, MediaType?type, Drive drive) { // Fill in the hash data info.TracksAndWriteOffsets.ClrMameProData = GetDatfile(basePath + ".dat"); // Extract info based generically on MediaType switch (type) { case MediaType.UMD: info.Extras.PVD = GetPVD(basePath + "_mainInfo.txt") ?? ""; if (GetUMDAuxInfo(basePath + "_disc.txt", out string title, out DiscCategory? umdcat, out string umdversion, out string umdlayer, out long umdsize)) { info.CommonDiscInfo.Title = title ?? ""; info.CommonDiscInfo.Category = umdcat ?? DiscCategory.Games; info.VersionAndEditions.Version = umdversion ?? ""; info.SizeAndChecksums.Size = umdsize; if (!string.IsNullOrWhiteSpace(umdlayer)) { info.SizeAndChecksums.Layerbreak = Int64.Parse(umdlayer ?? "-1"); } } break; } }
public void EmptySerializationTest() { var submissionInfo = new SubmissionInfo(); string json = JsonConvert.SerializeObject(submissionInfo, Formatting.Indented); Assert.NotNull(json); }
/// <summary> /// Initializes a new instance of the <see cref="CertificateSigningRequestViewModel"/> class /// with a specific <see cref="SubmissionInfo"/> instance. /// </summary> /// <param name="submissionInfo">The <see cref="SubmissionInfo"/> instance.</param> public CertificateSigningRequestViewModel(SubmissionInfo submissionInfo) { this.AdministrativeContactEmail = submissionInfo.EMail; this.AdministrativeContactName = submissionInfo.AdminContact; this.DistinguishedName = submissionInfo.DistinguishedName; this.SubmissionTime = Convert.ToDateTime(submissionInfo.SubmittedWhen); }
///<summary>Returns serialized DbInfo object as JSON string of database info from both the preference table and non preferernce table info.</summary> private string GetDbInfoJSON(long patNum, string moduleName) { _info = new BugSubmission.SubmissionInfo(); try { //This list is not in a separate method because we want to ensure that future development related to bug submissions don't try to make assumptions //on which preferences are in an object at any given time. //Ex. Let's say in version 17.4, the list doesn't contain the payplan version preference, but 17.5 does. //If we called the method that retrieves the used preferences from WebServiceMainHQ which in this example is on version 17.5, // it would think all bugsubmission rows contain the payplan version preference when that is not the case. List <PrefName> listPrefs = new List <PrefName>() { PrefName.AtoZfolderUsed, PrefName.ClaimSnapshotEnabled, PrefName.ClaimSnapshotRunTime, PrefName.ClaimSnapshotTriggerType, PrefName.CorruptedDatabase, PrefName.DataBaseVersion, PrefName.EasyNoClinics, PrefName.LanguageAndRegion, PrefName.MySqlVersion, PrefName.PayPlansVersion, PrefName.ProcessSigsIntervalInSecs, PrefName.ProgramVersionLastUpdated, PrefName.ProgramVersion, PrefName.RandomPrimaryKeys, PrefName.RegistrationKey, PrefName.RegistrationKeyIsDisabled, PrefName.ReplicationFailureAtServer_id, PrefName.ReportingServerCompName, PrefName.ReportingServerDbName, PrefName.ReportingServerMySqlUser, PrefName.ReportingServerMySqlPassHash, PrefName.ReportingServerURI, PrefName.WebServiceServerName }; foreach (PrefName pref in listPrefs) { _info.DictPrefValues[pref] = Prefs.GetOne(pref).ValueString; } _info.CountClinics = Clinics.GetCount(); _info.EnabledPlugins = Programs.GetWhere(x => x.Enabled && !string.IsNullOrWhiteSpace(x.PluginDllName)).Select(x => x.ProgName).ToList(); _info.ClinicNumCur = Clinics.ClinicNum; _info.UserNumCur = Security.CurUser.UserNum; _info.PatientNumCur = patNum; _info.IsOfficeOnReplication = (ReplicationServers.GetCount() > 0 ? true : false); _info.IsOfficeUsingMiddleTier = (RemotingClient.RemotingRole == RemotingRole.ClientWeb ? true : false); _info.WindowsVersion = MiscData.GetOSVersionInfo(); _info.CompName = Environment.MachineName; List <UpdateHistory> listHist = UpdateHistories.GetPreviouUpdateHistories(2); //Ordered by newer versions first. _info.PreviousUpdateVersion = listHist.Count == 2 ? listHist[1].ProgramVersion : ""; //Show the previous version they updated from _info.PreviousUpdateTime = listHist.Count > 0 ? listHist[0].DateTimeUpdated : DateTime.MinValue; //Show when they updated to the current version. _info.ModuleNameCur = moduleName; _info.DatabaseName = DataConnection.GetDatabaseName(); } catch (Exception ex) { ex.DoNothing(); } return(JsonConvert.SerializeObject(_info)); }
public DiscInformationWindow(SubmissionInfo submissionInfo) { this.SubmissionInfo = submissionInfo; this.InitializeComponent(); #if DEBUG this.AttachDevTools(); #endif }
/// <summary> /// Show the disc information window /// </summary> /// <param name="submissionInfo">SubmissionInfo object to display and possibly change</param> /// <returns>Dialog open result</returns> private bool?ShowDiscInformationWindow(SubmissionInfo submissionInfo) { var discInformationWindow = new DiscInformationWindow(submissionInfo); discInformationWindow.Owner = this; discInformationWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner; discInformationWindow.Load(); return(discInformationWindow.ShowDialog()); }
public DiscInformationWindow(SubmissionInfo submissionInfo) { InitializeComponent(); DataContext = this; this.SubmissionInfo = submissionInfo; ManipulateFields(); Load(); }
/// <summary> /// Show the disc information window /// </summary> /// <param name="submissionInfo">SubmissionInfo object to display and possibly change</param> /// <returns>Dialog open result</returns> private bool?ShowDiscInformationWindow(SubmissionInfo submissionInfo) { var discInformationWindow = new DiscInformationWindow(submissionInfo); discInformationWindow.Load(); discInformationWindow.WindowStartupLocation = WindowStartupLocation.CenterOwner; discInformationWindow.ShowDialog(this).ConfigureAwait(false).GetAwaiter().GetResult(); return(true); }
/// <inheritdoc/> public override void GenerateSubmissionInfo(SubmissionInfo info, string basePath, Drive drive, bool includeArtifacts) { // TODO: Fill in submission info specifics for DD string outputDirectory = Path.GetDirectoryName(basePath); switch (this.Type) { // Determine type-specific differences } switch (this.System) { case RedumpSystem.KonamiPython2: if (GetPlayStationExecutableInfo(drive?.Letter, out string pythonTwoSerial, out Region? pythonTwoRegion, out string pythonTwoDate)) { // Ensure internal serial is pulled from local data info.CommonDiscInfo.CommentsSpecialFields[SiteCode.InternalSerialName] = pythonTwoSerial ?? string.Empty; info.CommonDiscInfo.Region = info.CommonDiscInfo.Region ?? pythonTwoRegion; info.CommonDiscInfo.EXEDateBuildDate = pythonTwoDate; } info.VersionAndEditions.Version = GetPlayStation2Version(drive?.Letter) ?? ""; break; case RedumpSystem.SonyPlayStation: if (GetPlayStationExecutableInfo(drive?.Letter, out string playstationSerial, out Region? playstationRegion, out string playstationDate)) { // Ensure internal serial is pulled from local data info.CommonDiscInfo.CommentsSpecialFields[SiteCode.InternalSerialName] = playstationSerial ?? string.Empty; info.CommonDiscInfo.Region = info.CommonDiscInfo.Region ?? playstationRegion; info.CommonDiscInfo.EXEDateBuildDate = playstationDate; } break; case RedumpSystem.SonyPlayStation2: if (GetPlayStationExecutableInfo(drive?.Letter, out string playstationTwoSerial, out Region? playstationTwoRegion, out string playstationTwoDate)) { // Ensure internal serial is pulled from local data info.CommonDiscInfo.CommentsSpecialFields[SiteCode.InternalSerialName] = playstationTwoSerial ?? string.Empty; info.CommonDiscInfo.Region = info.CommonDiscInfo.Region ?? playstationTwoRegion; info.CommonDiscInfo.EXEDateBuildDate = playstationTwoDate; } info.VersionAndEditions.Version = GetPlayStation2Version(drive?.Letter) ?? ""; break; case RedumpSystem.SonyPlayStation4: info.VersionAndEditions.Version = GetPlayStation4Version(drive?.Letter) ?? ""; break; case RedumpSystem.SonyPlayStation5: info.VersionAndEditions.Version = GetPlayStation5Version(drive?.Letter) ?? ""; break; } }
public DiscInformationWindow(SubmissionInfo submissionInfo) { this.SubmissionInfo = submissionInfo; InitializeComponent(); PopulateCategories(); PopulateRegions(); PopulateLanguages(); DisableFieldsIfNeeded(); }
public DiscInformationWindow(MainWindow mainWindow, SubmissionInfo submissionInfo) { InitializeComponent(); _mainWindow = mainWindow; _submissionInfo = submissionInfo; PopulateCategories(); PopulateRegions(); PopulateLanguages(); }
/// <summary> /// 提交3GX数据到主数据库中 /// </summary> /// <param name="info"></param> /// <returns></returns> public SubmissionResult Submit(SubmissionInfo info) { result = new SubmissionResult(); ListsubErr = new List<SubmissionError>(); xmldata = Xml2Str(info.GGGXData);//得到传入的3GX数据 option = Enum.GetName(typeof(SubmissionOption), info.Option);//得到传入的枚举值 List<GeoFeature> ftList = ConvertFT.ConvertToFTListByXML(xmldata);//将3GX文件转换为对象集合 if (ftList != null) Save3GX(ftList, option);//保存数据 return result; }
/// <inheritdoc/> public override void GenerateSubmissionInfo(SubmissionInfo info, string basePath, Drive drive, bool includeArtifacts) { // TODO: Fill in submission info specifics for DD string outputDirectory = Path.GetDirectoryName(basePath); switch (this.Type) { // Determine type-specific differences } switch (this.System) { case KnownSystem.KonamiPython2: if (GetPlayStationExecutableInfo(drive?.Letter, out string pythonTwoSerial, out RedumpRegion? pythonTwoRegion, out string pythonTwoDate)) { info.CommonDiscInfo.Comments += $"Internal Disc Serial: {pythonTwoSerial}\n"; info.CommonDiscInfo.Region = info.CommonDiscInfo.Region ?? pythonTwoRegion; info.CommonDiscInfo.EXEDateBuildDate = pythonTwoDate; } info.VersionAndEditions.Version = GetPlayStation2Version(drive?.Letter) ?? ""; break; case KnownSystem.SonyPlayStation: if (GetPlayStationExecutableInfo(drive?.Letter, out string playstationSerial, out RedumpRegion? playstationRegion, out string playstationDate)) { info.CommonDiscInfo.Comments += $"Internal Disc Serial: {playstationSerial}\n"; info.CommonDiscInfo.Region = info.CommonDiscInfo.Region ?? playstationRegion; info.CommonDiscInfo.EXEDateBuildDate = playstationDate; } info.CopyProtection.AntiModchip = GetPlayStationAntiModchipDetected(drive?.Letter) ? YesNo.Yes : YesNo.No; break; case KnownSystem.SonyPlayStation2: if (GetPlayStationExecutableInfo(drive?.Letter, out string playstationTwoSerial, out RedumpRegion? playstationTwoRegion, out string playstationTwoDate)) { info.CommonDiscInfo.Comments += $"Internal Disc Serial: {playstationTwoSerial}\n"; info.CommonDiscInfo.Region = info.CommonDiscInfo.Region ?? playstationTwoRegion; info.CommonDiscInfo.EXEDateBuildDate = playstationTwoDate; } info.VersionAndEditions.Version = GetPlayStation2Version(drive?.Letter) ?? ""; break; case KnownSystem.SonyPlayStation4: info.VersionAndEditions.Version = GetPlayStation4Version(drive?.Letter) ?? ""; break; case KnownSystem.SonyPlayStation5: info.VersionAndEditions.Version = GetPlayStation5Version(drive?.Letter) ?? ""; break; } }
/// <inheritdoc/> public override void GenerateSubmissionInfo(SubmissionInfo info, string basePath, Drive drive, bool includeArtifacts) { // Extract info based generically on MediaType switch (this.Type) { case MediaType.UMD: info.Extras.PVD = GetPVD(basePath + "_mainInfo.txt") ?? ""; if (GetFileHashes(basePath + ".iso", out long filesize, out string crc32, out string md5, out string sha1)) { info.SizeAndChecksums.Size = filesize; info.SizeAndChecksums.CRC32 = crc32; info.SizeAndChecksums.MD5 = md5; info.SizeAndChecksums.SHA1 = sha1; } if (GetUMDAuxInfo(basePath + "_disc.txt", out string title, out RedumpDiscCategory? umdcat, out string umdversion, out string umdlayer, out long umdsize)) { info.CommonDiscInfo.Title = title ?? ""; info.CommonDiscInfo.Category = umdcat ?? RedumpDiscCategory.Games; info.VersionAndEditions.Version = umdversion ?? ""; info.SizeAndChecksums.Size = umdsize; if (!string.IsNullOrWhiteSpace(umdlayer)) { info.SizeAndChecksums.Layerbreak = Int64.Parse(umdlayer ?? "-1"); } } break; } // Fill in any artifacts that exist, Base64-encoded, if we need to if (includeArtifacts) { if (File.Exists(basePath + "_disc.txt")) { info.Artifacts["disc"] = GetBase64(GetFullFile(basePath + "_disc.txt")); } if (File.Exists(basePath + "_mainError.txt")) { info.Artifacts["mainError"] = GetBase64(GetFullFile(basePath + "_mainError.txt")); } if (File.Exists(basePath + "_mainInfo.txt")) { info.Artifacts["mainInfo"] = GetBase64(GetFullFile(basePath + "_mainInfo.txt")); } if (File.Exists(basePath + "_volDesc.txt")) { info.Artifacts["volDesc"] = GetBase64(GetFullFile(basePath + "_volDesc.txt")); } } }
/// <inheritdoc/> public override void GenerateSubmissionInfo(SubmissionInfo info, string basePath, Drive drive, bool includeArtifacts) { info.TracksAndWriteOffsets.ClrMameProData = GetCleanripDatfile(basePath + ".iso", basePath + "-dumpinfo.txt"); // Get the individual hash data, as per internal if (GetISOHashValues(info.TracksAndWriteOffsets.ClrMameProData, out long size, out string crc32, out string md5, out string sha1)) { info.SizeAndChecksums.Size = size; info.SizeAndChecksums.CRC32 = crc32; info.SizeAndChecksums.MD5 = md5; info.SizeAndChecksums.SHA1 = sha1; // Dual-layer discs have the same size and layerbreak if (size == 8511160320) { info.SizeAndChecksums.Layerbreak = 2084960; } } // Extract info based generically on MediaType switch (this.Type) { case MediaType.DVD: // Only added here to help users; not strictly correct case MediaType.NintendoGameCubeGameDisc: case MediaType.NintendoWiiOpticalDisc: if (File.Exists(basePath + ".bca")) { info.Extras.BCA = GetBCA(basePath + ".bca"); } if (GetGameCubeWiiInformation(basePath + "-dumpinfo.txt", out Region? gcRegion, out string gcVersion)) { info.CommonDiscInfo.Region = gcRegion ?? info.CommonDiscInfo.Region; info.VersionAndEditions.Version = gcVersion ?? info.VersionAndEditions.Version; } break; } // Fill in any artifacts that exist, Base64-encoded, if we need to if (includeArtifacts) { if (File.Exists(basePath + ".bca")) { info.Artifacts["bca"] = GetBase64(GetFullFile(basePath + ".bca", binary: true)); } if (File.Exists(basePath + "-dumpinfo.txt")) { info.Artifacts["dumpinfo"] = GetBase64(GetFullFile(basePath + "-dumpinfo.txt")); } } }
public void ProcessSpecialFieldsNullObjectTest() { // Create a new SubmissionInfo object SubmissionInfo info = new SubmissionInfo() { CommonDiscInfo = null, }; // Process the special fields InfoTool.ProcessSpecialFields(info); // Validate Assert.Null(info.CommonDiscInfo); }
public void tests_each_submission() { using (bus.AddInstanceSubscription(this)) { var info = new SubmissionInfo(); var msgs = Enumerable.Repeat(new TestSubmission { SubmissionInfo = info }, submissionSentCount).ToArray(); bus.Send(msgs); allTestlogsReceived.WaitOne(TimeSpan.FromSeconds(5)); Assert.Equal(submissionSentCount, testLogsReceived); } }
/// <summary> /// Constructor /// </summary> public DiscInformationViewModel(DiscInformationWindow parent, SubmissionInfo submissionInfo) { Parent = parent; SubmissionInfo = submissionInfo.Clone() as SubmissionInfo ?? new SubmissionInfo(); // Add handlers Parent.AcceptButton.Click += OnAcceptClick; Parent.CancelButton.Click += OnCancelClick; Parent.RingCodeGuideButton.Click += OnRingCodeGuideClick; // Update UI with new values ManipulateFields(); Load(); }
public IEnumerable <object> Query(NameValueCollection queryParameters, int offset, int count, out int totalCount) { List <SubmissionInfo> collection = new List <SubmissionInfo>(); var certs = this.m_certTool.GetCertificates(); foreach (var cert in certs) { SubmissionInfo info = SubmissionInfo.FromAttributes(cert.Attribute); info.XmlStatusCode = (SubmissionStatus)this.m_certTool.GetRequestStatus(Int32.Parse(info.RequestID)).Outcome; if (info.XmlStatusCode == SubmissionStatus.Submission) { collection.Add(info); } } totalCount = collection.Count; return(collection.OfType <Object>()); }
public void PartialSerializationTest() { var submissionInfo = new SubmissionInfo() { CommonDiscInfo = new CommonDiscInfoSection(), VersionAndEditions = new VersionAndEditionsSection(), EDC = new EDCSection(), ParentCloneRelationship = new ParentCloneRelationshipSection(), Extras = new ExtrasSection(), CopyProtection = new CopyProtectionSection(), DumpersAndStatus = new DumpersAndStatusSection(), TracksAndWriteOffsets = new TracksAndWriteOffsetsSection(), SizeAndChecksums = new SizeAndChecksumsSection(), }; string json = JsonConvert.SerializeObject(submissionInfo, Formatting.Indented); Assert.NotNull(json); }
/// <summary> /// Gets a list of submitted certificate signing requests. /// </summary> /// <returns>Returns a list of certificate signing requests.</returns> public AmiCollection <SubmissionInfo> GetCsrs() { AmiCollection <SubmissionInfo> collection = new AmiCollection <SubmissionInfo>(); var certs = this.certTool.GetCertificates(); foreach (var cert in certs) { SubmissionInfo info = new SubmissionInfo(); foreach (var kv in cert.Attribute) { var key = kv.Key.Replace("Request.", ""); var pi = typeof(CertificateInfo).GetProperty(key, BindingFlags.Public | BindingFlags.Instance); pi?.SetValue(info, kv.Value, null); } info.XmlStatusCode = (SubmissionStatus)this.certTool.GetRequestStatus(Int32.Parse(info.RequestID)).Outcome; if (info.XmlStatusCode == SubmissionStatus.Submission) { collection.CollectionItem.Add(info); } } return(collection); }
public void ProcessSpecialFieldsNullCommentsContentsTest() { // Create a new SubmissionInfo object SubmissionInfo info = new SubmissionInfo() { CommonDiscInfo = new CommonDiscInfoSection() { Comments = null, CommentsSpecialFields = new Dictionary <SiteCode?, string>() { [SiteCode.VolumeLabel] = "VOLUME_LABEL", }, Contents = null, ContentsSpecialFields = new Dictionary <SiteCode?, string>() { [SiteCode.Patches] = "1.04 patch", }, } }; // Process the special fields InfoTool.ProcessSpecialFields(info); // Validate the basics Assert.NotNull(info.CommonDiscInfo.Comments); Assert.Null(info.CommonDiscInfo.CommentsSpecialFields); Assert.NotNull(info.CommonDiscInfo.Contents); Assert.Null(info.CommonDiscInfo.ContentsSpecialFields); // Split the values string[] splitComments = info.CommonDiscInfo.Comments.Split('\n'); string[] splitContents = info.CommonDiscInfo.Contents.Split('\n'); // Validate the lines Assert.Single(splitComments); Assert.Equal(2, splitContents.Length); }
public void ProcessSpecialFieldsCompleteTest() { // Create a new SubmissionInfo object SubmissionInfo info = new SubmissionInfo() { CommonDiscInfo = new CommonDiscInfoSection() { Comments = "This is a comments line\n[T:ISBN] ISBN Value", CommentsSpecialFields = new Dictionary <SiteCode?, string>() { [SiteCode.VolumeLabel] = "VOLUME_LABEL", }, Contents = "This is a contents line\n[T:GF] Game Footage", ContentsSpecialFields = new Dictionary <SiteCode?, string>() { [SiteCode.Patches] = "1.04 patch", }, } }; // Process the special fields InfoTool.ProcessSpecialFields(info); // Validate the basics Assert.NotNull(info.CommonDiscInfo.Comments); Assert.Null(info.CommonDiscInfo.CommentsSpecialFields); Assert.NotNull(info.CommonDiscInfo.Contents); Assert.Null(info.CommonDiscInfo.ContentsSpecialFields); // Split the values string[] splitComments = info.CommonDiscInfo.Comments.Split('\n'); string[] splitContents = info.CommonDiscInfo.Contents.Split('\n'); // Validate the lines Assert.Equal(3, splitComments.Length); Assert.Equal(5, splitContents.Length); }
public Tester(IFactory <ICompiler> compilers, SubmissionInfo submissionInfo, TestInfo testInfo) { this.submissionInfo = submissionInfo; this.testInfo = testInfo; CompilationResult checkerCompilationResult = CompilerExtensions.CompileToTempDirectory(testInfo.Checker, compilers); if (!checkerCompilationResult.Success) { throw new FailedActionException( "скомпилировать чекер", "Лог компиляции: " + checkerCompilationResult.CompilerOutput); } checkerPath = checkerCompilationResult.OutputFileName; checkerDirectory = Path.GetDirectoryName(checkerPath); CompilationResult sourceCompilationResult = CompilerExtensions.CompileToTempDirectory(submissionInfo.Source, compilers); result = new TestLog { CompilationReport = sourceCompilationResult.CompilerOutput }; compilationSucceeded = sourceCompilationResult.Success; solutionPath = sourceCompilationResult.OutputFileName; solutionDirectory = Path.GetDirectoryName(solutionPath); }
private async Task <RunSolutionResponse> CheckSolution(string courseId, ExerciseSlide exerciseSlide, string userCode, Language language, string userId, string userName, bool waitUntilChecked, bool saveSubmissionOnCompileErrors ) { var exerciseMetricId = GetExerciseMetricId(courseId, exerciseSlide); metricSender.SendCount("exercise.try"); metricSender.SendCount($"exercise.{courseId.ToLower(CultureInfo.InvariantCulture)}.try"); metricSender.SendCount($"exercise.{exerciseMetricId}.try"); var course = await courseManager.GetCourseAsync(courseId); var exerciseBlock = exerciseSlide.Exercise; var buildResult = exerciseBlock.BuildSolution(userCode); if (buildResult.HasErrors) { metricSender.SendCount($"exercise.{exerciseMetricId}.CompilationError"); } if (buildResult.HasStyleErrors) { metricSender.SendCount($"exercise.{exerciseMetricId}.StyleViolation"); } if (!saveSubmissionOnCompileErrors) { if (buildResult.HasErrors) { return new RunSolutionResponse(SolutionRunStatus.CompilationError) { Message = buildResult.ErrorMessage } } ; } var compilationErrorMessage = buildResult.HasErrors ? buildResult.ErrorMessage : null; var submissionSandbox = (exerciseBlock as UniversalExerciseBlock)?.DockerImageName; var hasAutomaticChecking = exerciseBlock.HasAutomaticChecking(); var automaticCheckingStatus = hasAutomaticChecking ? buildResult.HasErrors ? AutomaticExerciseCheckingStatus.Done : AutomaticExerciseCheckingStatus.Waiting : (AutomaticExerciseCheckingStatus?)null; var initialSubmission = await userSolutionsRepo.AddUserExerciseSubmission( courseId, exerciseSlide.Id, userCode, compilationErrorMessage, null, userId, "uLearn", GenerateSubmissionName(exerciseSlide, userName), language, submissionSandbox, hasAutomaticChecking, automaticCheckingStatus ); var isCourseAdmin = await courseRolesRepo.HasUserAccessToCourseAsync(userId, courseId, CourseRoleType.CourseAdmin); if (buildResult.HasErrors) { return new RunSolutionResponse(SolutionRunStatus.Success) { Submission = SubmissionInfo.Build(initialSubmission, null, isCourseAdmin) } } ; var executionTimeout = TimeSpan.FromSeconds(exerciseBlock.TimeLimit * 2 + 5); UserExerciseSubmission updatedSubmissionNoTracking; try { if (hasAutomaticChecking) { var priority = exerciseBlock is SingleFileExerciseBlock ? 10 : 0; await userSolutionsRepo.RunAutomaticChecking(initialSubmission, executionTimeout, waitUntilChecked, priority); } } catch (SubmissionCheckingTimeout) { log.Error($"Не смог запустить проверку решения, никто не взял его на проверку за {executionTimeout.TotalSeconds} секунд.\nКурс «{course.Title}», слайд «{exerciseSlide.Title}» ({exerciseSlide.Id})"); await errorsBot.PostToChannelAsync($"Не смог запустить проверку решения, никто не взял его на проверку за {executionTimeout.TotalSeconds} секунд.\nКурс «{course.Title}», слайд «{exerciseSlide.Title}» ({exerciseSlide.Id})\n\nhttps://ulearn.me/Sandbox"); updatedSubmissionNoTracking = await userSolutionsRepo.FindSubmissionByIdNoTracking(initialSubmission.Id); var message = updatedSubmissionNoTracking.AutomaticChecking.Status == AutomaticExerciseCheckingStatus.Running ? "Решение уже проверяется." : "Решение ждет своей очереди на проверку, мы будем пытаться проверить его еще 10 минут."; return(new RunSolutionResponse(SolutionRunStatus.SubmissionCheckingTimeout) { Message = $"К сожалению, мы не смогли оперативно проверить ваше решение. {message}. Просто подождите и обновите страницу.", Submission = SubmissionInfo.Build(updatedSubmissionNoTracking, null, isCourseAdmin) }); } if (!waitUntilChecked) { metricSender.SendCount($"exercise.{exerciseMetricId}.dont_wait_result"); // По вовзращаемому значению нельзя отличить от случая, когда никто не взял на проверку return(new RunSolutionResponse(SolutionRunStatus.Success) { Submission = SubmissionInfo.Build(initialSubmission, null, isCourseAdmin) }); } updatedSubmissionNoTracking = await userSolutionsRepo.FindSubmissionByIdNoTracking(initialSubmission.Id); updatedSubmissionNoTracking.Reviews = await CreateStyleErrorsReviewsForSubmission(updatedSubmissionNoTracking.Id, buildResult.StyleErrors, exerciseMetricId); if (!hasAutomaticChecking) { await SendToReviewAndUpdateScore(updatedSubmissionNoTracking, courseManager, slideCheckingsRepo, groupsRepo, visitsRepo, metricSender); } var score = await visitsRepo.GetScore(courseId, exerciseSlide.Id, userId); var waitingForManualChecking = updatedSubmissionNoTracking.ManualCheckings.Any(c => !c.IsChecked) ? true : (bool?)null; var prohibitFurtherManualChecking = updatedSubmissionNoTracking.ManualCheckings.Any(c => c.ProhibitFurtherManualCheckings); var result = new RunSolutionResponse(SolutionRunStatus.Success) { Score = score, WaitingForManualChecking = waitingForManualChecking, ProhibitFurtherManualChecking = prohibitFurtherManualChecking, Submission = SubmissionInfo.Build(updatedSubmissionNoTracking, null, isCourseAdmin) }; return(result); }
/// <summary> /// Constructor /// </summary> public DiscInformationWindow(SubmissionInfo submissionInfo) { InitializeComponent(); DataContext = new DiscInformationViewModel(this, submissionInfo); }