Esempio n. 1
0
 public static string GenericEror(NexoResponseType r, ResultEnumeration result, ErrorConditionEnumeration errorCondition, string addtionalInformation)
 {
     if (ResultEnumeration.Success != r.Result)
     {
         return(r.AdditionalResponse);
     }
     r.Result = result; r.ErrorCondition = errorCondition; r.AdditionalResponse = addtionalInformation; CLog.Add(r.AdditionalResponse, TLog.ERROR); return(r.AdditionalResponse);
 }
Esempio n. 2
0
        public void Should_Be_Possible_To_Combine_Results_With_Operator_OR()
        {
            var resultAllTrue       = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.@true };
            var resultAllFalse      = new ResultEnumeration[] { ResultEnumeration.@false };
            var resultTrueAndFalse  = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.@false };
            var resultTrueAndError  = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.error };
            var resultFalseAndError = new ResultEnumeration[] { ResultEnumeration.@false, ResultEnumeration.error };

            Assert.AreEqual(ResultEnumeration.@true, oval_results.CombineResultsByOperator(resultAllTrue, OperatorEnumeration.OR));
            Assert.AreEqual(ResultEnumeration.@false, oval_results.CombineResultsByOperator(resultAllFalse, OperatorEnumeration.OR));
            Assert.AreEqual(ResultEnumeration.@true, oval_results.CombineResultsByOperator(resultTrueAndFalse, OperatorEnumeration.OR));
            Assert.AreEqual(ResultEnumeration.@true, oval_results.CombineResultsByOperator(resultTrueAndError, OperatorEnumeration.OR));
            Assert.AreEqual(ResultEnumeration.error, oval_results.CombineResultsByOperator(resultFalseAndError, OperatorEnumeration.OR));
        }
Esempio n. 3
0
        public void Should_Be_Possible_To_Combine_Results_With_Check_nonesatisfy()
        {
            var resultOneTrue       = new ResultEnumeration[] { ResultEnumeration.@true, };
            var resultTwoTrue       = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.@true };
            var resultThreeTrue     = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.@true, ResultEnumeration.@true };
            var resultAllFalse      = new ResultEnumeration[] { ResultEnumeration.@false };
            var resultTrueAndFalse  = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.@false };
            var resultTrueAndError  = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.error };
            var resultFalseAndError = new ResultEnumeration[] { ResultEnumeration.@false, ResultEnumeration.error };

            Assert.AreEqual(ResultEnumeration.@false, oval_results.CombineResultsByCheck(resultOneTrue, CheckEnumeration.nonesatisfy));
            Assert.AreEqual(ResultEnumeration.@false, oval_results.CombineResultsByCheck(resultTwoTrue, CheckEnumeration.nonesatisfy));
            Assert.AreEqual(ResultEnumeration.@false, oval_results.CombineResultsByCheck(resultThreeTrue, CheckEnumeration.nonesatisfy));
            Assert.AreEqual(ResultEnumeration.@true, oval_results.CombineResultsByCheck(resultAllFalse, CheckEnumeration.nonesatisfy));
            Assert.AreEqual(ResultEnumeration.@false, oval_results.CombineResultsByCheck(resultTrueAndFalse, CheckEnumeration.nonesatisfy));
            Assert.AreEqual(ResultEnumeration.@false, oval_results.CombineResultsByCheck(resultTrueAndError, CheckEnumeration.nonesatisfy));
            Assert.AreEqual(ResultEnumeration.error, oval_results.CombineResultsByCheck(resultFalseAndError, CheckEnumeration.nonesatisfy));
        }
Esempio n. 4
0
        public void Analyze_Of_A_Test_With_No_Object_Id_Should_Return_Unknown()
        {
            var results = new oval_results();

            results.oval_definitions = new oval_definitions();
            var fakeTest = MockRepository.GenerateMock <Modulo.Collect.OVAL.Definitions.TestType>();

            fakeTest.Expect(x => x.HasObjectReference).Return(false).Repeat.Any();
            results.oval_definitions.tests = new [] { fakeTest };

            var target = new Modulo.Collect.OVAL.Results.TestType();

            target.test_id = results.oval_definitions.tests[0].id;

            ResultEnumeration result = target.Analyze(results);

            Assert.AreEqual(ResultEnumeration.unknown, result);
        }
