ruper2/src/test/core/org/krysalis/ruper2/usecases FileHelper.java,NONE,1.1 FindTests.java,NONE,1.1 SynchronizeTests.java,NONE,1.1

[email protected]
Newsgroups gmane.comp.krysalis.metamorphosis.cvs
Message-ID <[email protected]>
Update of /cvsroot/metamorphosis/ruper2/src/test/core/org/krysalis/ruper2/usecases
In directory sc8-pr-cvs1:/tmp/cvs-serv30481/src/test/core/org/krysalis/ruper2/usecases

Added Files:
	FileHelper.java FindTests.java SynchronizeTests.java 
Log Message:
Avoid clash with existing Ruper...

--- NEW FILE: FileHelper.java ---
package org.krysalis.ruper2.usecases;

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 * Helper class to take care of common file tasks that need to be
 * done when writing test cases.
 *
 * @author Ben Sommerville
 */
public class FileHelper {

    private List m_testFiles = new LinkedList();


    public void setUp() {
    }

    public void tearDown() {
        Iterator fileIter = m_testFiles.iterator();
        while (fileIter.hasNext()) {
            File file = (File) fileIter.next();
            file.delete();
        }
    }

    /**
     * Create a file for testing.  Will also register the file for
     * cleanup at the end of the testcase
     * @param baseDir Base directory for the file
     * @param name Name of the file (may contain a path)
     * @return New File object
     * @throws java.io.IOException If error occurs creating a file
     */
    public File setupActualFile( File baseDir, String name ) throws IOException {
        File theFile = new File( baseDir, name );
        if( !theFile.exists() ) {
            theFile.getParentFile().mkdirs();
            theFile.createNewFile();
        }
        m_testFiles.add( theFile );
        return theFile;
    }

    /**
     * Create file that we expect a testcase to create.  Will also register the file for
     * cleanup at the end of the testcase
     * @param baseDir Base directory for the file
     * @param name Name of the file (may contain a path)
     * @return New File object
     */
    public File setupExpectedFile(File baseDir, String name) {
        File theFile = new File( baseDir, name );
        m_testFiles.add( theFile );
        return theFile;
    }
}

--- NEW FILE: FindTests.java ---
package org.krysalis.ruper2.usecases;

import java.io.File;
import java.util.List;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;

import org.krysalis.ruper2.ResourceUpdater;
import org.krysalis.ruper2.impl.ResourceUpdaterIdentifier;
import org.krysalis.ruper2.protocols.VirtualResourceLocator;
import org.krysalis.ruper2.query.ResourceRequest;
import org.krysalis.ruper2.query.ResourceResult;
import org.krysalis.ruper2.query.ResourceResultHelper;
import org.krysalis.ruper2.query.ResourceSpecifierRequest;
import org.krysalis.ruper2.repository.DefaultRepository;
import org.krysalis.ruper2.repository.Repository;
import org.krysalis.ruper2.repository.RepositorySet;
import org.krysalis.ruper2.resource.Resource;
import org.krysalis.ruper2.resource.ResourceSpecifier;

/**
 * Query for resource in respositories
 *
 * Context: A user wishes to find a resource (or resources) available from a
 * repository (or repositories).  The user can supply the repositories &
 * the rules for what constitutes a a match with the resource.
 *
 * Level : User goal
 *
 * Precondition: ?
 *
 * Minimal Guarantees: ?
 *
 * Success Guarantees: ?
 *
 * Trigger: User queries for resource
 *
 * Main Success Scenario:
 *
 *  1. User configures Ruper
 *  2. User supplies resource query and asks Ruper process it
 *  3. Ruper examines query to extract resource information
 *  4. Ruper queries repositories for resource
 *  5. Ruper reports results to User
 *
 *
 * Extensions:
 *
 *  1a. User does not configure Ruper
 *      .1 Ruper uses default repositories and rules
 *  1b. User specifies repositories
 *      .1 Ruper replaces default repository with supplied repositories.
 *
 *  4a. Resource isn't found in repositories
 *      .1 Ruper retuns empty result
 *  4b. Multiple resources are found
 *      .1 Ruper returns list of matches
 *
 *  5a. User specifed sort order in query
 *      .1 Ruper sorts results according to the criteria
 *  5b. User specified grouping in query
 *      .1 Ruper groups results according to the criteria
 *
 * @author Ben Sommerville
 */
