Skip to content

Commit 9bb597f

Browse files
committed
Refactored the testcode and added zerodate-test for mysql
Signed-off-by: Max Stemplinger <ms@campudus.com>
1 parent de174eb commit 9bb597f

File tree

3 files changed

+50
-32
lines changed

3 files changed

+50
-32
lines changed

src/test/scala/io/vertx/asyncsql/test/BaseSqlTests.scala

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,13 @@ trait BaseSqlTests {
1313

1414
private val timeout: Int = 15000
1515

16-
protected def isMysql: Boolean = false
17-
1816
protected def failedTest: PartialFunction[Throwable, Unit] = {
1917
case ex: Throwable =>
2018
logger.warn("failed in test", ex)
2119
fail("test failed. see warning above")
2220
}
2321

24-
private def sendWithTimeout(json: JsonObject): Future[(Message[JsonObject], JsonObject)] = {
22+
protected def sendWithTimeout(json: JsonObject): Future[(Message[JsonObject], JsonObject)] = {
2523
val p = Promise[(Message[JsonObject], JsonObject)]()
2624
vertx.eventBus.sendWithTimeout(address, json, timeout, {
2725
case Success(reply) => p.success(reply, reply.body())
@@ -30,7 +28,7 @@ trait BaseSqlTests {
3028
p.future
3129
}
3230

33-
private def replyWithTimeout(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] = {
31+
protected def replyWithTimeout(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] = {
3432
val p = Promise[(Message[JsonObject], JsonObject)]()
3533
msg.replyWithTimeout(json, timeout, {
3634
case Success(reply) => p.success(reply, reply.body())
@@ -39,13 +37,13 @@ trait BaseSqlTests {
3937
p.future
4038
}
4139

42-
private def checkOkay(json: JsonObject)(msg: (Message[JsonObject], JsonObject)): (Message[JsonObject], JsonObject) = {
40+
protected def checkOkay(json: JsonObject)(msg: (Message[JsonObject], JsonObject)): (Message[JsonObject], JsonObject) = {
4341
assertEquals(s"should get 'ok' back when sending ${json.encode()}, but got ${msg._2.encode()}",
4442
"ok", msg._2.getString("status"))
4543
(msg._1, msg._2)
4644
}
4745

48-
private def checkError(json: JsonObject)(msg: (Message[JsonObject], JsonObject)): (Message[JsonObject], JsonObject) = {
46+
protected def checkError(json: JsonObject)(msg: (Message[JsonObject], JsonObject)): (Message[JsonObject], JsonObject) = {
4947
assertEquals(s"should get an 'error' back when sending ${json.encode()}, but got ${msg._2.encode()}",
5048
"error", msg._2.getString("status"))
5149
(msg._1, msg._2)
@@ -57,19 +55,19 @@ trait BaseSqlTests {
5755
protected def sendFail(json: JsonObject): Future[(Message[JsonObject], JsonObject)] =
5856
sendWithTimeout(json) map checkError(json)
5957

60-
private def replyOk(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] =
58+
protected def replyOk(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] =
6159
replyWithTimeout(msg, json) map checkOkay(json)
6260

63-
private def replyFail(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] =
61+
protected def replyFail(msg: Message[JsonObject], json: JsonObject): Future[(Message[JsonObject], JsonObject)] =
6462
replyWithTimeout(msg, json) map checkError(json)
6563

66-
private def setupTableTest(): Future[_] = for {
64+
protected def setupTableTest(): Future[_] = for {
6765
(msg, reply) <- sendOk(raw(createTableStatement("some_test")))
6866
} yield {
6967
assertEquals(0, reply.getInteger("rows"))
7068
}
7169

72-
private def setupTypeTest(): Future[_] = for {
70+
protected def setupTypeTest(): Future[_] = for {
7371
_ <- setupTableTest()
7472
(msg, reply) <- sendOk(insert("some_test",
7573
Json.fromArrayString( """["name","email","is_male","age","money","wedding_date"]"""),
@@ -389,13 +387,7 @@ trait BaseSqlTests {
389387
| name VARCHAR(255),
390388
| PRIMARY KEY (id)
391389
|);""".stripMargin))
392-
(msg, _) <- replyOk(msg, raw(
393-
s"""CREATE TABLE test_two (
394-
| id SERIAL,
395-
| name VARCHAR(255),
396-
| one_id BIGINT ${if (isMysql) "UNSIGNED" else ""} NOT NULL,
397-
| PRIMARY KEY (id)
398-
|);""".stripMargin))
390+
(msg, _) <- replyOk(msg, raw(createTableTestTwo))
399391
(msg, _) <- replyOk(msg, raw(
400392
"""ALTER TABLE test_two ADD CONSTRAINT test_two_one_id_fk
401393
|FOREIGN KEY (one_id)

src/test/scala/io/vertx/asyncsql/test/SqlTestVerticle.scala

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@ abstract class SqlTestVerticle extends TestVerticle with BaseVertxIntegrationTes
1212

1313
val address = "campudus.asyncdb"
1414

15-
protected val baseConf = Json.obj("address" -> address, "maxPoolSize" -> 3, "transactionTimeout" -> 5000L)
15+
protected val baseConf = Json.obj("address" -> address, "maxPoolSize" -> 3, "transactionTimeout" -> 5000L)
1616

1717
override final def before() {}
18+
1819
override def asyncBefore(): Future[Unit] = {
1920
val p = Promise[Unit]
2021
container.deployModule(System.getProperty("vertx.modulename"), getConfig(), 1, { deploymentID: AsyncResult[String] =>
@@ -47,6 +48,7 @@ abstract class SqlTestVerticle extends TestVerticle with BaseVertxIntegrationTes
4748
Json.obj("action" -> "insert", "table" -> table, "fields" -> fields, "values" -> values)
4849

4950
protected def select(table: String, fields: JsonArray): JsonObject = select(table, Some(fields))
51+
5052
protected def select(table: String, fields: JsonArray, conditions: JsonObject): JsonObject = select(table, Some(fields), Some(conditions))
5153

5254
protected def select(table: String, fields: Option[JsonArray] = None, conditions: Option[JsonObject] = None): JsonObject = {
@@ -71,23 +73,29 @@ abstract class SqlTestVerticle extends TestVerticle with BaseVertxIntegrationTes
7173
reply
7274
}
7375

74-
protected def createDateTable(dateDataType :String) = s"""
76+
protected def createDateTable(dateDataType: String) = s"""
7577
| CREATE TABLE date_test (
7678
| id SERIAL,
7779
| test_date $dateDataType
7880
| );
7981
""".stripMargin
8082

8183
protected def createTableStatement(tableName: String) = """
82-
DROP TABLE IF EXISTS """ + tableName + """;
83-
CREATE TABLE """ + tableName + """ (
84-
id SERIAL,
85-
name VARCHAR(255),
86-
email VARCHAR(255) UNIQUE,
87-
is_male BOOLEAN,
88-
age INT,
89-
money DOUBLE PRECISION,
90-
wedding_date DATE
91-
);
92-
"""
84+
DROP TABLE IF EXISTS """ + tableName + """;
85+
CREATE TABLE """ + tableName + """ (
86+
id SERIAL,
87+
name VARCHAR(255),
88+
email VARCHAR(255) UNIQUE,
89+
is_male BOOLEAN,
90+
age INT,
91+
money DOUBLE PRECISION,
92+
wedding_date DATE
93+
);"""
94+
95+
protected def createTableTestTwo: String = s"""CREATE TABLE test_two (
96+
| id SERIAL,
97+
| name VARCHAR(255),
98+
| one_id BIGINT NOT NULL,
99+
| PRIMARY KEY (id)
100+
|);""".stripMargin
93101
}

src/test/scala/io/vertx/asyncsql/test/mysql/MySqlTest.scala

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,6 @@ import org.vertx.testtools.VertxAssert._
77

88
class MySqlTest extends SqlTestVerticle with BaseSqlTests {
99

10-
override def isMysql = true
11-
1210
override def doBefore() = expectOk(raw("DROP TABLE IF EXISTS `some_test`"))
1311

1412
override def getConfig() = baseConf.putString("connection", "MySQL")
@@ -33,6 +31,13 @@ CREATE TABLE """ + tableName + """ (
3331
PRIMARY KEY (id)
3432
);"""
3533

34+
override def createTableTestTwo: String = s"""CREATE TABLE test_two (
35+
| id SERIAL,
36+
| name VARCHAR(255),
37+
| one_id BIGINT UNSIGNED NOT NULL,
38+
| PRIMARY KEY (id)
39+
|);""".stripMargin
40+
3641
@Test
3742
def datetimeTest(): Unit =
3843
(for {
@@ -48,4 +53,17 @@ CREATE TABLE """ + tableName + """ (
4853
testComplete()
4954
}) recover failedTest
5055

56+
@Test
57+
def zeroDateTest(): Unit = (for {
58+
_ <- setupTableTest()
59+
(msg, insertReply) <- sendOk(raw("INSERT INTO some_test (name, wedding_date) VALUES ('tester', '0000-00-00');"))
60+
(msg, reply) <- sendOk(prepared("SELECT wedding_date FROM some_test WHERE name=?", Json.arr("tester")))
61+
} yield {
62+
val receivedFields = reply.getArray("fields")
63+
logger.info(reply.getArray("results").get[JsonArray](0).get[String](0))
64+
assertEquals(Json.arr("wedding_date"), receivedFields)
65+
assertEquals(null, reply.getArray("results").get[JsonArray](0).get[String](0))
66+
testComplete()
67+
}) recover failedTest
68+
5169
}

0 commit comments

Comments
 (0)