Esempio n. 5
0
 /// <summary>
 /// Negates the Given Criteria Result.
 /// </summary>
 /// <param name="result">The result.</param>
 /// <param name="negate">if set to <c>true</c> [negate].</param>
 public static ResultEnumeration NegateResult(ResultEnumeration result, bool negate)
 {
     if (negate)
     {
         if (result == ResultEnumeration.@true)
         {
             return(ResultEnumeration.@false);
         }
         else if (result == ResultEnumeration.@false)
         {
             return(ResultEnumeration.@true);
         }
         else
         {
             return(result);
         }
     }
     else
     {
         return(result);
     }
 }
Esempio n. 6
0
        public ResultEnumeration GetCheckStateResult(oval_results results, Definitions.TestType originalTest)
        {
            ResultEnumeration stateResult = ResultEnumeration.error;
            var itemsResults = new List <ResultEnumeration>();

            var testStates = ((originalTest.GetType().GetProperty("state")
                               .GetValue(originalTest, null) as StateRefType[]) ?? new StateRefType[] {}).Select(x => results.oval_definitions.states.SingleOrDefault(y => y.id == x.state_ref));

            foreach (var testedItem in tested_item)
            {
                var stateResults             = new List <ResultEnumeration>();
                var collectedItem            = results.results[0].oval_system_characteristics.system_data.SingleOrDefault(x => x.id == testedItem.item_id);
                ResultEnumeration itemResult = ResultEnumeration.notevaluated;

                if (collectedItem == null)
                {
                    itemResult = ResultEnumeration.notevaluated;
                }
                else
                {
                    foreach (var state in testStates)
                    {
                        var evaluatedVariables = CreateEvalutedVariablesFromStateType(state, results);
                        var tempResult         = ExecuteStateComparator(collectedItem, state, evaluatedVariables);
                        stateResults.Add(tempResult);
                    }

                    itemResult = oval_results.CombineResultsByOperator(stateResults, state_operator);
                }

                testedItem.result = itemResult;
                itemsResults.Add(itemResult);
            }
            stateResult = oval_results.CombineResultsByCheck(itemsResults, check);

            return(stateResult);
        }
Esempio n. 7
0
 /// <summary>
 /// Negates the Given Criteria Result.
 /// </summary>
 /// <param name="result">The result.</param>
 /// <param name="negate">if set to <c>true</c> [negate].</param>
 public static ResultEnumeration NegateResult(ResultEnumeration result, bool negate)
 {
     if (negate)
     {
         if (result == ResultEnumeration.@true)
             return ResultEnumeration.@false;
         else if (result == ResultEnumeration.@false)
             return ResultEnumeration.@true;
         else
             return result;
     }
     else
     {
         return result;
     }
 }
Esempio n. 8
0
        public void Should_Be_Possible_To_Combine_Results_With_Operator_XOR()
        {
            var resultOneTrue = new ResultEnumeration[] { ResultEnumeration.@true, };
            var resultTwoTrue = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.@true };
            var resultThreeTrue = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.@true, ResultEnumeration.@true };
            var resultAllFalse = new ResultEnumeration[] { ResultEnumeration.@false };
            var resultTrueAndFalse = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.@false };
            var resultTrueAndError = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.error };
            var resultFalseAndError = new ResultEnumeration[] { ResultEnumeration.@false, ResultEnumeration.error };

            Assert.AreEqual(ResultEnumeration.@true, oval_results.CombineResultsByOperator(resultOneTrue, OperatorEnumeration.XOR));
            Assert.AreEqual(ResultEnumeration.@false, oval_results.CombineResultsByOperator(resultTwoTrue, OperatorEnumeration.XOR));
            Assert.AreEqual(ResultEnumeration.@true, oval_results.CombineResultsByOperator(resultThreeTrue, OperatorEnumeration.XOR));
            Assert.AreEqual(ResultEnumeration.@false, oval_results.CombineResultsByOperator(resultAllFalse, OperatorEnumeration.XOR));
            Assert.AreEqual(ResultEnumeration.@true, oval_results.CombineResultsByOperator(resultTrueAndFalse, OperatorEnumeration.XOR));
            Assert.AreEqual(ResultEnumeration.error, oval_results.CombineResultsByOperator(resultTrueAndError, OperatorEnumeration.XOR));
            Assert.AreEqual(ResultEnumeration.error, oval_results.CombineResultsByOperator(resultFalseAndError, OperatorEnumeration.XOR));
        }
