/*!
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright (c) 2002-2013 Pentaho Corporation.. All rights reserved.
*/
package org.pentaho.test.platform.plugin;
import org.pentaho.commons.connection.IPentahoMetaData;
import org.pentaho.commons.connection.IPentahoResultSet;
import org.pentaho.platform.api.engine.IRuntimeContext;
import org.pentaho.platform.engine.core.solution.SimpleParameterProvider;
import org.pentaho.platform.plugin.services.messages.Messages;
import org.pentaho.test.platform.engine.core.BaseTest;
import org.pentaho.test.platform.utils.TestResourceLocation;
@SuppressWarnings( "nls" )
public class RulesIT extends BaseTest {
private static final String SOLUTION_PATH = TestResourceLocation.TEST_RESOURCES + "/solution";
public String getSolutionPath() {
return SOLUTION_PATH;
}
public void testScriptRule() {
startTest();
SimpleParameterProvider parameterProvider = new SimpleParameterProvider();
parameterProvider.setParameter( "customer", "Acme" ); //$NON-NLS-1$ //$NON-NLS-2$
IRuntimeContext context = run( "/test/rules/script_rule1.xaction", parameterProvider ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals(
Messages.getInstance().getString( "BaseTest.USER_RUNNING_ACTION_SEQUENCE" ), IRuntimeContext.RUNTIME_STATUS_SUCCESS, context.getStatus() ); //$NON-NLS-1$
assertNotNull(
Messages.getInstance().getString( "RulesTest.ERROR_0001_NULL_RESULT" ), context.getOutputParameter( "rule-result" ) ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(
Messages.getInstance().getString( "RulesTest.ERROR_0002_WRONG_RESULT" ), "Central", context.getOutputParameter( "rule-result" ).getStringValue() ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
info( Messages.getInstance().getString(
"RulesTest.DEBUG_0003_SCRIPT_RULE_SUCCESS", context.getOutputParameter( "rule-result" ).getStringValue() ) ); //$NON-NLS-1$ //$NON-NLS-2$
finishTest();
}
public void testScriptRuleError1() {
startTest();
info( Messages.getInstance().getString( "RulesTest.USER_ERRORS_EXPECTED_SCRIPT_NOT_DEFINED" ) ); //$NON-NLS-1$
IRuntimeContext context = run( "/test/rules/script_rule_error1.xaction" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals(
Messages.getInstance().getString( "BaseTest.USER_RUNNING_ACTION_SEQUENCE" ), IRuntimeContext.RUNTIME_CONTEXT_VALIDATE_FAIL, context.getStatus() ); //$NON-NLS-1$
assertNotNull(
Messages.getInstance().getString( "RulesTest.ERROR_0004_NULL_OUTPUT_OBJECT" ), context.getOutputParameter( "rule-result" ) ); //$NON-NLS-1$//$NON-NLS-2$
assertEquals(
Messages.getInstance().getString( "RulesTest.ERROR_0005_RESULT_WHEN_NULL_EXPECTED" ), null, context.getOutputParameter( "rule-result" ).getStringValue() ); //$NON-NLS-1$//$NON-NLS-2$
finishTest();
}
public void testScriptRuleError2() {
startTest();
info( Messages.getInstance().getString( "RulesTest.USER_ERRORS_EXPECTED_OUTPUT_NOT_DEFINED" ) ); //$NON-NLS-1$
IRuntimeContext context = run( "/test/rules/script_rule_error2.xaction" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals(
Messages.getInstance().getString( "BaseTest.USER_RUNNING_ACTION_SEQUENCE" ), IRuntimeContext.RUNTIME_CONTEXT_VALIDATE_FAIL, context.getStatus() ); //$NON-NLS-1$
assertEquals(
Messages.getInstance().getString( "RulesTest.ERROR_0006_RESULT_WHEN_ERROR_EXPECTED" ), false, context.getOutputNames().contains( "rule-result" ) ); //$NON-NLS-1$//$NON-NLS-2$
finishTest();
}
public void testScriptRuleError3() {
startTest();
info( Messages.getInstance().getString( "RulesTest.USER_ERRORS_EXPECTED_SCRIPT_INVALID" ) ); //$NON-NLS-1$
IRuntimeContext context = run( "/test/rules/script_rule_error3.xaction" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals(
Messages.getInstance().getString( "BaseTest.USER_RUNNING_ACTION_SEQUENCE" ), IRuntimeContext.RUNTIME_STATUS_FAILURE, context.getStatus() ); //$NON-NLS-1$
assertEquals(
Messages.getInstance().getString( "RulesTest.ERROR_0005_RESULT_WHEN_NULL_EXPECTED" ), null, context.getOutputParameter( "rule-result" ).getStringValue() ); //$NON-NLS-1$//$NON-NLS-2$
finishTest();
}
public void testScriptRuleError4() {
startTest();
info( "This should generate errors because the input to the script has a minus sign in the input name." ); //$NON-NLS-1$
IRuntimeContext context = run( "/test/rules/script_rule_error4.xaction" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals(
Messages.getInstance().getString( "BaseTest.USER_RUNNING_ACTION_SEQUENCE" ), IRuntimeContext.RUNTIME_STATUS_FAILURE, context.getStatus() ); //$NON-NLS-1$
assertEquals(
Messages.getInstance().getString( "RulesTest.ERROR_0005_RESULT_WHEN_NULL_EXPECTED" ), null, context.getOutputParameter( "rule-result" ).getStringValue() ); //$NON-NLS-1$//$NON-NLS-2$
finishTest();
}
public void testScriptCompoundResult() {
startTest();
info( Messages.getInstance().getString( "RulesTest.USER_ERRORS_EXPECTED_SCRIPT_INVALID" ) ); //$NON-NLS-1$
IRuntimeContext context = run( "/test/rules/script_rule3.xaction" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals(
Messages.getInstance().getString( "BaseTest.USER_RUNNING_ACTION_SEQUENCE" ), IRuntimeContext.RUNTIME_STATUS_SUCCESS, context.getStatus() ); //$NON-NLS-1$
assertNotNull( context.getOutputParameter( "fruit" ) ); //$NON-NLS-1$
assertNotNull( context.getOutputParameter( "veg" ) ); //$NON-NLS-1$
assertEquals( "bad", "apples", context.getOutputParameter( "fruit" ).getStringValue() ); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
assertEquals( "bad", "carrots", context.getOutputParameter( "veg" ).getStringValue() ); //$NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
finishTest();
}
public void testQueryRule() {
startTest();
IPentahoResultSet resultSet = null;
try {
IRuntimeContext context = run( "/test/rules/query_rule1.xaction" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals( Messages.getInstance().getString( "BaseTest.USER_RUNNING_ACTION_SEQUENCE" ), IRuntimeContext.RUNTIME_STATUS_SUCCESS, context.getStatus() ); //$NON-NLS-1$
Object result = context.getOutputParameter( "rule-result" ).getValue(); //$NON-NLS-1$
assertNotNull( Messages.getInstance().getString( "RulesTest.ERROR_0001_NULL_RESULT" ), result ); //$NON-NLS-1$
assertTrue( Messages.getInstance().getString( "RulesTest.ERROR_0007_LOOKUP_RULE_INVALID_RESULT" ), ( result instanceof IPentahoResultSet ) ); //$NON-NLS-1$
resultSet = (IPentahoResultSet) result;
IPentahoMetaData metaData = resultSet.getMetaData();
Object[][] columnHeaders = metaData.getColumnHeaders();
String columnHeader = columnHeaders[0][0].toString();
assertEquals( Messages.getInstance().getString( "RulesTest.ERROR_0009_LOOKUP_RULE_COLUMN_MISSING" ), "POSITIONTITLE", columnHeader ); //$NON-NLS-1$ //$NON-NLS-2$
Object[] row = resultSet.next();
assertNotNull( Messages.getInstance().getString( "RulesTest.ERROR_0007_LOOKUP_RULE_INVALID_RESULT" ), row ); //$NON-NLS-1$
info( Messages.getInstance().getString( "RulesTest.DEBUG_LOOKUP_RULE_SUCCESS", row[0].toString() ) ); //$NON-NLS-1$
} finally {
if ( resultSet != null ) {
resultSet.closeConnection();
}
}
finishTest();
}
public void testQueryRule2() {
startTest();
IPentahoResultSet resultSet = null;
try {
IRuntimeContext context = run( "/test/rules/query_rule2.xaction" ); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
assertEquals( Messages.getInstance().getString( "BaseTest.USER_RUNNING_ACTION_SEQUENCE" ), IRuntimeContext.RUNTIME_STATUS_SUCCESS, context.getStatus() ); //$NON-NLS-1$
Object result = context.getOutputParameter( "rule-result" ).getValue(); //$NON-NLS-1$
assertNotNull( Messages.getInstance().getString( "RulesTest.ERROR_0001_NULL_RESULT" ), result ); //$NON-NLS-1$
assertTrue( Messages.getInstance().getString( "RulesTest.ERROR_0007_LOOKUP_RULE_INVALID_RESULT" ), ( result instanceof IPentahoResultSet ) ); //$NON-NLS-1$
resultSet = (IPentahoResultSet) result;
IPentahoMetaData metaData = resultSet.getMetaData();
Object[][] columnHeaders = metaData.getColumnHeaders();
String regionHeader = columnHeaders[0][0].toString();
String departmentHeader = columnHeaders[0][1].toString();
assertEquals( Messages.getInstance().getString( "RulesTest.ERROR_0009_LOOKUP_RULE_COLUMN_MISSING" ), "REGION", regionHeader ); //$NON-NLS-1$ //$NON-NLS-2$
assertEquals(
Messages.getInstance().getString( "RulesTest.ERROR_0009_LOOKUP_RULE_COLUMN_MISSING" ), "DEPARTMENT", departmentHeader ); //$NON-NLS-1$ //$NON-NLS-2$
Object[] row = resultSet.next();
while ( row != null ) {
String region = row[0].toString();
String department = row[1].toString();
assertNotNull( Messages.getInstance().getString( "RulesTest.ERROR_0009_LOOKUP_RULE_COLUMN_MISSING" ), region ); //$NON-NLS-1$
assertNotNull( Messages.getInstance().getString( "RulesTest.ERROR_0009_LOOKUP_RULE_COLUMN_MISSING" ), department ); //$NON-NLS-1$
info( region + ", " + department ); //$NON-NLS-1$
row = resultSet.next();
}
} finally {
if ( resultSet != null ) {
resultSet.closeConnection();
}
}
finishTest();
}
public static void main( String[] args ) {
RulesIT test = new RulesIT();
test.setUp();
try {
test.testScriptRule();
test.testScriptRuleError1();
test.testScriptRuleError2();
test.testScriptRuleError3();
test.testScriptRuleError4();
test.testScriptCompoundResult();
test.testQueryRule();
test.testQueryRule2();
} finally {
test.tearDown();
BaseTest.shutdown();
}
}
}