Exemple #1
0
        private List <DiagnosisResult> checkLivelockBetweenResult(List <DiagnosisResult> diagnosisList)
        {
            List <DiagnosisResult> lList  = new List <DiagnosisResult>();
            List <DiagnosisResult> result = new List <DiagnosisResult>();

            lList.AddRange(diagnosisList);
            for (var i = 0; i < diagnosisList.Count; i++)
            {
                for (var j = 0; j < lList.Count; j++)
                {
                    string scenario1 = diagnosisList[i].Scenario;
                    string scenario2 = lList[j].Scenario;
                    //System.Diagnostics.Debug.WriteLine(scenario1.Substring(scenario1.IndexOf(".") + 1, 3) +" == "+ scenario2.Substring(scenario2.IndexOf(".")+1, 3));
                    if (i != j &&
                        diagnosisList[i].Symptom.Equals("normal") &&
                        lList[j].Symptom.Equals("normal") &&
                        !scenario1.Equals(scenario2) &&
                        scenario1.Substring(scenario1.IndexOf(".") + 1, 3).Equals(scenario2.Substring(scenario2.IndexOf(".") + 1, 3)) &&
                        scenario1.Substring(scenario1.LastIndexOf(".") + 1, 3).Equals(scenario2.Substring(scenario2.LastIndexOf(".") + 1, 3)))
                    {
                        DiagnosisResult rs = new DiagnosisResult();
                        rs.Symptom        = "livelock";
                        rs.LoopIndex      = -1;
                        rs.Scenario       = scenario1 + " invoke" + scenario2.Substring(scenario1.IndexOf("."));
                        rs.MemoryUsage    = diagnosisList[i].MemoryUsage + lList[j].MemoryUsage;
                        rs.NumberOfStates = diagnosisList[i].NumberOfStates + lList[j].NumberOfStates;
                        rs.TotalTime      = diagnosisList[i].TotalTime + lList[j].TotalTime;
                        result.Add(rs);
                    }
                }
            }
            return(result);
        }
Exemple #2
0
        //engineIndex 0 for Depth First Search, 1 for Breadth First Search
        private DiagnosisResult RunAssertion(AssertionBase assertion, int fairnessIndex, int engineIndex)
        {
            System.Diagnostics.Debug.WriteLine(assertion);
            // return CreatedAtRoute("GetProduct", new { id = item.Id }, item);
            assertion.UIInitialize(null, fairnessIndex, engineIndex);

            assertion.VerificationMode = true;
            assertion.InternalStart();

            System.Diagnostics.Debug.WriteLine(assertion.GetVerificationStatistics());
            DiagnosisResult result = new DiagnosisResult();

            result.Assertion = assertion.ToString();

            System.Diagnostics.Debug.WriteLine("VALID? " + assertion.VerificationOutput.VerificationResult.Equals(VerificationResultType.VALID));
            string scenarioDesc = "";

            System.Diagnostics.Debug.WriteLine("loop: " + assertion.VerificationOutput.LoopIndex);

            result.MemoryUsage    = assertion.VerificationOutput.EstimateMemoryUsage;
            result.TotalTime      = assertion.VerificationOutput.VerificationTime;
            result.NumberOfStates = assertion.VerificationOutput.NoOfStates;
            result.LoopIndex      = assertion.VerificationOutput.LoopIndex;

            if (assertion.VerificationOutput.VerificationResult.Equals(VerificationResultType.VALID))
            {
                result.IsValid = true;
            }
            else
            {
                result.IsValid = false;
            }
            if (assertion.VerificationOutput.CounterExampleTrace != null)
            {
                foreach (ConfigurationBase step in assertion.VerificationOutput.CounterExampleTrace)
                {
                    scenarioDesc += " " + step.GetDisplayEvent();
                }
                result.Scenario = scenarioDesc;
                System.Diagnostics.Debug.WriteLine(scenarioDesc);
            }

            return(result);
        }
