@@ -15,43 +15,79 @@ import io.ktor.http.*
1515import io.ktor.serialization.kotlinx.json.*
1616import kotlinx.coroutines.runBlocking
1717import kotlinx.serialization.json.Json
18+ import com.google.gson.Gson
19+ import kotlin.test.assertFalse
1820
1921
2022const val BASE_URL = " http://127.0.0.1:8080/event_api/v1"
2123const val PERIOD = 7 .toShort()
2224const val RUN = 5050
2325
24- val event1 = EventRepr (
25- Reference (" data2" , " /tmp/file12" , 1 ),
26- " 19.1" ,
27- PERIOD ,
28- RUN ,
29- mapOf (" track_number" to 11 )
30- )
31-
32- val event1_mod = EventRepr (
33- Reference (" data2" , " /tmp/file12" , 1 ),
34- " 19.1" ,
35- PERIOD ,
36- RUN ,
37- mapOf (" track_number" to 1100 )
38- )
39-
40- val event2 = EventRepr (
41- Reference (" data2" , " /tmp/file12" , 2 ),
42- " 19.1" ,
43- PERIOD ,
44- RUN ,
45- mapOf (" track_number" to 22 )
46- )
47-
48- val event3 = EventRepr (
49- Reference (" data2" , " /tmp/file12" , 3 ),
50- " 19.1" ,
51- PERIOD ,
52- RUN ,
53- mapOf (" track_number" to 33 )
54- )
26+ val gson = Gson ()
27+
28+ val event1 = gson.fromJson("""
29+ {
30+ "reference": {
31+ "storage_name": "data2",
32+ "file_path": "/tmp/file12",
33+ "event_number": 1
34+ },
35+ "software_version": "19.1",
36+ "period_number": $PERIOD ,
37+ "run_number": $RUN ,
38+ "parameters": {
39+ "track_number": 11
40+ }
41+ }
42+ """ , EventRepr ::class .java)
43+
44+ val event1_mod = gson.fromJson("""
45+ {
46+ "reference": {
47+ "storage_name": "data2",
48+ "file_path": "/tmp/file12",
49+ "event_number": 1
50+ },
51+ "software_version": "19.1",
52+ "period_number": $PERIOD ,
53+ "run_number": $RUN ,
54+ "parameters": {
55+ "track_number": 1100
56+ }
57+ }
58+ """ , EventRepr ::class .java)
59+
60+ val event2 = gson.fromJson("""
61+ {
62+ "reference": {
63+ "storage_name": "data2",
64+ "file_path": "/tmp/file12",
65+ "event_number": 2
66+ },
67+ "software_version": "19.1",
68+ "period_number": $PERIOD ,
69+ "run_number": $RUN ,
70+ "parameters": {
71+ "track_number": 22
72+ }
73+ }
74+ """ , EventRepr ::class .java)
75+
76+ val event3 = gson.fromJson("""
77+ {
78+ "reference": {
79+ "storage_name": "data2",
80+ "file_path": "/tmp/file12",
81+ "event_number": 3
82+ },
83+ "software_version": "19.1",
84+ "period_number": $PERIOD ,
85+ "run_number": $RUN ,
86+ "parameters": {
87+ "track_number": 33
88+ }
89+ }
90+ """ , EventRepr ::class .java)
5591
5692
5793class RestApiTest {
@@ -134,6 +170,255 @@ class RestApiTest {
134170 }
135171 }
136172
173+ @Test
174+ fun `Long API consistency test` () {
175+ runBlocking {
176+
177+ var response: HttpResponse
178+
179+ println (" ************************************************************" )
180+ println (" Deleting events 1,2,3 (if present in database)" )
181+ listOf (event1, event2, event3).forEach { event ->
182+ response = authenticatedClient().delete(" $BASE_URL /event" ) {
183+ contentType(ContentType .Application .Json )
184+ setBody(gson.toJson(listOf (event)))
185+ }
186+ println (response.status)
187+ println (response.bodyAsText())
188+ }
189+
190+ println (" ************************************************************" )
191+ println (" Creating events 1, 2" )
192+ response = authenticatedClient().post(" $BASE_URL /event" ) {
193+ contentType(ContentType .Application .Json )
194+ setBody(gson.toJson(listOf (event2, event1)))
195+ }
196+ println (response.status)
197+ println (response.bodyAsText())
198+
199+ println (" ************************************************************" )
200+ println (" Checking that events 1,2 are in catalogue and event 3 is not" )
201+ response = authenticatedClient().get(" $BASE_URL /event?period_number=$PERIOD &run_number=$RUN " ) {
202+ contentType(ContentType .Application .Json )
203+ }
204+ var eventsArray = gson.fromJson(response.bodyAsText(), EventListRepr ::class .java)
205+ assert (event1 in eventsArray.events)
206+ assert (event2 in eventsArray.events)
207+ assertFalse(event3 in eventsArray.events)
208+
209+ println (" ************************************************************" )
210+ println (" Creating event 3" )
211+ response = authenticatedClient().post(" $BASE_URL /event" ) {
212+ contentType(ContentType .Application .Json )
213+ setBody(gson.toJson(listOf (event3)))
214+ }
215+ assertEquals(response.status, HttpStatusCode .OK )
216+ println (response.status)
217+ println (response.bodyAsText())
218+
219+ println (" ************************************************************" )
220+ println (" Checking that event 3 is now in catalogue" )
221+ response = authenticatedClient().get(" $BASE_URL /event?period_number=$PERIOD &run_number=$RUN " ) {
222+ contentType(ContentType .Application .Json )
223+ }
224+ eventsArray = gson.fromJson(response.bodyAsText(), EventListRepr ::class .java)
225+ assert (event3 in eventsArray.events)
226+
227+ println (" ************************************************************" )
228+ println (" Checking that event 3 can not be written again with POST" )
229+ response = authenticatedClient().post(" $BASE_URL /event" ) {
230+ contentType(ContentType .Application .Json )
231+ setBody(gson.toJson(listOf (event3)))
232+ }
233+ println (response.status)
234+ println (response.bodyAsText())
235+ assertEquals(response.status, HttpStatusCode .Conflict ) // 409
236+
237+ println (" ************************************************************" )
238+ println (" Checking that event 3 can be written again with PUT" )
239+ response = authenticatedClient().put(" $BASE_URL /event" ) {
240+ contentType(ContentType .Application .Json )
241+ setBody(gson.toJson(listOf (event3)))
242+ }
243+ println (response.status)
244+ println (response.bodyAsText())
245+ assertEquals(response.status, HttpStatusCode .OK )
246+
247+ println (" ************************************************************" )
248+ println (" Checking that event 3 is still in the catalogue" )
249+ response = authenticatedClient().get(" $BASE_URL /event?period_number=$PERIOD &run_number=$RUN " ) {
250+ contentType(ContentType .Application .Json )
251+ }
252+ eventsArray = gson.fromJson(response.bodyAsText(), EventListRepr ::class .java)
253+ assert (event3 in eventsArray.events)
254+
255+ println (" ************************************************************" )
256+ println (" Modifying event 1 parameter (with POST, should fail)" )
257+ response = authenticatedClient().post(" $BASE_URL /event" ) {
258+ contentType(ContentType .Application .Json )
259+ setBody(gson.toJson(listOf (event1_mod)))
260+ }
261+ println (response.status)
262+ println (response.bodyAsText())
263+ assertEquals(response.status, HttpStatusCode .Conflict ) // 409
264+
265+ println (" ************************************************************" )
266+ println (" Modifying event 1 parameter (with PUT)" )
267+ response = authenticatedClient().put(" $BASE_URL /event" ) {
268+ contentType(ContentType .Application .Json )
269+ setBody(gson.toJson(listOf (event1_mod)))
270+ }
271+ println (response.status)
272+ println (response.bodyAsText())
273+ assertEquals(response.status, HttpStatusCode .OK )
274+
275+ println (" ************************************************************" )
276+ println (" Checking that original event 1 is not there, but modified is" )
277+ response = authenticatedClient().get(" $BASE_URL /event?period_number=$PERIOD &run_number=$RUN " ) {
278+ contentType(ContentType .Application .Json )
279+ }
280+ eventsArray = gson.fromJson(response.bodyAsText(), EventListRepr ::class .java)
281+ assert (event1_mod in eventsArray.events)
282+ assertFalse(event1 in eventsArray.events)
283+
284+ println (" ************************************************************" )
285+ println (" Trying to delete event 1 both original and modified (should fail)" )
286+ response = authenticatedClient().delete(" $BASE_URL /event" ) {
287+ contentType(ContentType .Application .Json )
288+ setBody(gson.toJson(listOf (event1, event1_mod)))
289+ }
290+ println (response.status)
291+ println (response.bodyAsText())
292+ assertEquals(response.status, HttpStatusCode .NotFound )
293+
294+ println (" ************************************************************" )
295+ println (" Checking (again) that original event 1 is not there, but modified is" )
296+ response = authenticatedClient().get(" $BASE_URL /event?period_number=$PERIOD &run_number=$RUN " ) {
297+ contentType(ContentType .Application .Json )
298+ }
299+ eventsArray = gson.fromJson(response.bodyAsText(), EventListRepr ::class .java)
300+ assert (event1_mod in eventsArray.events)
301+ assertFalse(event1 in eventsArray.events)
302+
303+ println (" ************************************************************" )
304+ println (" Delete modified event 1" )
305+ response = authenticatedClient().delete(" $BASE_URL /event" ) {
306+ contentType(ContentType .Application .Json )
307+ setBody(gson.toJson(listOf (event1_mod)))
308+ }
309+ println (response.status)
310+ println (response.bodyAsText())
311+ assertEquals(response.status, HttpStatusCode .OK )
312+
313+ println (" ************************************************************" )
314+ println (" Checking that event 1 was deleted" )
315+ response = authenticatedClient().get(" $BASE_URL /event?period_number=$PERIOD &run_number=$RUN " ) {
316+ contentType(ContentType .Application .Json )
317+ }
318+ eventsArray = gson.fromJson(response.bodyAsText(), EventListRepr ::class .java)
319+ assertFalse(event1_mod in eventsArray.events)
320+ assertFalse(event1 in eventsArray.events)
321+
322+ println (" ************************************************************" )
323+ println (" Creating again events 1,2 with POST (should fail)" )
324+ response = authenticatedClient().post(" $BASE_URL /event" ) {
325+ contentType(ContentType .Application .Json )
326+ setBody(gson.toJson(listOf (event1, event2)))
327+ }
328+ println (response.status)
329+ println (response.bodyAsText())
330+ assertEquals(response.status, HttpStatusCode .Conflict ) // 409
331+
332+ println (" ************************************************************" )
333+ println (" Creating again events 1,2 with PUT (should work)" )
334+ response = authenticatedClient().put(" $BASE_URL /event" ) {
335+ contentType(ContentType .Application .Json )
336+ setBody(gson.toJson(listOf (event1, event2)))
337+ }
338+ println (response.status)
339+ println (response.bodyAsText())
340+ assertEquals(response.status, HttpStatusCode .OK )
341+
342+ println (" ************************************************************" )
343+ println (" Checking that events 1,2 are there" )
344+ response = authenticatedClient().get(" $BASE_URL /event?period_number=$PERIOD &run_number=$RUN " ) {
345+ contentType(ContentType .Application .Json )
346+ }
347+ eventsArray = gson.fromJson(response.bodyAsText(), EventListRepr ::class .java)
348+ assert (event1 in eventsArray.events)
349+ assert (event2 in eventsArray.events)
350+
351+ println (" ************************************************************" )
352+ println (" Modifying event number for event 1 (should be treated as different event)" )
353+ var event1_mod_event_num = gson.fromJson("""
354+ {
355+ "reference": {
356+ "storage_name": "data2",
357+ "file_path": "/tmp/file12",
358+ "event_number": 1000
359+ },
360+ "software_version": "19.1",
361+ "period_number": $PERIOD ,
362+ "run_number": $RUN ,
363+ "parameters": {
364+ "track_number": 11
365+ }
366+ }
367+ """ .trimIndent(), EventRepr ::class .java)
368+ response = authenticatedClient().put(" $BASE_URL /event" ) {
369+ contentType(ContentType .Application .Json )
370+ setBody(gson.toJson(listOf (event1_mod_event_num)))
371+ }
372+ println (response.status)
373+ println (response.bodyAsText())
374+ assertEquals(response.status, HttpStatusCode .OK )
375+
376+ println (" ************************************************************" )
377+ println (" Checking that event 1 both original and modified are there" )
378+ response = authenticatedClient().get(" $BASE_URL /event?period_number=$PERIOD &run_number=$RUN " ) {
379+ contentType(ContentType .Application .Json )
380+ }
381+ eventsArray = gson.fromJson(response.bodyAsText(), EventListRepr ::class .java)
382+ assert (event1 in eventsArray.events)
383+ assert (event1_mod_event_num in eventsArray.events)
384+
385+ println (" ************************************************************" )
386+ println (" Doing filter based on track_number" )
387+ response = authenticatedClient().get(" $BASE_URL /event?period_number=$PERIOD &run_number=$RUN &track_number=11" ) {
388+ contentType(ContentType .Application .Json )
389+ }
390+ eventsArray = gson.fromJson(response.bodyAsText(), EventListRepr ::class .java)
391+ assert (event1 in eventsArray.events)
392+ assert (event1_mod_event_num in eventsArray.events)
393+ assertFalse(event2 in eventsArray.events)
394+ assertFalse(event3 in eventsArray.events)
395+
396+ println (" ************************************************************" )
397+ println (" Delete events" )
398+ response = authenticatedClient().delete(" $BASE_URL /event" ) {
399+ contentType(ContentType .Application .Json )
400+ setBody(gson.toJson(listOf (event1, event1_mod_event_num, event2, event3)))
401+ }
402+ println (response.status)
403+ println (response.bodyAsText())
404+ assertEquals(response.status, HttpStatusCode .OK )
405+
406+ println (" ************************************************************" )
407+ println (" Check that events were deleted" )
408+ response = authenticatedClient().get(" $BASE_URL /event?period_number=$PERIOD &run_number=$RUN " ) {
409+ contentType(ContentType .Application .Json )
410+ }
411+ println (response.status)
412+ println (response.bodyAsText())
413+ eventsArray = gson.fromJson(response.bodyAsText(), EventListRepr ::class .java)
414+ assertFalse(event1 in eventsArray.events)
415+ assertFalse(event1_mod_event_num in eventsArray.events)
416+ assertFalse(event2 in eventsArray.events)
417+ assertFalse(event3 in eventsArray.events)
418+
419+ }
420+ }
421+
137422}
138423
139424
0 commit comments