public void PatchToRelativeTest_AbsoluteUri() { var content = @"#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:3 #EXT-X-MEDIA-SEQUENCE:3205244 #EXT-X-DISCONTINUITY-SEQUENCE:0 #EXTINF:2.0, http://wowza-test.domainname.io/liveOriginAbsolute/_definst_/sintel-live.smil/media-uidwhtlta_b1128000_3205244.ts #EXTINF:2.0, http://wowza-test.domainname.io/liveOriginAbsolute/_definst_/sintel-live.smil/media-uidwhtlta_b1128000_3205245.ts #EXTINF:2.0, http://wowza-test.domainname.io/liveOriginAbsolute/_definst_/sintel-live.smil/media-uidwhtlta_b1128000_3205246.ts "; var manifestUri = new Uri("http://wowza-test.domainname.io/liveOriginAbsolute/_definst_/sintel-live.smil/chunklist_b1128000.m3u8"); var result = AnalyzerUtils.PatchToRelative(manifestUri, content); Assert.NotNull(result); Assert.Equal(@"#EXTM3U #EXT-X-VERSION:3 #EXT-X-TARGETDURATION:3 #EXT-X-MEDIA-SEQUENCE:3205244 #EXT-X-DISCONTINUITY-SEQUENCE:0 #EXTINF:2.0, media-uidwhtlta_b1128000_3205244.ts #EXTINF:2.0, media-uidwhtlta_b1128000_3205245.ts #EXTINF:2.0, media-uidwhtlta_b1128000_3205246.ts ", result); }
public bool PrepareRunsetForExecution() { try { Reporter.ToLog(eLogLevel.INFO, string.Format("Preparing {0} for Execution", GingerDicser.GetTermResValue(eTermResKey.RunSet))); if (!ShowAutoRunWindow) { Reporter.ToLog(eLogLevel.INFO, string.Format("Loading {0} Runners", GingerDicser.GetTermResValue(eTermResKey.RunSet))); mRunsetExecutor.InitRunners(); } if (mRunSetConfig.RunWithAnalyzer) { Reporter.ToLog(eLogLevel.INFO, string.Format("Running {0} Analyzer", GingerDicser.GetTermResValue(eTermResKey.RunSet))); AnalyzerUtils analyzerUtils = new AnalyzerUtils(); if (analyzerUtils.AnalyzeRunset(mRunSetConfig, true)) { Reporter.ToLog(eLogLevel.WARN, string.Format("Stopping {0} execution due to Analyzer issues", GingerDicser.GetTermResValue(eTermResKey.RunSet))); return(false); } } return(true); } catch (Exception ex) { Reporter.ToLog(eLogLevel.ERROR, string.Format("Unexpected error occurred while preparing {0} for Execution", GingerDicser.GetTermResValue(eTermResKey.RunSet)), ex); return(false); } }
public void MissingVariableUsedOnlyInSetVariableActionTest() { //Arrange NewRepositorySerializer RepositorySerializer = new NewRepositorySerializer(); string FileName = TestResources.GetTestResourcesFile(@"Solutions" + Path.DirectorySeparatorChar + "AnalyzerTestSolution" + Path.DirectorySeparatorChar + "BusinessFlows" + Path.DirectorySeparatorChar + "MissingVariableUsedOnlyInSetVariable.Ginger.BusinessFlow.xml"); //Load BF BusinessFlow businessFlow = (BusinessFlow)RepositorySerializer.DeserializeFromFile(FileName); ObservableList <AnalyzerItemBase> mIssues = new ObservableList <AnalyzerItemBase>(); AnalyzerUtils mAnalyzerUtils = new AnalyzerUtils(); WorkSpace.Instance.SolutionRepository = SR; businessFlow.Variables.Remove(businessFlow.GetVariable("username")); //Run Analyzer mAnalyzerUtils.RunBusinessFlowAnalyzer(businessFlow, mIssues); //Asert Assert.AreEqual(1, mIssues.Count); Assert.AreEqual(AnalyzerItemBase.eSeverity.High, mIssues[0].Severity); Assert.AreEqual("The Variable 'username' is missing", mIssues[0].Description); Assert.AreEqual(AnalyzerItemBase.eType.Error, mIssues[0].IssueType); Assert.AreEqual(AnalyzerItemBase.eCanFix.Yes, mIssues[0].CanAutoFix, "Auto Fix validation when missing variable is used only in Set variable action"); }
public void PatchToRelativeTest_NoUri() { var content = "Nothing important\nAt all"; var manifestUri = new Uri("http://localhost"); var result = AnalyzerUtils.PatchToRelative(manifestUri, content); Assert.Null(result); }
protected static void AnalyzeEnumICollectionProperty(SyntaxNodeAnalysisContext context, ExpressionStatementSyntax expression) { if (!AnalyzerUtils.LastNodeIsInvocationExpressionSyntax(expression, out var invocationExpressionSyntax)) { return; } var methodSymbol = context .SemanticModel .GetSymbolInfo(invocationExpressionSyntax, context.CancellationToken) .Symbol as IMethodSymbol; if (methodSymbol == null || !methodSymbol.IsGenericMethod || methodSymbol.Name != "Property") { return; } var returnTypeSymbol = methodSymbol.ReturnType; var iCollectionTypeSymbol = ((INamedTypeSymbol)returnTypeSymbol).TypeArguments.FirstOrDefault(); if (iCollectionTypeSymbol?.Name != nameof(ICollection)) { return; } var enumTypeSymbol = (iCollectionTypeSymbol as INamedTypeSymbol).TypeArguments.FirstOrDefault(); if (enumTypeSymbol?.TypeKind != TypeKind.Enum) { return; } var enumMembers = enumTypeSymbol.GetMembers() .Where(m => m.Kind == SymbolKind.Field) .ToList(); if (!enumMembers.Any()) { return; } var diagnostic = Diagnostic.Create(Rule, invocationExpressionSyntax.GetLocation(), methodSymbol.Name); context.ReportDiagnostic(diagnostic); }
private static void DoAnalyze(string solution) { WorkSpace.Instance.OpenSolution(solution); AnalyzerUtils analyzerUtils = new AnalyzerUtils(); ObservableList <AnalyzerItemBase> issues = new ObservableList <AnalyzerItemBase>(); analyzerUtils.RunSolutionAnalyzer(WorkSpace.Instance.Solution, issues); if (issues.Count == 0) { Reporter.ToConsole(eLogLevel.INFO, "No Issues found"); } else { Reporter.ToConsole(eLogLevel.WARN, "Issues found, Total count: " + issues.Count); } foreach (AnalyzerItemBase issue in issues) { StringBuilder stringBuilder = new StringBuilder(Environment.NewLine); stringBuilder.Append("Description :").Append(issue.Description).Append(Environment.NewLine); stringBuilder.Append("Details :").Append(issue.Details).Append(Environment.NewLine); stringBuilder.Append("Class :").Append(issue.ItemClass).Append(Environment.NewLine); stringBuilder.Append("Name :").Append(issue.ItemName).Append(Environment.NewLine); stringBuilder.Append("Impact :").Append(issue.Impact).Append(Environment.NewLine); switch (issue.IssueType) { case AnalyzerItemBase.eType.Error: Reporter.ToConsole(eLogLevel.ERROR, stringBuilder.ToString()); break; case AnalyzerItemBase.eType.Info: Reporter.ToConsole(eLogLevel.INFO, stringBuilder.ToString()); break; case AnalyzerItemBase.eType.Warning: Reporter.ToConsole(eLogLevel.WARN, stringBuilder.ToString()); break; } } }
protected static void AnalyzeQueryableSelectInvocation(SyntaxNodeAnalysisContext context, ExpressionStatementSyntax expression) { if (!AnalyzerUtils.LastNodeIsInvocationExpressionSyntax(expression, out var invocationExpressionSyntax)) { return; } var methodSymbol = context .SemanticModel .GetSymbolInfo(invocationExpressionSyntax, context.CancellationToken) .Symbol as IMethodSymbol; if (methodSymbol == null || !methodSymbol.IsGenericMethod || methodSymbol.Name == "Select") { return; } var returnTypeSymbol = methodSymbol.ReturnType; var genericTypeSymbol = ((INamedTypeSymbol)returnTypeSymbol).TypeArguments.First(); bool genericTypeHasProperties = genericTypeSymbol .GetMembers().Any(m => m.Kind == SymbolKind.Property); if (!genericTypeHasProperties) { return; } var compilation = context.Compilation; var iQueryableType = compilation.GetTypeByMetadataName("System.Linq.IQueryable`1"); var areEqual = SymbolEqualityComparer.Default.Equals(iQueryableType, returnTypeSymbol.OriginalDefinition); if (!areEqual) { return; } var diagnostic = Diagnostic.Create(Rule, invocationExpressionSyntax.GetLocation(), methodSymbol.Name); context.ReportDiagnostic(diagnostic); }
//[Timeout(60000)] public void AnalyzeBusinessFlowTest() { //Arrange //Put the BF in Test Resource NewRepositorySerializer RepositorySerializer = new NewRepositorySerializer(); string FileName = TestResources.GetTestResourcesFile(@"Solutions" + Path.DirectorySeparatorChar + "AnalyzerTestSolution" + Path.DirectorySeparatorChar + "BusinessFlows" + Path.DirectorySeparatorChar + "Demo Flow 01.Ginger.BusinessFlow.xml"); //Load BF BusinessFlow businessFlow = (BusinessFlow)RepositorySerializer.DeserializeFromFile(FileName); ObservableList <AnalyzerItemBase> mIssues = new ObservableList <AnalyzerItemBase>(); AnalyzerUtils mAnalyzerUtils = new AnalyzerUtils(); WorkSpace.Instance.SolutionRepository = SR; //Run Analyzer mAnalyzerUtils.RunBusinessFlowAnalyzer(businessFlow, mIssues); //Asert Assert.AreNotEqual(0, mIssues.Count); }
public void GetRequestTypeTest(string url, RequestType expected) { var result = AnalyzerUtils.GetRequestType(url); Assert.Equal(expected, result); }