public List <VerificationFailure> Verify(InterceptionProcessingData processingData)
        {
            var returnVal = new List <VerificationFailure>();

            if (processingData.BoundaryType != BoundaryType.Exit)
            {
                return(returnVal);
            }

            if (_helper.IsUnserializable(processingData.ReturnType))
            {
                returnVal.Add(new TypeSerializationFailure(processingData.ReturnType));
            }
            else
            {
                var res = _serializer.Serialize(processingData.ReturnValue);
                if (!res.Success)
                {
                    _helper.AddUnserializableType(processingData.ReturnType);
                    returnVal.Add(new TypeSerializationFailure(processingData.ReturnType));
                }
            }

            return(returnVal);
        }
        public List <VerificationFailure> Verify(InterceptionProcessingData processingData)
        {
            var returnVal    = new List <VerificationFailure>();
            var instanceType = processingData.TargetInstance.GetType();

            if (processingData.BoundaryType != BoundaryType.Entry)
            {
                return(returnVal);
            }

            if (_helper.IsUnserializable(instanceType))
            {
                returnVal.Add(new TypeSerializationFailure(instanceType));
            }
            else
            {
                var serResult = _serializer.Serialize(processingData.TargetInstance);
                if (!serResult.Success)
                {
                    _helper.AddUnserializableType(instanceType);
                    returnVal.Add(new TypeSerializationFailure(instanceType));
                }
            }

            return(returnVal);
        }
Exemple #3
0
        private void ProcessExit(InterceptionProcessingData data, List <RecordingMethod> methods, Guid executingMethodId, int threadId)
        {
            var subMethod = GetSubMethod(executingMethodId, methods);
            var hasError  = HasSerializationErrors(data);

            if (subMethod != null)
            {
                if (hasError)
                {
                    ClearMethodFromSubId(executingMethodId, threadId);
                }
                else
                {
                    subMethod.CloseOutMethodWithReturnVal(data.ReturnValue);
                }
            }

            var executingMethod = methods.FirstOrDefault(x => x.Identifier == executingMethodId);

            if (executingMethod != null)
            {
                if (!hasError)
                {
                    executingMethod.CloseOutMethodWithReturnVal(data.ReturnValue);
                    OnMethodRecordingComplete(new MethodRecordingCompleteEventArgs(executingMethod));
                    ClearMethod(executingMethodId, threadId);
                }
                else
                {
                    ClearMethod(executingMethodId, threadId);
                }
            }

            _executionStack.ProcessExit(threadId);
        }
Exemple #4
0
        private void ProcessEntry(InterceptionProcessingData data, List <RecordingMethod> methods, Guid executingMethodId, int threadId)
        {
            Guid newMethodId = Guid.NewGuid();

            //add this as a method
            if (!HasSerializationErrors(data))
            {
                var serInstance = _serializationHelper.Serialize(data.TargetInstance);

                if (!serInstance.Success)
                {
                    throw new AutoTestEngineException($"Unable to serialize type {data.TargetInstance.ToString()} despite not having a serialization failure on the processing datat context");
                }



                var newMethod = new RecordingMethod(newMethodId, serInstance.SerializedValue, data.MethodArgs, data.Method);
                methods.Add(newMethod);
            }

            //add this as a sub-method if applicable
            var executingMethod = methods.FirstOrDefault(x => x.Identifier == executingMethodId);

            if (executingMethod != null)
            {
                var subMethod = new RecordedSubMethod(newMethodId, data.TargetType, data.MethodArgs, data.ReturnType, data.Method);
                executingMethod.SubMethods.Add(subMethod);
            }

            _executionStack.ProcessEntry(threadId, newMethodId);
        }
Exemple #5
0
        public void Return_Val_Verifier_Test_Ent_Data_No_Serialization_Errors()
        {
            var SUT  = new ReturnValVerifier(_successSerHelper.Object, _successUnserializableTypehelper.Object);
            var data = new InterceptionProcessingData(DataHelper.DateTimeAddDaysData.Entry, _config);
            var res  = SUT.Verify(data);

            Assert.IsTrue(!res.Any());
        }
