diff --git a/jira-feature-collector/README.md b/jira-feature-collector/README.md index eec58f5a8a..2a36cc88c9 100755 --- a/jira-feature-collector/README.md +++ b/jira-feature-collector/README.md @@ -15,20 +15,20 @@ for information about sourcing this properties file. ###Sample application.properties file -------------------------------------- - #Database Name - database=dashboarddb - + #Database Name - default is test + spring.data.mongodb.database=dashboarddb + #Database HostName - default is localhost - dbhost=10.0.1.1 - + spring.data.mongodb.host=10.0.1.1 + #Database Port - default is 27017 - dbport=9999 - + spring.data.mongodb.port=9999 + #Database Username - default is blank - dbusername=db - + spring.data.mongodb.username=db + #Database Password - default is blank - dbpassword=dbpass + spring.data.mongodb.password=dbpass #Collector schedule (required) feature.cron=0 * * * * * diff --git a/jira-feature-collector/pom.xml b/jira-feature-collector/pom.xml index f06e7691cc..ca1c16e700 100755 --- a/jira-feature-collector/pom.xml +++ b/jira-feature-collector/pom.xml @@ -1,6 +1,8 @@ + 4.0.0 + com.capitalone.dashboard jira-feature-collector jar ${project.groupId}:${project.artifactId} @@ -187,6 +189,13 @@ findbugs 3.0.1 + + + + commons-codec + commons-codec + 1.9 + diff --git a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/project/ProjectDataClientImpl.java b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/project/ProjectDataClientImpl.java index b31408b3c7..d3cea26cd8 100755 --- a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/project/ProjectDataClientImpl.java +++ b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/project/ProjectDataClientImpl.java @@ -33,9 +33,7 @@ public class ProjectDataClientImpl extends ProjectDataClientSetupImpl implements /** * Extends the constructor from the super class. * - * @param featureSettings - * @param projectRepository - * @param featureCollectorRepository + * @param teamRepository */ public ProjectDataClientImpl(FeatureSettings featureSettings, ScopeRepository projectRepository, FeatureCollectorRepository featureCollectorRepository) { @@ -135,7 +133,8 @@ public void updateProjectInformation() { * Validates current entry and removes new entry if an older item exists in * the repo * - * @param localId repository item ID (not the precise mongoID) + * @param A + * local repository item ID (not the precise mongoID) */ protected Boolean removeExistingEntity(String localId) { boolean deleted = false; diff --git a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/project/ProjectDataClientSetupImpl.java b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/project/ProjectDataClientSetupImpl.java index 1fd35a0e74..cbffd3060d 100755 --- a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/project/ProjectDataClientSetupImpl.java +++ b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/project/ProjectDataClientSetupImpl.java @@ -72,7 +72,8 @@ public ProjectDataClientSetupImpl(FeatureSettings featureSettings, /** * This method is used to update the database with model defined in the * collector model definitions. - * + * + * @see Story */ public void updateObjectInformation() { LOGGER.info("Beginning collection of project data at " + Calendar.getInstance().getTime()); @@ -90,7 +91,11 @@ public void updateObjectInformation() { proxyUri, proxyPort); try { List rs = jiraDataFactory.getJiraTeams(); - updateMongoInfo(rs); + if ((rs != null) && (!rs.isEmpty())) { + updateMongoInfo(rs); + } else { + LOGGER.error("The response from Jira was blank or non existant - please check your property configurations"); + } } catch (Exception e) { LOGGER.error("Unexpected error in Jira paging request of " + e.getClass().getName() + "\n[" + e.getMessage() + "]"); diff --git a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/story/FeatureDataClientSetupImpl.java b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/story/FeatureDataClientSetupImpl.java index 96ecdafcb6..f264ff339f 100755 --- a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/story/FeatureDataClientSetupImpl.java +++ b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/story/FeatureDataClientSetupImpl.java @@ -74,7 +74,8 @@ public FeatureDataClientSetupImpl(FeatureSettings featureSettings, /** * This method is used to update the database with model defined in the * collector model definitions. - * + * + * @see Story */ public void updateObjectInformation() { LOGGER.info("Beginning collection of feature data at " + Calendar.getInstance().getTime()); @@ -89,7 +90,7 @@ public void updateObjectInformation() { proxyUri = this.featureSettings.getJiraProxyUrl(); proxyPort = this.featureSettings.getJiraProxyPort(); } - JiraDataFactoryImpl jiraDataFactory = new JiraDataFactoryImpl(1000, jiraCredentials, + JiraDataFactoryImpl jiraDataFactory = new JiraDataFactoryImpl(pageSize, jiraCredentials, jiraBaseUrl, proxyUri, proxyPort); jiraDataFactory.setQuery(query); boolean hasMore = true; @@ -97,7 +98,11 @@ public void updateObjectInformation() { for (int i = 0; hasMore; i += pageSize) { jiraDataFactory.setPageIndex(i); List rs = jiraDataFactory.getJiraIssues(); - if (rs.isEmpty()) { + + if (rs == null) { + hasMore = false; + LOGGER.error("The response from Jira was blank or non existant - please check your property configurations"); + } else if (rs.isEmpty()) { hasMore = false; } diff --git a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/story/StoryDataClientImpl.java b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/story/StoryDataClientImpl.java index d8c96305d9..d1974689c3 100755 --- a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/story/StoryDataClientImpl.java +++ b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/story/StoryDataClientImpl.java @@ -64,10 +64,7 @@ public class StoryDataClientImpl extends FeatureDataClientSetupImpl implements S /** * Extends the constructor from the super class. * - * @param coreFeatureSettings - * @param featureSettings - * @param featureRepository - * @param featureCollectorRepository + * @param teamRepository */ public StoryDataClientImpl(CoreFeatureSettings coreFeatureSettings, FeatureSettings featureSettings, FeatureRepository featureRepository, @@ -521,7 +518,8 @@ public void updateStoryInformation() { * Validates current entry and removes new entry if an older item exists in * the repo * - * @param localId repository item ID (not the precise mongoID) + * @param A + * local repository item ID (not the precise mongoID) */ protected Boolean removeExistingEntity(String localId) { boolean deleted = false; diff --git a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/team/TeamDataClientImpl.java b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/team/TeamDataClientImpl.java index 311d864329..0468ed5cf8 100755 --- a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/team/TeamDataClientImpl.java +++ b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/team/TeamDataClientImpl.java @@ -134,7 +134,8 @@ public void updateTeamInformation() { * Validates current entry and removes new entry if an older item exists in * the repo * - * @param localId repository item ID (not the precise mongoID) + * @param A + * local repository item ID (not the precise mongoID) */ protected Boolean removeExistingEntity(String localId) { boolean deleted = false; diff --git a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/team/TeamDataClientSetupImpl.java b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/team/TeamDataClientSetupImpl.java index 26d66857fa..61115d1c6d 100755 --- a/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/team/TeamDataClientSetupImpl.java +++ b/jira-feature-collector/src/main/java/com/capitalone/dashboard/client/team/TeamDataClientSetupImpl.java @@ -91,7 +91,12 @@ public void updateObjectInformation() { proxyUri, proxyPort); try { List rs = jiraDataFactory.getJiraTeams(); - updateMongoInfo(rs); + + if ((rs != null) && (!rs.isEmpty())) { + updateMongoInfo(rs); + } else { + LOGGER.error("The response from Jira was blank or non existant - please check your property configurations"); + } } catch (Exception e) { LOGGER.error("Unexpected error in Jira paging request of " + e.getClass().getName() + "\n[" + e.getMessage() + "]"); diff --git a/jira-feature-collector/src/main/java/com/capitalone/dashboard/datafactory/jira/JiraDataFactoryImpl.java b/jira-feature-collector/src/main/java/com/capitalone/dashboard/datafactory/jira/JiraDataFactoryImpl.java index ef4c364c3d..4508202e94 100755 --- a/jira-feature-collector/src/main/java/com/capitalone/dashboard/datafactory/jira/JiraDataFactoryImpl.java +++ b/jira-feature-collector/src/main/java/com/capitalone/dashboard/datafactory/jira/JiraDataFactoryImpl.java @@ -1,22 +1,8 @@ package com.capitalone.dashboard.datafactory.jira; -import com.atlassian.jira.rest.client.api.JiraRestClient; -import com.atlassian.jira.rest.client.api.JiraRestClientFactory; -import com.atlassian.jira.rest.client.api.domain.BasicProject; -import com.atlassian.jira.rest.client.api.domain.Issue; -import com.atlassian.jira.rest.client.api.domain.SearchResult; -import com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory; -import com.atlassian.util.concurrent.Promise; -import com.google.common.collect.Lists; -import org.apache.commons.codec.binary.Base64; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - import java.io.IOException; import java.net.Authenticator; import java.net.InetSocketAddress; -import java.net.MalformedURLException; import java.net.PasswordAuthentication; import java.net.Proxy; import java.net.URI; @@ -28,8 +14,23 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; -import java.util.Set; import java.util.StringTokenizer; +import java.util.Set; + +import com.atlassian.jira.rest.client.api.JiraRestClient; +import com.atlassian.jira.rest.client.api.JiraRestClientFactory; +import com.atlassian.jira.rest.client.api.domain.BasicProject; +import com.atlassian.jira.rest.client.api.domain.Issue; +import com.atlassian.jira.rest.client.api.domain.SearchResult; +import com.atlassian.jira.rest.client.internal.async.AsynchronousJiraRestClientFactory; +import com.atlassian.util.concurrent.Promise; +import com.google.common.collect.Lists; + +import org.apache.commons.codec.binary.Base64; +import org.apache.commons.lang.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; @Component public class JiraDataFactoryImpl implements JiraDataFactory { @@ -87,12 +88,28 @@ public JiraDataFactoryImpl(String jiraCredentials, String jiraBaseUrl) { */ public JiraDataFactoryImpl(String jiraCredentials, String jiraBaseUrl, String jiraProxyUrl, String jiraProxyPort) { - URI jiraUri = this.createJiraConnection(jiraBaseUrl, jiraProxyUrl + ":" + jiraProxyPort, - this.decodeCredentials(jiraCredentials).get("username"), - this.decodeCredentials(jiraCredentials).get("password")); - client = factory.createWithBasicHttpAuthentication(jiraUri, - this.decodeCredentials(jiraCredentials).get("username"), - this.decodeCredentials(jiraCredentials).get("password")); + URI jiraUri; + if (!StringUtils.isEmpty(jiraBaseUrl)) { + if (!StringUtils.isEmpty(jiraProxyUrl) && !StringUtils.isEmpty(jiraProxyPort)) { + jiraUri = this.createJiraConnection(jiraBaseUrl, + jiraProxyUrl + ":" + jiraProxyPort, this.decodeCredentials(jiraCredentials) + .get("username"), + this.decodeCredentials(jiraCredentials).get("password")); + } else { + try { + LOGGER.debug("Handling without authenticated proxy (fields were available in properties settings but were blank)"); + jiraUri = new URI(jiraBaseUrl); + } catch (URISyntaxException e) { + LOGGER.error("There was a problem reading the provide Jira base URI syntax"); + jiraUri = null; + } + } + client = factory.createWithBasicHttpAuthentication(jiraUri, + this.decodeCredentials(jiraCredentials).get("username"), this + .decodeCredentials(jiraCredentials).get("password")); + } else { + LOGGER.error("At runtime in a property setting at minimum, a valid Jira URI and basic authentication credentials must be provided"); + } this.pageSize = 1000; this.pageIndex = 0; @@ -144,12 +161,28 @@ public JiraDataFactoryImpl(int inPageSize, String jiraCredentials, String jiraBa */ public JiraDataFactoryImpl(int inPageSize, String jiraCredentials, String jiraBaseUrl, String jiraProxyUrl, String jiraProxyPort) { - URI jiraUri = this.createJiraConnection(jiraBaseUrl, jiraProxyUrl + ":" + jiraProxyPort, - this.decodeCredentials(jiraCredentials).get("username"), - this.decodeCredentials(jiraCredentials).get("password")); - this.client = factory.createWithBasicHttpAuthentication(jiraUri, - this.decodeCredentials(jiraCredentials).get("username"), - this.decodeCredentials(jiraCredentials).get("password")); + URI jiraUri; + if (!StringUtils.isEmpty(jiraBaseUrl)) { + if (!StringUtils.isEmpty(jiraProxyUrl) && !StringUtils.isEmpty(jiraProxyPort)) { + jiraUri = this.createJiraConnection(jiraBaseUrl, + jiraProxyUrl + ":" + jiraProxyPort, this.decodeCredentials(jiraCredentials) + .get("username"), + this.decodeCredentials(jiraCredentials).get("password")); + } else { + try { + LOGGER.debug("Handling without authenticated proxy (fields were available in properties settings but were blank)"); + jiraUri = new URI(jiraBaseUrl); + } catch (URISyntaxException e) { + LOGGER.error("There was a problem reading the provide Jira base URI syntax"); + jiraUri = null; + } + } + this.client = factory.createWithBasicHttpAuthentication(jiraUri, this + .decodeCredentials(jiraCredentials).get("username"), + this.decodeCredentials(jiraCredentials).get("password")); + } else { + LOGGER.error("At runtime in a property setting at minimum, a valid Jira URI and basic authentication credentials must be provided"); + } this.pageSize = inPageSize; pageIndex = 0; @@ -179,19 +212,24 @@ public List getJiraIssues() { List issues = new ArrayList(); Set fields = new LinkedHashSet(); fields.add("*all"); - Promise promisedRs = client.getSearchClient().searchJql(this.getBasicQuery(), - this.getPageSize(), this.getPageIndex(), fields); - try { - jiraRawRs = promisedRs.claim().getIssues(); - if (jiraRawRs != null) { - issues = Lists.newArrayList(jiraRawRs); - } else { + if (client != null) { + Promise promisedRs = client.getSearchClient().searchJql( + this.getBasicQuery(), this.getPageSize(), this.getPageIndex(), fields); + try { + jiraRawRs = promisedRs.claim().getIssues(); + if (jiraRawRs != null) { + issues = Lists.newArrayList(jiraRawRs); + } else { + issues = new ArrayList(); + } + } catch (Exception e) { issues = new ArrayList(); + LOGGER.warn("No result was available from Jira unexpectedly - defaulting to blank response. The reason for this fault is the following:" + + e.getCause()); } - } catch (Exception e) { - issues = new ArrayList(); - LOGGER.warn("No result was available from Jira unexpectedly - defaulting to blank response. The reason for this fault is the following:" - + e.getCause()); + } else { + issues = null; + LOGGER.error("The response from Jira was blank or non existant - please check your property configurations"); } return issues; @@ -206,18 +244,23 @@ public List getJiraIssues() { public List getJiraTeams() { Iterable jiraRawRs = null; List issues = new ArrayList(); - Promise> promisedRs = client.getProjectClient().getAllProjects(); - try { - jiraRawRs = promisedRs.claim(); - if (jiraRawRs != null) { - issues = Lists.newArrayList(jiraRawRs); - } else { + if (client != null) { + Promise> promisedRs = client.getProjectClient().getAllProjects(); + try { + jiraRawRs = promisedRs.claim(); + if (jiraRawRs != null) { + issues = Lists.newArrayList(jiraRawRs); + } else { + issues = new ArrayList(); + } + } catch (Exception e) { issues = new ArrayList(); + LOGGER.warn("No result was available from Jira unexpectedly - defaulting to blank response. The reason for this fault is the following:" + + e.getCause()); } - } catch (Exception e) { - issues = new ArrayList(); - LOGGER.warn("No result was available from Jira unexpectedly - defaulting to blank response. The reason for this fault is the following:" - + e.getCause()); + } else { + issues = null; + LOGGER.error("The response from Jira was blank or non existant - please check your property configurations"); } return issues; @@ -254,7 +297,8 @@ public String getBasicQuery() { /** * Mutator method for basic query formatted object. * - * @param basicQuery Jira REST query + * @param Basic + * Jira REST query */ private void setBasicQuery(String basicQuery) { this.basicQuery = basicQuery; @@ -315,44 +359,43 @@ protected Map decodeCredentials(String jiraBasicAuthCredentialsI */ protected URI createJiraConnection(String jiraBaseUri, String fullProxyUrl, String username, String password) { + final String uname = username; + final String pword = password; + Proxy proxy = null; + URLConnection connection = null; try { - URL url = new URL(jiraBaseUri); - URI uri = new URI(fullProxyUrl); - final String uname = username; - final String pword = password; - Proxy authProxy = null; - - if ((!uri.getHost().isEmpty()) || (uri.getPort() > 0)) { - authProxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(uri.getHost(), - uri.getPort())); - if ((username != null) && (password != null)) { - Authenticator.setDefault(new Authenticator() { - protected PasswordAuthentication getPasswordAuthentication() { - return new PasswordAuthentication(uname, pword.toCharArray()); - } - }); - } - } - - URLConnection connection = null; - - if (authProxy != null) { - try { - connection = url.openConnection(authProxy); - } catch (IOException e) { - LOGGER.error("There was a problem reading and openning the proxy connection"); - } - if (((!uri.getHost().isEmpty()) || (uri.getPort() > 0)) - && ((username != null) && (password != null))) { - String proxyAuth = username + ":" + password; - connection.setRequestProperty("Proxy-Authorization", - "Basic " + Base64.encodeBase64String((proxyAuth).getBytes())); + if (!StringUtils.isEmpty(jiraBaseUri)) { + URL baseUrl = new URL(jiraBaseUri); + if (!StringUtils.isEmpty(fullProxyUrl)) { + URL proxyUrl = new URL(fullProxyUrl); + URI proxyUri = new URI(proxyUrl.getProtocol(), proxyUrl.getUserInfo(), + proxyUrl.getHost(), proxyUrl.getPort(), proxyUrl.getPath(), + proxyUrl.getQuery(), null); + proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(proxyUri.getHost(), + proxyUri.getPort())); + connection = baseUrl.openConnection(proxy); + + if (!StringUtils.isEmpty(username) && (!StringUtils.isEmpty(password))) { + String creds = uname + ":" + pword; + Authenticator.setDefault(new Authenticator() { + protected PasswordAuthentication getPasswordAuthentication() { + return new PasswordAuthentication(uname, pword.toCharArray()); + } + }); + connection.setRequestProperty("Proxy-Authorization", + "Basic " + Base64.encodeBase64String((creds).getBytes())); + } + } else { + connection = baseUrl.openConnection(); } + } else { + LOGGER.error("The response from Jira was blank or non existant - please check your property configurations"); + return null; } return connection.getURL().toURI(); - } catch (URISyntaxException | MalformedURLException e) { + } catch (URISyntaxException | IOException e) { try { LOGGER.error("There was a problem parsing or reading the proxy configuration settings during openning a Jira connection. Defaulting to a non-proxy URI."); return new URI(jiraBaseUri); @@ -367,10 +410,14 @@ protected PasswordAuthentication getPasswordAuthentication() { * Destroys current Jira Client connection during asynchronous connection */ public void destroy() { - try { - this.client.close(); - } catch (IOException e) { - LOGGER.error("There was a problem closing your Jira connection during query collection"); + if (client != null) { + try { + this.client.close(); + } catch (IOException e) { + LOGGER.error("There was a problem closing your Jira connection during query collection"); + } + } else { + LOGGER.warn("No valid client was established to be destroyed"); } } } diff --git a/jira-feature-collector/src/main/java/com/capitalone/dashboard/util/ClientUtil.java b/jira-feature-collector/src/main/java/com/capitalone/dashboard/util/ClientUtil.java index 487a7a22c8..748d4303f7 100755 --- a/jira-feature-collector/src/main/java/com/capitalone/dashboard/util/ClientUtil.java +++ b/jira-feature-collector/src/main/java/com/capitalone/dashboard/util/ClientUtil.java @@ -43,7 +43,7 @@ public class ClientUtil { @SuppressWarnings("unused") private static final Logger LOGGER = LoggerFactory.getLogger(ClientUtil.class); - final static int MAX_ISO_INDEX = 23; + private final static int MAX_ISO_INDEX = 23; /** * Default constructor @@ -58,7 +58,7 @@ public ClientUtil() { * a "" (blank) response for any of the following cases: * "NULL";"Null";"null";null;"" * - * @param inNativeRs + * @param nativeRs * The string response artifact retrieved from the source system * to be sanitized * @return A UTF-8 sanitized response @@ -265,7 +265,7 @@ else if (value instanceof JSONObject) { } return list; } - + /** * Jira story estimate in minutes, converted to hours, rounded down: For * Jira, 8 hours = 1 day; 5 days = 1 week diff --git a/jira-feature-collector/src/main/resources/jira-feature-collector.properties b/jira-feature-collector/src/main/resources/jira-feature-collector.properties index b0c61b2daa..d95782c888 100755 --- a/jira-feature-collector/src/main/resources/jira-feature-collector.properties +++ b/jira-feature-collector/src/main/resources/jira-feature-collector.properties @@ -1,5 +1,5 @@ #PageSize -feature.pageSize=1000 +feature.pageSize=50 # api.query.folder=${base.config.dir}/jiraapi-queries feature.queryFolder=jiraapi-queries diff --git a/jira-feature-collector/src/test/java/com/capitalone/dashboard/datafactory/jira/JiraDataFactoryImplTest.java b/jira-feature-collector/src/test/java/com/capitalone/dashboard/datafactory/jira/JiraDataFactoryImplTest.java index d1c16e1750..bb9f0829bb 100755 --- a/jira-feature-collector/src/test/java/com/capitalone/dashboard/datafactory/jira/JiraDataFactoryImplTest.java +++ b/jira-feature-collector/src/test/java/com/capitalone/dashboard/datafactory/jira/JiraDataFactoryImplTest.java @@ -16,13 +16,7 @@ package com.capitalone.dashboard.datafactory.jira; -import com.atlassian.jira.rest.client.api.domain.BasicProject; -import com.atlassian.jira.rest.client.api.domain.Issue; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; +import static org.junit.Assert.*; import java.text.DateFormat; import java.text.SimpleDateFormat; @@ -30,10 +24,15 @@ import java.util.Calendar; import java.util.List; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Test; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import com.atlassian.jira.rest.client.api.domain.BasicProject; +import com.atlassian.jira.rest.client.api.domain.Issue; +import com.capitalone.dashboard.datafactory.jira.JiraDataFactoryImpl; /** * Tests all facets of the VerisonOneDataFactoryImpl class, which is responsible @@ -112,7 +111,7 @@ public void testJiraDataFactoryImpl_StandardInit() { /** * Test method for - * {@link com.capitalone.dashboard.datafactory.jira.JiraDataFactoryImpl#} + * {@link com.capitalone.dashboard.datafactory.jira.JiraDataFactoryImpl#JiraDataFactoryImpl(int)} * . */ @Test @@ -146,6 +145,132 @@ public void testJiraDataFactoryImpl_InitWithNonAuthProxy() { jiraDataFactory.getPageSize()); } + /** + * Test method for + * {@link com.capitalone.dashboard.datafactory.jira.JiraDataFactoryImpl#JiraDataFactoryImpl()} + * . + */ + @Test + public void testJiraDataFactoryImpl_InitWithBlankAuthProxy_HandleWithNoAuthProxy() { + // Test null proxy - default page size + jiraDataFactory = new JiraDataFactoryImpl(jiraCredentials, jiraBaseUri, null, null); + jiraDataFactory.setQuery(query); + assertEquals("The lack of a proxy was not handled correctly", 1000, + jiraDataFactory.getPageSize()); + + try { + List rs = jiraDataFactory.getJiraIssues(); + + if (!rs.isEmpty()) { + logger.info("basic query response: " + rs.get(0)); + assertTrue("No valid data set was found", rs.size() >= 0); + } else { + // Check blank response + assertTrue("Response object was unexpectedly null", + rs.equals(new ArrayList())); + } + } catch (Exception e) { + fail("There was an unexpected problem while connecting to Jira during the test:\n" + + e.getMessage() + " caused by: " + e.getCause()); + } + // Test null proxy - set page size + jiraDataFactory = null; + jiraDataFactory = new JiraDataFactoryImpl(1000, jiraCredentials, jiraBaseUri, null, null); + jiraDataFactory.setQuery(query); + assertEquals("The lack of a proxy was not handled correctly", 1000, + jiraDataFactory.getPageSize()); + + try { + List rs = jiraDataFactory.getJiraIssues(); + + if (!rs.isEmpty()) { + logger.info("basic query response: " + rs.get(0)); + assertTrue("No valid data set was found", rs.size() >= 0); + } else { + // Check blank response + assertTrue("Response object was unexpectedly null", + rs.equals(new ArrayList())); + } + } catch (Exception e) { + fail("There was an unexpected problem while connecting to Jira during the test:\n" + + e.getMessage() + " caused by: " + e.getCause()); + } + + // Test blank proxy - default page size + jiraDataFactory = null; + jiraDataFactory = new JiraDataFactoryImpl(jiraCredentials, jiraBaseUri, "", ""); + jiraDataFactory.setQuery(query); + assertEquals("Blank proxy was not handled correctly", 1000, jiraDataFactory.getPageSize()); + + try { + List rs = jiraDataFactory.getJiraIssues(); + + if (!rs.isEmpty()) { + logger.info("basic query response: " + rs.get(0)); + assertTrue("No valid data set was found", rs.size() >= 0); + } else { + // Check blank response + assertTrue("Response object was unexpectedly null", + rs.equals(new ArrayList())); + } + } catch (Exception e) { + fail("There was an unexpected problem while connecting to Jira during the test:\n" + + e.getMessage() + " caused by: " + e.getCause()); + } + // Test blank proxy - set page size + jiraDataFactory = null; + jiraDataFactory = new JiraDataFactoryImpl(1000, jiraCredentials, jiraBaseUri, "", ""); + jiraDataFactory.setQuery(query); + assertEquals("Blank proxy was not handled correctly", 1000, jiraDataFactory.getPageSize()); + + try { + List rs = jiraDataFactory.getJiraIssues(); + + if (!rs.isEmpty()) { + logger.info("basic query response: " + rs.get(0)); + assertTrue("No valid data set was found", rs.size() >= 0); + } else { + // Check blank response + assertTrue("Response object was unexpectedly null", + rs.equals(new ArrayList())); + } + } catch (Exception e) { + fail("There was an unexpected problem while connecting to Jira during the test:\n" + + e.getMessage() + " caused by: " + e.getCause()); + } + } + + /** + * Test method for + * {@link com.capitalone.dashboard.datafactory.jira.JiraDataFactoryImpl#JiraDataFactoryImpl()} + * . + */ + @Test + public void testJiraDataFactoryImpl_InitURIWithoutTailingSlash_ValidResponse() { + // Test null proxy + jiraDataFactory = new JiraDataFactoryImpl(jiraCredentials, jiraBaseUri.substring(0, + jiraBaseUri.length() - 1), null, null); + jiraDataFactory.setQuery(query); + assertEquals("The lack of a proxy was not handled correctly", 1000, + jiraDataFactory.getPageSize()); + + try { + List rs = jiraDataFactory.getJiraIssues(); + + if (!rs.isEmpty()) { + logger.info("basic query response: " + rs.get(0)); + assertTrue("No valid data set was found", rs.size() >= 0); + } else { + // Check blank response + assertTrue("Response object was unexpectedly null", + rs.equals(new ArrayList())); + } + } catch (Exception e) { + fail("There was an unexpected problem while connecting to Jira during the test:\n" + + e.getMessage() + " caused by: " + e.getCause()); + } + } + /** * Test method for * {@link com.capitalone.dashboard.datafactory.jira.JiraDataFactoryImpl#setQuery(java.lang.String)} @@ -162,7 +287,7 @@ public void testBuildBasicQuery_ConstructorPageSize_SelectedPageSize() { /** * Test method for - * {@link com.capitalone.dashboard.datafactory.jira.JiraDataFactoryImpl} + * {@link com.capitalone.dashboard.datafactory.jira.JiraDataFactoryImpl#buildPagingQuery(int)} * . */ @Test