summaryrefslogtreecommitdiff
path: root/opendc-trace/opendc-trace-calcite/src/test
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2022-04-29 22:55:07 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2022-04-30 17:45:52 +0200
commit157fc322e6e68eb77177d13844e9793aeb6e8850 (patch)
tree3391ac66642dcb40fe70ce9a7a3700a94ed1f627 /opendc-trace/opendc-trace-calcite/src/test
parent412d8d597511122f114d69a4ba64c6b55dd192f9 (diff)
feat(trace/calcite): Add support for writing via SQL
This change updates the Apache Calcite integration to support writing workload traces via SQL. This enables custom conversion scripts between different workload traces.
Diffstat (limited to 'opendc-trace/opendc-trace-calcite/src/test')
-rw-r--r--opendc-trace/opendc-trace-calcite/src/test/kotlin/org/opendc/trace/calcite/CalciteTest.kt43
-rw-r--r--opendc-trace/opendc-trace-calcite/src/test/resources/model.json15
2 files changed, 55 insertions, 3 deletions
diff --git a/opendc-trace/opendc-trace-calcite/src/test/kotlin/org/opendc/trace/calcite/CalciteTest.kt b/opendc-trace/opendc-trace-calcite/src/test/kotlin/org/opendc/trace/calcite/CalciteTest.kt
index f0e461e0..d2877d7c 100644
--- a/opendc-trace/opendc-trace-calcite/src/test/kotlin/org/opendc/trace/calcite/CalciteTest.kt
+++ b/opendc-trace/opendc-trace-calcite/src/test/kotlin/org/opendc/trace/calcite/CalciteTest.kt
@@ -26,9 +26,11 @@ import org.apache.calcite.jdbc.CalciteConnection
import org.junit.jupiter.api.Assertions.*
import org.junit.jupiter.api.Test
import org.opendc.trace.Trace
+import java.nio.file.Files
import java.nio.file.Paths
import java.sql.DriverManager
import java.sql.ResultSet
+import java.sql.Statement
import java.sql.Timestamp
import java.util.*
@@ -99,21 +101,56 @@ class CalciteTest {
}
}
+ @Test
+ fun testInsert() {
+ val tmp = Files.createTempDirectory("opendc")
+ val newTrace = Trace.create(tmp, "opendc-vm")
+
+ runStatement(newTrace) { stmt ->
+ val count = stmt.executeUpdate(
+ """
+ INSERT INTO trace.resources (id, start_time, stop_time, cpu_count, cpu_capacity, mem_capacity)
+ VALUES (1234, '2013-08-12 13:35:46.0', '2013-09-11 13:39:58.0', 1, 2926.0, 1024.0)
+ """.trimIndent()
+ )
+ assertEquals(1, count)
+ }
+
+ runQuery(newTrace, "SELECT * FROM trace.resources") { rs ->
+ assertAll(
+ { assertTrue(rs.next()) },
+ { assertEquals("1234", rs.getString("id")) },
+ { assertEquals(1, rs.getInt("cpu_count")) },
+ { assertEquals(Timestamp.valueOf("2013-08-12 13:35:46.0"), rs.getTimestamp("start_time")) },
+ { assertEquals(2926.0, rs.getDouble("cpu_capacity")) },
+ { assertEquals(1024.0, rs.getDouble("mem_capacity")) }
+ )
+ }
+ }
+
/**
* Helper function to run statement for the specified trace.
*/
private fun runQuery(trace: Trace, query: String, block: (ResultSet) -> Unit) {
+ runStatement(trace) { stmt ->
+ val rs = stmt.executeQuery(query)
+ rs.use { block(rs) }
+ }
+ }
+
+ /**
+ * Helper function to run statement for the specified trace.
+ */
+ private fun runStatement(trace: Trace, block: (Statement) -> Unit) {
val info = Properties()
info.setProperty("lex", "JAVA")
val connection = DriverManager.getConnection("jdbc:calcite:", info).unwrap(CalciteConnection::class.java)
connection.rootSchema.add("trace", TraceSchema(trace))
val stmt = connection.createStatement()
- val results = stmt.executeQuery(query)
try {
- block(results)
+ block(stmt)
} finally {
- results.close()
stmt.close()
connection.close()
}
diff --git a/opendc-trace/opendc-trace-calcite/src/test/resources/model.json b/opendc-trace/opendc-trace-calcite/src/test/resources/model.json
new file mode 100644
index 00000000..91e2657f
--- /dev/null
+++ b/opendc-trace/opendc-trace-calcite/src/test/resources/model.json
@@ -0,0 +1,15 @@
+{
+ "version": "1.0",
+ "defaultSchema": "trace",
+ "schemas": [
+ {
+ "name": "trace",
+ "type": "custom",
+ "factory": "org.opendc.trace.calcite.TraceSchemaFactory",
+ "operand": {
+ "path": "trace",
+ "format": "opendc-vm"
+ }
+ }
+ ]
+}