Exemple #6
0
        public void Instance_Serialization_Verifier_Test_Failed_Serialization_Fails_Verifier()
        {
            var SUT  = new InstanceSerializationVerifier(_failSerHelper.Object, _successUnserializableTypehelper.Object);
            var data = new InterceptionProcessingData(DataHelper.DateTimeAddDaysData.Entry, _config);
            var res  = SUT.Verify(data);

            Assert.IsTrue(res.Any());
        }
Exemple #7
0
        public void Instance_Serialization_Verifier_Test_Exc_Data_Serialization_Errors()
        {
            var SUT  = new InstanceSerializationVerifier(_successSerHelper.Object, _failUnserializableTypehelper.Object);
            var data = new InterceptionProcessingData(DataHelper.DateTimeAddDaysData.Exception, _config);
            var res  = SUT.Verify(data);

            Assert.IsTrue(!res.Any());
        }
Exemple #8
0
        public void Input_Parameter_Verifier_Test_Ent_Data_Serialization_Errors()
        {
            var SUT  = new InputParameterVerifier(_successSerHelper.Object, _failUnserializableTypehelper.Object);
            var data = new InterceptionProcessingData(DataHelper.DateTimeAddDaysData.Entry, _config);
            var res  = SUT.Verify(data);

            Assert.IsTrue(res.Any());
        }
        public void Processing_Data_Test_Class_Level_Attributes()
        {
            var entry           = new InterceptionEntryModel(_instance, _args, GetAttMethodBase());
            var processingModel = new InterceptionProcessingData(entry, new EngineConfiguration());

            Assert.IsTrue(processingModel.ClassAttributes.Count == 1);
            Assert.IsTrue(processingModel.ClassAttributes.Contains(typeof(AutoTestEngine.Attributes.AutoTest)));
        }
Exemple #10
0
        public void Return_Val_Verifier_Test_Exit_Serialization_Fails_Verifier()
        {
            var SUT  = new ReturnValVerifier(_failSerHelper.Object, _successUnserializableTypehelper.Object);
            var data = new InterceptionProcessingData(DataHelper.DateTimeAddDaysData.Exit, _config);
            var res  = SUT.Verify(data);

            Assert.IsTrue(res.Any());
        }
Exemple #11
0
        public void Return_Val_Verifier_Test_Failed_Serialization_Adds_To_DB()
        {
            var SUT  = new ReturnValVerifier(_failSerHelper.Object, _successUnserializableTypehelper.Object);
            var data = new InterceptionProcessingData(DataHelper.DateTimeAddDaysData.Exit, _config);
            var res  = SUT.Verify(data);

            Assert.IsTrue(res.Any());
            _successUnserializableTypehelper.Verify(x => x.AddUnserializableType(It.IsAny <Type>()), Times.Once);
        }
Exemple #12
0
 /// <summary>
 /// Process the interception data
 /// </summary>
 /// <param name="processingData">data from interception</param>
 /// <returns>Result of process</returns>
 public ProcessResult Process(InterceptionProcessingData processingData)
 {
     foreach (var process in _processes)
     {
         if (process.ShouldExecuteProcess(processingData))
         {
             return(process.ExecuteProcess(processingData));
         }
     }
     return(new ProcessResult());
 }
        public void ProcessingDataExitInitTest()
        {
            var exitModel = DataHelper.MathPowerData.Exit;
            var procData  = new InterceptionProcessingData(exitModel, _config);

            Assert.IsTrue(procData.BoundaryType == BoundaryType.Exit);
            Assert.IsTrue(procData.Exception == null);
            Assert.IsTrue(procData.Method != null);
            Assert.IsTrue(procData.ReturnType != null);
            Assert.IsTrue(procData.ReturnValue != null);
            Assert.IsTrue(procData.TargetInstance == null);
            Assert.IsTrue(procData.VerificationFailures != null);
        }
Exemple #14
0
        public void Execution_Recorder_Non_Unit_Test_Config_Should_Run_Process()
        {
            var SUT = new ExecutionRecorderProcess(_manager, _methodHelper);

            var config = new EngineConfiguration()
            {
                IsUnitTesting = false
            };

            var procData = new InterceptionProcessingData(_entryModel, config);

            Assert.IsTrue(SUT.ShouldExecuteProcess(procData));
        }
