/* * JBoss, Home of Professional Open Source. * * See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing. * * See the AUTHORS.txt file distributed with this work for a full listing of individual contributors. */ package org.teiid.designer.transformation.aspects.validation.rules; import java.util.Collection; import org.eclipse.core.runtime.IStatus; import org.teiid.core.util.TestUtilities; import org.teiid.designer.core.ModelerCore; import org.teiid.designer.core.validation.ValidationResult; import org.teiid.designer.core.validation.ValidationResultImpl; import org.teiid.designer.metamodels.transformation.MappingClass; import org.teiid.designer.metamodels.transformation.SqlTransformationMappingRoot; import org.teiid.designer.metamodels.transformation.TransformationFactory; import org.teiid.designer.query.IQueryParser; import org.teiid.designer.query.sql.lang.ICommand; import org.teiid.designer.query.sql.lang.IQuery; import org.teiid.designer.query.sql.lang.ISetQuery; import org.teiid.designer.runtime.registry.TeiidRuntimeRegistry; import org.teiid.designer.runtime.version.spi.ITeiidServerVersion; import junit.extensions.TestSetup; import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; /** * @since 4.3 */ public class TestMappingClassTransformationValidationHelper extends TestCase { private Collection<ITeiidServerVersion> serverVersions; /** * Constructor for TestInputSetPramReplacementVisitor. * @param name */ public TestMappingClassTransformationValidationHelper(String name) throws Exception { super(name); serverVersions = TeiidRuntimeRegistry.getInstance().getSupportedVersions(); } // ========================================================================= // T E S T C O N T R O L // ========================================================================= /** * Construct the test suite, which uses a one-time setup call * and a one-time tear-down call. */ public static Test suite() { TestSuite suite = new TestSuite("TestMappingClassTransformationValidationHelper"); //$NON-NLS-1$ suite.addTestSuite(TestMappingClassTransformationValidationHelper.class); //suite.addTest(new TestMappingClassTransformationValidationHelper("testGetCharacterVDBResource")); //$NON-NLS-1$ //suite.addTest(new TestMappingClassTransformationValidationHelper("testGetElementIDsInKey13760")); //$NON-NLS-1$ return new TestSetup(suite); } @Override protected void tearDown() throws Exception { TestUtilities.unregisterTeiidServerManager(); } public MappingClass helpGetMappingClass() { return TransformationFactory.eINSTANCE.createMappingClass(); } public SqlTransformationMappingRoot helpTransformationMappingRoot() { SqlTransformationMappingRoot root = TransformationFactory.eINSTANCE.createSqlTransformationMappingRoot(); root.setTarget(helpGetMappingClass()); return root; } public MappingClass helpGetRecursiveMappingClass() { MappingClass mappingClass = TransformationFactory.eINSTANCE.createMappingClass(); mappingClass.setRecursive(true); return mappingClass; } public ICommand parseCommand(String sql) throws Exception { IQueryParser parser = ModelerCore.getTeiidQueryService().getQueryParser(); return parser.parseCommand(sql); } public void testNonQueryNonSetQuery() throws Exception { for (ITeiidServerVersion version : serverVersions) { TestUtilities.setDefaultServerVersion(version); ICommand command = parseCommand("Delete from x");//$NON-NLS-1$ MappingClassTransformationValidationHelper rule = new MappingClassTransformationValidationHelper(); ValidationResult result = new ValidationResultImpl(new Object()); rule.validate(command, helpTransformationMappingRoot(), result); assertTrue(result.hasProblems()); assertEquals(1, result.getProblems().length); assertEquals(IStatus.ERROR, (result.getProblems()[0]).getSeverity()); } } public void testNoInputSelectNoRecursiveMappingClass() throws Exception { for (ITeiidServerVersion version : serverVersions) { TestUtilities.setDefaultServerVersion(version); ICommand command = parseCommand("SELECT e FROM g");//$NON-NLS-1$ MappingClassTransformationValidationHelper rule = new MappingClassTransformationValidationHelper(); MappingClass mappingClass = helpGetMappingClass(); ValidationResult result = new ValidationResultImpl(mappingClass); rule.validate((IQuery)command, mappingClass, result); assertTrue(!result.hasProblems()); } } public void testInputSelectNoRecursiveMappingClass() throws Exception { for (ITeiidServerVersion version : serverVersions) { TestUtilities.setDefaultServerVersion(version); ICommand command = parseCommand("SELECT e, INPUT.f FROM g");//$NON-NLS-1$ MappingClassTransformationValidationHelper rule = new MappingClassTransformationValidationHelper(); MappingClass mappingClass = helpGetMappingClass(); ValidationResult result = new ValidationResultImpl(new Object()); rule.validate((IQuery)command, mappingClass, result); assertFalse(result.hasProblems()); assertEquals(0, result.getProblems().length); } } public void testNoInputSelectRecursiveMappingClassNoCriteria() throws Exception { for (ITeiidServerVersion version : serverVersions) { TestUtilities.setDefaultServerVersion(version); ICommand command = parseCommand("SELECT e FROM g");//$NON-NLS-1$ MappingClassTransformationValidationHelper rule = new MappingClassTransformationValidationHelper(); MappingClass mappingClass = helpGetRecursiveMappingClass(); ValidationResult result = new ValidationResultImpl(new Object()); rule.validate((IQuery)command, mappingClass, result); assertTrue(result.hasProblems()); assertEquals(1, result.getProblems().length); assertEquals(IStatus.WARNING, (result.getProblems()[0]).getSeverity()); } } public void testInputSelectRecursiveMappingClassNoCriteria() throws Exception { for (ITeiidServerVersion version : serverVersions) { TestUtilities.setDefaultServerVersion(version); ICommand command = parseCommand("SELECT e, INPUT.f FROM g");//$NON-NLS-1$ MappingClassTransformationValidationHelper rule = new MappingClassTransformationValidationHelper(); MappingClass mappingClass = helpGetRecursiveMappingClass(); ValidationResult result = new ValidationResultImpl(new Object()); rule.validate((IQuery)command, mappingClass, result); assertTrue(result.hasProblems()); assertEquals(1, result.getProblems().length); assertEquals(IStatus.WARNING, (result.getProblems()[0]).getSeverity()); } } public void testNoInputSelectRecursiveMappingClassNoInputCriteria() throws Exception { for (ITeiidServerVersion version : serverVersions) { TestUtilities.setDefaultServerVersion(version); ICommand command = parseCommand("SELECT e FROM g where x = y");//$NON-NLS-1$ MappingClassTransformationValidationHelper rule = new MappingClassTransformationValidationHelper(); MappingClass mappingClass = helpGetRecursiveMappingClass(); ValidationResult result = new ValidationResultImpl(new Object()); rule.validate((IQuery)command, mappingClass, result); assertTrue(result.hasProblems()); assertEquals(1, result.getProblems().length); assertEquals(IStatus.WARNING, (result.getProblems()[0]).getSeverity()); } } public void testInputSelectRecursiveMappingClassInputCriteria() throws Exception { for (ITeiidServerVersion version : serverVersions) { TestUtilities.setDefaultServerVersion(version); ICommand command = parseCommand("SELECT e FROM g where x = Input.y");//$NON-NLS-1$ MappingClassTransformationValidationHelper rule = new MappingClassTransformationValidationHelper(); MappingClass mappingClass = helpGetRecursiveMappingClass(); ValidationResult result = new ValidationResultImpl(new Object()); rule.validate((IQuery)command, mappingClass, result); /* * Changes to client runtime mean a different result. Since canonical name has been removed from * the Symbol implementation in 8.0+, the word 'input' is case-sensitive and never upper-cased hence * the validator never decides that 'input' and 'INPUT' are the same, which is what happened in 7.7. */ if (ModelerCore.getTeiidServerVersion().isSevenServer()) { assertFalse(result.hasProblems()); } else { assertTrue(result.hasProblems()); assertEquals(1, result.getProblems().length); assertEquals(IStatus.WARNING, (result.getProblems()[0]).getSeverity()); } } } public void testNoInputUNIONSelectRecursiveMappingClassNoInputCriteria() throws Exception { for (ITeiidServerVersion version : serverVersions) { TestUtilities.setDefaultServerVersion(version); ICommand command = parseCommand("SELECT e FROM g where x = y UNION SELECT e FROM g");//$NON-NLS-1$ MappingClassTransformationValidationHelper rule = new MappingClassTransformationValidationHelper(); MappingClass mappingClass = helpGetRecursiveMappingClass(); ValidationResult result = new ValidationResultImpl(new Object()); rule.validate((ISetQuery)command, mappingClass, result); assertTrue(result.hasProblems()); assertEquals(1, result.getProblems().length); assertEquals(IStatus.WARNING, (result.getProblems()[0]).getSeverity()); } } public void testInputUNIONSelectRecursiveMappingClassInputCriteria() throws Exception { for (ITeiidServerVersion version : serverVersions) { TestUtilities.setDefaultServerVersion(version); ICommand command = parseCommand("SELECT e FROM g where x = Input.y UNION SELECT e FROM g");//$NON-NLS-1$ MappingClassTransformationValidationHelper rule = new MappingClassTransformationValidationHelper(); MappingClass mappingClass = helpGetRecursiveMappingClass(); ValidationResult result = new ValidationResultImpl(new Object()); rule.validate((ISetQuery)command, mappingClass, result); /* * Changes to client runtime mean a different result. Since canonical name has been removed from * the Symbol implementation in 8.0+, the word 'input' is case-sensitive and never upper-cased hence * the validator never decides that 'input' and 'INPUT' are the same, which is what happened in 7.7. */ if (ModelerCore.getTeiidServerVersion().isSevenServer()) { assertFalse(result.hasProblems()); } else { assertTrue(result.hasProblems()); assertEquals(1, result.getProblems().length); assertEquals(IStatus.WARNING, (result.getProblems()[0]).getSeverity()); } } } public void testInputUNIONSelectRecursiveMappingClassNoCriteria() throws Exception { for (ITeiidServerVersion version : serverVersions) { TestUtilities.setDefaultServerVersion(version); ICommand command = parseCommand("SELECT e, INPUT.f FROM g UNION SELECT e FROM g");//$NON-NLS-1$ MappingClassTransformationValidationHelper rule = new MappingClassTransformationValidationHelper(); MappingClass mappingClass = helpGetRecursiveMappingClass(); ValidationResult result = new ValidationResultImpl(new Object()); rule.validate((ISetQuery)command, mappingClass, result); assertTrue(result.hasProblems()); assertEquals(1, result.getProblems().length); assertEquals(IStatus.WARNING, (result.getProblems()[0]).getSeverity()); } } }