summaryrefslogtreecommitdiffstats
path: root/server
diff options
context:
space:
mode:
authorDenis Anisimov <denis@vaadin.com>2014-09-16 20:16:59 +0300
committerHenri Sara <hesara@vaadin.com>2014-10-09 13:30:44 +0000
commit3f728bea50824b14a3cd5eaa05a7df99e9cd3dda (patch)
treee7135029637d385c3dc0bb5a405b449509cd4680 /server
parent709f35aca0f445444c8052015e34113e567a3166 (diff)
downloadvaadin-framework-3f728bea50824b14a3cd5eaa05a7df99e9cd3dda.tar.gz
vaadin-framework-3f728bea50824b14a3cd5eaa05a7df99e9cd3dda.zip
Call endUpload() in finally block of fail handling (#14677).
Change-Id: I0b5976abf0d8804e8cd34c5dd489da8617ef89f1
Diffstat (limited to 'server')
-rw-r--r--server/src/com/vaadin/ui/Upload.java26
-rw-r--r--server/tests/src/com/vaadin/tests/server/component/upload/UploadTest.java101
2 files changed, 115 insertions, 12 deletions
diff --git a/server/src/com/vaadin/ui/Upload.java b/server/src/com/vaadin/ui/Upload.java
index 1c953779e4..693bd74dbf 100644
--- a/server/src/com/vaadin/ui/Upload.java
+++ b/server/src/com/vaadin/ui/Upload.java
@@ -1150,23 +1150,25 @@ public class Upload extends AbstractComponent implements Component.Focusable,
fireUploadSuccess(event.getFileName(), event.getMimeType(),
event.getContentLength());
endUpload();
- markAsDirty();
}
@Override
public void streamingFailed(StreamingErrorEvent event) {
- Exception exception = event.getException();
- if (exception instanceof NoInputStreamException) {
- fireNoInputStream(event.getFileName(),
- event.getMimeType(), 0);
- } else if (exception instanceof NoOutputStreamException) {
- fireNoOutputStream(event.getFileName(),
- event.getMimeType(), 0);
- } else {
- fireUploadInterrupted(event.getFileName(),
- event.getMimeType(), 0, exception);
+ try {
+ Exception exception = event.getException();
+ if (exception instanceof NoInputStreamException) {
+ fireNoInputStream(event.getFileName(),
+ event.getMimeType(), 0);
+ } else if (exception instanceof NoOutputStreamException) {
+ fireNoOutputStream(event.getFileName(),
+ event.getMimeType(), 0);
+ } else {
+ fireUploadInterrupted(event.getFileName(),
+ event.getMimeType(), 0, exception);
+ }
+ } finally {
+ endUpload();
}
- endUpload();
}
};
}
diff --git a/server/tests/src/com/vaadin/tests/server/component/upload/UploadTest.java b/server/tests/src/com/vaadin/tests/server/component/upload/UploadTest.java
new file mode 100644
index 0000000000..2132829c0a
--- /dev/null
+++ b/server/tests/src/com/vaadin/tests/server/component/upload/UploadTest.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2000-2014 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.vaadin.tests.server.component.upload;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import com.vaadin.server.StreamVariable;
+import com.vaadin.server.StreamVariable.StreamingErrorEvent;
+import com.vaadin.ui.Upload;
+
+/**
+ *
+ * @author Vaadin Ltd
+ */
+public class UploadTest {
+
+ @Test
+ public void getStreamVariable_streamingFailed_endUploadIsCalled() {
+ TestUpload upload = new TestUpload();
+ upload.startUpload();
+ StreamVariable variable = upload.getStreamVariable();
+ try {
+ variable.streamingFailed(new TestStreamingErrorEvent());
+ } catch (Exception e) {
+ }
+ Assert.assertFalse(upload.isUploading());
+ }
+
+ private static class TestStreamingErrorEvent implements StreamingErrorEvent {
+
+ @Override
+ public String getFileName() {
+ return null;
+ }
+
+ @Override
+ public String getMimeType() {
+ return null;
+ }
+
+ @Override
+ public long getContentLength() {
+ return 0;
+ }
+
+ @Override
+ public long getBytesReceived() {
+ return 0;
+ }
+
+ @Override
+ public Exception getException() {
+ return new Exception();
+ }
+
+ }
+
+ private static class TestUpload extends Upload {
+
+ @Override
+ public StreamVariable getStreamVariable() {
+ return super.getStreamVariable();
+ }
+
+ @Override
+ protected void fireNoInputStream(String filename, String MIMEType,
+ long length) {
+ fireEvent();
+ }
+
+ @Override
+ protected void fireNoOutputStream(String filename, String MIMEType,
+ long length) {
+ fireEvent();
+ }
+
+ @Override
+ protected void fireUploadInterrupted(String filename, String MIMEType,
+ long length, Exception e) {
+ fireEvent();
+ }
+
+ private void fireEvent() {
+ throw new NullPointerException();
+ }
+ }
+}