Exemple #3
0
        private List <DiagnosisResult> executeVerification(List <ArchMatrix> matrix)
        {
            VerifyAsset verifyAsset = GenerateAsset(matrix);


            System.Diagnostics.Debug.WriteLine(verifyAsset.CSPCode);

            try
            {
                PAT.CSP.ModuleFacade modulebase = new PAT.CSP.ModuleFacade();

                SpecificationBase Spec = modulebase.ParseSpecification(verifyAsset.CSPCode, string.Empty, string.Empty);
                System.Diagnostics.Debug.WriteLine("Specification Loaded...");

                //print assertion for debugging
                List <KeyValuePair <string, AssertionBase> > asrtlists = Spec.AssertionDatabase.ToList();
                foreach (KeyValuePair <string, AssertionBase> asrt in asrtlists)
                {
                    System.Diagnostics.Debug.WriteLine("#" + asrt.Key + "#");
                }

                List <DiagnosisResult> diagnosisList = new List <DiagnosisResult>();

                // Verify deadlock loop
                bool deadlockFound = false;

                for (var i = 0; i < verifyAsset.deadloopCheck.Count; i++)
                {
                    AssertionBase   assertion = Spec.AssertionDatabase[verifyAsset.deadloopCheck[i]];
                    DiagnosisResult result    = RunAssertion(assertion, 1, 0);

                    if (!result.IsValid && result.Scenario != null && result.LoopIndex > -1)
                    {
                        deadlockFound  = true;
                        result.Symptom = "deadloop";
                        diagnosisList.Add(result);
                    }
                }

                // Verify livelock, if deadlock is not found

                if (!deadlockFound)
                {
                    bool   livelockFound              = false;
                    string prevScenario               = null;
                    bool   isAllSameScenario          = true;
                    List <DiagnosisResult> normalList = new List <DiagnosisResult>();
                    for (var i = 0; i < verifyAsset.livelockCheck.Count; i++)
                    {
                        AssertionBase   assertion = Spec.AssertionDatabase[verifyAsset.livelockCheck[i]];
                        DiagnosisResult result    = RunAssertion(assertion, 0, 0);

                        if (!result.IsValid && result.Scenario != null && hasDuplilcateInvoke(result.Scenario))
                        {
                            if (result.LoopIndex > -1)
                            {
                                result.Symptom = "deadloop";
                            }
                            else
                            {
                                result.Symptom = "livelock";
                            }
                            diagnosisList.Add(result);
                            livelockFound = true;
                        }
                        else if (!result.IsValid && result.Scenario != null)
                        {
                            result.Symptom = "normal";
                            normalList.Add(result);
                            if (prevScenario != null && !prevScenario.Equals(result.Scenario))
                            {
                                isAllSameScenario = false;
                            }
                        }
                        prevScenario = result.Scenario;
                        System.Diagnostics.Debug.WriteLine("prevScenario : " + prevScenario);
                    }

                    // in case normal and all same scenario, try to generate more simulation for normal case
                    if (!livelockFound)
                    {
                        diagnosisList.AddRange(normalList);
                        if (isAllSameScenario)
                        {
                            diagnosisList.AddRange(normalList);
                            string firstId = prevScenario.Substring(prevScenario.IndexOf(".") + 1, 3);
                            string lastId  = prevScenario.Substring(prevScenario.LastIndexOf(".") + 1);
                            System.Diagnostics.Debug.WriteLine("firstId : " + firstId);
                            System.Diagnostics.Debug.WriteLine("lastId : " + lastId);
                            verifyAsset = InsertMoreLivelockCheck(verifyAsset, matrix, firstId, lastId);
                            Spec        = modulebase.ParseSpecification(verifyAsset.CSPCode, string.Empty, string.Empty);
                            asrtlists   = Spec.AssertionDatabase.ToList();
                            foreach (KeyValuePair <string, AssertionBase> asrt in asrtlists)
                            {
                                System.Diagnostics.Debug.WriteLine("#" + asrt.Key + "#");
                            }
                            for (var i = 0; i < verifyAsset.livelockCheck.Count; i++)
                            {
                                AssertionBase   assertion = Spec.AssertionDatabase[verifyAsset.livelockCheck[i]];
                                DiagnosisResult result    = RunAssertion(assertion, 0, 0);
                                if (!result.IsValid && result.Scenario != null)
                                {
                                    result.Symptom = "normal";
                                    diagnosisList.Add(result);
                                }
                            }
                        }
                    }
                }
                List <DiagnosisResult> rs = checkLivelockBetweenResult(diagnosisList);
                if (rs.Count != 0)
                {
                    diagnosisList = rs;
                }
                return(diagnosisList);
            }
            catch (Exception ex)
            {
                System.Diagnostics.Trace.TraceError(ex.Message);
                System.Diagnostics.Trace.TraceError(ex.StackTrace);
            }
            return(null);
        }
 public void callBack(DiagnosisResult result)
 {
     results.Add(result);
 }
Exemple #5
0
 void gatherResults(DiagnosisResult result)
 {
     System.Diagnostics.Debug.WriteLine("retrieve result : " + result.Symptom);
     asrtResults.Add(result);
 }