Improved unit tests to be independent of externally running servlet container, now every test runs its own embedded jetty server (and stops it afterward). Removed all eclipse artifacts (.project, .classpath, .settings, etc.) and added to .gitignore to be independent of development environment (can be autogenerated by maven, or better yet use m2eclipse). Removed embedded dependency jars since they are handled automatically by maven.
62 lines
2.7 KiB
Java
62 lines
2.7 KiB
Java
package net.sourceforge.plantuml.servlet;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.InputStream;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Date;
|
|
import java.util.Locale;
|
|
|
|
import com.meterware.httpunit.GetMethodWebRequest;
|
|
import com.meterware.httpunit.WebConversation;
|
|
import com.meterware.httpunit.WebRequest;
|
|
import com.meterware.httpunit.WebResponse;
|
|
|
|
public class TestImage extends WebappTestCase {
|
|
/**
|
|
* Verifies the generation of the version image from an encoded URL
|
|
*/
|
|
public void testVersionImage() throws Exception {
|
|
WebConversation conversation = new WebConversation();
|
|
WebRequest request = new GetMethodWebRequest(getServerUrl() + "img/AqijAixCpmC0");
|
|
WebResponse response = conversation.getResource( request);
|
|
// Analyze response
|
|
// Verifies the Content-Type header
|
|
assertEquals( "Response content type is not PNG", "image/png", response.getContentType());
|
|
// Get the image and verify its size
|
|
InputStream responseStream = response.getInputStream();
|
|
ByteArrayOutputStream imageStream = new ByteArrayOutputStream();
|
|
byte[] buf = new byte[1024];
|
|
int n = 0;
|
|
while( ( n = responseStream.read( buf)) != -1) {
|
|
imageStream.write( buf, 0, n);
|
|
}
|
|
imageStream.close();
|
|
responseStream.close();
|
|
byte[] inMemoryImage = imageStream.toByteArray();
|
|
int diagramLen = inMemoryImage.length;
|
|
assertTrue( diagramLen > 10000);
|
|
assertTrue( diagramLen < 20000);
|
|
}
|
|
|
|
/**
|
|
* Verifies that the HTTP header of a diagram incites the browser to cache it.
|
|
*/
|
|
public void testDiagramHttpHeader() throws Exception {
|
|
WebConversation conversation = new WebConversation();
|
|
// Bob -> Alice : hello
|
|
WebRequest request = new GetMethodWebRequest(getServerUrl() + "img/SyfFKj2rKt3CoKnELR1Io4ZDoSa70000");
|
|
WebResponse response = conversation.getResource( request);
|
|
// Analyze response
|
|
// Verifies the Content-Type header
|
|
assertEquals( "Response content type is not PNG", "image/png", response.getContentType());
|
|
// Verifies the availability of the Expires entry in the response header
|
|
assertNotNull( response.getHeaderField( "Expires"));
|
|
// Verifies the availability of the Last-Modified entry in the response header
|
|
assertNotNull( response.getHeaderField( "Last-Modified"));
|
|
// Verifies the Last-Modified value is in the past
|
|
SimpleDateFormat format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss ZZZ", Locale.ENGLISH);
|
|
Date lastModified = format.parse( response.getHeaderField( "Last-Modified"));
|
|
assertTrue( "Last-Modified is not in the past", lastModified.before( new Date()));
|
|
}
|
|
}
|