Example #1
0
        public async Task TryToRunJobOnJenkinsWithCSRFProtectionWithoutSavedPassword_AskUserForPassword()
        {
            var basicAuthHeader = new BasicAuthenticationHeader(UserName, Password);
            var tokenAuthHeader = new BearerAuthenticationHeader(Token);

            var configuration = new JenoConfiguration
            {
                JenkinsUrl = JenkinsUrl,
                UserName   = UserName,
                Token      = Token,
                Password   = string.Empty,
                Repository = new Dictionary <string, string>()
                {
                    { "firstExampleRepoUrl", "firstExampleJob" },
                    { "secondExampleRepoUrl", "secondExampleJob" },
                    { DefaultKey, DefaultJob },
                }
            };

            var client = new MockHttpMessageHandler();

            client.Expect($"{JenkinsUrl}/{DefaultJob}/job/{Branch}/buildWithParameters")
            .WithHeaders("Authorization", $"{tokenAuthHeader.Scheme} {tokenAuthHeader.Parameter}")
            .Respond(request => new HttpResponseMessage
            {
                StatusCode   = HttpStatusCode.Forbidden,
                ReasonPhrase = "No valid crumb was included in the request"
            });
            client.Expect($"{JenkinsUrl}/crumbIssuer/api/json")
            .WithHeaders("Authorization", $"{basicAuthHeader.Scheme} {basicAuthHeader.Parameter}")
            .Respond(CrumbContentType, JsonConvert.SerializeObject(_crumbHeader));
            client.Expect($"{JenkinsUrl}/{DefaultJob}/job/{Branch}/buildWithParameters")
            .WithHeaders("Authorization", $"{basicAuthHeader.Scheme} {basicAuthHeader.Parameter}")
            .WithHeaders(_crumbHeader.CrumbRequestField, _crumbHeader.Crumb)
            .Respond(HttpStatusCode.OK);

            var httpClientFactory = new Mock <IHttpClientFactory>();

            httpClientFactory.Setup(s => s.CreateClient(It.IsAny <string>()))
            .Returns(client.ToHttpClient());

            var passwordProvider = GetUserConsoleMock();

            var command = new RunJob(GetDefaultGitMock().Object,
                                     GetEncryptorMock().Object,
                                     passwordProvider.Object,
                                     httpClientFactory.Object,
                                     GetOptionsMock(configuration).Object);

            var app = new CommandLineApplication();

            app.Command(command.Name, command.Command);

            var result = await app.ExecuteAsync(new string[] { Command });

            Assert.That(result, Is.EqualTo(JenoCodes.Ok));
            passwordProvider.Verify(s => s.ReadInput("password", true), Times.AtLeastOnce);
        }
Example #2
0
        public async Task TryRunJobOnJenkinsWithCSRFProtection_UseBasicCredentialsAndAskForCrumb()
        {
            var basicAuthHeader = new BasicAuthenticationHeader(UserName, Password);
            var tokenAuthHeader = new BearerAuthenticationHeader(Token);

            var client = new MockHttpMessageHandler();

            client.Expect($"{JenkinsUrl}/{DefaultJob}/job/{Branch}/buildWithParameters")
            .WithHeaders("Authorization", $"{tokenAuthHeader.Scheme} {tokenAuthHeader.Parameter}")
            .Respond(request => new HttpResponseMessage
            {
                StatusCode   = HttpStatusCode.Forbidden,
                ReasonPhrase = "No valid crumb was included in the request"
            });
            client.Expect($"{JenkinsUrl}/crumbIssuer/api/json")
            .WithHeaders("Authorization", $"{basicAuthHeader.Scheme} {basicAuthHeader.Parameter}")
            .Respond(CrumbContentType, JsonConvert.SerializeObject(_crumbHeader));
            client.Expect($"{JenkinsUrl}/{DefaultJob}/job/{Branch}/buildWithParameters")
            .WithHeaders("Authorization", $"{basicAuthHeader.Scheme} {basicAuthHeader.Parameter}")
            .WithHeaders(_crumbHeader.CrumbRequestField, _crumbHeader.Crumb)
            .Respond(HttpStatusCode.OK);

            var httpClientFactory = new Mock <IHttpClientFactory>();

            httpClientFactory.Setup(s => s.CreateClient(It.IsAny <string>()))
            .Returns(client.ToHttpClient());

            var command = new RunJob(GetDefaultGitMock().Object,
                                     GetEncryptorMock().Object,
                                     GetUserConsoleMock().Object,
                                     httpClientFactory.Object,
                                     GetOptionsMock().Object);

            var app = new CommandLineApplication();

            app.Command(command.Name, command.Command);

            var result = await app.ExecuteAsync(new string[] { Command });

            Assert.That(result, Is.EqualTo(JenoCodes.Ok));
        }