public void ShouldGetTagListFromExecutionInfo() { var specInfo = SpecInfo.CreateBuilder() .AddTags("foo") .SetName("") .SetFileName("") .SetIsFailed(false) .Build(); var executionInfo = ExecutionInfo.CreateBuilder() .SetCurrentSpec(specInfo) .Build(); var currentExecutionInfo = SpecExecutionStartingRequest.CreateBuilder() .SetCurrentExecutionInfo(executionInfo) .Build(); var message = Message.CreateBuilder() .SetSpecExecutionStartingRequest(currentExecutionInfo) .SetMessageType(Message.Types.MessageType.SpecExecutionStarting) .SetMessageId(0) .Build(); var tags = AssertEx.ExecuteProtectedMethod <SpecExecutionStartingProcessor>("GetApplicableTags", message).ToList(); Assert.IsNotEmpty(tags); Assert.AreEqual(1, tags.Count); Assert.Contains("foo", tags); }
public void ShouldGetTagListFromExecutionInfo() { var specInfo = new SpecInfo { Tags = { "foo" }, Name = "", FileName = "", IsFailed = false }; var executionInfo = new ExecutionInfo { CurrentSpec = specInfo }; var currentExecutionInfo = new SpecExecutionStartingRequest { CurrentExecutionInfo = executionInfo }; var message = new Message { SpecExecutionStartingRequest = currentExecutionInfo, MessageType = Message.Types.MessageType.SpecExecutionStarting, MessageId = 0 }; var tags = AssertEx.ExecuteProtectedMethod <SpecExecutionStartingProcessor>("GetApplicableTags", message) .ToList(); Assert.IsNotEmpty(tags); Assert.AreEqual(1, tags.Count); Assert.Contains("foo", tags); }
public void StartSpec(SpecExecutionStartingRequest request) { lock (_lockObj) { if (_launch == null) { var launchReporter = new LaunchReporter(_service, _configuration, null, ExtensionManager.Instance); // if execution is rerun if (request.CurrentExecutionInfo.ExecutionArgs.Any(arg => arg.FlagName.ToLowerInvariant() == "failed")) { _startLaunchRequest.IsRerun = true; } launchReporter.Start(_startLaunchRequest); _launch = launchReporter; } var specResult = request.SpecResult; var specReporter = _launch.StartChildTestReporter(new StartTestItemRequest { Type = TestItemType.Suite, Name = specResult.ProtoSpec.SpecHeading, Description = string.Join("", specResult.ProtoSpec.Items.Where(i => i.ItemType == ProtoItem.Types.ItemType.Comment).Select(c => c.Comment.Text)), StartTime = DateTime.UtcNow, Attributes = specResult.ProtoSpec.Tags.Select(t => new ItemAttributeConverter().ConvertFrom(t, opts => opts.UndefinedKey = "tag")).ToList() }); // pre hook messages if (specResult.ProtoSpec.PreHookMessages.Count != 0 || specResult.ProtoSpec.PreHookFailures.Count != 0) { foreach (var preHookMessage in specResult.ProtoSpec.PreHookMessages) { specReporter.Log(new CreateLogItemRequest { Level = LogLevel.Debug, Text = preHookMessage, Time = DateTime.UtcNow }); } foreach (var preHookFailure in specResult.ProtoSpec.PreHookFailures) { specReporter.Log(new CreateLogItemRequest { Level = LogLevel.Error, Text = $"{preHookFailure.ErrorMessage}{Environment.NewLine}{preHookFailure.StackTrace}", Time = DateTime.UtcNow }); } } var key = GetSpecKey(request.CurrentExecutionInfo, request.CurrentExecutionInfo.CurrentSpec); _specs[key] = specReporter; } }
public void ShouldExecutreBeforeSpecHook() { var mockAssemblyLoader = new Mock <IAssemblyLoader>(); var mockType = new Mock <Type>().Object; mockAssemblyLoader.Setup(x => x.GetLibType(LibType.MessageCollector)).Returns(mockType); mockAssemblyLoader.Setup(x => x.GetLibType(LibType.ScreenshotCollector)).Returns(mockType); var specExecutionStartingRequest = new SpecExecutionStartingRequest { CurrentExecutionInfo = new ExecutionInfo { CurrentSpec = new SpecInfo() } }; var request = new Message { MessageId = 20, MessageType = Message.Types.MessageType.SpecExecutionStarting, SpecExecutionStartingRequest = specExecutionStartingRequest }; var mockMethodExecutor = new Mock <IExecutionOrchestrator>(); var protoExecutionResult = new ProtoExecutionResult { ExecutionTime = 0, Failed = false }; IEnumerable <string> pendingMessages = new List <string> { "one", "two" }; mockMethodExecutor.Setup(x => x.ExecuteHooks("BeforeSpec", It.IsAny <HooksStrategy>(), It.IsAny <IList <string> >(), It.IsAny <ExecutionContext>())) .Returns(protoExecutionResult); var mockReflectionWrapper = new Mock <IReflectionWrapper>(); mockReflectionWrapper.Setup(x => x.InvokeMethod(mockType, null, "GetAllPendingMessages", It.IsAny <BindingFlags>())) .Returns(pendingMessages); var pendingScreenshots = new List <byte[]>() { Encoding.ASCII.GetBytes("Screenshot") }; mockReflectionWrapper.Setup(x => x.InvokeMethod(mockType, null, "GetAllPendingScreenshots", It.IsAny <BindingFlags>())) .Returns(pendingScreenshots); var processor = new SpecExecutionStartingProcessor(mockMethodExecutor.Object, mockAssemblyLoader.Object, mockReflectionWrapper.Object); var result = processor.Process(request); Assert.False(result.ExecutionStatusResponse.ExecutionResult.Failed); Assert.AreEqual(result.ExecutionStatusResponse.ExecutionResult.Message.ToList(), pendingMessages); Assert.AreEqual(result.ExecutionStatusResponse.ExecutionResult.ScreenShot.ToList(), pendingScreenshots); }
public void ShouldExecutreBeforeSpecHook() { var specExecutionStartingRequest = new SpecExecutionStartingRequest { CurrentExecutionInfo = new ExecutionInfo { CurrentSpec = new SpecInfo() } }; var request = new Message { MessageId = 20, MessageType = Message.Types.MessageType.SpecExecutionStarting, SpecExecutionStartingRequest = specExecutionStartingRequest }; var mockMethodExecutor = new Mock <IExecutionOrchestrator>(); var protoExecutionResult = new ProtoExecutionResult { ExecutionTime = 0, Failed = false }; var pendingMessages = new List <string> { "one", "two" }; var pendingScreenshots = new List <byte[]> { Encoding.ASCII.GetBytes("screenshot") }; mockMethodExecutor.Setup(x => x.ExecuteHooks("BeforeSpec", It.IsAny <HooksStrategy>(), It.IsAny <IList <string> >(), It.IsAny <ExecutionContext>())) .Returns(protoExecutionResult); mockMethodExecutor.Setup(x => x.GetAllPendingMessages()).Returns(pendingMessages); mockMethodExecutor.Setup(x => x.GetAllPendingScreenshots()).Returns(pendingScreenshots); var processor = new SpecExecutionStartingProcessor(mockMethodExecutor.Object); var result = processor.Process(request); Assert.False(result.ExecutionStatusResponse.ExecutionResult.Failed); Assert.AreEqual(result.ExecutionStatusResponse.ExecutionResult.Message.ToList(), pendingMessages); Assert.AreEqual(result.ExecutionStatusResponse.ExecutionResult.Screenshots.ToList(), pendingScreenshots); }
public override Task <Empty> NotifySpecExecutionStarting(SpecExecutionStartingRequest request, ServerCallContext context) { try { TraceLogger.Info($"{nameof(NotifySpecExecutionStarting)} received"); TraceLogger.Verbose(System.Text.Json.JsonSerializer.Serialize(request)); if (request.SpecResult != null) { _sender.StartSpec(request); } } catch (Exception exp) { TraceLogger.Error(exp.ToString()); } return(Task.FromResult(new Empty())); }
public void ShouldExecutreBeforeSpecHook() { var specExecutionStartingRequest = new SpecExecutionStartingRequest { CurrentExecutionInfo = new ExecutionInfo { CurrentSpec = new SpecInfo() } }; var request = specExecutionStartingRequest; var mockMethodExecutor = new Mock <IExecutionOrchestrator>(); var protoExecutionResult = new ProtoExecutionResult { ExecutionTime = 0, Failed = false }; var pendingMessages = new List <string> { "one", "two" }; var pendingScreenshotFiles = new List <string> { "screenshot.png" }; mockMethodExecutor.Setup(x => x.ExecuteHooks("BeforeSpec", It.IsAny <HooksStrategy>(), It.IsAny <IList <string> >(), It.IsAny <ExecutionInfo>())) .Returns(protoExecutionResult); mockMethodExecutor.Setup(x => x.GetAllPendingMessages()).Returns(pendingMessages); mockMethodExecutor.Setup(x => x.GetAllPendingScreenshotFiles()).Returns(pendingScreenshotFiles); var processor = new SpecExecutionStartingProcessor(mockMethodExecutor.Object); var result = processor.Process(request); Assert.False(result.ExecutionResult.Failed); Assert.AreEqual(result.ExecutionResult.Message.ToList(), pendingMessages); Assert.AreEqual(result.ExecutionResult.ScreenshotFiles.ToList(), pendingScreenshotFiles); }
public override Task <ExecutionStatusResponse> StartSpecExecution(SpecExecutionStartingRequest request, ServerCallContext context) { return(_pool.Execute(getStream(request.Stream), () => this.specExecutionStartingProcessor.Process(request))); }
public override Task <ExecutionStatusResponse> StartSpecExecution(SpecExecutionStartingRequest request, ServerCallContext context) { return(Task.FromResult(this.specExecutionStartingProcessor.Process(request))); }
public override Task <Empty> NotifySpecExecutionStarting(SpecExecutionStartingRequest request, ServerCallContext context) { return(Task.FromResult(new Empty())); }
public ExecutionStatusResponse Process(SpecExecutionStartingRequest request) { _executionOrchestrator.StartExecutionScope("spec"); return(ExecuteHooks(request.CurrentExecutionInfo)); }