package de.zib.gndms.gndmc.dspace.Test;
/*
* Copyright 2008-2011 Zuse Institute Berlin (ZIB)
*
* Licensed 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 de.zib.gndms.common.model.gorfx.types.TaskStatus;
import de.zib.gndms.common.rest.Facets;
import de.zib.gndms.common.rest.Specifier;
import de.zib.gndms.common.rest.UriFactory;
import de.zib.gndms.gndmc.dspace.SubspaceClient;
import de.zib.gndms.gndmc.gorfx.AbstractTaskFlowExecClient;
import de.zib.gndms.gndmc.gorfx.TaskClient;
import org.springframework.beans.factory.config.AutowireCapableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.RestTemplate;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import java.util.List;
/**
* Tests the SubspaceClient
*
* @author bachmann@zib.de
*/
public class SubspaceClientTest {
final ApplicationContext context;
private SubspaceClient subspaceClient;
final private String serviceUrl;
private RestTemplate restTemplate;
final static String subspaceConfig = "size: 6000; path: /tmp/gndms/sub; gsiFtpPath: undefined";
final static String subspaceId = "testsub";
final static String sliceKindId = "testsk";
final static String sliceKindConfig = "sliceKindMode:700; uniqueDirName:kind";
final static String sliceConfig = "terminationTime:2011-12-16; sliceSize:1024";
final private String admindn;
@Parameters( { "serviceUrl", "admindn" } )
public SubspaceClientTest( final String serviceUrl, @Optional("root") final String admindn ) {
this.serviceUrl = serviceUrl;
this.admindn = admindn;
this.context = new ClassPathXmlApplicationContext( "classpath:META-INF/client-context.xml" );
}
@BeforeClass( groups = { "subspaceServiceTest" } )
public void init() {
subspaceClient = ( SubspaceClient )context.getAutowireCapableBeanFactory().createBean(
SubspaceClient.class,
AutowireCapableBeanFactory.AUTOWIRE_BY_NAME, true );
subspaceClient.setServiceURL( serviceUrl );
restTemplate = ( RestTemplate )context.getAutowireCapableBeanFactory().getBean( "restTemplate" );
}
@Test( groups = { "subspaceServiceTest" } )
public void testCreateSubspace() {
final String mode = "CREATE";
ResponseEntity< Facets > subspace = null;
try {
subspace = subspaceClient.createSubspace( subspaceId, subspaceConfig, admindn );
Assert.assertNotNull( subspace );
Assert.assertEquals( subspace.getStatusCode(), HttpStatus.CREATED );
}
catch( HttpClientErrorException e ) {
if( ! e.getStatusCode().equals( HttpStatus.UNAUTHORIZED ) )
throw e;
}
final ResponseEntity< Facets > res = subspaceClient.listAvailableFacets( subspaceId, admindn );
Assert.assertNotNull( res );
Assert.assertEquals( res.getStatusCode(), HttpStatus.OK );
}
@Test(
groups = { "subspaceServiceTest" },
dependsOnMethods = { "testCreateSubspace" }
)
public void testCreateSliceKind() {
final ResponseEntity< Specifier< Void > > sliceKind =
subspaceClient.createSliceKind( subspaceId, sliceKindId, sliceKindConfig, admindn );
Assert.assertNotNull( sliceKind );
Assert.assertEquals( sliceKind.getStatusCode(), HttpStatus.CREATED );
final ResponseEntity< List< Specifier< Void > > > listResponseEntity
= subspaceClient.listSliceKinds( subspaceId, admindn );
final List< Specifier< Void > > specifierList = listResponseEntity.getBody();
for( Specifier< Void > s: specifierList ) {
if( ! s.getUriMap().containsKey( UriFactory.SLICE_KIND ) )
continue;
if( s.getUriMap().get( UriFactory.SLICE_KIND ).equals( sliceKindId ) )
return;
}
throw new IllegalStateException( "The created SliceKind " + sliceKindId
+ " could not be found in SliceKindListing" );
}
@Test(
groups = { "subspaceServiceTest" },
dependsOnMethods = { "testCreateSliceKind" }
)
public void testDeleteSubspace() {
final ResponseEntity< Specifier< Facets > > responseEntity = subspaceClient.deleteSubspace( subspaceId, admindn );
Assert.assertNotNull( responseEntity );
Assert.assertEquals( responseEntity.getStatusCode(), HttpStatus.OK );
final TaskClient client = new TaskClient( serviceUrl );
client.setRestTemplate( restTemplate );
// wait for task to finish
TaskStatus taskStatus = AbstractTaskFlowExecClient.waitForFinishOrFail(
responseEntity.getBody(),
client,
100,
admindn,
"DELETESUBSPACEWID");
Assert.assertNotNull( taskStatus );
Assert.assertEquals( taskStatus.getStatus(), TaskStatus.Status.FINISHED );
Assert.assertEquals( taskStatus.getMaxProgress(), taskStatus.getProgress() );
Assert.assertEquals( taskStatus.getStatus(), TaskStatus.Status.FINISHED );
}
}