Skip to content

Commit 7e25f61

Browse files
committed
Merge pull request #57 from vert-x/blobs
Add BLOB test
2 parents 0156a1b + 981e830 commit 7e25f61

File tree

4 files changed

+46
-2
lines changed

4 files changed

+46
-2
lines changed

src/test/resources/example.jpg

5.12 KB
Loading

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

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
package io.vertx.asyncsql.test
22

3+
import java.nio.charset.StandardCharsets
4+
5+
import org.vertx.java.core.Handler
6+
import org.vertx.java.core.json.impl.Base64
7+
import org.vertx.scala.core.buffer.Buffer
8+
39
import scala.concurrent.{Future, Promise}
410
import org.vertx.scala.core.json.{JsonObject, Json, JsonArray}
511
import org.vertx.testtools.VertxAssert._
@@ -455,10 +461,39 @@ trait BaseSqlTests {
455461
} yield {
456462
val receivedFields = reply.getArray("fields")
457463
assertEquals(Json.arr("test_date"), receivedFields)
458-
logger.info("date is: " + reply.getArray("results").get[JsonArray](0).get[String](0))
459-
assertEquals("2015-04-04T10:04:00.000", reply.getArray("results").get[JsonArray](0).get[String](0))
464+
val date = reply.getArray("results").get[JsonArray](0).get[String](0)
465+
logger.info(s"date is: $date")
466+
assertEquals("2015-04-04T10:04:00.000", date)
467+
testComplete()
468+
}) recover failedTest
469+
470+
@Test
471+
def blobUpload(): Unit = (for {
472+
image <- readFile("example.jpg")
473+
(msg, r0) <- sendOk(raw("DROP TABLE IF EXISTS blob_test"))
474+
(msg, r1) <- sendOk(raw(createBlobTable))
475+
(msg, r2) <- sendOk(prepared("INSERT INTO blob_test (test_blob) VALUES (?)", Json.emptyArr().addBinary(image)))
476+
(msg, r3) <- sendOk(raw("SELECT test_blob FROM blob_test"))
477+
} yield {
478+
val receivedFields = r3.getArray("fields")
479+
assertEquals(Json.arr("test_blob"), receivedFields)
480+
logger.info(s"blob is: ${r3.getArray("results").get[JsonArray](0).get[Array[Byte]](0)}")
481+
val blob = r3.getArray("results").get[JsonArray](0).get[JsonArray](0).toArray.map(_.asInstanceOf[Byte])
482+
val str = new String(Base64.decode(new String(blob)))
483+
logger.info(s"blob is2: ${blob.getClass}")
484+
assertEquals(new String(image), str)
460485
testComplete()
461486
}) recover failedTest
462487

488+
private def readFile(file: String): Future[Array[Byte]] = {
489+
val p = Promise[Array[Byte]]()
490+
vertx.fileSystem.readFile(file, {
491+
case Success(buffer) =>
492+
logger.info(s"read file buffer in ${StandardCharsets.UTF_8.name()} encoding")
493+
p.success(buffer.toString(StandardCharsets.UTF_8.name()).getBytes)
494+
case Failure(ex) => p.failure(ex)
495+
}: Try[Buffer] => Unit)
496+
p.future
497+
}
463498
}
464499

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ abstract class SqlTestVerticle extends TestVerticle with BaseVertxIntegrationTes
1212

1313
val address = "campudus.asyncdb"
1414

15+
protected def blobDataType: String = "BLOB"
16+
1517
protected val baseConf = Json.obj("address" -> address, "maxPoolSize" -> 3, "transactionTimeout" -> 5000L)
1618

1719
override final def before() {}
@@ -78,6 +80,11 @@ abstract class SqlTestVerticle extends TestVerticle with BaseVertxIntegrationTes
7880
| test_date $dateDataType
7981
|);""".stripMargin
8082

83+
protected def createBlobTable: String = s"""CREATE TABLE blob_test (
84+
| id SERIAL,
85+
| test_blob $blobDataType
86+
|);""".stripMargin
87+
8188
protected def createTableStatement(tableName: String) = s"""DROP TABLE IF EXISTS $tableName;
8289
CREATE TABLE $tableName (
8390
| id SERIAL,

src/test/scala/io/vertx/asyncsql/test/postgresql/PostgreSqlTest.scala

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,6 @@ class PostgreSqlTest extends SqlTestVerticle with BaseSqlTests {
88
override def getConfig() =
99
baseConf.putString("username", "vertx").putString("password", "test").putString("database", "testdb")
1010

11+
override protected def blobDataType: String = "BYTEA"
12+
1113
}

0 commit comments

Comments
 (0)