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.