Skip to content

Commit ceab13b

Browse files
add test to ensure events are reported immediately (based on fetch size)
1 parent f4da0f4 commit ceab13b

File tree

2 files changed

+181
-0
lines changed

2 files changed

+181
-0
lines changed
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
/*
2+
* Copyright 2019 Philipp Salvisberg <philipp.salvisberg@trivadis.com>
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.utplsql.sqldev.test.dal
17+
18+
import java.util.UUID
19+
import java.util.logging.Logger
20+
import org.junit.AfterClass
21+
import org.junit.Assert
22+
import org.junit.BeforeClass
23+
import org.junit.Test
24+
import org.springframework.jdbc.BadSqlGrammarException
25+
import org.springframework.jdbc.datasource.SingleConnectionDataSource
26+
import org.utplsql.sqldev.dal.RealtimeReporterDao
27+
import org.utplsql.sqldev.test.AbstractJdbcTest
28+
29+
class RealtimeReporterFetchSizeTest extends AbstractJdbcTest {
30+
31+
static val Logger logger = Logger.getLogger(RealtimeReporterFetchSizeTest.name);
32+
33+
@BeforeClass
34+
def static void setup() {
35+
36+
jdbcTemplate.execute('''
37+
CREATE OR REPLACE PACKAGE junit_utplsql_fetch_size_pkg is
38+
--%suite(JUnit testing)
39+
40+
--%test(test 1 - 0 seconds)
41+
PROCEDURE test_1_0;
42+
43+
--%test(test 2 - 1 seconds)
44+
PROCEDURE test_2_1;
45+
46+
--%test(test 3 - 2 seconds)
47+
PROCEDURE test_3_2;
48+
49+
--%test(test 4 - 0 seconds)
50+
PROCEDURE test_4_0;
51+
52+
--%test(test 5 - 0 seconds)
53+
PROCEDURE test_5_0;
54+
END;
55+
''')
56+
jdbcTemplate.execute('''
57+
CREATE OR REPLACE PACKAGE BODY junit_utplsql_fetch_size_pkg is
58+
PROCEDURE test_1_0 IS
59+
BEGIN
60+
NULL;
61+
END;
62+
63+
PROCEDURE test_2_1 IS
64+
BEGIN
65+
dbms_session.sleep(1);
66+
END;
67+
68+
PROCEDURE test_3_2 IS
69+
BEGIN
70+
dbms_session.sleep(2);
71+
END;
72+
73+
PROCEDURE test_4_0 IS
74+
BEGIN
75+
NULL;
76+
END;
77+
78+
PROCEDURE test_5_0 IS
79+
BEGIN
80+
NULL;
81+
END;
82+
END;
83+
''')
84+
}
85+
86+
@AfterClass
87+
def static void teardown() {
88+
try {
89+
jdbcTemplate.execute("DROP PACKAGE junit_utplsql_fetch_size_pkg")
90+
} catch (BadSqlGrammarException e) {
91+
// ignore
92+
}
93+
}
94+
95+
private def delayFreeStreamingConsumtionProducer(String reporterId) {
96+
var ds = new SingleConnectionDataSource()
97+
ds.driverClassName = "oracle.jdbc.OracleDriver"
98+
ds.url = dataSource.url
99+
ds.username = dataSource.username
100+
ds.password = dataSource.password
101+
val dao = new RealtimeReporterDao(ds.connection)
102+
dao.produceReport(reporterId, #["junit_utplsql_fetch_size_pkg"])
103+
}
104+
105+
@Test
106+
def void delayFreeStreamingConsumtion() {
107+
val long TOLERANCE_MS = 400
108+
var ds = new SingleConnectionDataSource()
109+
ds.driverClassName = "oracle.jdbc.OracleDriver"
110+
ds.url = dataSource.url
111+
ds.username = dataSource.username
112+
ds.password = dataSource.password
113+
val consumer = new TestRealtimerReporterEventTimedConsumer
114+
val reporterId = UUID.randomUUID().toString.replace("-", "");
115+
val dao = new RealtimeReporterDao(ds.connection)
116+
val Runnable runnable = [|delayFreeStreamingConsumtionProducer(reporterId)]
117+
val thread = new Thread(runnable)
118+
thread.name = "utPLSQL run test"
119+
thread.start
120+
dao.consumeReport(reporterId, consumer)
121+
logger.fine(consumer.postTestEvents.toString)
122+
Assert.assertEquals(5, consumer.postTestEvents.entrySet.size)
123+
val test_1_0 = consumer.postTestEvents.get("junit_utplsql_fetch_size_pkg.test_1_0")
124+
val test_2_1 = consumer.postTestEvents.get("junit_utplsql_fetch_size_pkg.test_2_1")
125+
val test_3_2 = consumer.postTestEvents.get("junit_utplsql_fetch_size_pkg.test_3_2")
126+
val test_4_0 = consumer.postTestEvents.get("junit_utplsql_fetch_size_pkg.test_4_0")
127+
val test_5_0 = consumer.postTestEvents.get("junit_utplsql_fetch_size_pkg.test_5_0")
128+
val test_2_1_time = test_2_1 - test_1_0
129+
logger.fine("test_2_1 time [ms]: " + test_2_1_time)
130+
Assert.assertTrue("test_2_1 runtime was too long", test_2_1_time < 1000 + TOLERANCE_MS)
131+
Assert.assertTrue("test_2_1 runtime was too short", test_2_1_time > 1000 - TOLERANCE_MS)
132+
val test_3_2_time = test_3_2 - test_2_1
133+
logger.fine("test_3_2 time [ms]: " + test_3_2_time)
134+
Assert.assertTrue("test_3_2 runtime was too long", test_3_2_time < 2000 + TOLERANCE_MS)
135+
Assert.assertTrue("test_3_2 runtime was too short", test_3_2_time > 2000 - TOLERANCE_MS)
136+
val test_4_0_time = test_4_0 - test_3_2
137+
logger.fine("test_4_0 time [ms]: " + test_4_0_time)
138+
Assert.assertTrue("test_4_0 runtime was too long", test_4_0_time < TOLERANCE_MS)
139+
val test_5_0_time = test_5_0 - test_4_0
140+
logger.fine("test_5_0 time [ms]: " + test_5_0_time)
141+
Assert.assertTrue("test_5_0 runtime was too long", test_5_0_time < TOLERANCE_MS)
142+
}
143+
144+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
/*
2+
* Copyright 2019 Philipp Salvisberg <philipp.salvisberg@trivadis.com>
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.utplsql.sqldev.test.dal
17+
18+
import java.util.HashMap
19+
import org.utplsql.sqldev.dal.RealtimeReporterEventConsumer
20+
import org.utplsql.sqldev.model.runner.RealtimeReporterEvent
21+
import org.utplsql.sqldev.model.runner.PostTestEvent
22+
23+
class TestRealtimerReporterEventTimedConsumer implements RealtimeReporterEventConsumer {
24+
25+
val postTestEvents = new HashMap<String, Long>
26+
27+
def getPostTestEvents() {
28+
return postTestEvents
29+
}
30+
31+
override void process(RealtimeReporterEvent event) {
32+
if (event instanceof PostTestEvent) {
33+
postTestEvents.put(event.id, System.currentTimeMillis)
34+
}
35+
}
36+
37+
}

0 commit comments

Comments
 (0)