blob: f4f11b454917bf8f65f8e09154b26012281dbc5b [file] [log] [blame]
package controllers
import com.kakao.s2graph.core.Management
import com.kakao.s2graph.core.mysqls._
//import com.kakao.s2graph.core.models._
import play.api.libs.json._
import play.api.test.Helpers._
import play.api.test.{FakeApplication, FakeRequest}
import scala.concurrent.Await
class BasicCrudSpec extends SpecCommon {
sequential
var seed = 0
def runTC(tcNum: Int, tcString: String, opWithProps: List[(Long, String, String)], expected: Map[String, String]) = {
for {
labelName <- List(testLabelName, testLabelName2)
i <- 0 until NUM_OF_EACH_TEST
} {
seed += 1
// val srcId = ((tcNum * 1000) + i).toString
// val tgtId = if (labelName == testLabelName) s"${srcId + 1000 + i}" else s"${srcId + 1000 + i}abc"
val srcId = seed.toString
val tgtId = srcId
val maxTs = opWithProps.map(t => t._1).max
/** insert edges */
println(s"---- TC${tcNum}_init ----")
val bulkEdge = (for ((ts, op, props) <- opWithProps) yield {
List(ts, op, "e", srcId, tgtId, labelName, props).mkString("\t")
}).mkString("\n")
val req = EdgeController.mutateAndPublish(bulkEdge, withWait = true)
val res = Await.result(req, HTTP_REQ_WAITING_TIME)
res.header.status must equalTo(200)
println(s"---- TC${tcNum}_init ----")
// Thread.sleep(100)
for {
label <- Label.findByName(labelName)
direction <- List("out", "in")
cacheTTL <- List(-1L)
} {
val (serviceName, columnName, id, otherId) = direction match {
case "out" => (label.srcService.serviceName, label.srcColumn.columnName, srcId, tgtId)
case "in" => (label.tgtService.serviceName, label.tgtColumn.columnName, tgtId, srcId)
}
val qId = if (labelName == testLabelName) id else "\"" + id + "\""
val query = queryJson(serviceName, columnName, labelName, qId, direction, cacheTTL)
val ret = route(FakeRequest(POST, "/graphs/getEdges").withJsonBody(query)).get
val jsResult = commonCheck(ret)
val results = jsResult \ "results"
val deegrees = (jsResult \ "degrees").as[List[JsObject]]
val propsLs = (results \\ "props").seq
(deegrees.head \ LabelMeta.degree.name).as[Int] must equalTo(1)
val from = (results \\ "from").seq.last.toString.replaceAll("\"", "")
val to = (results \\ "to").seq.last.toString.replaceAll("\"", "")
from must equalTo(id.toString)
to must equalTo(otherId.toString)
// (results \\ "_timestamp").seq.last.as[Long] must equalTo(maxTs)
for ((key, expectedVal) <- expected) {
propsLs.last.as[JsObject].keys.contains(key) must equalTo(true)
(propsLs.last \ key).toString must equalTo(expectedVal)
}
Await.result(ret, HTTP_REQ_WAITING_TIME)
}
}
}
init()
"Basic Crud " should {
"tc1" in {
running(FakeApplication()) {
var tcNum = 0
var tcString = ""
var bulkQueries = List.empty[(Long, String, String)]
var expected = Map.empty[String, String]
tcNum = 7
tcString = "[t1 -> t2 -> t3 test case] insert(t1) delete(t2) insert(t3) test "
bulkQueries = List(
(t1, "insert", "{\"time\": 10}"),
(t2, "delete", ""),
(t3, "insert", "{\"time\": 10, \"weight\": 20}"))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 8
tcString = "[t1 -> t2 -> t3 test case] insert(t1) delete(t2) insert(t3) test "
bulkQueries = List(
(t1, "insert", "{\"time\": 10}"),
(t3, "insert", "{\"time\": 10, \"weight\": 20}"),
(t2, "delete", ""))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 9
tcString = "[t3 -> t2 -> t1 test case] insert(t3) delete(t2) insert(t1) test "
bulkQueries = List(
(t3, "insert", "{\"time\": 10, \"weight\": 20}"),
(t2, "delete", ""),
(t1, "insert", "{\"time\": 10}"))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 10
tcString = "[t3 -> t1 -> t2 test case] insert(t3) insert(t1) delete(t2) test "
bulkQueries = List(
(t3, "insert", "{\"time\": 10, \"weight\": 20}"),
(t1, "insert", "{\"time\": 10}"),
(t2, "delete", ""))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 11
tcString = "[t2 -> t1 -> t3 test case] delete(t2) insert(t1) insert(t3) test"
bulkQueries = List(
(t2, "delete", ""),
(t1, "insert", "{\"time\": 10}"),
(t3, "insert", "{\"time\": 10, \"weight\": 20}"))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 12
tcString = "[t2 -> t3 -> t1 test case] delete(t2) insert(t3) insert(t1) test "
bulkQueries = List(
(t2, "delete", ""),
(t3, "insert", "{\"time\": 10, \"weight\": 20}"),
(t1, "insert", "{\"time\": 10}"))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 13
tcString = "[t1 -> t2 -> t3 test case] update(t1) delete(t2) update(t3) test "
bulkQueries = List(
(t1, "update", "{\"time\": 10}"),
(t2, "delete", ""),
(t3, "update", "{\"time\": 10, \"weight\": 20}"))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 14
tcString = "[t1 -> t3 -> t2 test case] update(t1) update(t3) delete(t2) test "
bulkQueries = List(
(t1, "update", "{\"time\": 10}"),
(t3, "update", "{\"time\": 10, \"weight\": 20}"),
(t2, "delete", ""))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 15
tcString = "[t2 -> t1 -> t3 test case] delete(t2) update(t1) update(t3) test "
bulkQueries = List(
(t2, "delete", ""),
(t1, "update", "{\"time\": 10}"),
(t3, "update", "{\"time\": 10, \"weight\": 20}"))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 16
tcString = "[t2 -> t3 -> t1 test case] delete(t2) update(t3) update(t1) test"
bulkQueries = List(
(t2, "delete", ""),
(t3, "update", "{\"time\": 10, \"weight\": 20}"),
(t1, "update", "{\"time\": 10}"))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 17
tcString = "[t3 -> t2 -> t1 test case] update(t3) delete(t2) update(t1) test "
bulkQueries = List(
(t3, "update", "{\"time\": 10, \"weight\": 20}"),
(t2, "delete", ""),
(t1, "update", "{\"time\": 10}"))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 18
tcString = "[t3 -> t1 -> t2 test case] update(t3) update(t1) delete(t2) test "
bulkQueries = List(
(t3, "update", "{\"time\": 10, \"weight\": 20}"),
(t1, "update", "{\"time\": 10}"),
(t2, "delete", ""))
expected = Map("time" -> "10", "weight" -> "20")
runTC(tcNum, tcString, bulkQueries, expected)
tcNum = 19
tcString = "[t5 -> t1 -> t3 -> t2 -> t4 test case] update(t5) insert(t1) insert(t3) delete(t2) update(t4) test "
bulkQueries = List(
(t5, "update", "{\"is_blocked\": true}"),
(t1, "insert", "{\"is_hidden\": false}"),
(t3, "insert", "{\"is_hidden\": false, \"weight\": 10}"),
(t2, "delete", ""),
(t4, "update", "{\"time\": 1, \"weight\": -10}"))
expected = Map("time" -> "1", "weight" -> "-10", "is_hidden" -> "false", "is_blocked" -> "true")
runTC(tcNum, tcString, bulkQueries, expected)
true
}
}
}
"toLogString" in {
running(FakeApplication()) {
val bulkQueries = List(
("1445240543366", "update", "{\"is_blocked\":true}"),
("1445240543362", "insert", "{\"is_hidden\":false}"),
("1445240543364", "insert", "{\"is_hidden\":false,\"weight\":10}"),
("1445240543363", "delete", "{}"),
("1445240543365", "update", "{\"time\":1, \"weight\":-10}"))
val (srcId, tgtId, labelName) = ("1", "2", testLabelName)
val bulkEdge = (for ((ts, op, props) <- bulkQueries) yield {
Management.toEdge(ts.toLong, op, srcId, tgtId, labelName, "out", props).toLogString
}).mkString("\n")
val expected = Seq(
Seq("1445240543366", "update", "e", "1", "2", "s2graph_label_test", "{\"is_blocked\":true}"),
Seq("1445240543362", "insert", "e", "1", "2", "s2graph_label_test", "{\"is_hidden\":false}"),
Seq("1445240543364", "insert", "e", "1", "2", "s2graph_label_test", "{\"is_hidden\":false,\"weight\":10}"),
Seq("1445240543363", "delete", "e", "1", "2", "s2graph_label_test"),
Seq("1445240543365", "update", "e", "1", "2", "s2graph_label_test", "{\"time\":1,\"weight\":-10}")
).map(_.mkString("\t")).mkString("\n")
bulkEdge must equalTo(expected)
true
}
}
}