package com.limegroup.gnutella.malware;
import junit.framework.Test;
import org.limewire.core.settings.FilterSettings;
import org.limewire.util.BaseTestCase;
/**
* Tests that descriptions of dangerous file types are encoded and decoded
* correctly.
*/
public class FileExtensionEncoderTest extends BaseTestCase {
final static String fooMime = "application/x-foo";
final static String[] fooExt = new String[] {"foo", "football"};
final static DangerousFileType foo =
new DangerousFileType(fooMime, fooExt);
final static String barMime = "application/x-bar";
final static String[] barExt = new String[] {"bar"};
final static DangerousFileType bar =
new DangerousFileType(barMime, barExt);
public FileExtensionEncoderTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(FileExtensionEncoderTest.class);
}
private void encodeAndDecode(DangerousFileType[] in) throws Exception {
String setting = FileExtensionEncoder.encodeSetting(in);
DangerousFileType[] out = FileExtensionEncoder.decodeSetting(setting);
// Check that the decoded types match the encoded types
checkTypesMatch(in, out);
}
private void checkTypesMatch(DangerousFileType[] in,
DangerousFileType[] out) throws Exception {
assertEquals(in.length, out.length);
for(int i = 0; i < in.length; i++) {
assertTrue(in[i].mimeType.equals(out[i].mimeType));
assertEquals(in[i].extensions.length, out[i].extensions.length);
for(int j = 0; j < in[i].extensions.length; j++)
assertEquals(in[i].extensions[j], out[i].extensions[j]);
}
}
/**
* Tests that we remembered to generate a new setting after
* changing the known file types.
*/
public void testSettingIsUpToDate() throws Exception {
String setting = FilterSettings.DANGEROUS_FILE_TYPES.get();
DangerousFileType[] a = FileExtensionEncoder.decodeSetting(setting);
DangerousFileType[] b = DangerousFileType.getKnownTypes();
checkTypesMatch(a, b);
}
public void testNoFileTypes() throws Exception {
encodeAndDecode(new DangerousFileType[0]);
}
public void testOneFileType() throws Exception {
encodeAndDecode(new DangerousFileType[] {foo});
}
public void testTwoFileTypes() throws Exception {
encodeAndDecode(new DangerousFileType[] {foo, bar});
}
public void testKnownFileTypes() throws Exception {
encodeAndDecode(DangerousFileType.getKnownTypes());
}
public void testDetectsBrokenSetting() throws Exception {
String setting = FilterSettings.DANGEROUS_FILE_TYPES.get();
assertGreaterThan(1, setting.length());
setting = setting.substring(1); // Borked
try {
FileExtensionEncoder.decodeSetting(setting);
} catch(IllegalArgumentException expected) {
return;
}
fail("decoding should have failed");
}
}