]> source.dussan.org Git - vaadin-framework.git/commitdiff
Call endUpload() in finally block of fail handling (#14677).
authorDenis Anisimov <denis@vaadin.com>
Tue, 16 Sep 2014 17:16:59 +0000 (20:16 +0300)
committerSauli Tähkäpää <sauli@vaadin.com>
Tue, 14 Oct 2014 13:33:52 +0000 (16:33 +0300)
Change-Id: I0b5976abf0d8804e8cd34c5dd489da8617ef89f1

server/src/com/vaadin/ui/Upload.java
server/tests/src/com/vaadin/tests/server/component/upload/UploadTest.java [new file with mode: 0644]

index 4c248d68ae2634ebe50451d7cbcc655202378a93..e7b5bdee2601c1c291393ff81f0a37877f4d5425 100644 (file)
@@ -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 (file)
index 0000000..2132829
--- /dev/null
@@ -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();
+        }
+    }
+}