Ejemplo n.º 1
0
        private static void AddPayloadLinesToJobInImmediateDBEnv(ExtValidationJobs job, ServiceContext ctx)
        {
            using (var x = SuiteEntitiesUtility.GetODataValidationSuiteEntities())
            {
                var j = x.ExtValidationJobs;
                j.AddObject(job);

                if (ctx.PayloadType == PayloadType.RawValue && ctx.ContentType == PayloadFormat.Image)
                {
                    PayloadLine payloadLine = new PayloadLine();
                    payloadLine.ID         = Guid.NewGuid();
                    payloadLine.LineNumber = 1;
                    payloadLine.LineText   = "( Image data )";
                    job.PayloadLines.Add(payloadLine);
                }
                else
                {
                    PayloadLine payloadLine;
                    int         lineNumber = 0;
                    foreach (var responseLine in ctx.GetPayloadLines())
                    {
                        payloadLine            = new PayloadLine();
                        payloadLine.ID         = Guid.NewGuid();
                        payloadLine.LineNumber = ++lineNumber;
                        payloadLine.LineText   = responseLine;
                        job.PayloadLines.Add(payloadLine);
                    }
                }

                x.SaveChanges();
            }
        }
Ejemplo n.º 2
0
        private JobGroup CreateJobGroupItem(string format, Guid masterJobId, ServiceContext ctx, JobType jobType, List <string> ruleNameList = null, bool insertJobToDB = true)
        {
            RuleEngine.IResultProvider resultProvider = new DatabaseResultProvider(ctx.JobId, jobType);
            ILogger           logger     = resultProvider as ILogger;
            RuleEngineWrapper ruleEngine = new RuleEngineWrapper(ctx, resultProvider, logger, ruleNameList);

            // start the validation workflow on the backend threadpool thread
            this.InitJobState(ruleEngine, ctx.JobId);

            if (insertJobToDB)
            {
                // insert validation job entry, and insert payload lines, to underlying DB
                ExtValidationJobs extJob = new ExtValidationJobs();

                extJob.ID           = ctx.JobId;
                extJob.Complete     = false;
                extJob.CreatedDate  = DateTime.Now;
                extJob.Uri          = ctx.Destination.OriginalString;
                extJob.Format       = format;
                extJob.RuleCount    = ruleEngine.RuleCount;
                extJob.ResourceType = ctx.PayloadType.ToString();
                extJob.ServiceType  = ctx.ServiceType.ToString();
                foreach (var levelType in ctx.LevelTypes)
                {
                    extJob.LevelTypes += Enum.GetName(typeof(ConformanceLevelType), levelType).ToString() + ',';
                }
                extJob.LevelTypes = extJob.LevelTypes.TrimEnd(',');

                if (ctx.RequestHeaders != null && ctx.RequestHeaders.Any())
                {
                    var headers = "";
                    foreach (var p in ctx.RequestHeaders)
                    {
                        if (p.Key.Equals("Authorization"))
                        {
                            continue;
                        }
                        headers += p.Key + ":" + p.Value + ";";
                    }
                    extJob.ReqHeaders = headers;
                }
                AddPayloadLinesToJobInImmediateDBEnv(extJob, ctx);
                LogJobRespHeaders(extJob, ctx);
            }

            // populate the data to return
            JobGroup item = JobGroup.CreateJobGroup(masterJobId, ctx.PayloadType.ToString(), ruleEngine.RuleCount, ctx.Destination.OriginalString);

            item.DerivativeJobId = ctx.JobId;

            return(item);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Logs response Http headers for the interop validation context to persistent storage
        /// </summary>
        /// <param name="job">The validation job object</param>
        /// <param name="ctx">The interop validation context</param>
        private static void LogJobRespHeaders(ExtValidationJobs job, ServiceContext ctx)
        {
            if (!string.IsNullOrEmpty(ctx.ResponseHttpHeaders))
            {
                using (var x = SuiteEntitiesUtility.GetODataValidationSuiteEntities())
                {
                    var     j       = x.JobData;
                    JobData jobData = new JobData();
                    jobData.ID          = Guid.NewGuid();
                    jobData.RespHeaders = ctx.ResponseHttpHeaders;
                    jobData.JobID       = job.ID;

                    j.AddObject(jobData);
                    x.SaveChanges();
                }
            }
        }
Ejemplo n.º 4
0
 /// <summary>Create the ServiceContext based on the ValidationJob</summary>
 /// <param name="job">Row of ValidationJob in the SQL table</param>
 /// <returns>ServiceContext class</returns>
 private static ServiceContext CreateRuleEngineContext(ExtValidationJobs job)
 {
     if (!string.IsNullOrEmpty(job.Uri))
     {
         // an online validation
         return(ServiceContextFactory.Create(job.Uri, job.Format, job.ID, MaxPayloadByteCount, ToHeaderCollection(job.ReqHeaders)));
     }
     else
     {
         // an offline validation
         if (job.PayloadText.Length > MaxPayloadByteCount || job.MetadataText.Length > MaxPayloadByteCount)
         {
             throw new DataServiceException(509, "Content exceeds the allowed maximum size. Please copy and paste smaller content and retry.");
         }
         string payloadText  = SanitizeXmlLiteral(job.PayloadText);
         string metadataText = SanitizeXmlLiteral(job.MetadataText);
         return(ServiceContextFactory.Create(payloadText, metadataText, job.ID, job.ReqHeaders, ToHeaderCollection(job.ReqHeaders)));
     }
 }
Ejemplo n.º 5
0
        public void OnInsertJob(ExtValidationJobs job, UpdateOperations op)
        {
            if (job == null)
            {
                throw new ArgumentNullException("job");
            }

            // ensure only insert ops are allowed
            ValidateOperationType(op);

            // limit total size of validation job queue
            CheckValidationJobQueueSize();

            job.Complete    = false;
            job.CreatedDate = DateTime.Now;
            job.ID          = Guid.NewGuid();

            // instantiate validation engine
            var               ctx            = CreateRuleEngineContext(job);
            IResultProvider   resultProvider = new DatabaseResultProvider(job.ID);
            ILogger           logger         = resultProvider as ILogger;
            RuleEngineWrapper ruleEngine     = new RuleEngineWrapper(ctx, resultProvider, logger);

            // set total # of rules to execute for the given URI & format
            job.RuleCount    = ruleEngine.RuleCount;
            job.ResourceType = ctx.PayloadType.ToString();
            job.ServiceType  = ctx.ServiceType.ToString();
            foreach (var levelType in ctx.LevelTypes)
            {
                job.LevelTypes += Enum.GetName(typeof(ConformanceLevelType), levelType).ToString() + ',';
            }
            job.LevelTypes.TrimEnd(',');

            LogJobRespHeaders(job, ctx);
            AddPayloadLinesToJob(job, ctx);

            // state object is used to start the validation workflow on a threadpool thread
            this.InitJobState(ruleEngine, job.ID);
        }
Ejemplo n.º 6
0
 /// <summary>Add the payload lines to the PayloadLines table</summary>
 /// <param name="job">Row of ValidationJob</param>
 /// <param name="ctx">ServiceContext</param>
 private static void AddPayloadLinesToJob(ExtValidationJobs job, ServiceContext ctx)
 {
     if (ctx.PayloadType == PayloadType.RawValue && ctx.ContentType == PayloadFormat.Image)
     {
         PayloadLine payloadLine = new PayloadLine();
         payloadLine.ID         = Guid.NewGuid();
         payloadLine.LineNumber = 1;
         payloadLine.LineText   = "( Image data )";
         job.PayloadLines.Add(payloadLine);
     }
     else
     {
         PayloadLine payloadLine;
         int         lineNumber = 0;
         foreach (var responseLine in ctx.GetPayloadLines())
         {
             payloadLine            = new PayloadLine();
             payloadLine.ID         = Guid.NewGuid();
             payloadLine.LineNumber = ++lineNumber;
             payloadLine.LineText   = responseLine;
             job.PayloadLines.Add(payloadLine);
         }
     }
 }