start fixing unit test on webdav module: ensure correctly closing lucene index on shutdown

git-svn-id: https://svn.apache.org/repos/asf/archiva/trunk@1197361 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Olivier Lamy 2011-11-03 23:47:50 +00:00
parent 9cc35c2f0e
commit e11c4ccf18
7 changed files with 140 additions and 10 deletions

View File

@ -180,6 +180,11 @@
<artifactId>archiva-repository-admin-default</artifactId> <artifactId>archiva-repository-admin-default</artifactId>
<scope>test</scope> <scope>test</scope>
</dependency> </dependency>
<dependency>
<groupId>org.codehaus.redback</groupId>
<artifactId>redback-common-test-resources</artifactId>
<scope>test</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>
<plugins> <plugins>

View File

@ -100,6 +100,16 @@ public abstract class AbstractRepositoryServletProxiedTestCase
super.setUp(); super.setUp();
} }
@Override
@After
public void tearDown()
throws Exception
{
shutdownServer( remoteCentral );
shutdownServer( remoteSnapshots );
super.tearDown();
}
protected RemoteRepoInfo createServer( String id ) protected RemoteRepoInfo createServer( String id )
throws Exception throws Exception
{ {
@ -254,13 +264,5 @@ public abstract class AbstractRepositoryServletProxiedTestCase
setupCleanRepo( remoteSnapshots.root ); setupCleanRepo( remoteSnapshots.root );
} }
@Override
@After
public void tearDown()
throws Exception
{
shutdownServer( remoteCentral );
shutdownServer( remoteSnapshots );
super.tearDown();
}
} }

View File

@ -27,11 +27,14 @@ import junit.framework.Assert;
import junit.framework.TestCase; import junit.framework.TestCase;
import net.sf.ehcache.CacheManager; import net.sf.ehcache.CacheManager;
import org.apache.archiva.admin.model.beans.ManagedRepository; import org.apache.archiva.admin.model.beans.ManagedRepository;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
import org.apache.commons.io.FileUtils; import org.apache.commons.io.FileUtils;
import org.apache.archiva.configuration.ArchivaConfiguration; import org.apache.archiva.configuration.ArchivaConfiguration;
import org.apache.archiva.configuration.Configuration; import org.apache.archiva.configuration.Configuration;
import org.apache.archiva.configuration.ManagedRepositoryConfiguration; import org.apache.archiva.configuration.ManagedRepositoryConfiguration;
import org.apache.archiva.configuration.RemoteRepositoryConfiguration; import org.apache.archiva.configuration.RemoteRepositoryConfiguration;
import org.apache.maven.index.NexusIndexer;
import org.apache.maven.index.context.IndexingContext;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -136,6 +139,8 @@ public abstract class AbstractRepositoryServletTestCase
public void tearDown() public void tearDown()
throws Exception throws Exception
{ {
if ( sc != null ) if ( sc != null )
{ {
sc.clearContents(); sc.clearContents();

View File

@ -0,0 +1,109 @@
package org.apache.archiva.webdav.util;
/*
* 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 com.opensymphony.xwork2.inject.Inject;
import org.apache.archiva.common.plexusbridge.PlexusSisuBridge;
import org.apache.maven.index.NexusIndexer;
import org.apache.maven.index.context.IndexingContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* @author Olivier Lamy
*/
@Service
public class MavenIndexerCleaner
implements ServletContextListener
{
Logger log = LoggerFactory.getLogger( getClass() );
PlexusSisuBridge plexusSisuBridge;
public void contextInitialized( ServletContextEvent servletContextEvent )
{
try
{
WebApplicationContext wacu =
WebApplicationContextUtils.getRequiredWebApplicationContext( servletContextEvent.getServletContext() );
plexusSisuBridge = wacu.getBean( PlexusSisuBridge.class );
cleanupIndex( );
}
catch ( Exception e )
{
log.error( e.getMessage(), e );
throw new RuntimeException( e.getMessage(), e );
}
}
public void contextDestroyed( ServletContextEvent servletContextEvent )
{
try
{
cleanupIndex( );
}
catch ( Exception e )
{
log.error( e.getMessage(), e );
throw new RuntimeException( e.getMessage(), e );
}
}
public void cleanupIndex( )
throws Exception
{
log.info( "cleanup IndexingContext" );
NexusIndexer nexusIndexer = plexusSisuBridge.lookup( NexusIndexer.class );
for ( IndexingContext context : nexusIndexer.getIndexingContexts().values() )
{
nexusIndexer.removeIndexingContext( context, true );
}
}
@Inject
private ApplicationContext applicationContext;
@PostConstruct
public void startup() throws Exception
{
plexusSisuBridge = applicationContext.getBean( PlexusSisuBridge.class );
cleanupIndex( );
}
@PreDestroy
public void shutdown()
throws Exception
{
cleanupIndex( );
}
}

View File

@ -27,6 +27,9 @@
<listener> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> </listener>
<listener>
<listener-class>org.apache.archiva.webdav.util.MavenIndexerCleaner</listener-class>
</listener>
<context-param> <context-param>
<param-name>contextClass</param-name> <param-name>contextClass</param-name>
<param-value>org.codehaus.redback.components.springutils.CachingWebApplicationContext</param-value> <param-value>org.codehaus.redback.components.springutils.CachingWebApplicationContext</param-value>

View File

@ -27,6 +27,9 @@
<listener> <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> </listener>
<listener>
<listener-class>org.apache.archiva.webdav.util.MavenIndexerCleaner</listener-class>
</listener>
<context-param> <context-param>
<param-name>contextClass</param-name> <param-name>contextClass</param-name>
<param-value>org.codehaus.redback.components.springutils.CachingWebApplicationContext</param-value> <param-value>org.codehaus.redback.components.springutils.CachingWebApplicationContext</param-value>

View File

@ -25,7 +25,7 @@
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd" http://www.springframework.org/schema/context/spring-context-3.0.xsd"
default-lazy-init="true"> default-lazy-init="false">
<bean name="archivaConfiguration#default" class="org.apache.archiva.configuration.DefaultArchivaConfiguration"> <bean name="archivaConfiguration#default" class="org.apache.archiva.configuration.DefaultArchivaConfiguration">
<property name="registry" ref="registry#default"/> <property name="registry" ref="registry#default"/>
@ -52,4 +52,7 @@
<bean name="componentContainer" class="org.codehaus.redback.components.springutils.ComponentContainer"/> <bean name="componentContainer" class="org.codehaus.redback.components.springutils.ComponentContainer"/>
<context:annotation-config/>
<context:component-scan base-package="org.apache.archiva.webdav.util"/>
</beans> </beans>