Esempio n. 9
0
        public void Should_Be_Possible_To_Combine_Results_With_Check_onlyone()
        {
            var resultOneTrue = new ResultEnumeration[] { ResultEnumeration.@true, };
            var resultTwoTrue = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.@true };
            var resultThreeTrue = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.@true, ResultEnumeration.@true };
            var resultAllFalse = new ResultEnumeration[] { ResultEnumeration.@false };
            var resultTrueAndFalse = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.@false };
            var resultTrueAndError = new ResultEnumeration[] { ResultEnumeration.@true, ResultEnumeration.error };
            var resultFalseAndError = new ResultEnumeration[] { ResultEnumeration.@false, ResultEnumeration.error };

            Assert.AreEqual(ResultEnumeration.@true, oval_results.CombineResultsByCheck(resultOneTrue, CheckEnumeration.onlyone));
            Assert.AreEqual(ResultEnumeration.@false, oval_results.CombineResultsByCheck(resultTwoTrue, CheckEnumeration.onlyone));
            Assert.AreEqual(ResultEnumeration.@false, oval_results.CombineResultsByCheck(resultThreeTrue, CheckEnumeration.onlyone));
            Assert.AreEqual(ResultEnumeration.@false, oval_results.CombineResultsByCheck(resultAllFalse, CheckEnumeration.onlyone));
            Assert.AreEqual(ResultEnumeration.@true, oval_results.CombineResultsByCheck(resultTrueAndFalse, CheckEnumeration.onlyone));
            Assert.AreEqual(ResultEnumeration.error, oval_results.CombineResultsByCheck(resultTrueAndError, CheckEnumeration.onlyone));
            Assert.AreEqual(ResultEnumeration.error, oval_results.CombineResultsByCheck(resultFalseAndError, CheckEnumeration.onlyone));
        }
