de.zib.gndms.dspace.service.test.DSpaceServiceTest.java Source code

Java tutorial

Introduction

Here is the source code for de.zib.gndms.dspace.service.test.DSpaceServiceTest.java

Source

/*
 * Copyright 2008-${YEAR} 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.
 */

package de.zib.gndms.dspace.service.test;

import de.zib.gndms.common.dspace.SubspaceConfiguration;
import de.zib.gndms.common.logic.config.SetupMode;
import de.zib.gndms.common.rest.Specifier;
import de.zib.gndms.common.rest.UriFactory;
import de.zib.gndms.dspace.service.SubspaceServiceImpl;
import de.zib.gndms.infra.system.GNDMSystem;
import de.zib.gndms.logic.model.DefaultBatchUpdateAction;
import de.zib.gndms.logic.model.NoWSDontNeedModelUpdateListener;
import de.zib.gndms.logic.model.dspace.*;
import de.zib.gndms.model.common.GridResource;
import de.zib.gndms.model.dspace.Slice;
import de.zib.gndms.model.dspace.SliceKind;
import de.zib.gndms.model.dspace.Subspace;
import de.zib.gndms.model.gorfx.types.TaskState;
import de.zib.gndms.model.test.ModelEntityTestBase;
import de.zib.gndms.model.util.TxFrame;
import de.zib.gndms.neomodel.common.Session;
import de.zib.gndms.neomodel.gorfx.Task;
import de.zib.gndms.neomodel.gorfx.Taskling;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;

import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.LinkedList;
import java.util.Properties;

/**
 * Created by IntelliJ IDEA.
 * User: explicit
 * Date: 02.12.11
 * Time: 15:31
 * To change this template use File | Settings | File Templates.
 */
public class DSpaceServiceTest extends ModelEntityTestBase {
    ApplicationContext context;

    String sliceId;

    final static String subspaceId = "sub";
    final static String subspacePath = "/tmp/gndms/sub";
    final static String gridFtpPath = "gridFtpPath";

    final static String sliceKindId = "kind";
    final static String sliceKindConfig = "sliceKindMode:700; uniqueDirName:kind";

    final static String sliceConfig = "terminationTime:2011-12-16; sliceSize:1024";

    final static String dn = "root";

    @Parameters({ "dbPath", "dbName" })
    public DSpaceServiceTest(String dbPath, @Optional("c3grid") String dbName) {
        super(dbPath, dbName);
    }

    @BeforeClass(dependsOnGroups = { "dspaceActionTests" }, dependsOnMethods = { "init" })
    private void initContext() {
        context = new ClassPathXmlApplicationContext("classpath:META-INF/00_system.xml");

        final Properties map = new Properties();
        map.put("openjpa.Id", getDbName());
        map.put("openjpa.ConnectionURL", "jdbc:derby:" + getDbPath() + ";create=true");
        //map.put( "openjpa.ConnectionURL", "jdbc:derby:" + getDbPath() );

        final EntityManagerFactory emf = Persistence.createEntityManagerFactory(getDbName(), map);
        setEntityManagerFactory(emf);
    }

    @org.testng.annotations.Test(groups = { "dspaceActionTests", "modeltests" })
    public void testSetupSubspaceAction() {
        TxFrame txFrame = new TxFrame(getEntityManager());

        SubspaceConfiguration subspaceConfig = new SubspaceConfiguration(subspacePath, gridFtpPath, true, 100,
                SetupMode.CREATE, subspaceId);
        SetupSubspaceAction action = new SetupSubspaceAction(subspaceConfig);

        StringWriter sw = new StringWriter();

        action.setClosingEntityManagerOnCleanup(false);
        action.setOwnEntityManager(getEntityManager());
        action.setPrintWriter(new PrintWriter(sw));
        logger.info("Calling action for setting up the supspace " + subspaceId + ".");
        action.setOwnPostponedEntityActions(new DefaultBatchUpdateAction<GridResource>());
        action.getPostponedEntityActions().setListener(new NoWSDontNeedModelUpdateListener());
        action.call();

        txFrame.commit();
        txFrame.finish();
    }

