package org.pentaho.test.platform.engine.services;
import java.io.ByteArrayOutputStream;
import java.util.HashMap;
import java.util.Map;
import org.pentaho.platform.api.engine.IParameterProvider;
import org.pentaho.platform.api.engine.IPentahoSession;
import org.pentaho.platform.engine.core.solution.ContentInfo;
import org.pentaho.platform.engine.core.solution.SimpleParameterProvider;
import org.pentaho.platform.engine.core.system.PentahoSessionHolder;
import org.pentaho.platform.engine.core.system.StandaloneSession;
import org.pentaho.platform.engine.services.messages.Messages;
import org.pentaho.platform.engine.services.solution.SolutionRepoSaveContentGenerator;
import org.pentaho.test.platform.engine.core.BaseTest;
import junit.framework.TestCase;
@SuppressWarnings({"all"})
public class SolutionRepoSaveContentGeneratorTest extends BaseTest {
private static final String SOLUTION_PATH = "test-src/solution";
public String getSolutionPath() {
return SOLUTION_PATH;
}
public void testLogger() {
SolutionRepoSaveContentGenerator cg = new SolutionRepoSaveContentGenerator();
assertNotNull( "Logger is null", cg.getLogger() );
}
public void testMessages() {
assertFalse( Messages.getInstance().getString("SolutionRepoSaveContentGenerator.ERROR_0001_NO_FILEPATH").startsWith("!") );
assertFalse( Messages.getInstance().getString("SolutionRepoSaveContentGenerator.ERROR_0002_NO_STATE").startsWith("!") );
assertFalse( Messages.getInstance().getString("SolutionRepoSaveContentGenerator.ERROR_0003_BAD_PATH","").startsWith("!") );
assertFalse( Messages.getInstance().getString("SolutionRepoSaveContentGenerator.ERROR_0004_CANNOT_REPLACE").startsWith("!") );
assertFalse( Messages.getInstance().getString("SolutionRepoSaveContentGenerator.ERROR_0005_CREDENTIALS").startsWith("!") );
assertFalse( Messages.getInstance().getString("SolutionRepoSaveContentGenerator.ERROR_0006_SAVE_FAILED").startsWith("!") );
assertFalse( Messages.getInstance().getString("SolutionRepoSaveContentGenerator.USER_FILE_SAVE").startsWith("!") );
}
public void testNoFilepath() throws Exception {
SolutionRepoSaveContentGenerator cg = new SolutionRepoSaveContentGenerator();
ByteArrayOutputStream out = new ByteArrayOutputStream();
SimpleParameterProvider request = new SimpleParameterProvider();
Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>();
parameterProviders.put( "request" , request ); //$NON-NLS-1$
cg.setParameterProviders(parameterProviders);
cg.createContent(out);
assertEquals( "Mime type is wrong", "text/text", cg.getMimeType() );
String message = new String( out.toByteArray() );
assertEquals( "Message is wrong", message, Messages.getInstance().getErrorString("SolutionRepoSaveContentGenerator.ERROR_0001_NO_FILEPATH") );
}
public void testNoState() throws Exception {
SolutionRepoSaveContentGenerator cg = new SolutionRepoSaveContentGenerator();
ByteArrayOutputStream out = new ByteArrayOutputStream();
SimpleParameterProvider request = new SimpleParameterProvider();
Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>();
parameterProviders.put( "request" , request ); //$NON-NLS-1$
request.setParameter( "filepath" , "test-state/save1.ext");
cg.setParameterProviders(parameterProviders);
cg.createContent(out);
String message = new String( out.toByteArray() );
assertEquals( "Message is wrong", message, Messages.getInstance().getErrorString("SolutionRepoSaveContentGenerator.ERROR_0002_NO_STATE") );
}
public void testNoType() throws Exception {
SolutionRepoSaveContentGenerator cg = new SolutionRepoSaveContentGenerator();
ByteArrayOutputStream out = new ByteArrayOutputStream();
SimpleParameterProvider request = new SimpleParameterProvider();
Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>();
parameterProviders.put( "request" , request ); //$NON-NLS-1$
request.setParameter( "filepath" , "");
request.setParameter( "state" , "state = {};");
cg.setParameterProviders(parameterProviders);
cg.createContent(out);
String message = new String( out.toByteArray() );
assertEquals( "Message is wrong", Messages.getInstance().getErrorString("SolutionRepoSaveContentGenerator.ERROR_0007_NO_TYPE"), message );
}
public void testBadPath() throws Exception {
SolutionRepoSaveContentGenerator cg = new SolutionRepoSaveContentGenerator();
ByteArrayOutputStream out = new ByteArrayOutputStream();
SimpleParameterProvider request = new SimpleParameterProvider();
Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>();
parameterProviders.put( "request" , request ); //$NON-NLS-1$
request.setParameter( "type" , "mytype");
request.setParameter( "filepath" , "");
request.setParameter( "state" , "state = {};");
cg.setParameterProviders(parameterProviders);
cg.createContent(out);
String message = new String( out.toByteArray() );
assertEquals( "Message is wrong", Messages.getInstance().getErrorString("SolutionRepoSaveContentGenerator.ERROR_0003_BAD_PATH", ""), message );
}
public void testGoodSave() throws Exception {
IPentahoSession session = new StandaloneSession( "test user" );
PentahoSessionHolder.setSession(session);
MockSolutionRepository.files.clear();
ContentInfo info = new ContentInfo();
info.setIconUrl("test icon url");
MockPluginManager.contentInfoByType.put("mytype", info);
SolutionRepoSaveContentGenerator cg = new SolutionRepoSaveContentGenerator();
cg.setSession(session);
ByteArrayOutputStream out = new ByteArrayOutputStream();
SimpleParameterProvider request = new SimpleParameterProvider();
Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>();
parameterProviders.put( "request" , request ); //$NON-NLS-1$
String state = "state = { message : 'test state' };";
String path = "test/good/test1.state.mytype";
request.setParameter( "type" , "mytype");
request.setParameter( "filepath" , path);
request.setParameter( "state" , state);
request.setParameter( "title" , "test title");
request.setParameter( "description" , "test description");
cg.setParameterProviders(parameterProviders);
cg.createContent(out);
String message = new String( out.toByteArray() );
assertEquals( "Message is wrong", message, Messages.getInstance().getString("SolutionRepoSaveContentGenerator.USER_FILE_SAVE") );
String savedFile = MockSolutionRepository.files.get(path);
assertNotNull( "file not saved", savedFile );
assertTrue( "State is wrong", savedFile.contains( state ) );
assertTrue( "author is wrong", savedFile.contains( "<author><![CDATA[test user]]></author>" ) );
assertTrue( "title is wrong", savedFile.contains( "<title><![CDATA[test title]]></title>" ) );
assertTrue( "description is wrong", savedFile.contains( "<description><![CDATA[test description]]></description>" ) );
assertTrue( "icon is wrong", savedFile.contains( "<icon><![CDATA[test icon url]]></icon>" ) );
}
public void testGoodSave2() throws Exception {
IPentahoSession session = new StandaloneSession( "test user" );
PentahoSessionHolder.setSession(session);
MockSolutionRepository.files.clear();
SolutionRepoSaveContentGenerator cg = new SolutionRepoSaveContentGenerator();
cg.setSession(session);
ByteArrayOutputStream out = new ByteArrayOutputStream();
SimpleParameterProvider request = new SimpleParameterProvider();
Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>();
parameterProviders.put( "request" , request ); //$NON-NLS-1$
String state = "state = { message : 'test state' };";
String path = "test/good/test1.state.mytype";
request.setParameter( "type" , "mytype");
request.setParameter( "filepath" , path);
request.setParameter( "state" , state);
// don't set tile and description, they should default to empty strings
cg.setParameterProviders(parameterProviders);
cg.createContent(out);
String message = new String( out.toByteArray() );
assertEquals( "Message is wrong", message, Messages.getInstance().getString("SolutionRepoSaveContentGenerator.USER_FILE_SAVE") );
String savedFile = MockSolutionRepository.files.get(path);
assertNotNull( "file not saved", savedFile );
assertTrue( "State is wrong", savedFile.contains( state ) );
assertTrue( "author is wrong", savedFile.contains( "<author><![CDATA[test user]]></author>" ) );
assertTrue( "title is wrong", savedFile.contains( "<title><![CDATA[]]></title>" ) );
assertTrue( "description is wrong", savedFile.contains( "<description><![CDATA[]]></description>" ) );
}
public void testBadReplace() throws Exception {
IPentahoSession session = new StandaloneSession();
PentahoSessionHolder.setSession(session);
MockSolutionRepository.files.clear();
SolutionRepoSaveContentGenerator cg = new SolutionRepoSaveContentGenerator();
cg.setSession(session);
ByteArrayOutputStream out = new ByteArrayOutputStream();
SimpleParameterProvider request = new SimpleParameterProvider();
Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>();
parameterProviders.put( "request" , request ); //$NON-NLS-1$
String state = "state = { message : 'test state' };";
String path = "test/good/test1.state";
request.setParameter( "type" , "mytype");
request.setParameter( "filepath" , path);
request.setParameter( "state" , state);
cg.setParameterProviders(parameterProviders);
cg.createContent(out);
String message = new String( out.toByteArray() );
assertEquals( "Message is wrong", message, Messages.getInstance().getString("SolutionRepoSaveContentGenerator.USER_FILE_SAVE") );
assertTrue( "State is wrong", MockSolutionRepository.files.get(path+".mytype").contains( state ) );
// try to save over it
String state2 = "state = { message : 'new state' };";
request.setParameter( "state" , state2);
out = new ByteArrayOutputStream();
cg.createContent(out);
message = new String( out.toByteArray() );
assertEquals( "Message is wrong", message, Messages.getInstance().getErrorString("SolutionRepoSaveContentGenerator.ERROR_0004_CANNOT_REPLACE") );
assertTrue( "State is wrong", MockSolutionRepository.files.get(path+".mytype").contains( state ) );
}
public void testGoodReplace() throws Exception {
IPentahoSession session = new StandaloneSession();
PentahoSessionHolder.setSession(session);
MockSolutionRepository.files.clear();
SolutionRepoSaveContentGenerator cg = new SolutionRepoSaveContentGenerator();
cg.setSession(session);
ByteArrayOutputStream out = new ByteArrayOutputStream();
SimpleParameterProvider request = new SimpleParameterProvider();
Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>();
parameterProviders.put( "request" , request ); //$NON-NLS-1$
request.setParameter( "type" , "mytype");
String state = "state = { message : 'test state' };";
String path = "test/good/test1.state.mytype";
request.setParameter( "filepath" , path);
request.setParameter( "state" , state);
cg.setParameterProviders(parameterProviders);
cg.createContent(out);
String message = new String( out.toByteArray() );
assertEquals( "Message is wrong", message, Messages.getInstance().getString("SolutionRepoSaveContentGenerator.USER_FILE_SAVE") );
assertTrue( "State is wrong", MockSolutionRepository.files.get(path).contains( state ) );
// try to save over it
String state2 = "state = { message : 'new state' };";
request.setParameter( "state" , state2);
request.setParameter( "replace" , "true");
out = new ByteArrayOutputStream();
cg.createContent(out);
message = new String( out.toByteArray() );
assertEquals( "Message is wrong", message, Messages.getInstance().getString("SolutionRepoSaveContentGenerator.USER_FILE_SAVE") );
assertTrue( "State is wrong", MockSolutionRepository.files.get(path).contains( state2 ) );
}
public void testBadCredential() throws Exception {
IPentahoSession session = new StandaloneSession();
PentahoSessionHolder.setSession(session);
MockSolutionRepository.files.clear();
SolutionRepoSaveContentGenerator cg = new SolutionRepoSaveContentGenerator();
cg.setSession(session);
ByteArrayOutputStream out = new ByteArrayOutputStream();
SimpleParameterProvider request = new SimpleParameterProvider();
Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>();
parameterProviders.put( "request" , request ); //$NON-NLS-1$
String state = "state = { message : 'test state' };";
String path = "baduser/good/test1.state";
request.setParameter( "type" , "mytype");
request.setParameter( "filepath" , path);
request.setParameter( "state" , state);
cg.setParameterProviders(parameterProviders);
cg.createContent(out);
String message = new String( out.toByteArray() );
assertEquals( "Message is wrong", message, Messages.getInstance().getErrorString("SolutionRepoSaveContentGenerator.ERROR_0005_CREDENTIALS") );
assertEquals( "State is wrong", null, MockSolutionRepository.files.get(path) );
}
public void testFailedSave() throws Exception {
IPentahoSession session = new StandaloneSession();
PentahoSessionHolder.setSession(session);
MockSolutionRepository.files.clear();
SolutionRepoSaveContentGenerator cg = new SolutionRepoSaveContentGenerator();
cg.setSession(session);
ByteArrayOutputStream out = new ByteArrayOutputStream();
SimpleParameterProvider request = new SimpleParameterProvider();
Map<String,IParameterProvider> parameterProviders = new HashMap<String,IParameterProvider>();
parameterProviders.put( "request" , request ); //$NON-NLS-1$
String state = "state = { message : 'test state' };";
String path = "bogus/good/test1.state";
request.setParameter( "type" , "mytype");
request.setParameter( "filepath" , path);
request.setParameter( "state" , state);
cg.setParameterProviders(parameterProviders);
cg.createContent(out);
String message = new String( out.toByteArray() );
assertEquals( "State is wrong", null, MockSolutionRepository.files.get(path) );
}
}