/* (c) 2014-2015 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.web.admin; import static org.junit.Assert.*; import java.util.Collection; import java.util.Set; import it.geosolutions.jaiext.JAIExt; import javax.media.jai.registry.RenderedRegistryMode; import org.apache.wicket.extensions.markup.html.form.palette.Palette; import org.apache.wicket.markup.html.form.TextField; import org.apache.wicket.util.tester.FormTester; import org.geoserver.config.GeoServer; import org.geoserver.config.GeoServerInfo; import org.geoserver.config.JAIEXTInfo; import org.geoserver.config.JAIInfo; import org.geoserver.web.GeoServerWicketTestSupport; import org.geotools.image.ImageWorker; import org.geotools.resources.image.ImageUtilities; import org.junit.Assert; import org.junit.Test; import com.sun.media.jai.mlib.MlibWarpRIF; import com.sun.media.jai.opimage.WarpRIF; public class JAIPageTest extends GeoServerWicketTestSupport { @Test public void testValues() { JAIInfo info = (JAIInfo) getGeoServerApplication() .getGeoServer() .getGlobal().getJAI(); login(); tester.startPage(JAIPage.class); tester.assertComponent("form:tileThreads", TextField.class); tester.assertModelValue("form:tileThreads", info.getTileThreads()); } @Test public void testNativeWarp(){ if(!ImageUtilities.isMediaLibAvailable()){ // If medialib acceleration is not available, the test is not needed Assert.assertTrue(true); return; } GeoServer geoServer = getGeoServerApplication() .getGeoServer(); GeoServerInfo global = geoServer .getGlobal(); JAIInfo info = (JAIInfo) global.getJAI(); // Ensure that by default Warp acceleration is set to false Assert.assertFalse(info.isAllowNativeWarp()); // Register Warp as JAI operation JAIExt.registerJAIDescriptor("Warp"); JAIEXTInfo jeinfo = info.getJAIEXTInfo(); Set<String> jeOps = jeinfo.getJAIEXTOperations(); jeOps.remove("Warp"); jeinfo.setJAIEXTOperations(jeOps); jeinfo.getJAIOperations().add("Warp"); info.setJAIEXTInfo(jeinfo); global.setJAI(info); geoServer.save(global); login(); // Ensure the page is rendered tester.startPage(JAIPage.class); tester.assertRenderedPage(JAIPage.class); // Ensure the JAI Page is present if enabled Palette p; Collection jaiext; Object factory; boolean isJAIExtEnabled = ImageWorker.isJaiExtEnabled(); if (isJAIExtEnabled) { tester.assertComponent("form:jaiext", JAIEXTPanel.class); tester.assertComponent("form:jaiext:jaiextOps", Palette.class); p = (Palette) tester.getComponentFromLastRenderedPage("form:jaiext:jaiextOps"); jaiext = p.getChoices(); assertNotNull(jaiext); // JAI choices assertTrue(!jaiext.contains("Warp")); } else { tester.assertInvisible("form:jaiext"); } // Set Native Warp enabled FormTester form = tester.newFormTester("form"); form.setValue("allowNativeWarp", true); form.submit("submit"); // Ensure no exception has been thrown tester.assertNoErrorMessage(); info = (JAIInfo) global.getJAI(); // Check that Warp is enabled if (isJAIExtEnabled) { Assert.assertTrue(info.isAllowNativeWarp()); // Ensure the factory is correctly registered factory = info.getJAI().getOperationRegistry().getFactory(RenderedRegistryMode.MODE_NAME, "Warp"); Assert.assertTrue(factory instanceof MlibWarpRIF); } else { Assert.assertFalse(info.isAllowNativeWarp()); factory = info.getJAI().getOperationRegistry().getFactory(RenderedRegistryMode.MODE_NAME, "Warp"); Assert.assertTrue(factory instanceof WarpRIF); } // Unset Native Warp enabled // Render the page again tester.startPage(JAIPage.class); tester.assertRenderedPage(JAIPage.class); if (isJAIExtEnabled) { tester.assertComponent("form:jaiext", JAIEXTPanel.class); tester.assertComponent("form:jaiext:jaiextOps", Palette.class); p = (Palette) tester.getComponentFromLastRenderedPage("form:jaiext:jaiextOps"); jaiext = p.getChoices(); assertNotNull(jaiext); // JAI choices assertTrue(!jaiext.contains("Warp")); } form = tester.newFormTester("form"); form.setValue("allowNativeWarp", false); form.submit("submit"); // Ensure no exception has been thrown tester.assertNoErrorMessage(); info = (JAIInfo) global.getJAI(); // Check that Warp is disabled Assert.assertFalse(info.isAllowNativeWarp()); // Ensure the factory is correctly registered factory = info.getJAI().getOperationRegistry().getFactory(RenderedRegistryMode.MODE_NAME, "Warp"); Assert.assertTrue(factory instanceof WarpRIF); } }