Author: scottbw
Date: Sun Mar 3 16:10:03 2013
New Revision: 1452059
URL: http://svn.apache.org/r1452059
Log:
Added test case for WOOKIE-402; also made sure tests are repeatable by cleaning
up after upload tests
Modified:
wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
Modified:
wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
URL:
http://svn.apache.org/viewvc/wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java?rev=1452059&r1=1452058&r2=1452059&view=diff
==============================================================================
---
wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
(original)
+++
wookie/trunk/src-tests/org/apache/wookie/tests/functional/WidgetsControllerTest.java
Sun Mar 3 16:10:03 2013
@@ -71,6 +71,29 @@ public class WidgetsControllerTest exten
delete = new DeleteMethod(TEST_WIDGETS_SERVICE_URL_VALID +
encodeString("/" + WIDGET_ID_UPLOAD_POLICIES_TEST));
client.executeMethod(delete);
}
+
+ /*
+ * Utility method for creating a temp directory
+ * @return a new temp directory
+ * @throws IOException
+ */
+ public static File createTempDirectory() throws IOException {
+ final File temp;
+
+ temp = File.createTempFile("temp",
Long.toString(System.nanoTime()));
+
+ if (!(temp.delete())) {
+ throw new IOException("Could not delete temp file: "
+ + temp.getAbsolutePath());
+ }
+
+ if (!(temp.mkdir())) {
+ throw new IOException("Could not create temp directory:
"
+ + temp.getAbsolutePath());
+ }
+
+ return (temp);
+ }
/**
* Test GET all widgets
@@ -194,7 +217,13 @@ public class WidgetsControllerTest exten
client.executeMethod(post);
int code = post.getStatusCode();
assertEquals(201,code);
- post.releaseConnection();
+ post.releaseConnection();
+
+ //
+ // Cleanup
+ //
+ DeleteMethod delete = new DeleteMethod(TEST_WIDGETS_SERVICE_URL_VALID +
encodeString("/" + WIDGET_ID_UPLOAD_TEST));
+ client.executeMethod(delete);
}
/**
@@ -252,6 +281,12 @@ public class WidgetsControllerTest exten
assertEquals(WIDGET_ID_UPLOAD_POLICIES_TEST,
policy.getAttributeValue("scope"));
assertEquals("*", policy.getAttributeValue("origin"));
assertEquals("ALLOW", policy.getAttributeValue("directive"));
+
+ //
+ // Cleanup
+ //
+ DeleteMethod delete = new DeleteMethod(TEST_WIDGETS_SERVICE_URL_VALID +
encodeString("/" + WIDGET_ID_UPLOAD_POLICIES_TEST));
+ client.executeMethod(delete);
}
@@ -354,6 +389,128 @@ public class WidgetsControllerTest exten
assertEquals(400,code);
post.releaseConnection();
}
+
+ /**
+ * Test to ensure that, given two widgets with identical filenames, the
second uploaded file
+ * does not overwrite the first when it comes to downloading the widget. See
WOOKIE-402
+ *
+ * @throws BadWidgetZipFileException
+ * @throws BadManifestException
+ * @throws Exception
+ */
+ @Test
+ public void importWidgetSameFilename() throws BadWidgetZipFileException,
BadManifestException, Exception{
+
+ HttpClient client = new HttpClient();
+ //
+ // Use admin credentials
+ //
+ setAuthenticationCredentials(client);
+
+ PostMethod post = new PostMethod(TEST_WIDGETS_SERVICE_URL_VALID);
+
+ //
+ // Use upload test widget
+ //
+ File uploadFile = new File("src-tests/testdata/upload-test.wgt");
+ assertTrue(uploadFile.exists());
+
+ //
+ // Add test wgt file to POST
+ //
+ Part[] parts = { new FilePart(uploadFile.getName(), uploadFile) };
+ post.setRequestEntity(new MultipartRequestEntity(parts, post
+ .getParams()));
+
+ //
+ // POST the file to /widgets and check we get 201 (Created)
+ //
+ client.executeMethod(post);
+ int code = post.getStatusCode();
+ assertEquals(201,code);
+ post.releaseConnection();
+
+ //
+ // Now, upload a new widget, with the same filename
+ // We'll use the WARP widget
+ //
+ uploadFile = new
File("src-tests/testdata/upload-policies-test.wgt");
+ assertTrue(uploadFile.exists());
+ File tempFolder = createTempDirectory();
+ File newFile = new
File(tempFolder+File.separator+"upload-test.wgt");
+ FileUtils.copyFile(uploadFile, newFile);
+ assertTrue(newFile.exists());
+
+ System.out.println(newFile.getPath());
+
+ //
+ // Add test wgt file to POST
+ //
+ post = new PostMethod(TEST_WIDGETS_SERVICE_URL_VALID);
+ Part[] newParts = { new FilePart(newFile.getName(), newFile) };
+ post.setRequestEntity(new MultipartRequestEntity(newParts, post
+ .getParams()));
+
+ //
+ // POST the file to /widgets and check we get 201 (Created)
+ //
+ client.executeMethod(post);
+ code = post.getStatusCode();
+ assertEquals(201,code);
+ post.releaseConnection();
+
+ //
+ // Now lets try to download the first test widget; this should not
+ // have been overwritten by the second one we uploaded, even though
we
+ // gave it the same file name
+ //
+ GetMethod get = new
GetMethod(TEST_WIDGETS_SERVICE_URL_VALID+"/"+"http://uploadtest");
+ get.setRequestHeader("Accept","application/widget");
+ client.executeMethod(get);
+ code = get.getStatusCode();
+ assertEquals(200,code);
+
+ InputStream inputStream = get.getResponseBodyAsStream();
+ tempFolder = createTempDirectory();
+ File downloadedFile = new File(tempFolder + File.separator +
"downloadedTestWidget.zip");
+ OutputStream out = new FileOutputStream(downloadedFile);
+
+ int read = 0;
+ byte[] bytes = new byte[1024];
+
+ while ((read = inputStream.read(bytes)) != -1) {
+ out.write(bytes, 0, read);
+ }
+ inputStream.close();
+ out.flush();
+ out.close();
+ get.releaseConnection();
+
+ //
+ // check the downloaded file
+ //
+ W3CWidgetFactory fac = new W3CWidgetFactory();
+ fac.setStartPageProcessor(null);
+ File outputDir = new File("src-tests" + File.separatorChar +
"testdata" + File.separatorChar + "widgets");
+ outputDir.mkdirs();
+ fac.setOutputDirectory("src-tests" + File.separatorChar +
"testdata" + File.separatorChar + "widgets");
+ W3CWidget widget = fac.parse(downloadedFile);
+
+ //
+ // Cleanup
+ //
+ FileUtils.deleteQuietly(downloadedFile);
+ FileUtils.deleteQuietly(tempFolder);
+ FileUtils.deleteQuietly(newFile);
+ DeleteMethod delete = new
DeleteMethod(TEST_WIDGETS_SERVICE_URL_VALID + encodeString("/" +
WIDGET_ID_UPLOAD_TEST));
+ client.executeMethod(delete);
+ delete = new DeleteMethod(TEST_WIDGETS_SERVICE_URL_VALID +
encodeString("/" + WIDGET_ID_UPLOAD_POLICIES_TEST));
+ client.executeMethod(delete);
+
+ assertEquals("http://uploadtest", widget.getIdentifier());
+
+
+ }
@Test
public void deleteWidgetUnauthorized() throws HttpException, IOException{
@@ -432,9 +589,7 @@ public class WidgetsControllerTest exten
// Use admin credentials
//
setAuthenticationCredentials(client);
-
- PostMethod post = new PostMethod(TEST_WIDGETS_SERVICE_URL_VALID +
encodeString("/" + WIDGET_ID_UPLOAD_TEST));
-
+
//
// Use upload test widget
//
@@ -444,15 +599,42 @@ public class WidgetsControllerTest exten
//
// Add test wgt file to POST
//
+ PostMethod post = new PostMethod(TEST_WIDGETS_SERVICE_URL_VALID +
encodeString("/" + WIDGET_ID_UPLOAD_TEST));
Part[] parts = { new FilePart(file.getName(), file) };
post.setRequestEntity(new MultipartRequestEntity(parts, post
.getParams()));
//
- // POST the file to /widgets and check we get 200 (Updated)
+ // POST the file to /widgets and check we get 201 (Created)
//
client.executeMethod(post);
int code = post.getStatusCode();
+ assertEquals(201,code);
+ post.releaseConnection();
+
+ //
+ // Now lets try updating
+ //
+ post = new PostMethod(TEST_WIDGETS_SERVICE_URL_VALID + encodeString("/" +
WIDGET_ID_UPLOAD_TEST));
+
+ //
+ // Use upload test widget
+ //
+ file = new File("src-tests/testdata/upload-test.wgt");
+ assertTrue(file.exists());
+
+ //
+ // Add test wgt file to POST
+ //
+ Part[] newParts = { new FilePart(file.getName(), file) };
+ post.setRequestEntity(new MultipartRequestEntity(newParts, post
+ .getParams()));
+
+ //
+ // POST the file to /widgets and check we get 200 (Updated)
+ //
+ client.executeMethod(post);
+ code = post.getStatusCode();
assertEquals(200,code);
post.releaseConnection();