/* vim: set ts=2 et sw=2 cindent fo=qroca: */ package com.globant.katari.core.spring; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; import static org.junit.Assert.fail; import org.junit.Test; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.support.AbstractXmlApplicationContext; import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.Resource; import com.globant.katari.core.web.MenuBar; public class ConditionalImportParserTest { @Test public void testImportTrueCondition() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:properties name='katari.props'" + " location='classpath:/com/globant/katari/core/spring/test.properties'/>\n" + " <katari:import properties-ref='katari.props'" + " module='com.globant.katari.core.spring'\n" + " property-name='authentication.mode' property-value='CAS'/>" + "</beans>\n"; AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); Object menubar = context.getBean("menubar"); assertThat(menubar, is(MenuBar.class)); context.close(); } @Test public void testImport2Properties() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:properties name='katari.props'" + " location='classpath:/com/globant/katari/core/spring/test.properties'/>\n" + " <katari:properties name='katari2.props'" + " location='classpath:/com/globant/katari/core/spring/test2.properties'/>\n" + " <katari:import properties-ref='katari2.props'\n" + " module='com.globant.katari.core.spring'\n" + " property-name='authentication.mode' property-value='FB'/>" + "</beans>\n"; AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); Object menubar = context.getBean("menubar"); assertThat(menubar, is(MenuBar.class)); context.close(); } @Test public void testImport2PropertiesNoPropertiesRef() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:properties name='katari.props'" + " location='classpath:/com/globant/katari/core/spring/test.properties'/>\n" + " <katari:properties name='katari2.props'" + " location='classpath:/com/globant/katari/core/spring/test2.properties'/>\n" + " <katari:import module='com.globant.katari.core.spring'\n" + " property-name='authentication.mode' property-value='FB'/>" + "</beans>\n"; AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); Object menubar = context.getBean("menubar"); assertThat(menubar, is(MenuBar.class)); context.close(); } @Test(expected=RuntimeException.class) public void testImport2PropertiesNoPropertiesRefInvalidProperty() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:properties name='katari.props'" + " location='classpath:/com/globant/katari/core/spring/test.properties'/>\n" + " <katari:properties name='katari2.props'" + " location='classpath:/com/globant/katari/core/spring/test2.properties'/>\n" + " <katari:import module='com.globant.katari.core.spring'\n" + " property-name='invalid' property-value='CAS'/>" + "</beans>\n"; AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); } @Test(expected=RuntimeException.class) public void testImportPropertiesRefInvalidProperty() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:properties name='katari.props'" + " location='classpath:/com/globant/katari/core/spring/test.properties'/>\n" + " <katari:import module='com.globant.katari.core.spring'\n" + " properties-ref=\"katari.props\" property-name='invalid'" + " property-value='CAS'/>" + "</beans>\n"; AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); } @Test(expected=RuntimeException.class) public void testImportWrongPropertiesRef() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:properties name='katari.props'\n" + " location='classpath:/com/globant/katari/core/spring/test.properties'/>\n" + " <katari:import properties-ref='no.props'\n" + " module='com.globant.katari.core.spring'\n" + " property-name='authentication.mode' property-value='CAS'/>" + "</beans>\n"; AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); } @Test(expected=NoSuchBeanDefinitionException.class) public void testImportFalseCondition() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:properties name='katari.props'" + " location='classpath:/com/globant/katari/core/spring/test2.properties'/>\n" + " <katari:import module='com.globant.katari.core.spring'\n" + " property-name='authentication.mode' property-value='CAS'/>" + "</beans>\n"; AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); context.getBean("menubar"); context.close(); } @Test(expected=RuntimeException.class) public void testImportNoCondition() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:import" + " module='classpath:/com/globant/katari/core/spring/module.xml'\n" + " property-name='authentication.mode' property-value='CAS'/>" + "</beans>\n"; AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); } @Test(expected=NoSuchBeanDefinitionException.class) public void testImportCombination() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:properties name='katari.props'" + " location='classpath:/com/globant/katari/core/spring/test2.properties'/>\n" + " <katari:import module='com.globant.katari.core.spring'\n" + " property-name='authentication.mode' property-value='CAS'/>" + " <katari:import module='com.globant.katari.core.spring2'\n" + " property-name='authentication.mode' property-value='FB'/>" + "</beans>\n"; System.setProperty("authentication.mode", "CAS"); AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); Object menubar = context.getBean("secured-menubar"); assertThat(menubar, is(MenuBar.class)); try { context.getBean("menubar"); fail("Shouldn't reach this"); } finally { context.close(); } } @Test(expected=RuntimeException.class) public void testImport_propertiesAfterImport() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:properties name='katari.props'" + " location='classpath:/com/globant/katari/core/spring/test2.properties'/>\n" + " <katari:import module='com.globant.katari.core.spring'\n" + " property-name='authentication.mode' property-value='CAS'/>" + " <katari:properties name='katari2.props'" + " location='classpath:/com/globant/katari/core/spring/test2.properties'/>\n" + " <katari:import module='com.globant.katari.core.spring2'\n" + " property-name='authentication.mode' property-value='FB'/>" + "</beans>\n"; System.setProperty("authentication.mode", "CAS"); AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); } @Test public void testImport_always() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:properties name='katari.props'" + " location='classpath:/com/globant/katari/core/spring/test2.properties'/>\n" + " <katari:import module='com.globant.katari.core.spring'/>" + "</beans>\n"; System.setProperty("authentication.mode", "CAS"); AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); Object menubar = context.getBean("menubar"); assertThat(menubar, is(MenuBar.class)); context.close(); } @Test public void testImport_alwaysNoProperties() { final String beans = "<?xml version='1.0' encoding='UTF-8'?>\n" + "<beans xmlns='http://www.springframework.org/schema/beans'\n" + " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'\n" + " xmlns:katari='http://www.globant.com/schema/katari'\n" + " xsi:schemaLocation='http://www.springframework.org/schema/beans\n" + " http://www.springframework.org/schema/beans/spring-beans-2.0.xsd\n" + " http://www.globant.com/schema/katari\n" + " http://www.globant.com/schema/katari/katari.xsd'>\n" + " <katari:import module='com.globant.katari.core.spring'/>" + "</beans>\n"; System.setProperty("authentication.mode", "CAS"); AbstractXmlApplicationContext context; context = new AbstractXmlApplicationContext() { protected Resource[] getConfigResources() { return new Resource[] {new ByteArrayResource(beans.getBytes())}; } }; context.refresh(); Object menubar = context.getBean("menubar"); assertThat(menubar, is(MenuBar.class)); context.close(); } }