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 ); } }