Пример #1
0
        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);
        }
Пример #3
0
        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;
            }
        }
Пример #4
0
        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);
        }
Пример #6
0
        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);
        }
Пример #8
0
 public override Task <ExecutionStatusResponse> StartSpecExecution(SpecExecutionStartingRequest request, ServerCallContext context)
 {
     return(_pool.Execute(getStream(request.Stream), () => this.specExecutionStartingProcessor.Process(request)));
 }
Пример #9
0
 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));
 }