View Javadoc

1   package com.atlassian.core.util;
2   
3   import org.apache.commons.io.IOUtils;
4   
5   import java.io.InputStream;
6   
7   import junit.framework.TestCase;
8   
9   public class TestImageInfo extends TestCase
10  {
11      public void testCheckJPeg() throws Exception
12      {
13          assertTrue(checkImage("/image.jpg"));
14      }
15  
16      public void testCheckPng() throws Exception
17      {
18          assertTrue(checkImage("/image.png"));
19      }
20  
21      public void testCheckGif() throws Exception
22      {
23          assertTrue(checkImage("/image.gif"));
24      }
25  
26      public void testCheckJPegWithInvalidData() throws Exception
27      {
28          assertFalse(checkImage("/image_invalid.jpg"));
29      }
30  
31      public void testAnInvalidPpmFileDoesNotLeadToEndlessLoops() throws Exception
32      {
33          assertFalse(checkImage("/image_invalid.ppm"));
34      }
35  
36      public void testPngWithCorruptedMetaData() throws Exception
37      {
38          // image that was causing OOM in PNGImageReader
39          assertTrue(checkImage("/image_corrupted.png"));
40      }
41  
42      public void testPngWithJiraTag() throws Exception
43      {
44          assertTrue(checkImage("/image_tagged.png", "jira-system-image-type"));
45          assertFalse(checkImage("/image_tagged.png", "jira-system-image-typex"));
46          assertFalse(checkImage("/image_tagged.png", "jira-system-image-typ"));
47          assertFalse(checkImage("/image_without_comment.png", "jira-system-image-type"));
48      }
49  
50      public void testTruncatedPng() throws Exception
51      {
52          //No IEND chunk, image truncated just after data
53          assertFalse(checkImage("/image_truncated.png", true));
54      }
55  
56      private boolean checkImage(String filename)
57      {
58          return checkImage(filename, null);
59      }
60  
61      private boolean checkImage(String filename, boolean validatePngMetadata)
62      {
63          return checkImage(filename, null, validatePngMetadata);
64      }
65  
66      private boolean checkImage(String filename, String expectedKeyword)
67      {
68          return checkImage(filename, expectedKeyword, false);
69      }
70  
71      private boolean checkImage(String filename, String expectedKeyword, boolean validatePngMetadata)
72      {
73          ImageInfo imageInfo = new ImageInfo();
74          if (validatePngMetadata)
75          {
76              imageInfo.setValidatePngMetadata();
77          }
78          InputStream stream = this.getClass().getResourceAsStream(filename);
79          try
80          {
81              if(expectedKeyword != null)
82              {
83                  imageInfo.setExpectedPngTextKeyword(expectedKeyword);
84              }
85              imageInfo.setInput(stream);
86              return imageInfo.check();
87          }
88          finally
89          {
90              IOUtils.closeQuietly(stream);
91          }
92      }
93  
94  }