aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBrett Porter <brett@apache.org>2009-12-08 15:09:13 +0000
committerBrett Porter <brett@apache.org>2009-12-08 15:09:13 +0000
commitebaee33d1ef27a2aefb989533fdbfb0ffd9f161b (patch)
treef53ba2d76fc545f309cfffa6666b3d0fe6b4b014
parentb0304e08c3e10f7ffd8efc2e07f57beb3f482f8d (diff)
parent1d01e87b74bccbb0e4e7940b5bfc65332f5441a4 (diff)
downloadarchiva-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
-rw-r--r--archiva-modules/archiva-base/archiva-model/src/main/java/org/apache/maven/archiva/model/RepositoryProblemReport.java46
-rw-r--r--archiva-modules/archiva-database/src/main/java/org/apache/maven/archiva/database/constraints/AbstractDeclarativeConstraint.java34
-rw-r--r--archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/config/testng.xml1
-rw-r--r--archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/DatabaseTest.java95
-rw-r--r--archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/RepositoryTest.java3
-rw-r--r--archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/VirtualRepositoryTest.java1
-rw-r--r--archiva-modules/archiva-web/archiva-webapp-test/src/test/testng/org/apache/archiva/web/test/parent/AbstractRepositoryTest.java2
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/reports/GenerateReportAction.java60
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/admin/repositories/ArchivaDAOStub.java45
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/test/java/org/apache/maven/archiva/web/action/reports/GenerateReportActionTest.java643
-rw-r--r--archiva-modules/archiva-web/archiva-webapp/src/test/resources/org/apache/maven/archiva/web/action/reports/GenerateReportActionTest.xml39
-rw-r--r--archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java3
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,