de.zib.gndms.gndmc.dspace.Test.SubspaceClientTest.java Source code

Java tutorial

Introduction

Here is the source code for de.zib.gndms.gndmc.dspace.Test.SubspaceClientTest.java

Source

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