package junit; import java.io.File; import java.io.FileOutputStream; import java.io.InputStream; import junit.framework.TestCase; import org.mailster.smtp.util.SharedTmpFileInputStream; import wiser.WiserMessage; /** * This class tests that {@link SharedTmpFileInputStream} will * handle private streams independently and will delete temporary * files when all references are closed. * * @author De Oliveira Edouard <doe_wanted@yahoo.fr> */ public class TempFilesTest extends TestCase { public void testTmpFileStreams() throws Exception { File f = new File("file.tmp"); FileOutputStream fos = new FileOutputStream(f); byte data[] = "Hello this is test data\r\n".getBytes(); fos.write(data); fos.flush(); fos.close(); assertTrue(f.exists()); SharedTmpFileInputStream st = new SharedTmpFileInputStream(f); InputStream in1 = st.newStream(0, -1); InputStream in2 = st.newStream(0, -1); InputStream in3 = st.newStream(2, -1); // test basic access to stream assertEquals(data[0], st.read()); assertEquals(data[1], st.read()); // close master stream and test if the file is deleted st.close(); assertTrue(f.exists()); // test independency between streams assertEquals(data[0], in2.read()); byte[] l = new byte[3]; assertEquals(3, in2.read(l)); for (int i=0;i<3;i++) assertEquals(data[i+1], l[i]); assertEquals(data[0], in1.read()); // test reference count in2.close(); assertTrue(f.exists()); // Test the offset assertEquals(data[2], in3.read()); in3.close(); assertTrue(f.exists()); // Test if file is finally closed when no more references are open WiserMessage msg = new WiserMessage("sender", "receiver", in1); // Dispose should call close on latest open ref and trigger file deleting msg.dispose(); assertFalse(f.exists()); } }