/*
* Copyright (c) 2002-2012 Alibaba Group Holding Limited.
* All rights reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.citrus.service.form.impl.validation;
import static com.alibaba.citrus.test.TestEnvStatic.*;
import static com.alibaba.citrus.test.TestUtil.*;
import static org.junit.Assert.*;
import java.io.File;
import com.alibaba.citrus.util.HumanReadableSize;
import org.junit.Before;
import org.junit.Test;
public class UploadedFileValidatorTests extends AbstractValidatorTests<UploadedFileValidator> {
private File txt_size3;
private File txt_size10;
private File txt_size4;
private File gif_size4;
private File GIF_size4_1;
private File jpg_size0;
private File jpg_size5;
private File JPG_size5_1;
private File notype_size4;
@Before
public void prepareFile() {
txt_size3 = new File(srcdir, "data/file1.txt");
txt_size10 = new File(srcdir, "data/file2.txt");
txt_size4 = new File(srcdir, "data/file3.txt");
gif_size4 = new File(srcdir, "data/file4.gif");
GIF_size4_1 = new File(srcdir, "data/file4_1.GIF");
jpg_size0 = new File(srcdir, "data/file5.jpg");
jpg_size5 = new File(srcdir, "data/file6.jpg");
JPG_size5_1 = new File(srcdir, "data/file6_1.JPG");
notype_size4 = new File(srcdir, "data/file7");
assertEquals(3, txt_size3.length());
assertEquals(10, txt_size10.length());
assertEquals(4, txt_size4.length());
assertEquals(4, gif_size4.length());
assertEquals(4, GIF_size4_1.length());
assertEquals(0, jpg_size0.length());
assertEquals(5, jpg_size5.length());
assertEquals(5, JPG_size5_1.length());
assertEquals(4, notype_size4.length());
}
@Override
protected String getGroupName() {
return "g";
}
@Test
public void init_contentTypes() throws Exception {
UploadedFileValidator v = newValidator();
// empty
v.setContentType(null);
assertArrayEquals(null, v.getContentType());
v.setContentType(new String[] { });
assertArrayEquals(null, v.getContentType());
v.setContentType(new String[] { " ", null });
assertArrayEquals(null, v.getContentType());
// with values
v.setContentType(new String[] { " AAA", "", " bbb/CCC " });
assertArrayEquals(new String[] { "aaa", "bbb/ccc" }, v.getContentType());
}
@Test
public void init_sizeLimit() throws Exception {
UploadedFileValidator v = newValidator();
// default value
assertEquals(-1, v.getMinSize().getValue());
assertEquals(-1, v.getMaxSize().getValue());
// set null
try {
v.setMinSize(null);
fail();
} catch (IllegalArgumentException e) {
assertThat(e, exception("minSize"));
}
try {
v.setMaxSize(null);
fail();
} catch (IllegalArgumentException e) {
assertThat(e, exception("maxSize"));
}
// set values
v.setMinSize(new HumanReadableSize(123));
v.setMaxSize(new HumanReadableSize(456));
assertEquals(123, v.getMinSize().getValue());
assertEquals(456, v.getMaxSize().getValue());
}
/** 无fileItems,也通过。如果不允许这种情况,则用required-validator来确保fileItems存在。 */
@Test
public void validate_noFileItems() throws Exception {
requestWithUpload("");
assertEquals(true, field10.isValid());
assertEquals(null, field10.getMessage());
}
/** 无参数。 */
@Test
public void validate_defaultConfig() throws Exception {
requestWithUpload(txt_size3);
assertEquals(true, field1.isValid());
assertEquals(null, field1.getMessage());
}
/** minSize=4 */
@Test
public void validate_minSize() throws Exception {
requestWithUpload("", new File[] { txt_size3, txt_size10 }); // size=3,10
assertEquals(false, field2.isValid());
assertEquals("field2 must be larger than 4", field2.getMessage());
requestWithUpload("", txt_size10); // size=10
assertEquals(true, field2.isValid());
assertEquals(null, field2.getMessage());
requestWithUpload("", txt_size4); // size=4
assertEquals(true, field2.isValid());
assertEquals(null, field2.getMessage());
}
/** maxSize=4 */
@Test
public void validate_maxSize() throws Exception {
requestWithUpload("", "", new File[] { txt_size4, txt_size10 }); // size=4,10
assertEquals(false, field3.isValid());
assertEquals("field3 must be smaller than 4", field3.getMessage());
requestWithUpload("", "", txt_size3); // size=3
assertEquals(true, field3.isValid());
assertEquals(null, field3.getMessage());
requestWithUpload("", "", txt_size4); // size=4
assertEquals(true, field3.isValid());
assertEquals(null, field3.getMessage());
}
/** minSize=4, maxSize=9 */
@Test
public void validate_minSize_maxSize() throws Exception {
requestWithUpload("", "", "", new File[] { txt_size4, txt_size10 }); // size=4,10
assertEquals(false, field4.isValid());
assertEquals("field4 should be in size between 4 and 9", field4.getMessage());
requestWithUpload("", "", "", txt_size3); // size=3
assertEquals(false, field4.isValid());
assertEquals("field4 should be in size between 4 and 9", field4.getMessage());
requestWithUpload("", "", "", txt_size4); // size=4
assertEquals(true, field4.isValid());
assertEquals(null, field4.getMessage());
}
/** contentType=image/gif */
@Test
public void validate_contentType() throws Exception {
requestWithUpload("", "", "", "", new File[] { txt_size3, gif_size4 });
assertEquals(false, field5.isValid());
assertEquals("field5 should be of content type [image/gif]", field5.getMessage());
requestWithUpload("", "", "", "", txt_size3);
assertEquals(false, field5.isValid());
assertEquals("field5 should be of content type [image/gif]", field5.getMessage());
requestWithUpload("", "", "", "", gif_size4);
assertEquals(true, field5.isValid());
assertEquals(null, field5.getMessage());
}
/** contentType=image/gif, text/plain */
@Test
public void validate_contentTypes() throws Exception {
requestWithUpload("", "", "", "", "", new File[] { txt_size3, gif_size4 });
assertEquals(true, field6.isValid());
assertEquals(null, field6.getMessage());
requestWithUpload("", "", "", "", "", jpg_size0);
assertEquals(false, field6.isValid());
assertEquals("field6 should be of content type [image/gif, text/plain]", field6.getMessage());
}
/** contentType=image/*, minSize=4, maxSize=9 */
@Test
public void validate_minSize_maxSize_contentTypes() throws Exception {
requestWithUpload("", "", "", "", "", "", new File[] { gif_size4, jpg_size0 });
assertEquals(false, field7.isValid());
assertEquals("field7 should be of content type [image/] and be in size between 4 and 9", field7.getMessage());
requestWithUpload("", "", "", "", "", "", new File[] { gif_size4, jpg_size5 });
assertEquals(true, field7.isValid());
assertEquals(null, field7.getMessage());
requestWithUpload("", "", "", "", "", "", jpg_size5);
assertEquals(true, field7.isValid());
assertEquals(null, field7.getMessage());
}
/** minSize=0, maxSize=0 */
@Test
public void validate_forceEmptyFile() throws Exception {
requestWithUpload("", "", "", "", "", "", "", jpg_size0);
assertEquals(true, field8.isValid());
assertEquals(null, field8.getMessage());
requestWithUpload("", "", "", "", "", "", "", new File[] { gif_size4, jpg_size5 });
assertEquals(false, field8.isValid());
assertEquals("field8 should be in size between 0 and 0", field8.getMessage());
}
@Test
public void validate_noContentType() throws Exception {
// minSize=4
requestWithUpload("", notype_size4); // no ContentType, size=4
assertEquals(true, field2.isValid());
assertEquals(null, field2.getMessage());
// contentType=image/gif
requestWithUpload("", "", "", "", notype_size4); // no ContentType, size=4
assertEquals(false, field5.isValid());
assertEquals("field5 should be of content type [image/gif]", field5.getMessage());
}
@Test
public void validate_extension() throws Exception {
// ext=jpg
requestWithUpload("", "", "", "", "", "", "", "", jpg_size5);
assertEquals(true, field9.isValid());
assertEquals(null, field9.getMessage());
// ext=JPG
requestWithUpload("", "", "", "", "", "", "", "", JPG_size5_1);
assertEquals(true, field9.isValid());
assertEquals(null, field9.getMessage());
// ext=gif
requestWithUpload("", "", "", "", "", "", "", "", gif_size4);
assertEquals(false, field9.isValid());
assertEquals("field9 should be of [jpg, null]", field9.getMessage());
// ext=GIF
requestWithUpload("", "", "", "", "", "", "", "", GIF_size4_1);
assertEquals(false, field9.isValid());
assertEquals("field9 should be of [jpg, null]", field9.getMessage());
// ext=null
requestWithUpload("", "", "", "", "", "", "", "", notype_size4);
assertEquals(true, field9.isValid());
assertEquals(null, field9.getMessage());
}
}