Browse Source

Try to stop the downloader test flaking.

Replace tempremental in-order mocking with a real output stream.
Allow maps to be serialised in any order.

Change-Id: Ie181cc23920b98717acdcac0fce02a9afdce6e85
Reviewed-on: http://gerrit.dmdirc.com/4066
Reviewed-by: Greg Holmes <greg@dmdirc.com>
Automatic-Compile: DMDirc Build Manager
changes/66/4066/2
Chris Smith 9 years ago
parent
commit
c4dde2f42b
1 changed files with 25 additions and 22 deletions
  1. 25
    22
      test/com/dmdirc/util/io/DownloaderTest.java

+ 25
- 22
test/com/dmdirc/util/io/DownloaderTest.java View File

26
 import com.google.common.collect.Maps;
26
 import com.google.common.collect.Maps;
27
 import com.google.common.jimfs.Configuration;
27
 import com.google.common.jimfs.Configuration;
28
 import com.google.common.jimfs.Jimfs;
28
 import com.google.common.jimfs.Jimfs;
29
-import org.junit.Before;
30
-import org.junit.Test;
31
-import org.junit.runner.RunWith;
32
-import org.mockito.InOrder;
33
-import org.mockito.Mock;
34
-import org.mockito.runners.MockitoJUnitRunner;
35
 
29
 
36
 import java.io.ByteArrayInputStream;
30
 import java.io.ByteArrayInputStream;
31
+import java.io.ByteArrayOutputStream;
37
 import java.io.IOException;
32
 import java.io.IOException;
38
-import java.io.OutputStream;
39
 import java.net.URLConnection;
33
 import java.net.URLConnection;
40
 import java.nio.charset.Charset;
34
 import java.nio.charset.Charset;
41
 import java.nio.file.FileSystem;
35
 import java.nio.file.FileSystem;
43
 import java.nio.file.Path;
37
 import java.nio.file.Path;
44
 import java.util.Map;
38
 import java.util.Map;
45
 
39
 
46
-import static org.junit.Assert.*;
40
+import org.junit.Before;
41
+import org.junit.Test;
42
+import org.junit.runner.RunWith;
43
+import org.mockito.Mock;
44
+import org.mockito.runners.MockitoJUnitRunner;
45
+
46
+import static org.junit.Assert.assertEquals;
47
+import static org.junit.Assert.assertFalse;
48
+import static org.junit.Assert.assertTrue;
47
 import static org.mockito.Matchers.anyBoolean;
49
 import static org.mockito.Matchers.anyBoolean;
48
-import static org.mockito.Matchers.anyByte;
49
 import static org.mockito.Matchers.anyInt;
50
 import static org.mockito.Matchers.anyInt;
50
-import static org.mockito.Mockito.*;
51
+import static org.mockito.Mockito.atLeastOnce;
52
+import static org.mockito.Mockito.never;
53
+import static org.mockito.Mockito.verify;
54
+import static org.mockito.Mockito.when;
51
 
55
 
52
 @RunWith(MockitoJUnitRunner.class)
56
 @RunWith(MockitoJUnitRunner.class)
53
 public class DownloaderTest {
57
 public class DownloaderTest {
54
 
58
 
55
     @Mock private URLConnection mockedConnection;
59
     @Mock private URLConnection mockedConnection;
56
-    @Mock private OutputStream os;
57
     @Mock private DownloadListener listener;
60
     @Mock private DownloadListener listener;
61
+    private ByteArrayOutputStream os;
58
     private FileSystem fakeFS;
62
     private FileSystem fakeFS;
59
 
63
 
60
     @Before
64
     @Before
61
     public void setup() throws IOException {
65
     public void setup() throws IOException {
62
         fakeFS = Jimfs.newFileSystem(Configuration.unix());
66
         fakeFS = Jimfs.newFileSystem(Configuration.unix());
63
-        ByteArrayInputStream is = new ByteArrayInputStream(
67
+        os = new ByteArrayOutputStream();
68
+
69
+        final ByteArrayInputStream is = new ByteArrayInputStream(
64
                 "OMG IM A FAKE DOWNLOAD".getBytes("UTF-8"));
70
                 "OMG IM A FAKE DOWNLOAD".getBytes("UTF-8"));
65
         when(mockedConnection.getInputStream()).thenReturn(is);
71
         when(mockedConnection.getInputStream()).thenReturn(is);
66
         when(mockedConnection.getOutputStream()).thenReturn(os);
72
         when(mockedConnection.getOutputStream()).thenReturn(os);
72
         new TestableDownloader().getPage("rar");
78
         new TestableDownloader().getPage("rar");
73
         verify(mockedConnection, never()).setRequestProperty("Content-Type",
79
         verify(mockedConnection, never()).setRequestProperty("Content-Type",
74
                 "application/x-www-form-urlencoded");
80
                 "application/x-www-form-urlencoded");
75
-        verify(os, never()).write(anyByte());
81
+        assertEquals(0, os.size());
76
     }
82
     }
77
 
83
 
78
     @Test
84
     @Test
81
         new TestableDownloader().getPage("rar", postData);
87
         new TestableDownloader().getPage("rar", postData);
82
         verify(mockedConnection).setRequestProperty("Content-Type",
88
         verify(mockedConnection).setRequestProperty("Content-Type",
83
                 "application/x-www-form-urlencoded");
89
                 "application/x-www-form-urlencoded");
84
-        final InOrder order = inOrder(os);
85
-        for (int i=0; i < postData.length(); i++) {
86
-            order.verify(os).write((byte) postData.charAt(i));
87
-        }
90
+        assertEquals(postData, os.toString());
88
     }
91
     }
89
 
92
 
90
     @Test
93
     @Test
92
         final Map<String, String> postData = Maps.newHashMap();
95
         final Map<String, String> postData = Maps.newHashMap();
93
         postData.put("key1", "value1");
96
         postData.put("key1", "value1");
94
         postData.put("key2", "value2");
97
         postData.put("key2", "value2");
95
-        final String postDataString = "key1=value1&key2=value2";
96
         new TestableDownloader().getPage("rar", postData);
98
         new TestableDownloader().getPage("rar", postData);
97
         verify(mockedConnection).setRequestProperty("Content-Type",
99
         verify(mockedConnection).setRequestProperty("Content-Type",
98
                 "application/x-www-form-urlencoded");
100
                 "application/x-www-form-urlencoded");
99
-        final InOrder order = inOrder(os);
100
-        for (int i=0; i < postDataString.length(); i++) {
101
-            order.verify(os).write(postDataString.charAt(i));
102
-        }
101
+
102
+        final String postDataString1 = "key1=value1&key2=value2";
103
+        final String postDataString2 = "key2=value2&key1=value1";
104
+        assertTrue(postDataString1.equals(os.toString()) || postDataString2.equals(os.toString()));
103
     }
105
     }
104
 
106
 
105
     @Test
107
     @Test
125
     }
127
     }
126
 
128
 
127
     private class TestableDownloader extends Downloader {
129
     private class TestableDownloader extends Downloader {
130
+        @Override
128
         protected URLConnection getURLConnection(final String url) throws IOException {
131
         protected URLConnection getURLConnection(final String url) throws IOException {
129
             return mockedConnection;
132
             return mockedConnection;
130
         }
133
         }

Loading…
Cancel
Save