예제 #1
0
        public ZingerResult Explore()
        {
            //set the execute tracestatements to false
            //trace statements should be executed only when error trace is generated.
            ZingerConfiguration.ExecuteTraceStatements = false;

            if (StartStateTraversalInfo.IsInvalidEndState())
            {
                bool oldCT = ZingerConfiguration.CompactTraces;
                ZingerConfiguration.CompactTraces = false;
                SafetyErrors.Add(StartStateTraversalInfo.GenerateTrace());
                ZingerConfiguration.CompactTraces = oldCT;
                this.lastErrorFound = StartStateTraversalInfo.ErrorCode;
            }

            var result = IterativeSearchStateSpace();

            //In the end of the plugin is enabled then call the plugin
            if (ZingerConfiguration.ZPlugin != null)
            {
                Console.WriteLine("Executed EndPlugin Function");
                ZingerConfiguration.ZPlugin.zPlugin.EndPlugin();
            }

            //Handle Zinger Return Status
            switch (result)
            {
                case ZingerResult.Success:
                    ZingerUtilities.PrintSuccessMessage("##################");
                    ZingerUtilities.PrintSuccessMessage("Check Passed");
                    ZingerUtilities.PrintSuccessMessage("##################");
                    return ZingerResult.Success;

                case ZingerResult.ZingRuntimeError:
                    ZingerUtilities.PrintErrorMessage("Zinger Internal Runtime Exception");
                    break;

                case ZingerResult.ProgramRuntimeError:
                    ZingerUtilities.PrintErrorMessage("Program Runtime Error");
                    break;

                case ZingerResult.Assertion:
                    ZingerUtilities.PrintErrorMessage("##################");
                    ZingerUtilities.PrintErrorMessage("Check Failed");
                    ZingerUtilities.PrintErrorMessage("##################");
                    break;

                case ZingerResult.Deadlock:
                    ZingerUtilities.PrintErrorMessage("Deadlock Detected !");
                    break;

                case ZingerResult.AcceptanceCyleFound:
                    ZingerUtilities.PrintErrorMessage("##################");
                    ZingerUtilities.PrintErrorMessage("Liveness Check Failed");
                    ZingerUtilities.PrintErrorMessage("##################");
                    break;

                case ZingerResult.DFSStackOverFlowError:
                    ZingerUtilities.PrintErrorMessage("##################");
                    ZingerUtilities.PrintErrorMessage("Check Failed");
                    ZingerUtilities.PrintErrorMessage("##################");
                    ZingerUtilities.PrintErrorMessage(String.Format("DFS Stack Size Exceeded {0}", ZingerConfiguration.BoundDFSStackLength));
                    break;

                case ZingerResult.ZingerMotionPlanningInvocation:
                    break;

                default:
                    ZingerUtilities.PrintErrorMessage("Zinger threw an unknown error. Please report this to the Zing developers");
                    break;
            }

            ZingerConfiguration.ExecuteTraceStatements = true;

            if (ZingerConfiguration.DetailedZingTrace)
            {
                PrintErrorTracesDetailed();
            }
            if (ZingerConfiguration.EnableTrace)
            {
                PrintErrorTracesToFile();
            }

            return result;
        }
예제 #2
0
        private void Initialize()
        {
            //Fingerprint the start state.
            Fingerprint fp = startStateStateImpl.Fingerprint;
            CancelTokenZingExplorer = new CancellationTokenSource();

            SafetyErrors = new ArrayList();
            AcceptingCycles = new ArrayList();
            lastErrorFound = ZingerResult.Success;
            StartStateTraversalInfo = GetTraversalInfoForTrace(null);
        }