public class FindTests extends TestCase {
    private File m_repoDir = new File("transient/usecase/find/repo");
    private FileHelper m_fileHelper = new FileHelper();


    protected void setUp() {
        if( !m_repoDir.exists()) {
            m_repoDir.mkdirs();
        }
        m_fileHelper.setUp();
    }

    protected void tearDown() {
        m_fileHelper.tearDown();
    }

    /**
     * Start simple,
     * Find a single jar in a repository
     */
    public void testFindSingleJar() throws Exception {
        File resourceFile = m_fileHelper.setupActualFile(m_repoDir, "gorilla/jars/gorilla-1.0.jar");

        //  1. User configures Ruper
        ResourceUpdaterIdentifier identifier = new ResourceUpdaterIdentifier("findTest");
        ResourceUpdater updater = ResourceUpdater.getResourceUpdater( identifier, true );

        Repository  fileRepo = new DefaultRepository("test", m_repoDir.toURL().toString() );
        RepositorySet repos = new RepositorySet();
        repos.addRepository( fileRepo );

        //  2. User supplies resource query and asks Ruper process it
        ResourceSpecifier specifier = new ResourceSpecifier( "gorilla");
        ResourceRequest request = new ResourceSpecifierRequest( repos, specifier );
        ResourceResult result = updater.performRequest( request );

        //  3. Ruper examines query to extract resource information
        //  4. Ruper queries repositories for resource
        //  5. Ruper reports results to User


        assertNotNull("Should get a result", result);
        // TODO: This is very hacky
        List resultList = ResourceResultHelper.getResourceList( result );
        assertEquals("Result had wrong size", 1, resultList.size() );
        Resource resource = (Resource) resultList.get(0);

        VirtualResourceLocator expected =  new VirtualResourceLocator( resourceFile );
        assertEquals("Got unexpected location",  expected , resource.getLocation() );

    }



    public static Test suite() {
        return new TestSuite(FindTests.class);
    }

    public static void main(String[] args) {
        junit.textui.TestRunner.run(suite());
    }
}



--- NEW FILE: SynchronizeTests.java ---
package org.krysalis.ruper2.usecases;

import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import org.krysalis.ruper2.api.tool.FileUpdater;
import org.krysalis.ruper2.api.FileAPI;
import org.krysalis.ruper2.impl.ResourceUpdaterIdentifier;
import org.krysalis.ruper2.repository.Repository;
import org.krysalis.ruper2.repository.DefaultRepository;
import org.krysalis.ruper2.repository.RepositorySet;
import org.krysalis.ruper2.ResourceUpdater;

import java.io.File;

