1
+ package com.segment.analytics.kotlin.core.utilities
2
+
3
+ import org.junit.jupiter.api.AfterEach
4
+ import org.junit.jupiter.api.Assertions.*
5
+ import org.junit.jupiter.api.BeforeEach
6
+ import org.junit.jupiter.api.Nested
7
+ import org.junit.jupiter.api.Test
8
+ import java.io.File
9
+ import java.util.UUID
10
+
11
+ class EventStreamTest {
12
+
13
+ @Nested
14
+ inner class InMemoryEventStreamTest {
15
+
16
+ private lateinit var eventStream: EventStream ;
17
+
18
+ @BeforeEach
19
+ fun setup () {
20
+ eventStream = InMemoryEventStream ()
21
+ }
22
+
23
+ @Test
24
+ fun lengthTest () {
25
+ val str1 = " abc"
26
+ val str2 = " defgh"
27
+
28
+ assertEquals(0 , eventStream.length)
29
+
30
+ eventStream.openOrCreate(" test" )
31
+ eventStream.write(str1)
32
+ assertEquals(str1.length, eventStream.length)
33
+
34
+ eventStream.write(str2)
35
+ assertEquals(str1.length + str2.length, eventStream.length)
36
+ }
37
+
38
+ @Test
39
+ fun isOpenTest () {
40
+ assertFalse(eventStream.isOpened)
41
+
42
+ eventStream.openOrCreate(" test" )
43
+ assertTrue(eventStream.isOpened)
44
+
45
+ eventStream.close()
46
+ assertFalse(eventStream.isOpened)
47
+ }
48
+
49
+ @Test
50
+ fun openOrCreateTest () {
51
+ var actual = eventStream.openOrCreate(" test" )
52
+ assertTrue(actual)
53
+
54
+ actual = eventStream.openOrCreate(" test" )
55
+ assertFalse(actual)
56
+ }
57
+
58
+ @Test
59
+ fun writeAndReadStreamTest () {
60
+ val file = " test"
61
+ eventStream.openOrCreate(file)
62
+ val str1 = " abc"
63
+ val str2 = " defgh"
64
+
65
+ assertEquals(0 , eventStream.length)
66
+
67
+ eventStream.write(str1)
68
+ assertEquals(str1.toByteArray(), eventStream.readAsStream(file)!! .readBytes())
69
+ eventStream.write(str2)
70
+ assertEquals((str1 + str2).toByteArray(), eventStream.readAsStream(file)!! .readBytes())
71
+ }
72
+
73
+ @Test
74
+ fun readTest () {
75
+ val files = arrayOf(" test1.tmp" , " test2" , " test3.tmp" )
76
+
77
+ eventStream.openOrCreate(" test1" )
78
+
79
+ // open test2 without finish test1
80
+ eventStream.openOrCreate(" test2" )
81
+ eventStream.finishAndClose {
82
+ removeFileExtension(it)
83
+ }
84
+
85
+ // open test3 after finish test2
86
+ eventStream.openOrCreate(" test3" )
87
+ // open test3 again
88
+ eventStream.openOrCreate(" test3" )
89
+
90
+ val actual = HashSet <String >(eventStream.read())
91
+ assertEquals(files.size, actual.size)
92
+ assertTrue(actual.contains(files[0 ]))
93
+ assertTrue(actual.contains(files[1 ]))
94
+ assertTrue(actual.contains(files[2 ]))
95
+ }
96
+
97
+ @Test
98
+ fun removeTest () {
99
+ eventStream.openOrCreate(" test" )
100
+ eventStream.finishAndClose {
101
+ removeFileExtension(it)
102
+ }
103
+ eventStream.remove(" test" )
104
+ val newFile = eventStream.openOrCreate(" test" )
105
+
106
+ assertTrue(newFile)
107
+ }
108
+
109
+ @Test
110
+ fun closeTest () {
111
+ eventStream.openOrCreate(" test" )
112
+ assertTrue(eventStream.isOpened)
113
+
114
+ eventStream.close()
115
+ assertFalse(eventStream.isOpened)
116
+ }
117
+
118
+ @Test
119
+ fun finishAndCloseTest () {
120
+ eventStream.openOrCreate(" test" )
121
+ eventStream.finishAndClose {
122
+ removeFileExtension(it)
123
+ }
124
+
125
+ val files = eventStream.read()
126
+ assertEquals(1 , files.size)
127
+ assertEquals(" test" , files[0 ])
128
+ assertFalse(eventStream.isOpened)
129
+ }
130
+ }
131
+
132
+ @Nested
133
+ inner class FileEventStreamTest {
134
+ private lateinit var eventStream: EventStream
135
+
136
+ private lateinit var dir: File
137
+
138
+ @BeforeEach
139
+ fun setup () {
140
+ dir = File (UUID .randomUUID().toString())
141
+ eventStream = FileEventStream (dir)
142
+ }
143
+
144
+ @AfterEach
145
+ fun tearDown () {
146
+ dir.deleteRecursively()
147
+ }
148
+
149
+
150
+ @Test
151
+ fun lengthTest () {
152
+ val str1 = " abc"
153
+ val str2 = " defgh"
154
+
155
+ assertEquals(0 , eventStream.length)
156
+
157
+ eventStream.openOrCreate(" test" )
158
+ eventStream.write(str1)
159
+ assertEquals(str1.length, eventStream.length)
160
+
161
+ eventStream.write(str2)
162
+ assertEquals(str1.length + str2.length, eventStream.length)
163
+ }
164
+
165
+ @Test
166
+ fun isOpenTest () {
167
+ assertFalse(eventStream.isOpened)
168
+
169
+ eventStream.openOrCreate(" test" )
170
+ assertTrue(eventStream.isOpened)
171
+
172
+ eventStream.close()
173
+ assertFalse(eventStream.isOpened)
174
+ }
175
+
176
+ @Test
177
+ fun openOrCreateTest () {
178
+ var actual = eventStream.openOrCreate(" test" )
179
+ assertTrue(actual)
180
+
181
+ actual = eventStream.openOrCreate(" test" )
182
+ assertFalse(actual)
183
+ }
184
+
185
+ @Test
186
+ fun writeAndReadStreamTest () {
187
+ val str1 = " abc"
188
+ val str2 = " defgh"
189
+
190
+ eventStream.openOrCreate(" test" )
191
+ assertEquals(0 , eventStream.length)
192
+ var files = eventStream.read()
193
+ assertEquals(1 , files.size)
194
+ eventStream.write(str1)
195
+ eventStream.close()
196
+ assertEquals(str1.toByteArray(), eventStream.readAsStream(files[0 ])!! .readBytes())
197
+
198
+ eventStream.openOrCreate(" test" )
199
+ assertEquals(str1.length, eventStream.length)
200
+ files = eventStream.read()
201
+ assertEquals(1 , files.size)
202
+ eventStream.write(str2)
203
+ eventStream.close()
204
+ assertEquals((str1 + str2).toByteArray(), eventStream.readAsStream(files[0 ])!! .readBytes())
205
+ }
206
+
207
+ @Test
208
+ fun readTest () {
209
+ val files = arrayOf(" test1.tmp" , " test2" , " test3.tmp" )
210
+
211
+ eventStream.openOrCreate(" test1" )
212
+
213
+ // open test2 without finish test1
214
+ eventStream.openOrCreate(" test2" )
215
+ eventStream.finishAndClose {
216
+ removeFileExtension(it)
217
+ }
218
+
219
+ // open test3 after finish test2
220
+ eventStream.openOrCreate(" test3" )
221
+ // open test3 again
222
+ eventStream.openOrCreate(" test3" )
223
+
224
+ val actual = HashSet <String >(eventStream.read())
225
+ assertEquals(files.size, actual.size)
226
+ assertTrue(actual.contains(files[0 ]))
227
+ assertTrue(actual.contains(files[1 ]))
228
+ assertTrue(actual.contains(files[2 ]))
229
+ }
230
+
231
+ @Test
232
+ fun removeTest () {
233
+ eventStream.openOrCreate(" test" )
234
+ eventStream.finishAndClose {
235
+ removeFileExtension(it)
236
+ }
237
+ eventStream.remove(" test" )
238
+ val newFile = eventStream.openOrCreate(" test" )
239
+
240
+ assertTrue(newFile)
241
+ }
242
+
243
+ @Test
244
+ fun closeTest () {
245
+ eventStream.openOrCreate(" test" )
246
+ assertTrue(eventStream.isOpened)
247
+
248
+ eventStream.close()
249
+ assertFalse(eventStream.isOpened)
250
+ }
251
+
252
+ @Test
253
+ fun finishAndCloseTest () {
254
+ eventStream.openOrCreate(" test" )
255
+ eventStream.finishAndClose {
256
+ removeFileExtension(it)
257
+ }
258
+
259
+ val files = eventStream.read()
260
+ assertEquals(1 , files.size)
261
+ assertEquals(" test" , files[0 ])
262
+ assertFalse(eventStream.isOpened)
263
+ }
264
+ }
265
+ }
0 commit comments