Exemple #15
0
        public List <VerificationFailure> Verify(InterceptionProcessingData processingData)
        {
            var res = new List <VerificationFailure>();

            if (processingData.BoundaryType != BoundaryType.Entry)
            {
                return(res);
            }

            foreach (var arg in processingData.MethodArgs)
            {
                res.AddRange(ProcessArg(arg));
            }

            return(res);
        }
        /// <summary>
        /// Processes each interception in a pipeline
        /// </summary>
        /// <param name="processingData">the data of this interception</param>
        /// <returns>Pipeline result</returns>
        public VerificationPipelineResult VerifyInterception(InterceptionProcessingData processingData)
        {
            var result = new VerificationPipelineResult();

            foreach (var verifier in _verifiers)
            {
                var verificationResult = verifier.Verify(processingData);
                result.AddFailures(verificationResult);

                if (result.HasCriticalFailure)
                {
                    break;
                }
            }

            processingData.AddVerificationFailures(result.Failures);

            return(result);
        }
Exemple #17
0
        private void ProcessException(InterceptionProcessingData data, List <RecordingMethod> methods, Guid executingMethodId, int threadId)
        {
            var subMethod = GetSubMethod(executingMethodId, methods);

            if (subMethod != null)
            {
                subMethod.CloseOutMethodWithException(data.Exception);
            }

            var executingMethod = methods.FirstOrDefault(x => x.Identifier == executingMethodId);

            if (executingMethod != null)
            {
                executingMethod.CloseOutMethodWithException(data.Exception);
                OnMethodRecordingComplete(new MethodRecordingCompleteEventArgs(executingMethod));
                ClearMethod(executingMethodId, threadId);
            }

            _executionStack.ProcessException(threadId);
        }
        public void Processing_Data_Test_All_Constructors()
        {
            var entry           = new InterceptionEntryModel(_instance, _args, GetAttMethodBase());
            var processingModel = new InterceptionProcessingData(entry, new EngineConfiguration());

            Assert.IsTrue(processingModel.MethodAttributes.Count == 1);
            Assert.IsTrue(processingModel.MethodAttributes.Contains(typeof(AutoTestEngine.Attributes.AutoTest)));


            var exit = new InterceptionExitModel(_instance, _returnVal, GetAttMethodBase());

            processingModel = new InterceptionProcessingData(exit, new EngineConfiguration());

            Assert.IsTrue(processingModel.MethodAttributes.Count == 1);
            Assert.IsTrue(processingModel.MethodAttributes.Contains(typeof(AutoTestEngine.Attributes.AutoTest)));

            var exception = new InterceptionExceptionModel(_instance, GetAttMethodBase(), new Exception());

            processingModel = new InterceptionProcessingData(exception, new EngineConfiguration());
        }
Exemple #19
0
        public void ProcessCapture(InterceptionProcessingData processingData)
        {
            var threadId          = _threadProvider.GetThreadId();
            var methods           = _executionCache.GetMethods(threadId);
            var executingMethodId = _executionStack.ExecutingGuid(threadId);

            switch (processingData.BoundaryType)
            {
            case BoundaryType.Entry:
                ProcessEntry(processingData, methods, executingMethodId, threadId);
                break;

            case BoundaryType.Exception:
                ProcessException(processingData, methods, executingMethodId, threadId);
                break;

            case BoundaryType.Exit:
                ProcessExit(processingData, methods, executingMethodId, threadId);
                break;
            }
        }
Exemple #20
0
 private bool HasSerializationErrors(InterceptionProcessingData data)
 {
     return(data.VerificationFailures.Any(x => x.FailureId.Equals(Failures.SerializationError)));
 }
Exemple #21
0
 public bool ShouldExecuteProcess(InterceptionProcessingData processingData)
 {
     return(!processingData.Configuration.IsUnitTesting);
 }
Exemple #22
0
 public ProcessResult ExecuteProcess(InterceptionProcessingData processingData)
 {
     _methodManager.ProcessCapture(processingData);
     return(new ProcessResult());
 }