/**
 * Synchronize file with repositories
 *
 * Context: A user has a file (or files) locally that they wish to synchronize
 * with a repository (or repositories).  The user can supply the repositories &
 * the rules for what constitutes a better version.
 *
 * Level : User goal
 *
 * Precondition: ?
 *
 * Minimal Guarantees: ?
 *
 * Success Guarantees: ?
 *
 * Trigger: User requests synchronization
 *
 * Main Success Scenario:
 *
 *  1. User configures Ruper
 *  2. User supplies file details and asks Ruper to synchronize it
 *  3. Ruper examines file details to extract resource information
 *  4. Ruper queries repositories for resource
 *  5. Ruper compares result(s) of query with existing file.
 *  6. Ruper chooses best result and copies it to file location
 *  7. Ruper removes old copy of resource from file location
 *  8. Ruper reports results to User
 *
 *
 * Extensions:
 *
 *  1a. User does not configure Ruper
 *      .1 Ruper uses default repositories and rules
 *  1b. User specifies repositories
 *      .1 Ruper replaces default repository with supplied repositories.
 *  1c. User specifies rules for deciding if resource matches supplied file
 *      .1 Ruper replaces default matching rules with supplied rules.
 *  1d. User specifies rules for determining what the best resource is
 *      .1 Ruper replaces default comparison rules with supplied rules.
 *
 *  3a. File doesn't exist.
 *      .1 Ruper uses supplied details only.
 *  3b. File doesn't have location.
 *      .1 Ruper use default location (lib directory)
 *
 *  4a. Resource isn't found in repositories
 *      .1 Ruper warns user
 *      .2 Ruper returns supplied file as result
 *          .a Supplied file doesn't exist
 *              .1 Ruper signals failure
 *              .2 Use case ends
 *      .3 Use case ends - success
 *
 *  5a. File doesn't exist
 *      .1 Ruper works with results of query only
 *
 *  6a. Best result is existing file
 *      .1 Ruper doesn't copy anything
 *      .2 Use case ends - success.
 *  6b. There is an error copying the file
 *      .1 Ruper reports error
 *      .2 Use case ends - Failure.
 *
 *  7a. There is only one copy of the resource.
 *      .1 Ruper does nothing
 *  7b. There are multiple copies of the resource.
 *      .1 Ruper keeps best copy and removes all others
 *
 *
 * @author Ben Sommerville
 */
public class SynchronizeTests extends TestCase {
    File m_repoDir = new File("transient/usecase/synchronize/repo");
    File m_targetDir = new File("transient/usecase/synchronize/target");
    FileHelper m_fileHelper = new FileHelper();

    protected void setUp() {
        m_repoDir.mkdirs();
        m_fileHelper.setUp();
    }

    protected void tearDown() {
        m_fileHelper.tearDown();
    }


    public void testMainScenario() throws Exception {
        // Can't quite test main, cause defaults aren't suitable.

        // BPS - Currently several bugs that we have to work around
        // 1) Version comparision doesn't work unless we specify the full major.minor.point
        //    (ie if target is version 2.3 it compares equal with 2.3.1 )
        // 2) Don't know how to specify comparisons
        File targetFile = m_fileHelper.setupActualFile( m_targetDir, "cat-2.3.0.jar");
        File betterFile = m_fileHelper.setupActualFile( m_repoDir, "cat/jars/cat-2.3.1.jar");
        File resultFile = m_fileHelper.setupExpectedFile( m_targetDir, "cat-2.3.1.jar");

        //  1. User configures Ruper
        ResourceUpdaterIdentifier identifier = new ResourceUpdaterIdentifier("synchronizeTest");
        ResourceUpdater ruper= ResourceUpdater.getResourceUpdater( identifier, true );

        Repository  fileRepo = new DefaultRepository("test", m_repoDir.toURL().toString() );
        RepositorySet repos = new RepositorySet();
        repos.addRepository( fileRepo );

        FileUpdater updater = new FileUpdater( new FileAPI(), ruper,  repos);

        //  2. User supplies file details and asks Ruper to synchronize it
        updater.updateFile( targetFile );

        //  3. Ruper examines file details to extract resource information
        //  4. Ruper queries repositories for resource
        //  5. Ruper compares result(s) of query with existing file.
        //  6. Ruper chooses best result and copies it to file location
        assertTrue("Result file exists", resultFile.exists());
        //  7. Ruper removes old copy of resource from file location

        // BPS - This don't work yet
        // assertFalse("Old file has been removed", targetFile.exists() );

        //  8. Ruper reports results to User

    }

    public static Test suite() {
        return new TestSuite(SynchronizeTests.class);
    }

    public static void main(String[] args) {
        junit.textui.TestRunner.run(suite());
    }
}






-------------------------------------------------------
This sf.net email is sponsored by:ThinkGeek
Welcome to geek heaven.
http://thinkgeek.com/sf
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.