diff options
author | Brett Porter <brett@apache.org> | 2009-12-08 15:09:13 +0000 |
---|---|---|
committer | Brett Porter <brett@apache.org> | 2009-12-08 15:09:13 +0000 |
commit | ebaee33d1ef27a2aefb989533fdbfb0ffd9f161b (patch) | |
tree | f53ba2d76fc545f309cfffa6666b3d0fe6b4b014 | |
parent | b0304e08c3e10f7ffd8efc2e07f57beb3f482f8d (diff) | |
parent | 1d01e87b74bccbb0e4e7940b5bfc65332f5441a4 (diff) | |
download | archiva-ebaee33d1ef27a2aefb989533fdbfb0ffd9f161b.tar.gz archiva-ebaee33d1ef27a2aefb989533fdbfb0ffd9f161b.zip |
Merged /archiva/trunk:r887040-888396
git-svn-id: https://svn.apache.org/repos/asf/archiva/branches/MRM-1025@888427 13f79535-47bb-0310-9956-ffa450edef68
12 files changed, 907 insertions, 65 deletions
diff --git a/archiva-modules/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/RepositoryProblemReport.java b/archiva-modules/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/RepositoryProblemReport.java index adad333ca..42093854a 100644 --- a/archiva-modules/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/RepositoryProblemReport.java +++ b/archiva-modules/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/RepositoryProblemReport.java @@ -76,4 +76,50 @@ public class RepositoryProblemReport { return versionURL; } + + @Override + public boolean equals( Object o ) + { + if ( this == o ) + { + return true; + } + if ( o == null || getClass() != o.getClass() ) + { + return false; + } + + RepositoryProblemReport that = (RepositoryProblemReport) o; + + if ( artifactURL != null ? !artifactURL.equals( that.artifactURL ) : that.artifactURL != null ) + { + return false; + } + if ( groupURL != null ? !groupURL.equals( that.groupURL ) : that.groupURL != null ) + { + return false; + } + if ( versionURL != null ? !versionURL.equals( that.versionURL ) : that.versionURL != null ) + { + return false; + } + + return true; + } + + @Override + public int hashCode() + { + int result = groupURL != null ? groupURL.hashCode() : 0; + result = 31 * result + ( artifactURL != null ? artifactURL.hashCode() : 0 ); + result = 31 * result + ( versionURL != null ? versionURL.hashCode() : 0 ); + return result; + } + + @Override + public String toString() + { + return "RepositoryProblemReport{" + "groupURL='" + groupURL + '\'' + ", artifactURL='" + artifactURL + '\'' + + ", versionURL='" + versionURL + '\'' + '}'; + } } diff --git a/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java b/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java index 9202b7d87..d48183b3f 100644 --- a/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java +++ b/archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java @@ -19,13 +19,15 @@ package org.apache.maven.archiva.database.constraints; * under the License. */ +import java.util.ArrayList; import java.util.Arrays; +import java.util.List; import org.apache.maven.archiva.database.Constraint; import org.apache.maven.archiva.database.DeclarativeConstraint; /** - * AbstractDeclarativeConstraint + * AbstractDeclarativeConstraint * * @version $Id$ */ @@ -35,20 +37,20 @@ public abstract class AbstractDeclarativeConstraint protected String[] declImports; protected String[] declParams; - + protected String[] variables; protected Object[] params; protected int[] range; - + protected String sortDirection = Constraint.ASCENDING; public String getFilter() { return null; } - + public String getFetchLimits() { return null; @@ -73,7 +75,7 @@ public abstract class AbstractDeclarativeConstraint { return sortDirection; } - + public String[] getVariables() { return variables; @@ -81,7 +83,7 @@ public abstract class AbstractDeclarativeConstraint public int[] getRange() { - return range; + return range; } @Override @@ -138,4 +140,24 @@ public abstract class AbstractDeclarativeConstraint result = 31 * result + ( sortDirection != null ? sortDirection.hashCode() : 0 ); return result; } + + @Override + public String toString() + { + List<Integer> r = null; + if ( range != null ) + { + r = new ArrayList<Integer>(); + for ( int i : range ) + { + r.add( i ); + } + } + return "AbstractDeclarativeConstraint{" + "declImports=" + + ( declImports == null ? null : Arrays.asList( declImports ) ) + ", declParams=" + + ( declParams == null ? null : Arrays.asList( declParams ) ) + ", variables=" + + ( variables == null ? null : Arrays.asList( variables ) ) + ", params=" + + ( params == null ? null : Arrays.asList( params ) ) + ", range=" + r + ", sortDirection='" + sortDirection + + '\'' + '}'; + } } diff --git a/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/config/testng.xml b/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/config/testng.xml index 9eac33934..c107bda61 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/config/testng.xml +++ b/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/config/testng.xml @@ -41,6 +41,7 @@ under the License. <include name= "appearance" /> <include name= "findartifact" /> <include name= "legacysupport" /> + <include name= "database" /> </run> </groups> <packages> diff --git a/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/DatabaseTest.java b/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/DatabaseTest.java new file mode 100644 index 000000000..1734ad477 --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/DatabaseTest.java @@ -0,0 +1,95 @@ +package org.apache.archiva.web.test; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.archiva.web.test.parent.AbstractRepositoryTest; +import org.testng.annotations.Test; + +@Test( groups = { "database" }, dependsOnMethods = { "testWithCorrectUsernamePassword" }, sequential = true ) +public class DatabaseTest + extends AbstractRepositoryTest +{ + public void testUpdateCron_NullValue() + { + goToDatabasePage(); + setFieldValue( "database_cron" , ""); + clickButtonWithValue( "Update Cron" ); + assertTextPresent( "Invalid cron expression value(s)" ); + assertTextPresent( "You must enter a cron expression." ); + } + + @Test (dependsOnMethods = { "testUpdateCron_NullValue" } ) + public void testUpdateCron_InvalidValue() + { + setFieldValue( "database_cron" , "asdf" ); + clickButtonWithValue( "Update Cron" ); + assertTextPresent( "Invalid cron expression value(s)" ); + } + + @Test (dependsOnMethods = { "testUpdateCron_InvalidValue" } ) + public void testUpdateCron_ValidValue() + { + setFieldValue( "database_cron" , "0 0 * * * ?" ); + clickButtonWithValue( "Update Cron" ); + assertPage( "Apache Archiva \\ Administration - Database" ); + } + + @Test (dependsOnMethods = { "testUpdateCron_ValidValue" } ) + public void testUpdateConsumersUnprocessedArtifactsScanning_UnsetAll() + { + getSelenium().uncheck( "enabledUnprocessedConsumers" ); + clickSubmitWithLocator( "//input[@id='database_0' and @value='Update Consumers']" ); + + assertPage( "Apache Archiva \\ Administration - Database" ); + } + + @Test (dependsOnMethods = { "testUpdateConsumersUnprocessedArtifactsScanning_UnsetAll" } ) + public void testUpdateConsumersUnprocessedArtifactsScanning() + { + checkField( "enabledUnprocessedConsumers" ); + clickSubmitWithLocator( "//input[@id='database_0' and @value='Update Consumers']" ); + assertPage( "Apache Archiva \\ Administration - Database" ); + } + + @Test (dependsOnMethods = { "testUpdateConsumersUnprocessedArtifactsScanning" } ) + public void testUpdateConsumersArtifactCleanupScanning_UnsetAll() + { + getSelenium().uncheck( "enabledCleanupConsumers" ); + getSelenium().uncheck( "//input[@name='enabledCleanupConsumers' and @value='not-present-remove-db-project']" ); + getSelenium().uncheck( "//input[@name='enabledCleanupConsumers' and @value='not-present-remove-indexed']" ); + clickSubmitWithLocator( "//form[@id='database']/table/tbody/tr[5]/td/input" ); + assertPage( "Apache Archiva \\ Administration - Database" ); + } + + @Test (dependsOnMethods = { "testUpdateConsumersArtifactCleanupScanning_UnsetAll" } ) + public void testUpdateConsumersArtifactCleanupScanning() + { + checkField( "enabledCleanupConsumers" ); + clickSubmitWithLocator( "//form[@id='database']/table/tbody/tr[5]/td/input" ); + assertPage( "Apache Archiva \\ Administration - Database" ); + } + + @Test (dependsOnMethods = { "testUpdateConsumersArtifactCleanupScanning" } ) + public void testUpdateDatabaseNow() + { + clickButtonWithValue( "Update Database Now" ); + assertPage( "Apache Archiva \\ Administration - Database" ); + } +} diff --git a/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/RepositoryTest.java b/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/RepositoryTest.java index a6d2fd122..e23e6bf93 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/RepositoryTest.java +++ b/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/RepositoryTest.java @@ -39,7 +39,8 @@ public class RepositoryTest @Test(dependsOnMethods = { "testAddManagedRepoValidValues" } ) public void testAddManagedRepoInvalidValues() - { + { + goToRepositoriesPage(); assertRepositoriesPage(); clickLinkWithLocator( "//div[@id='contentArea']/div/div/a[@href='/archiva/admin/addRepository.action']" ); addManagedRepository( "", "" , "" , "", "Maven 2.x Repository", "", "", "" ); diff --git a/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/VirtualRepositoryTest.java b/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/VirtualRepositoryTest.java index 7fc155b8a..081320fb8 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/VirtualRepositoryTest.java +++ b/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/VirtualRepositoryTest.java @@ -52,6 +52,7 @@ public class VirtualRepositoryTest @Test(dependsOnMethods = { "testAddRepositoryToRepositoryGroup" } ) public void testDeleteRepositoryOfRepositoryGroup() { + goToRepositoryGroupsPage(); deleteRepositoryInRepositoryGroups(); assertTextPresent( "Repository Groups" ); assertTextNotPresent( "No Repository Groups Defined." ); diff --git a/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/parent/AbstractRepositoryTest.java b/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/parent/AbstractRepositoryTest.java index cd651e967..b6237b8ef 100644 --- a/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/parent/AbstractRepositoryTest.java +++ b/archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/parent/AbstractRepositoryTest.java @@ -340,7 +340,7 @@ public abstract class AbstractRepositoryTest assertTextPresent( "Administration - Database" ); assertTextPresent( "Database - Unprocessed Artifacts Scanning" ); assertTextPresent( "Cron:" ); - assertElementPresent( "cron" ); + assertElementPresent( "database_cron" ); assertButtonWithValuePresent( "Update Cron" ); assertButtonWithValuePresent( "Update Database Now" ); assertTextPresent( "Database - Unprocessed Artifacts Scanning" ); diff --git a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java index a0484fe28..49724c86d 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java @@ -191,7 +191,7 @@ public class GenerateReportAction return ERROR; } - if ( startDateInDF.after( endDateInDF ) ) + if ( startDateInDF != null && endDateInDF != null && startDateInDF.after( endDateInDF ) ) { addFieldError( "startDate", "Start Date must be earlier than the End Date" ); return INPUT; @@ -220,7 +220,7 @@ public class GenerateReportAction startDateInDF = getStartDateInDateFormat(); endDateInDF = getEndDateInDateFormat(); - if ( startDateInDF.after( endDateInDF ) ) + if ( startDateInDF != null && endDateInDF != null && startDateInDF.after( endDateInDF ) ) { addFieldError( "startDate", "Start Date must be earlier than the End Date" ); return INPUT; @@ -310,12 +310,16 @@ public class GenerateReportAction return ERROR; } - if ( startDateInDF.after( endDateInDF ) ) + if ( startDateInDF != null && endDateInDF != null && startDateInDF.after( endDateInDF ) ) { addFieldError( "startDate", "Start Date must be earlier than the End Date" ); return INPUT; } + input = new StringBuffer( + "Repository,Total File Count,Total Size,Artifact Count,Group Count,Project Count," + + "Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" ); + // multiple repos for ( String repo : selectedRepositories ) { @@ -332,16 +336,12 @@ public class GenerateReportAction RepositoryStatistics repositoryStats = stats.get( 0 ); repositoryStatistics.add( repositoryStats ); - input = new StringBuffer( - "Repository,Total File Count,Total Size,Artifact Count,Group Count,Project Count," + - "Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" ); - input.append( repo ).append( "," ); input.append( repositoryStats.getTotalFileCount() ).append( "," ); input.append( repositoryStats.getTotalArtifactFileSize() ).append( "," ); input.append( repositoryStats.getTotalArtifactCount() ).append( "," ); input.append( repositoryStats.getTotalGroupCount() ).append( "," ); - input.append( repositoryStats.getTotalProjectCount() ).append( "," ); + input.append( repositoryStats.getTotalProjectCount() );//.append( "," ); // TODO // input.append( repositoryStats.getPluginCount() ).append( "," ); // input.append( repositoryStats.getArchetypeCount() ).append( "," ); @@ -360,7 +360,7 @@ public class GenerateReportAction startDateInDF = getStartDateInDateFormat(); endDateInDF = getEndDateInDateFormat(); - if ( startDateInDF.after( endDateInDF ) ) + if ( startDateInDF != null && endDateInDF != null && startDateInDF.after( endDateInDF ) ) { addFieldError( "startDate", "Start Date must be earlier than the End Date" ); return INPUT; @@ -385,7 +385,7 @@ public class GenerateReportAction input.append( repositoryStats.getTotalArtifactFileSize() ).append( "," ); input.append( repositoryStats.getTotalArtifactCount() ).append( "," ); input.append( repositoryStats.getTotalGroupCount() ).append( "," ); - input.append( repositoryStats.getTotalProjectCount() ).append( "," ); + input.append( repositoryStats.getTotalProjectCount() );//.append( "," ); // TODO // input.append( repositoryStats.getPluginCount() ).append( "," ); // input.append( repositoryStats.getArchetypeCount() ).append( "," ); @@ -460,7 +460,7 @@ public class GenerateReportAction Date startDateInDF; if ( startDate == null || "".equals( startDate ) ) { - startDateInDF = getDefaultStartDate(); + startDateInDF = null; } else { @@ -475,7 +475,7 @@ public class GenerateReportAction Date endDateInDF; if ( endDate == null || "".equals( endDate ) ) { - endDateInDF = getDefaultEndDate(); + endDateInDF = null; } else { @@ -491,20 +491,6 @@ public class GenerateReportAction return endDateInDF; } - private Date getDefaultStartDate() - { - Calendar cal = Calendar.getInstance(); - cal.clear(); - cal.set( 1900, 1, 1, 0, 0, 0 ); - - return cal.getTime(); - } - - private Date getDefaultEndDate() - { - return Calendar.getInstance().getTime(); - } - public String execute() throws Exception { @@ -604,23 +590,6 @@ public class GenerateReportAction return bundle; } - private void addToList( RepositoryProblemReport repoProblemReport ) - { - List<RepositoryProblemReport> problemsList = null; - - if ( repositoriesMap.containsKey( repoProblemReport.getRepositoryId() ) ) - { - problemsList = (List<RepositoryProblemReport>) repositoriesMap.get( repoProblemReport.getRepositoryId() ); - } - else - { - problemsList = new ArrayList<RepositoryProblemReport>(); - repositoriesMap.put( repoProblemReport.getRepositoryId(), problemsList ); - } - - problemsList.add( repoProblemReport ); - } - public Collection<String> getRepositoryIds() { return repositoryIds; @@ -750,4 +719,9 @@ public class GenerateReportAction { return numPages; } + + public void setRepositoryStatisticsManager( RepositoryStatisticsManager repositoryStatisticsManager ) + { + this.repositoryStatisticsManager = repositoryStatisticsManager; + } } diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/ArchivaDAOStub.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/ArchivaDAOStub.java index 3466be16d..973da10bb 100644 --- a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/ArchivaDAOStub.java +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/ArchivaDAOStub.java @@ -1,17 +1,5 @@ package org.apache.maven.archiva.web.action.admin.repositories; -import java.io.Serializable; -import java.util.List; - -import org.apache.maven.archiva.configuration.ArchivaConfiguration; -import org.apache.maven.archiva.database.ArchivaDAO; -import org.apache.maven.archiva.database.ArtifactDAO; -import org.apache.maven.archiva.database.RepositoryProblemDAO; -import org.apache.maven.archiva.database.SimpleConstraint; -import org.apache.maven.archiva.database.constraints.UniqueArtifactIdConstraint; -import org.apache.maven.archiva.database.constraints.UniqueGroupIdConstraint; -import org.apache.maven.archiva.database.constraints.UniqueVersionConstraint; - /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file @@ -31,6 +19,19 @@ import org.apache.maven.archiva.database.constraints.UniqueVersionConstraint; * under the License. */ +import java.io.Serializable; +import java.util.List; + +import org.apache.maven.archiva.configuration.ArchivaConfiguration; +import org.apache.maven.archiva.database.ArchivaDAO; +import org.apache.maven.archiva.database.ArtifactDAO; +import org.apache.maven.archiva.database.RepositoryProblemDAO; +import org.apache.maven.archiva.database.SimpleConstraint; +import org.apache.maven.archiva.database.constraints.UniqueArtifactIdConstraint; +import org.apache.maven.archiva.database.constraints.UniqueFieldConstraint; +import org.apache.maven.archiva.database.constraints.UniqueGroupIdConstraint; +import org.apache.maven.archiva.database.constraints.UniqueVersionConstraint; + /** * Stub class for Archiva DAO to avoid having to set up a database for tests. * @@ -49,6 +50,10 @@ public class ArchivaDAOStub private List<String> artifacts; + private List<String> repositoryIds; + + private RepositoryProblemDAO repositoryProblemDAO; + public List<?> query( SimpleConstraint constraint ) { if ( constraint instanceof UniqueVersionConstraint ) @@ -63,6 +68,10 @@ public class ArchivaDAOStub { return artifacts; } + else if ( constraint instanceof UniqueFieldConstraint ) + { + return repositoryIds; + } throw new UnsupportedOperationException(); } @@ -78,7 +87,7 @@ public class ArchivaDAOStub public RepositoryProblemDAO getRepositoryProblemDAO() { - throw new UnsupportedOperationException( "method not implemented for stub" ); + return repositoryProblemDAO; } public void setArtifactDao( ArtifactDAO artifactDao ) @@ -100,4 +109,14 @@ public class ArchivaDAOStub { this.artifacts = artifacts; } + + public void setRepositoryIds( List<String> repositoryIds ) + { + this.repositoryIds = repositoryIds; + } + + public void setRepositoryProblemDAO( RepositoryProblemDAO repositoryProblemDAO ) + { + this.repositoryProblemDAO = repositoryProblemDAO; + } } diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/reports/GenerateReportActionTest.java b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/reports/GenerateReportActionTest.java new file mode 100644 index 000000000..46c258f2f --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/reports/GenerateReportActionTest.java @@ -0,0 +1,643 @@ +package org.apache.maven.archiva.web.action.reports; + +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.Date; +import java.util.List; + +import com.meterware.servletunit.ServletRunner; +import com.meterware.servletunit.ServletUnitClient; +import com.opensymphony.xwork2.Action; +import org.apache.archiva.metadata.repository.stats.RepositoryStatistics; +import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager; +import org.apache.commons.io.IOUtils; +import org.apache.maven.archiva.database.ArchivaDAO; +import org.apache.maven.archiva.database.ArchivaDatabaseException; +import org.apache.maven.archiva.database.RepositoryProblemDAO; +import org.apache.maven.archiva.database.constraints.RangeConstraint; +import org.apache.maven.archiva.database.constraints.RepositoryProblemByGroupIdConstraint; +import org.apache.maven.archiva.database.constraints.RepositoryProblemByRepositoryIdConstraint; +import org.apache.maven.archiva.database.constraints.RepositoryProblemConstraint; +import org.apache.maven.archiva.model.RepositoryProblem; +import org.apache.maven.archiva.model.RepositoryProblemReport; +import org.apache.maven.archiva.web.action.admin.repositories.ArchivaDAOStub; +import org.codehaus.plexus.spring.PlexusInSpringTestCase; +import org.easymock.MockControl; + +/** + * Test the GenerationReportAction. Note that we are testing for <i>current</i> behaviour, however there are several + * instances below where other behaviour may actually be more appropriate (eg the error handling, download stats should + * never forward to HTML page, etc). This is also missing tests for various combinations of paging at this point. + */ +public class GenerateReportActionTest + extends PlexusInSpringTestCase +{ + private GenerateReportAction action; + + private static final String SNAPSHOTS = "snapshots"; + + private static final String INTERNAL = "internal"; + + private RepositoryProblemDAO repositoryProblemDAO; + + private MockControl repositoryProblemDAOControl; + + private static final String GROUP_ID = "groupId"; + + private static final String URL = "http://localhost/reports/generateReport.action"; + + private RepositoryStatisticsManager repositoryStatisticsManager; + + private MockControl repositoryStatisticsManagerControl; + + @Override + protected void setUp() + throws Exception + { + super.setUp(); + + ArchivaDAOStub archivaDAOStub = (ArchivaDAOStub) lookup( ArchivaDAO.class, "jdo" ); + archivaDAOStub.setRepositoryIds( Arrays.asList( "repo1", "repo2" ) ); + + repositoryProblemDAOControl = MockControl.createControl( RepositoryProblemDAO.class ); + repositoryProblemDAO = (RepositoryProblemDAO) repositoryProblemDAOControl.getMock(); + archivaDAOStub.setRepositoryProblemDAO( repositoryProblemDAO ); + + action = (GenerateReportAction) lookup( Action.class, "generateReport" ); + + repositoryStatisticsManagerControl = MockControl.createControl( RepositoryStatisticsManager.class ); + repositoryStatisticsManager = (RepositoryStatisticsManager) repositoryStatisticsManagerControl.getMock(); + action.setRepositoryStatisticsManager( repositoryStatisticsManager ); + } + + private void prepareAction( List<String> selectedRepositories, List<String> availableRepositories ) + { + action.setSelectedRepositories( selectedRepositories ); + action.prepare(); + + assertEquals( Arrays.asList( GenerateReportAction.ALL_REPOSITORIES, "repo1", "repo2" ), + action.getRepositoryIds() ); + assertEquals( availableRepositories, action.getAvailableRepositories() ); + } + + public void testGenerateStatisticsInvalidRowCount() + { + repositoryStatisticsManagerControl.replay(); + prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) ); + + action.setRowCount( 0 ); + String result = action.generateStatistics(); + assertEquals( Action.INPUT, result ); + assertTrue( action.hasFieldErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testGenerateStatisticsInvalidEndDate() + { + repositoryStatisticsManagerControl.replay(); + prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) ); + + action.setStartDate( "2009/12/12" ); + action.setEndDate( "2008/11/11" ); + String result = action.generateStatistics(); + assertEquals( Action.INPUT, result ); + assertTrue( action.hasFieldErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testGenerateStatisticsMalformedEndDate() + { + repositoryStatisticsManagerControl.replay(); + prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) ); + + action.setEndDate( "This is not a date" ); + String result = action.generateStatistics(); + + // TODO: should be an input error + assertEquals( Action.ERROR, result ); + assertTrue( action.hasActionErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testGenerateStatisticsInvalidEndDateMultiRepo() + { + repositoryStatisticsManagerControl.replay(); + prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() ); + + action.setStartDate( "2009/12/12" ); + action.setEndDate( "2008/11/11" ); + String result = action.generateStatistics(); + assertEquals( Action.INPUT, result ); + assertTrue( action.hasFieldErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testGenerateStatisticsMalformedEndDateMultiRepo() + { + repositoryStatisticsManagerControl.replay(); + prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() ); + + action.setEndDate( "This is not a date" ); + String result = action.generateStatistics(); + + // TODO: should be an input error + assertEquals( Action.ERROR, result ); + assertTrue( action.hasActionErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testGenerateStatisticsNoRepos() + { + repositoryStatisticsManagerControl.replay(); + prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) ); + + String result = action.generateStatistics(); + assertEquals( Action.INPUT, result ); + assertTrue( action.hasFieldErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testGenerateStatisticsSingleRepo() + { + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( INTERNAL, null, null ), + Collections.singletonList( createDefaultStats() ) ); + + repositoryStatisticsManagerControl.replay(); + prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) ); + + String result = action.generateStatistics(); + assertSuccessResult( result ); + repositoryStatisticsManagerControl.verify(); + } + + public void testGenerateStatisticsSingleRepoNoStats() + { + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( INTERNAL, null, null ), Collections.<Object>emptyList() ); + repositoryStatisticsManagerControl.replay(); + prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) ); + + String result = action.generateStatistics(); + assertEquals( Action.ERROR, result ); + assertTrue( action.hasActionErrors() ); + + repositoryStatisticsManagerControl.verify(); + } + + public void testGenerateStatisticsOvershotPages() + { + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( INTERNAL, null, null ), + Collections.singletonList( createDefaultStats() ) ); + repositoryStatisticsManagerControl.replay(); + action.setPage( 2 ); + prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) ); + + String result = action.generateStatistics(); + assertEquals( Action.ERROR, result ); + assertTrue( action.hasActionErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testGenerateStatisticsMultipleRepoNoResults() + { + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( SNAPSHOTS, null, null ), + Collections.<Object>emptyList() ); + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( INTERNAL, null, null ), Collections.<Object>emptyList() ); + repositoryStatisticsManagerControl.replay(); + prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() ); + + String result = action.generateStatistics(); + assertEquals( GenerateReportAction.BLANK, result ); + assertFalse( action.hasActionErrors() ); + assertFalse( action.hasActionMessages() ); + assertFalse( action.hasFieldErrors() ); + + repositoryStatisticsManagerControl.verify(); + } + + public void testGenerateStatisticsMultipleRepo() + { + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( SNAPSHOTS, null, null ), + Collections.singletonList( createDefaultStats() ) ); + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( INTERNAL, null, null ), + Collections.singletonList( createDefaultStats() ) ); + + repositoryStatisticsManagerControl.replay(); + prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() ); + + String result = action.generateStatistics(); + assertSuccessResult( result ); + repositoryStatisticsManagerControl.verify(); + } + + public void testDownloadStatisticsSingleRepo() + throws IOException, ArchivaDatabaseException + { + Date date = new Date(); + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( SNAPSHOTS, null, null ), + Collections.singletonList( createStats( date ) ) ); + repositoryStatisticsManagerControl.replay(); + + prepareAction( Arrays.asList( SNAPSHOTS ), Arrays.asList( INTERNAL ) ); + + String result = action.downloadStatisticsReport(); + assertEquals( GenerateReportAction.SEND_FILE, result ); + assertFalse( action.hasActionErrors() ); + assertFalse( action.hasFieldErrors() ); + +// assertEquals( +// "Date of Scan,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" + +// date + ",0,0,0,0,0,1,0,1,1,0,0\n", IOUtils.toString( action.getInputStream() ) ); + assertEquals( + "Date of Scan,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" + + date + ",0,0,0,0,0\n", IOUtils.toString( action.getInputStream() ) ); + repositoryStatisticsManagerControl.verify(); + } + + public void testDownloadStatisticsMultipleRepos() + throws IOException, ArchivaDatabaseException + { + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( SNAPSHOTS, null, null ), + Collections.singletonList( createDefaultStats() ) ); + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( INTERNAL, null, null ), + Collections.singletonList( createDefaultStats() ) ); + repositoryStatisticsManagerControl.replay(); + prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() ); + + String result = action.downloadStatisticsReport(); + assertEquals( GenerateReportAction.SEND_FILE, result ); + assertFalse( action.hasActionErrors() ); + assertFalse( action.hasFieldErrors() ); + + assertMultiRepoCsvResult(); + repositoryStatisticsManagerControl.verify(); + } + + public void testDownloadStatisticsMalformedEndDateMultiRepo() + { + repositoryStatisticsManagerControl.replay(); + prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() ); + + action.setEndDate( "This is not a date" ); + String result = action.downloadStatisticsReport(); + + // TODO: should be an input error + assertEquals( Action.ERROR, result ); + assertTrue( action.hasActionErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testDownloadStatisticsMalformedEndDateSingleRepo() + { + repositoryStatisticsManagerControl.replay(); + prepareAction( Arrays.asList( SNAPSHOTS ), Arrays.asList( INTERNAL ) ); + + action.setEndDate( "This is not a date" ); + String result = action.downloadStatisticsReport(); + + // TODO: should be an input error + assertEquals( Action.ERROR, result ); + assertTrue( action.hasActionErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testDownloadStatisticsInvalidEndDateMultiRepo() + { + repositoryStatisticsManagerControl.replay(); + prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() ); + + action.setStartDate( "2009/12/12" ); + action.setEndDate( "2008/11/11" ); + String result = action.downloadStatisticsReport(); + assertEquals( Action.INPUT, result ); + assertTrue( action.hasFieldErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testDownloadStatisticsInvalidEndDateSingleRepo() + { + repositoryStatisticsManagerControl.replay(); + prepareAction( Arrays.asList( SNAPSHOTS ), Arrays.asList( INTERNAL ) ); + + action.setStartDate( "2009/12/12" ); + action.setEndDate( "2008/11/11" ); + String result = action.downloadStatisticsReport(); + assertEquals( Action.INPUT, result ); + assertTrue( action.hasFieldErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testDownloadStatisticsSingleRepoNoStats() + { + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( INTERNAL, null, null ), Collections.<Object>emptyList() ); + repositoryStatisticsManagerControl.replay(); + prepareAction( Collections.singletonList( INTERNAL ), Collections.singletonList( SNAPSHOTS ) ); + + String result = action.downloadStatisticsReport(); + assertEquals( Action.ERROR, result ); + assertTrue( action.hasActionErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testDownloadStatisticsNoRepos() + { + repositoryStatisticsManagerControl.replay(); + prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) ); + + String result = action.downloadStatisticsReport(); + assertEquals( Action.INPUT, result ); + assertTrue( action.hasFieldErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testDownloadStatisticsMultipleRepoNoResults() + { + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( SNAPSHOTS, null, null ), + Collections.<Object>emptyList() ); + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( INTERNAL, null, null ), Collections.<Object>emptyList() ); + repositoryStatisticsManagerControl.replay(); + prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() ); + + String result = action.downloadStatisticsReport(); + assertEquals( GenerateReportAction.BLANK, result ); + assertFalse( action.hasActionErrors() ); + assertFalse( action.hasActionMessages() ); + assertFalse( action.hasFieldErrors() ); + repositoryStatisticsManagerControl.verify(); + } + + public void testDownloadStatisticsMultipleRepoInStrutsFormat() + throws IOException + { + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( SNAPSHOTS, null, null ), + Collections.singletonList( createDefaultStats() ) ); + repositoryStatisticsManagerControl.expectAndReturn( + repositoryStatisticsManager.getStatisticsInRange( INTERNAL, null, null ), + Collections.singletonList( createDefaultStats() ) ); + repositoryStatisticsManagerControl.replay(); + prepareAction( Arrays.asList( SNAPSHOTS, INTERNAL ), Collections.<String>emptyList() ); + + action.setSelectedRepositories( Collections.singletonList( "[" + SNAPSHOTS + "],[" + INTERNAL + "]" ) ); + String result = action.downloadStatisticsReport(); + assertEquals( GenerateReportAction.SEND_FILE, result ); + assertFalse( action.hasActionErrors() ); + assertFalse( action.hasFieldErrors() ); + + assertMultiRepoCsvResult(); + repositoryStatisticsManagerControl.verify(); + } + + public void testHealthReportSingleRepo() + throws Exception + { + RepositoryProblem problem1 = createProblem( GROUP_ID, "artifactId", INTERNAL ); + RepositoryProblem problem2 = createProblem( GROUP_ID, "artifactId-2", INTERNAL ); + repositoryProblemDAOControl.expectAndReturn( repositoryProblemDAO.queryRepositoryProblems( + new RepositoryProblemByRepositoryIdConstraint( new int[]{0, 101}, INTERNAL ) ), + Arrays.asList( problem1, problem2 ) ); + repositoryProblemDAOControl.replay(); + + action.setRepositoryId( INTERNAL ); + ServletRunner sr = new ServletRunner(); + ServletUnitClient sc = sr.newClient(); + + action.setServletRequest( sc.newInvocation( URL ).getRequest() ); + prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) ); + + String result = action.execute(); + assertSuccessResult( result ); + + RepositoryProblemReport problemReport1 = createProblemReport( problem1 ); + RepositoryProblemReport problemReport2 = createProblemReport( problem2 ); + assertEquals( Collections.singleton( INTERNAL ), action.getRepositoriesMap().keySet() ); + assertEquals( Arrays.asList( problemReport1, problemReport2 ), action.getRepositoriesMap().get( INTERNAL ) ); + + repositoryProblemDAOControl.verify(); + } + + public void testHealthReportInvalidRowCount() + throws Exception + { + repositoryProblemDAOControl.replay(); + + action.setRowCount( 0 ); + action.setRepositoryId( INTERNAL ); + ServletRunner sr = new ServletRunner(); + ServletUnitClient sc = sr.newClient(); + + action.setServletRequest( sc.newInvocation( URL ).getRequest() ); + prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) ); + + String result = action.execute(); + assertEquals( Action.INPUT, result ); + assertFalse( action.hasActionErrors() ); + assertTrue( action.hasFieldErrors() ); + + repositoryProblemDAOControl.verify(); + } + + public void testHealthReportAllRepos() + throws Exception + { + RepositoryProblem problem1 = createProblem( GROUP_ID, "artifactId", INTERNAL ); + RepositoryProblem problem2 = createProblem( GROUP_ID, "artifactId-2", SNAPSHOTS ); + repositoryProblemDAOControl.expectAndReturn( + repositoryProblemDAO.queryRepositoryProblems( new RangeConstraint( new int[]{0, 101} ) ), + Arrays.asList( problem1, problem2 ) ); + repositoryProblemDAOControl.replay(); + + action.setRepositoryId( GenerateReportAction.ALL_REPOSITORIES ); + ServletRunner sr = new ServletRunner(); + ServletUnitClient sc = sr.newClient(); + + action.setServletRequest( sc.newInvocation( URL ).getRequest() ); + prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) ); + + String result = action.execute(); + assertSuccessResult( result ); + + RepositoryProblemReport problemReport1 = createProblemReport( problem1 ); + RepositoryProblemReport problemReport2 = createProblemReport( problem2 ); + assertEquals( Arrays.asList( INTERNAL, SNAPSHOTS ), + new ArrayList<String>( action.getRepositoriesMap().keySet() ) ); + assertEquals( Arrays.asList( problemReport1 ), action.getRepositoriesMap().get( INTERNAL ) ); + assertEquals( Arrays.asList( problemReport2 ), action.getRepositoriesMap().get( SNAPSHOTS ) ); + + repositoryProblemDAOControl.verify(); + } + + public void testHealthReportSingleRepoByCorrectGroupId() + throws Exception + { + RepositoryProblem problem1 = createProblem( GROUP_ID, "artifactId", INTERNAL ); + RepositoryProblem problem2 = createProblem( GROUP_ID, "artifactId-2", INTERNAL ); + repositoryProblemDAOControl.expectAndReturn( repositoryProblemDAO.queryRepositoryProblems( + new RepositoryProblemConstraint( new int[]{0, 101}, GROUP_ID, INTERNAL ) ), + Arrays.asList( problem1, problem2 ) ); + repositoryProblemDAOControl.replay(); + + action.setGroupId( GROUP_ID ); + action.setRepositoryId( INTERNAL ); + ServletRunner sr = new ServletRunner(); + ServletUnitClient sc = sr.newClient(); + + action.setServletRequest( sc.newInvocation( URL ).getRequest() ); + prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) ); + + String result = action.execute(); + assertSuccessResult( result ); + + RepositoryProblemReport problemReport1 = createProblemReport( problem1 ); + RepositoryProblemReport problemReport2 = createProblemReport( problem2 ); + assertEquals( Collections.singleton( INTERNAL ), action.getRepositoriesMap().keySet() ); + assertEquals( Arrays.asList( problemReport1, problemReport2 ), action.getRepositoriesMap().get( INTERNAL ) ); + + repositoryProblemDAOControl.verify(); + } + + public void testHealthReportSingleRepoByCorrectGroupIdAllRepositories() + throws Exception + { + RepositoryProblem problem1 = createProblem( GROUP_ID, "artifactId", INTERNAL ); + RepositoryProblem problem2 = createProblem( GROUP_ID, "artifactId-2", SNAPSHOTS ); + repositoryProblemDAOControl.expectAndReturn( repositoryProblemDAO.queryRepositoryProblems( + new RepositoryProblemByGroupIdConstraint( new int[]{0, 101}, GROUP_ID ) ), + Arrays.asList( problem1, problem2 ) ); + repositoryProblemDAOControl.replay(); + + action.setGroupId( GROUP_ID ); + action.setRepositoryId( GenerateReportAction.ALL_REPOSITORIES ); + ServletRunner sr = new ServletRunner(); + ServletUnitClient sc = sr.newClient(); + + action.setServletRequest( sc.newInvocation( URL ).getRequest() ); + prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) ); + + String result = action.execute(); + assertSuccessResult( result ); + + RepositoryProblemReport problemReport1 = createProblemReport( problem1 ); + RepositoryProblemReport problemReport2 = createProblemReport( problem2 ); + assertEquals( Arrays.asList( INTERNAL, SNAPSHOTS ), + new ArrayList<String>( action.getRepositoriesMap().keySet() ) ); + assertEquals( Arrays.asList( problemReport1 ), action.getRepositoriesMap().get( INTERNAL ) ); + assertEquals( Arrays.asList( problemReport2 ), action.getRepositoriesMap().get( SNAPSHOTS ) ); + + repositoryProblemDAOControl.verify(); + } + + public void testHealthReportSingleRepoByIncorrectGroupId() + throws Exception + { + repositoryProblemDAOControl.expectAndReturn( repositoryProblemDAO.queryRepositoryProblems( + new RepositoryProblemConstraint( new int[]{0, 101}, "not.it", INTERNAL ) ), + Collections.<Object>emptyList() ); + repositoryProblemDAOControl.replay(); + + action.setGroupId( "not.it" ); + action.setRepositoryId( INTERNAL ); + ServletRunner sr = new ServletRunner(); + ServletUnitClient sc = sr.newClient(); + + action.setServletRequest( sc.newInvocation( URL ).getRequest() ); + prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) ); + + String result = action.execute(); + assertEquals( GenerateReportAction.BLANK, result ); + assertFalse( action.hasActionErrors() ); + assertFalse( action.hasFieldErrors() ); + + repositoryProblemDAOControl.verify(); + } + + private void assertMultiRepoCsvResult() + throws IOException + { +// assertEquals( +// "Repository,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" + +// "snapshots,0,0,0,0,0,1,0,1,1,0,0\n" + "internal,0,0,0,0,0,1,0,1,1,0,0\n", + assertEquals( + "Repository,Total File Count,Total Size,Artifact Count,Group Count,Project Count,Plugins,Archetypes,Jars,Wars,Deployments,Downloads\n" + + "snapshots,0,0,0,0,0\n" + "internal,0,0,0,0,0\n", IOUtils.toString( action.getInputStream() ) ); + } + + private RepositoryProblemReport createProblemReport( RepositoryProblem problem ) + { + RepositoryProblemReport problemReport = new RepositoryProblemReport( problem ); + problemReport.setGroupURL( "http://localhost/browse/" + problem.getGroupId() ); + problemReport.setArtifactURL( problemReport.getGroupURL() + "/" + problem.getArtifactId() ); + return problemReport; + } + + private RepositoryProblem createProblem( String groupId, String artifactId, String repoId ) + { + RepositoryProblem problem = new RepositoryProblem(); + problem.setRepositoryId( repoId ); + problem.setGroupId( groupId ); + problem.setArtifactId( artifactId ); + return problem; + } + + public void testHealthReportNoRepositoryId() + throws Exception + { + prepareAction( Collections.<String>emptyList(), Arrays.asList( SNAPSHOTS, INTERNAL ) ); + + String result = action.execute(); + assertEquals( Action.INPUT, result ); + assertTrue( action.hasFieldErrors() ); + } + + private void assertSuccessResult( String result ) + { + assertEquals( Action.SUCCESS, result ); + assertFalse( action.hasActionErrors() ); + assertFalse( action.hasFieldErrors() ); + } + + private RepositoryStatistics createDefaultStats() + { + return createStats( new Date() ); + } + + private RepositoryStatistics createStats( Date date ) + { + RepositoryStatistics stats = new RepositoryStatistics(); + stats.setScanStartTime( date ); + return stats; + } +} diff --git a/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/reports/GenerateReportActionTest.xml b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/reports/GenerateReportActionTest.xml new file mode 100644 index 000000000..44882614c --- /dev/null +++ b/archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/reports/GenerateReportActionTest.xml @@ -0,0 +1,39 @@ +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one + ~ or more contributor license agreements. See the NOTICE file + ~ distributed with this work for additional information + ~ regarding copyright ownership. The ASF licenses this file + ~ to you under the Apache License, Version 2.0 (the + ~ "License"); you may not use this file except in compliance + ~ with the License. You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, + ~ software distributed under the License is distributed on an + ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ~ KIND, either express or implied. See the License for the + ~ specific language governing permissions and limitations + ~ under the License. + --> + +<component-set> + <components> + <component> + <role>org.apache.maven.archiva.database.ArchivaDAO</role> + <role-hint>jdo</role-hint> + <implementation>org.apache.maven.archiva.web.action.admin.repositories.ArchivaDAOStub</implementation> + <requirements> + <requirement> + <role>org.apache.maven.archiva.database.ArtifactDAO</role> + <role-hint>jdo</role-hint> + </requirement> + </requirements> + </component> + <component> + <role>org.apache.maven.archiva.database.ArtifactDAO</role> + <role-hint>jdo</role-hint> + <implementation>org.apache.maven.archiva.web.action.admin.repositories.ArtifactDAOStub</implementation> + </component> + </components> +</component-set>
\ No newline at end of file diff --git a/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java b/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java index 9fc14104f..b47e1166f 100644 --- a/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java +++ b/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java @@ -101,7 +101,8 @@ public class DefaultRepositoryStatisticsManager try { Date date = SCAN_TIMESTAMP.parse( name ); - if ( !date.before( startTime ) && !date.after( endTime ) ) + if ( ( startTime == null || !date.before( startTime ) ) && + ( endTime == null || !date.after( endTime ) ) ) { RepositoryStatistics stats = (RepositoryStatistics) metadataRepository.getMetadataFacet( repositoryId, |