예제 #1
0
        public void RunReturnsFailureIfForceFails()
        {
            var urnName = "urn:ccnet:test:otherproject";
            var task    = new ForceBuild
            {
                ProjectName = urnName
            };
            var thisProject = new Project("thisProject", task);
            var invokerMock = new Mock <IActionInvoker>(MockBehavior.Strict);

            invokerMock.SetupSet(ai => ai.Server = It.IsAny <Server>());
            invokerMock.Setup(ai => ai.Invoke(urnName, It.IsAny <InvokeArguments>()))
            .Returns(new InvokeResult
            {
                ResultCode = RemoteResultCode.FatalError
            })
            .Verifiable();
            new Server("test", thisProject)
            {
                ActionInvoker = invokerMock.Object
            };
            var contextMock = new Mock <TaskExecutionContext>(MockBehavior.Strict, new TaskExecutionParameters());

            contextMock
            .Setup(c => c.AddEntryToBuildLog("Force build failed for '" + urnName + "' - result code " + RemoteResultCode.FatalError))
            .Verifiable();
            contextMock.SetupProperty(c => c.CurrentStatus);
            task.Run(contextMock.Object).Count();
            invokerMock.Verify();
            contextMock.Verify();
            Assert.AreEqual(IntegrationStatus.Failure, contextMock.Object.CurrentStatus);
        }
예제 #2
0
        public void RunForcesABuildUsingAProjecName()
        {
            var projectName = "otherproject";
            var urnName     = "urn:ccnet:test:" + projectName;
            var task        = new ForceBuild
            {
                ProjectName = projectName
            };
            var thisProject = new Project("thisProject", task);
            var invokerMock = new Mock <IActionInvoker>(MockBehavior.Strict);

            invokerMock.SetupSet(ai => ai.Server = It.IsAny <Server>());
            invokerMock.Setup(ai => ai.Invoke(urnName, It.IsAny <InvokeArguments>()))
            .Returns(new InvokeResult
            {
                Data       = "<Blank xmlns=\"urn:cruisecontrol:common\" />",
                ResultCode = RemoteResultCode.Success
            })
            .Verifiable();
            new Server("test", thisProject)
            {
                ActionInvoker = invokerMock.Object
            };
            var contextMock = new Mock <TaskExecutionContext>(MockBehavior.Strict, new TaskExecutionParameters());

            contextMock.Setup(c => c.AddEntryToBuildLog("Force build successfully sent to '" + projectName + "'")).Verifiable();
            task.Run(contextMock.Object).Count();
            invokerMock.Verify();
            contextMock.Verify();
        }
예제 #3
0
        public void RunReturnsFailureIfRemoteForceFails()
        {
            var urnName        = "urn:ccnet:remote:otherproject";
            var connectionMock = new Mock <ServerConnection>(MockBehavior.Strict);

            connectionMock.Setup(sc => sc.Invoke(urnName, "ForceBuild"))
            .Throws(new RemoteServerException(RemoteResultCode.FatalError, null));
            var factoryMock = new Mock <IServerConnectionFactory>(MockBehavior.Strict);
            var address     = "http://somewhere/ccnet";

            factoryMock.Setup(scf => scf.GenerateConnection(address))
            .Returns(connectionMock.Object);
            var task = new ForceBuild
            {
                ServerAddress           = address,
                ProjectName             = urnName,
                ServerConnectionFactory = factoryMock.Object
            };
            var contextMock = new Mock <TaskExecutionContext>(MockBehavior.Strict, new TaskExecutionParameters());
            var message     = "Force build failed for '" + urnName + "' at '" + address + "' - result code " + RemoteResultCode.FatalError;

            contextMock.Setup(c => c.AddEntryToBuildLog(message)).Verifiable();
            contextMock.SetupProperty(c => c.CurrentStatus);
            task.Run(contextMock.Object).Count();
            contextMock.Verify();
            Assert.AreEqual(IntegrationStatus.Failure, contextMock.Object.CurrentStatus);
        }
예제 #4
0
        public void RunForcesARemoteBuildUsingProjectName()
        {
            var projectName    = "otherproject";
            var urnName        = "urn:ccnet:test:" + projectName;
            var connectionMock = new Mock <ServerConnection>(MockBehavior.Strict);

            connectionMock.Setup(sc => sc.Invoke(urnName, "ForceBuild"))
            .Returns(new Messages.Blank());
            var factoryMock = new Mock <IServerConnectionFactory>(MockBehavior.Strict);
            var address     = "http://somewhere/ccnet";

            factoryMock.Setup(scf => scf.GenerateConnection(address))
            .Returns(connectionMock.Object);
            factoryMock.Setup(scf => scf.GenerateUrn(address, projectName))
            .Returns(urnName);
            var task = new ForceBuild
            {
                ServerAddress           = address,
                ProjectName             = projectName,
                ServerConnectionFactory = factoryMock.Object
            };
            var contextMock = new Mock <TaskExecutionContext>(MockBehavior.Strict, new TaskExecutionParameters());

            contextMock.Setup(c => c.AddEntryToBuildLog("Force build successfully sent to '" + projectName + "' at '" + address + "'")).Verifiable();
            task.Run(contextMock.Object).Count();
            contextMock.Verify();
        }
예제 #5
0
        public void ValidateChecksTheProjectName()
        {
            var task           = new ForceBuild();
            var validationMock = new Mock <IValidationLog>(MockBehavior.Strict);

            validationMock.Setup(vl => vl.AddError("ProjectName has not been set")).Verifiable();
            task.Validate(validationMock.Object);
            validationMock.Verify();
        }