Beispiel #1
0
        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();
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
 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);
        }
Beispiel #5
0
        /// <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;
            }
        }
Beispiel #6
0
        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);
 }
Beispiel #8
0
 ///<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
        }
Beispiel #10
0
        /// <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());
        }
Beispiel #11
0
        public DiscInformationWindow(SubmissionInfo submissionInfo)
        {
            InitializeComponent();
            DataContext = this;

            this.SubmissionInfo = submissionInfo;
            ManipulateFields();
            Load();
        }
Beispiel #12
0
        /// <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);
        }
Beispiel #13
0
        /// <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();
        }
Beispiel #16
0
 /// <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;
 }
Beispiel #17
0
        /// <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;
            }
        }
Beispiel #18
0
        /// <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"));
                }
            }
        }
Beispiel #19
0
        /// <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"));
                }
            }
        }
Beispiel #20
0
        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);
        }
Beispiel #21
0
        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);
            }
        }
Beispiel #22
0
        /// <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>());
        }
Beispiel #24
0
        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);
        }
Beispiel #26
0
        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);
        }
Beispiel #27
0
        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);
        }
Beispiel #28
0
        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);
        }
Beispiel #29
0
        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);
        }
Beispiel #30
0
 /// <summary>
 /// Constructor
 /// </summary>
 public DiscInformationWindow(SubmissionInfo submissionInfo)
 {
     InitializeComponent();
     DataContext = new DiscInformationViewModel(this, submissionInfo);
 }