package com.rarchives.ripme.tst.ripper.rippers; import java.io.File; import java.io.IOException; import java.util.Arrays; import junit.framework.TestCase; import org.apache.log4j.ConsoleAppender; import org.apache.log4j.Level; import org.apache.log4j.Logger; import com.rarchives.ripme.ripper.AbstractRipper; import com.rarchives.ripme.utils.Utils; /** * Contains helper methods for testing rippers. */ public class RippersTest extends TestCase { public final Logger logger = Logger.getLogger(RippersTest.class); /** Dummy test to make JUnit not complain */ public void test() { assert(true); } protected void testRipper(AbstractRipper ripper) { try { // Turn on Debug logging ((ConsoleAppender)Logger.getRootLogger().getAppender("stdout")).setThreshold(Level.DEBUG); // Decrease timeout Utils.setConfigInteger("page.timeout", 20 * 1000); ripper.setup(); ripper.markAsTest(); ripper.rip(); assertTrue("Failed to download a single file from " + ripper.getURL(), ripper.getWorkingDir().listFiles().length >= 1); } catch (IOException e) { if (e.getMessage().contains("Ripping interrupted")) { // We expect some rips to get interrupted } else { e.printStackTrace(); fail("Failed to rip " + ripper.getURL() + " : " + e.getMessage()); } } catch (Exception e) { e.printStackTrace(); fail("Failed to rip " + ripper.getURL() + " : " + e.getMessage()); } finally { deleteDir(ripper.getWorkingDir()); } } /** File extensions that are safe to delete. */ private static final String[] SAFE_EXTENSIONS = {"png", "jpg", "jpeg", "gif", "mp4", "webm", "mov", "mpg", "mpeg", "txt", "log", "php"}; /** Recursively deletes a directory */ protected void deleteDir(File dir) { if (!dir.getName().contains("_")) { // All ripped albums contain an underscore // Don't delete an album if it doesn't have an underscore return; } for (File f : dir.listFiles()) { boolean safe = false; for (String ext : SAFE_EXTENSIONS) { safe |= f.getAbsolutePath().toLowerCase().endsWith("." + ext); } if (!safe) { // Found a file we shouldn't delete! Stop deleting immediately. return; } if (f.isDirectory()) { deleteDir(f); } f.delete(); } dir.delete(); } protected void deleteSubdirs(File workingDir) { for (File f : workingDir.listFiles()) { if (f.isDirectory()) { for (File sf : f.listFiles()) { logger.debug("Deleting " + sf); sf.delete(); } logger.debug("Deleting " + f); f.delete(); } } } }