    @org.testng.annotations.Test(groups = { "dspaceServiceTests", "modeltests" }, dependsOnMethods = {
            "testSetupSubspaceAction" })
    public void testFindSubspaceById() {
        TxFrame txFrame = new TxFrame(getEntityManager());

        Subspace sub = getEntityManager().find(Subspace.class, subspaceId);
        Assert.assertNotNull(sub);
        Assert.assertEquals(sub.getGsiFtpPath(), gridFtpPath);

        txFrame.commit();
        txFrame.finish();
    }

    @org.testng.annotations.Test(groups = { "dspaceServiceTests", "modeltests" }, dependsOnMethods = {
            "testSetupSubspaceAction" })
    public void testCreateSliceKindByProviders() {
        final SubspaceServiceImpl subspaceService = new SubspaceServiceImpl();

        final SubspaceProviderImpl subspaceProvider = new SubspaceProviderImpl(getEntityManagerFactory());
        final SliceKindProviderImpl sliceKindProvider = new SliceKindProviderImpl(getEntityManagerFactory());

        subspaceService.setEmf(getEntityManagerFactory());
        subspaceService.setSubspaceProvider(subspaceProvider);
        subspaceService.setSliceKindProvider(sliceKindProvider);

        subspaceService.createSliceKind(subspaceId, sliceKindId, sliceKindConfig, dn);

        SliceKind sk = getEntityManager().find(SliceKind.class, sliceKindId);
        Assert.assertNotNull(sk);
    }

    @org.testng.annotations.Test(groups = { "dspaceServiceTests", "modeltests" }, dependsOnMethods = {
            "testCreateSliceKindByProviders" })
    public void testCreateSliceByService() {
        final SubspaceServiceImpl subspaceService = new SubspaceServiceImpl();
        subspaceService.init();

        final SubspaceProviderImpl subspaceProvider = new SubspaceProviderImpl(getEntityManagerFactory());
        final SliceKindProviderImpl sliceKindProvider = new SliceKindProviderImpl(getEntityManagerFactory());
        final SliceProviderImpl sliceProvider = new SliceProviderImpl(getEntityManagerFactory());

        sliceProvider.setSubspaceProvider(subspaceProvider);
        sliceProvider.setSliceKindProvider(sliceKindProvider);

        subspaceService.setEmf(getEntityManagerFactory());
        subspaceService.setSliceProvider(sliceProvider);
        subspaceService.setSliceKindProvider(sliceKindProvider);
        subspaceService.setSubspaceProvider(subspaceProvider);

        final ResponseEntity<Specifier<Void>> response = subspaceService.createSlice(subspaceId, sliceKindId,
                sliceConfig, dn);

        Assert.assertEquals(response.getStatusCode(), HttpStatus.CREATED);

        sliceId = response.getBody().getUriMap().get(UriFactory.SLICE);
    }

    @org.testng.annotations.Test(groups = { "dspaceServiceTests", "modeltests" }, dependsOnMethods = {
            "testCreateSliceByService" })
    public void testDeleteSlice() throws Exception {
        final SubspaceProviderImpl subspaceProvider = new SubspaceProviderImpl(getEntityManagerFactory());
        final SliceKindProviderImpl sliceKindProvider = new SliceKindProviderImpl(getEntityManagerFactory());
        final SliceProviderImpl sliceProvider = new SliceProviderImpl(getEntityManagerFactory());

        sliceProvider.setSubspaceProvider(subspaceProvider);
        sliceProvider.setSliceKindProvider(sliceKindProvider);

        sliceProvider.setSystem((GNDMSystem) context.getBean("system"));

        final Taskling ling = sliceProvider.deleteSlice(subspaceId, sliceId);

        while (true) {
            Thread.sleep(100);

            TaskState taskState;
            Session session = ling.getDao().beginSession();

            try {
                Task task = ling.getTask(session);
                taskState = task.getTaskState();

                if (TaskState.FAILED.equals(taskState)) {
                    LinkedList<Exception> l = task.getCause();
                    if (null != l)
                        throw task.getCause().get(0);
                    else
                        throw new Exception("Task failed");
                }
                if (taskState.isDoneState()) {
                    session.success();
                    break;
                }

                logger.info("TaskState: " + taskState.toString());
                System.out.println("TaskState: " + taskState.toString());

                session.success();
            } finally {
                session.finish();
            }
        }

        Slice slice = getEntityManager().find(Slice.class, sliceId);
        Assert.assertNull(slice);
    }
}