package org.richfaces.component.fileUpload; import javax.annotation.Nullable; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.container.test.api.RunAsClient; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.descriptor.api.webapp30.WebAppDescriptor; import org.junit.Test; import org.junit.runner.RunWith; import org.richfaces.integration.RichDeployment; import org.richfaces.shrinkwrap.descriptor.FaceletAsset; import com.google.common.base.Function; @RunWith(Arquillian.class) @RunAsClient public class IT_RF14257_WithContextParam extends IT_RF14257 { private static final long attributeSizeLimit_6KB = 6 * ONE_KB; private static final long attributeSizeLimit_2KB = 2 * ONE_KB; private static final long contextParamSizeLimit_4KB = 4 * ONE_KB; @Deployment(testable = false) public static WebArchive createDeployment() { RichDeployment deployment = new RichDeployment(ITFileUpload.class); deployment.archive().addClass(FileUploadBean.class); addPageWithAttributeSizeLimitGreaterThanContextParamLimit(deployment); addPageWithAttributeSizeLimitLesserThanContextParamLimit(deployment); addPageWithoutAttribute(deployment); deployment.webXml(new Function<WebAppDescriptor, WebAppDescriptor>() { @Override public WebAppDescriptor apply(@Nullable WebAppDescriptor input) { input .getOrCreateContextParam() .paramName("org.richfaces.fileUpload.maxRequestSize") .paramValue(String.valueOf(contextParamSizeLimit_4KB)); return input; } }); return deployment.getFinalArchive(); } @Test public void testOnsizerejectedTriggering_whenAttributeIsGreaterThanContextParam() { browser.get(contextPath.toString() + "withAttributeLimit6KB.jsf"); // check initial state assertOnsizeRejectedTriggered(0); // add file passing both context param size limit and attribute size limit fileUpload.addFile(createFileWithSize(contextParamSizeLimit_4KB - ONE_KB)); assertOnsizeRejectedTriggered(0); // add file not passing context param size limit, but passing attribute size limit fileUpload.addFile(createFileWithSize(contextParamSizeLimit_4KB + ONE_KB)); assertOnsizeRejectedTriggered(0); // add file not passing both size limits fileUpload.addFile(createFileWithSize(attributeSizeLimit_6KB + ONE_KB)); assertOnsizeRejectedTriggered(1); } @Test public void testOnsizerejectedTriggering_whenAttributeIsLesserThanContextParam() { browser.get(contextPath.toString() + "withAttributeLimit2KB.jsf"); // check initial state assertOnsizeRejectedTriggered(0); // add file passing both context param size limit and attribute size limit fileUpload.addFile(createFileWithSize(attributeSizeLimit_2KB - ONE_KB)); assertOnsizeRejectedTriggered(0); // add file not passing attribute size limit, but passing context param size limit fileUpload.addFile(createFileWithSize(attributeSizeLimit_2KB + ONE_KB)); assertOnsizeRejectedTriggered(1); // add file not passing both size limits fileUpload.addFile(createFileWithSize(contextParamSizeLimit_4KB + ONE_KB)); assertOnsizeRejectedTriggered(2); } @Test public void testOnsizerejectedTriggering_whenAttributeIsNotDefined() { browser.get(contextPath.toString() + "withoutAttribute.jsf"); // check initial state assertOnsizeRejectedTriggered(0); // add file passing context param size fileUpload.addFile(createFileWithSize(contextParamSizeLimit_4KB - ONE_KB)); assertOnsizeRejectedTriggered(0); // add file not passing context param size limit fileUpload.addFile(createFileWithSize(contextParamSizeLimit_4KB + ONE_KB)); assertOnsizeRejectedTriggered(1); } private static void addPageWithAttributeSizeLimitGreaterThanContextParamLimit(RichDeployment deployment) { FaceletAsset p = new FaceletAsset(); p.head("<script type='text/javascript'>window.onsizerejected=0;</script>"); p.form("<rich:fileUpload id='fileUpload' fileUploadListener='#{fileUploadBean.listener}' onsizerejected='window.onsizerejected++;' maxFileSize='" + attributeSizeLimit_6KB + "' />"); deployment.archive().addAsWebResource(p, "withAttributeLimit6KB.xhtml"); } private static void addPageWithAttributeSizeLimitLesserThanContextParamLimit(RichDeployment deployment) { FaceletAsset p = new FaceletAsset(); p.head("<script type='text/javascript'>window.onsizerejected=0;</script>"); p.form("<rich:fileUpload id='fileUpload' fileUploadListener='#{fileUploadBean.listener}' onsizerejected='window.onsizerejected++;' maxFileSize='" + attributeSizeLimit_2KB + "' />"); deployment.archive().addAsWebResource(p, "withAttributeLimit2KB.xhtml"); } private static void addPageWithoutAttribute(RichDeployment deployment) { FaceletAsset p = new FaceletAsset(); p.head("<script type='text/javascript'>window.onsizerejected=0;</script>"); p.form("<rich:fileUpload id='fileUpload' fileUploadListener='#{fileUploadBean.listener}' onsizerejected='window.onsizerejected++;' />"); deployment.archive().addAsWebResource(p, "withoutAttribute.xhtml"); } }