Esempio n. 10
0
        public static ResultEnumeration CombineResultsByCheck(
            IEnumerable <ResultEnumeration> results, CheckEnumeration check)
        {
            ResultEnumeration combinedResult = ResultEnumeration.unknown;

            if (results.Count() > 0)
            {
                // Get counts of result values
                int trueCount          = 0;
                int falseCount         = 0;
                int unknownCount       = 0;
                int errorCount         = 0;
                int notEvaluatedCount  = 0;
                int notApplicableCount = 0;

                foreach (ResultEnumeration result in results)
                {
                    if (result == ResultEnumeration.@true)
                    {
                        trueCount++;
                    }
                    else if (result == ResultEnumeration.@false)
                    {
                        falseCount++;
                    }
                    else if (result == ResultEnumeration.unknown)
                    {
                        unknownCount++;
                    }
                    else if (result == ResultEnumeration.error)
                    {
                        errorCount++;
                    }
                    else if (result == ResultEnumeration.notevaluated)
                    {
                        notEvaluatedCount++;
                    }
                    else if (result == ResultEnumeration.notapplicable)
                    {
                        notApplicableCount++;
                    }
                }

                // first check for a possible Not Applicable result
                if (notApplicableCount > 0 && notEvaluatedCount == 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0 && trueCount == 0)
                {
                    return(ResultEnumeration.notapplicable);
                }

                // Set the combined result
                if (check == CheckEnumeration.all)
                {
                    if (trueCount > 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount == 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (falseCount > 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (falseCount == 0 && errorCount > 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && falseCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
                else if (check == CheckEnumeration.atleastone)
                {
                    if (trueCount > 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (falseCount > 0 && trueCount == 0 && unknownCount == 0 && errorCount == 0 && notEvaluatedCount == 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (errorCount > 0 && trueCount == 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && trueCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && unknownCount == 0 && trueCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
                else if (check == CheckEnumeration.nonesatisfy)
                {
                    if (trueCount > 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (errorCount > 0 && trueCount == 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && errorCount == 0 && trueCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && unknownCount == 0 && errorCount == 0 && trueCount == 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                    else if (falseCount > 0 && notEvaluatedCount == 0 && unknownCount == 0 && errorCount == 0 && trueCount == 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                }
                else if (check == CheckEnumeration.onlyone)
                {
                    if (trueCount == 1 && unknownCount == 0 && errorCount == 0 && notEvaluatedCount == 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (trueCount > 1)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (errorCount > 0 && trueCount < 2)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && errorCount == 0 && trueCount < 2)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && unknownCount == 0 && errorCount == 0 && trueCount < 2)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                    else if (falseCount > 0 && trueCount != 1)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                }
            }

            return(combinedResult);
        }
Esempio n. 11
0
        public static ResultEnumeration CombineResultsByOperator(
            IEnumerable <ResultEnumeration> results, OperatorEnumeration op)
        {
            ResultEnumeration combinedResult = ResultEnumeration.unknown;

            if (results.Count() > 0)
            {
                // Get counts of result values
                int trueCount          = 0;
                int falseCount         = 0;
                int unknownCount       = 0;
                int errorCount         = 0;
                int notEvaluatedCount  = 0;
                int notApplicableCount = 0;

                foreach (ResultEnumeration result in results)
                {
                    switch (result)
                    {
                    case ResultEnumeration.@true:
                        trueCount++;
                        break;

                    case ResultEnumeration.@false:
                        falseCount++;
                        break;

                    case ResultEnumeration.unknown:
                        unknownCount++;
                        break;

                    case ResultEnumeration.error:
                        errorCount++;
                        break;

                    case ResultEnumeration.notevaluated:
                        notEvaluatedCount++;
                        break;

                    case ResultEnumeration.notapplicable:
                        notApplicableCount++;
                        break;
                    }
                }

                // first check for a possible Not Applicable result
                if (notApplicableCount > 0 && notEvaluatedCount == 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0 && trueCount == 0)
                {
                    return(ResultEnumeration.notapplicable);
                }

                // Set the combined result
                if (op == OperatorEnumeration.AND)
                {
                    if (trueCount > 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount == 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (falseCount > 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (falseCount == 0 && errorCount > 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && falseCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && falseCount == 0 && errorCount == 0 && unknownCount == 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
                else if (op == OperatorEnumeration.ONE)
                {
                    if (trueCount == 1 && falseCount >= 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount == 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (trueCount >= 2 && falseCount >= 0 && errorCount >= 0 && unknownCount >= 0 && notEvaluatedCount >= 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (trueCount == 0 && falseCount >= 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount == 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if ((trueCount == 0 || trueCount == 1) && falseCount >= 0 && errorCount >= 1 && unknownCount >= 0 && notEvaluatedCount >= 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if ((trueCount == 0 || trueCount == 1) && falseCount >= 0 && errorCount == 0 && unknownCount >= 1 && notEvaluatedCount >= 0 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if ((trueCount == 0 || trueCount == 1) && falseCount >= 0 && errorCount == 0 && unknownCount == 0 && notEvaluatedCount >= 1 && notApplicableCount >= 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
                else if (op == OperatorEnumeration.OR)
                {
                    if (trueCount > 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (falseCount > 0 && trueCount == 0 && unknownCount == 0 && errorCount == 0 && notEvaluatedCount == 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (errorCount > 0 && trueCount == 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && trueCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && unknownCount == 0 && trueCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
                else if (op == OperatorEnumeration.XOR)
                {
                    if (trueCount % 2 == 1 && notEvaluatedCount == 0 && unknownCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.@true;
                    }
                    else if (trueCount % 2 == 0 && notEvaluatedCount == 0 && unknownCount == 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.@false;
                    }
                    else if (errorCount > 0)
                    {
                        combinedResult = ResultEnumeration.error;
                    }
                    else if (unknownCount > 0 && errorCount == 0)
                    {
                        combinedResult = ResultEnumeration.unknown;
                    }
                    else if (notEvaluatedCount > 0 && unknownCount == 0 && errorCount == 00)
                    {
                        combinedResult = ResultEnumeration.notevaluated;
                    }
                }
            }

            return(combinedResult);
        }
Esempio n. 12
0
        public ResultEnumeration Analyze(oval_results results)
        {
            if (!bAnalyzed)
            {
                var refTest = results.oval_definitions.tests.Single(x => x.id == test_id);
                if (!refTest.HasObjectReference)
                {
                    return(ResultEnumeration.unknown);
                }
                var           fi        = refTest.GetType().GetProperty("object");
                ObjectRefType objRef    = fi.GetValue(refTest, null) as ObjectRefType;
                var           sc        = results.results[0].oval_system_characteristics;
                var           colObject = sc.collected_objects.SingleOrDefault(x => x.id == objRef.object_ref);
                if (colObject == null)
                {
                    result = ResultEnumeration.notevaluated;
                }
                else
                {
                    // Copy all Referenced Items to result
                    if (colObject.reference != null)
                    {
                        foreach (var itemKey in colObject.reference)
                        {
                            var item = sc.system_data.Single(x => x.id == itemKey.item_ref);

                            var newMessageType    = item.message == null ? new MessageType[] { } :  item.message;
                            var newTestedItemType = new TestedItemType()
                            {
                                item_id = item.id,
                                message = newMessageType.ToList(),
                                status  = item.status,
                                result  = ResultEnumeration.notevaluated
                            };

                            tested_item.Add(newTestedItemType);
                        }
                    }
                    // Copy all Referenced Items to result
                    if (colObject.variable_value != null)
                    {
                        foreach (var varKey in colObject.variable_value)
                        {
                            tested_variable.Add(new TestedVariableType()
                            {
                                variable_id = varKey.variable_id, Value = varKey.Value
                            });
                        }
                    }

                    switch (colObject.flag)
                    {
                    case SystemCharacteristics.FlagEnumeration.error:
                        result = ResultEnumeration.error;
                        break;

                    case SystemCharacteristics.FlagEnumeration.notapplicable:
                        result = ResultEnumeration.notapplicable;
                        break;

                    case SystemCharacteristics.FlagEnumeration.notcollected:
                        result = ResultEnumeration.unknown;
                        break;

                    case SystemCharacteristics.FlagEnumeration.doesnotexist:
                        if ((check_existence == ExistenceEnumeration.none_exist) || (check_existence == ExistenceEnumeration.any_exist))
                        {
                            result = ResultEnumeration.@true;
                        }
                        else
                        {
                            result = ResultEnumeration.@false;
                        }
                        break;

                    case FlagEnumeration.complete:
                        ResultEnumeration completeResult = GetCheckExistenceResult();

                        if (completeResult == ResultEnumeration.@true)
                        {
                            if (IsThereReferenceStateForTest(refTest))
                            {
                                completeResult = GetCheckStateResult(results, refTest);
                            }
                        }

                        result = completeResult;

                        break;
                    }
                }
                bAnalyzed = true;
            }
            return(result);
        }
Esempio n. 13
0
        public ResultEnumeration GetCheckExistenceResult()
        {
            ResultEnumeration existenceResult = ResultEnumeration.error;

            // get the count of each status value
            int errorCount        = tested_item.Where(x => x.status == StatusEnumeration.error).Count();
            int existsCount       = tested_item.Where(x => x.status == StatusEnumeration.exists).Count();
            int doesNotExistCount = tested_item.Where(x => x.status == StatusEnumeration.doesnotexist).Count();
            int notCollectedCount = tested_item.Where(x => x.status == StatusEnumeration.notcollected).Count();

            var resultCounts = tested_item.GroupBy(x => x.status).Select(x => new { status = x.Key, count = x.Count() });

            switch (check_existence)
            {
            case ExistenceEnumeration.all_exist:
                if (existsCount >= 1 && doesNotExistCount == 0 && errorCount == 0 && notCollectedCount == 0)
                {
                    existenceResult = ResultEnumeration.@true;
                }
                else if (existsCount >= 0 && doesNotExistCount >= 1 && errorCount >= 0 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.@false;
                }
                else if (existsCount == 0 && doesNotExistCount == 0 && errorCount == 0 && notCollectedCount == 0)
                {
                    existenceResult = ResultEnumeration.@false;
                }
                else if (existsCount >= 0 && doesNotExistCount == 0 && errorCount >= 1 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.error;
                }
                else if (existsCount >= 0 && doesNotExistCount == 0 && errorCount == 0 && notCollectedCount >= 1)
                {
                    existenceResult = ResultEnumeration.unknown;
                }
                break;

            case ExistenceEnumeration.any_exist:
                if (existsCount >= 0 && doesNotExistCount >= 0 && errorCount == 0 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.@true;
                }
                else if (existsCount >= 1 && doesNotExistCount >= 0 && errorCount >= 1 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.@true;
                }
                else if (existsCount == 0 && doesNotExistCount >= 0 && errorCount >= 1 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.error;
                }
                break;

            case ExistenceEnumeration.at_least_one_exists:
                if (existsCount >= 1 && doesNotExistCount >= 0 && errorCount >= 0 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.@true;
                }
                else if (existsCount == 0 && doesNotExistCount >= 1 && errorCount == 0 && notCollectedCount == 0)
                {
                    existenceResult = ResultEnumeration.@false;
                }
                else if (existsCount == 0 && doesNotExistCount >= 0 && errorCount >= 1 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.error;
                }
                else if (existsCount == 0 && doesNotExistCount >= 0 && errorCount == 0 && notCollectedCount >= 1)
                {
                    existenceResult = ResultEnumeration.unknown;
                }
                break;

            case ExistenceEnumeration.none_exist:
                if (existsCount == 0 && doesNotExistCount >= 0 && errorCount == 0 && notCollectedCount == 0)
                {
                    existenceResult = ResultEnumeration.@true;
                }
                else if (existsCount >= 1 && doesNotExistCount >= 0 && errorCount >= 0 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.@false;
                }
                else if (existsCount == 0 && doesNotExistCount >= 0 && errorCount >= 1 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.error;
                }
                else if (existsCount == 0 && doesNotExistCount >= 0 && errorCount == 0 && notCollectedCount >= 1)
                {
                    existenceResult = ResultEnumeration.unknown;
                }
                break;

            case ExistenceEnumeration.only_one_exists:
                if (existsCount == 1 && doesNotExistCount >= 0 && errorCount == 0 && notCollectedCount == 0)
                {
                    existenceResult = ResultEnumeration.@true;
                }
                else if (existsCount >= 2 && doesNotExistCount >= 0 && errorCount >= 0 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.@false;
                }
                else if (existsCount == 0 && doesNotExistCount >= 0 && errorCount == 0 && notCollectedCount == 0)
                {
                    existenceResult = ResultEnumeration.@false;
                }
                else if (existsCount == 0 && doesNotExistCount >= 0 && errorCount >= 1 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.error;
                }
                else if (existsCount == 1 && doesNotExistCount >= 0 && errorCount >= 1 && notCollectedCount >= 0)
                {
                    existenceResult = ResultEnumeration.error;
                }
                else if (existsCount == 0 && doesNotExistCount >= 0 && errorCount == 0 && notCollectedCount >= 1)
                {
                    existenceResult = ResultEnumeration.unknown;
                }
                else if (existsCount == 1 && doesNotExistCount >= 0 && errorCount == 0 && notCollectedCount >= 1)
                {
                    existenceResult = ResultEnumeration.unknown;
                }
                break;
            }
            return(existenceResult);
        }