1   package com.atlassian.core.spool;
2   
3   import com.mockobjects.dynamic.Mock;
4   import org.apache.commons.io.IOUtils;
5   
6   import java.io.BufferedOutputStream;
7   import java.io.ByteArrayInputStream;
8   import java.io.File;
9   import java.io.FileOutputStream;
10  
11  public class TestSpoolStreams extends AbstractSpoolTest
12  {
13      public void testDeferredSpoolOutputStreamInMemory() throws Exception
14      {
15          Mock mockFileFactory = new Mock(FileFactory.class);
16          mockFileFactory.expectNotCalled("createNewFile");
17  
18          FileFactory fileFactory = (FileFactory) mockFileFactory.proxy();
19          DeferredSpoolFileOutputStream out = new DeferredSpoolFileOutputStream(1024, fileFactory);
20          byte[] data = getTestData(1024);
21  
22          IOUtils.copy(new ByteArrayInputStream(data), out);
23  
24          assertTrue(out.isInMemory());
25          if (out.getFile() != null)
26              assertFalse(out.getFile().exists());
27  
28          mockFileFactory.verify();
29      }
30  
31      public void testDeferredSpoolOutputStreamToFile() throws Exception
32      {
33          Mock mockFileFactory = new Mock(FileFactory.class);
34          File testSpoolFile = getTestFile();
35          mockFileFactory.expectAndReturn("createNewFile", testSpoolFile);
36  
37          FileFactory fileFactory = (FileFactory) mockFileFactory.proxy();
38          DeferredSpoolFileOutputStream out = new DeferredSpoolFileOutputStream(1024, fileFactory);
39          byte[] data = getTestData(2048);
40  
41          IOUtils.copy(new ByteArrayInputStream(data), out);
42          out.close();
43  
44          File spoolFile = out.getFile();
45  
46          assertFalse(out.isInMemory());
47          assertNotNull(spoolFile);
48          assertEquals(spoolFile, testSpoolFile);
49          assertTrue(spoolFile.exists());
50  
51          IOUtils.contentEquals(new ByteArrayInputStream(data), out.getInputStream());
52  
53          mockFileFactory.verify();
54      }
55  
56      public void testDeferredSpoolInputStreamRemovesSpoolOnClose() throws Exception
57      {
58          byte[] data = getTestData(2048);
59          File testFile = getTestFile();
60  
61          BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(testFile));
62          IOUtils.write(data, bos);
63          bos.close();
64  
65          SpoolFileInputStream dfis = new SpoolFileInputStream(testFile);
66          dfis.close();
67  
68          assertFalse(testFile.exists());
69      }
70  }