blob: 1dac1f01ad8ac9551d52821417db92f7468f68df [file] [log] [blame]
package io.prediction.commons.settings
import org.specs2._
import org.specs2.specification.Step
import com.mongodb.casbah.Imports._
class ParamGenInfosSpec extends Specification { def is =
"PredictionIO ParamGenInfos Specification" ^
p^
"ParamGenInfos can be implemented by:" ^ endp^
"1. MongoParamGenInfos" ^ mongoParamGenInfos^end
def mongoParamGenInfos = p^
"MongoParamGenInfos should" ^
"behave like any ParamGenInfos implementation" ^ paramGenInfos(newMongoParamGenInfos)^
Step(MongoConnection()(mongoDbName).dropDatabase())
def paramGenInfos(paramGenInfos: ParamGenInfos) = { t^
"create and get a parameter generator info" ! insertAndGet(paramGenInfos)^
"update a parameter generator info" ! update(paramGenInfos)^
"delete a parameter generator info" ! delete(paramGenInfos)^
"backup and restore parameter generator info" ! backuprestore(paramGenInfos)^
bt
}
val mongoDbName = "predictionio_mongoparamgeninfos_test"
def newMongoParamGenInfos = new mongodb.MongoParamGenInfos(MongoConnection()(mongoDbName))
def insertAndGet(paramGenInfos: ParamGenInfos) = {
val mapk = ParamGenInfo(
id = "map-k",
name = "Mean Average Precision",
description = None,
commands = Some(Seq(
"$hadoop$ jar $pdioEvalJar$ io.prediction.metrics.scalding.itemrec.map.MAPAtKDataPreparator --hdfs --test_dbType $appdataTestDbType$ --test_dbName $appdataTestDbName$ --test_dbHost $appdataTestDbHost$ --test_dbPort $appdataTestDbPort$ --training_dbType $appdataTrainingDbType$ --training_dbName $appdataTrainingDbName$ --training_dbHost $appdataTrainingDbHost$ --training_dbPort $appdataTrainingDbPort$ --modeldata_dbType $modeldataTrainingDbType$ --modeldata_dbName $modeldataTrainingDbName$ --modeldata_dbHost $modeldataTrainingDbHost$ --modeldata_dbPort $modeldataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --evalid $evalid$ --metricid $metricid$ --algoid $algoid$ --kParam $kParam$ --goalParam $goalParam$",
"java -Dio.prediction.base=$base$ $configFile$ -Devalid=$evalid$ -Dalgoid=$algoid$ -Dk=$kParam$ -Dmetricid=$metricid$ -Dhdfsroot=$hdfsRoot$ -jar $topkJar$",
"$hadoop$ jar $pdioEvalJar$ io.prediction.metrics.scalding.itemrec.map.MAPAtK --hdfs --dbType $settingsDbType$ --dbName $settingsDbName$ --dbHost $settingsDbHost$ --dbPort $settingsDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --evalid $evalid$ --metricid $metricid$ --algoid $algoid$ --kParam $kParam$")),
paramdefaults = Map("k" -> 20),
paramnames = Map("k" -> "k"),
paramdescription = Map("k" -> "Averaging window size"),
paramorder = Seq("k"))
paramGenInfos.insert(mapk)
paramGenInfos.get("map-k") must beSome(mapk)
}
def update(paramGenInfos: ParamGenInfos) = {
val mapk = ParamGenInfo(
id = "u-map-k",
name = "Mean Average Precision",
description = None,
commands = Some(Seq(
"$hadoop$ jar $pdioEvalJar$ io.prediction.metrics.scalding.itemrec.map.MAPAtKDataPreparator --hdfs --test_dbType $appdataTestDbType$ --test_dbName $appdataTestDbName$ --test_dbHost $appdataTestDbHost$ --test_dbPort $appdataTestDbPort$ --training_dbType $appdataTrainingDbType$ --training_dbName $appdataTrainingDbName$ --training_dbHost $appdataTrainingDbHost$ --training_dbPort $appdataTrainingDbPort$ --modeldata_dbType $modeldataTrainingDbType$ --modeldata_dbName $modeldataTrainingDbName$ --modeldata_dbHost $modeldataTrainingDbHost$ --modeldata_dbPort $modeldataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --evalid $evalid$ --metricid $metricid$ --algoid $algoid$ --kParam $kParam$ --goalParam $goalParam$",
"java -Dio.prediction.base=$base$ $configFile$ -Devalid=$evalid$ -Dalgoid=$algoid$ -Dk=$kParam$ -Dmetricid=$metricid$ -Dhdfsroot=$hdfsRoot$ -jar $topkJar$",
"$hadoop$ jar $pdioEvalJar$ io.prediction.metrics.scalding.itemrec.map.MAPAtK --hdfs --dbType $settingsDbType$ --dbName $settingsDbName$ --dbHost $settingsDbHost$ --dbPort $settingsDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --evalid $evalid$ --metricid $metricid$ --algoid $algoid$ --kParam $kParam$")),
paramdefaults = Map("k" -> 20),
paramnames = Map("k" -> "k"),
paramdescription = Map("k" -> "Averaging window size"),
paramorder = Seq("k"))
paramGenInfos.insert(mapk)
val updatedMapk = mapk.copy(
paramdefaults = mapk.paramdefaults ++ Map("f" -> 20),
paramnames = mapk.paramnames ++ Map("f" -> "Foo"),
paramdescription = mapk.paramdescription ++ Map("f" -> "FooBar"),
paramorder = Seq("f", "k"))
paramGenInfos.update(updatedMapk)
paramGenInfos.get("u-map-k") must beSome(updatedMapk)
}
def delete(paramGenInfos: ParamGenInfos) = {
val mapk = ParamGenInfo(
id = "foo",
name = "Mean Average Precision",
description = None,
commands = Some(Seq(
"$hadoop$ jar $pdioEvalJar$ io.prediction.metrics.scalding.itemrec.map.MAPAtKDataPreparator --hdfs --test_dbType $appdataTestDbType$ --test_dbName $appdataTestDbName$ --test_dbHost $appdataTestDbHost$ --test_dbPort $appdataTestDbPort$ --training_dbType $appdataTrainingDbType$ --training_dbName $appdataTrainingDbName$ --training_dbHost $appdataTrainingDbHost$ --training_dbPort $appdataTrainingDbPort$ --modeldata_dbType $modeldataTrainingDbType$ --modeldata_dbName $modeldataTrainingDbName$ --modeldata_dbHost $modeldataTrainingDbHost$ --modeldata_dbPort $modeldataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --evalid $evalid$ --metricid $metricid$ --algoid $algoid$ --kParam $kParam$ --goalParam $goalParam$",
"java -Dio.prediction.base=$base$ $configFile$ -Devalid=$evalid$ -Dalgoid=$algoid$ -Dk=$kParam$ -Dmetricid=$metricid$ -Dhdfsroot=$hdfsRoot$ -jar $topkJar$",
"$hadoop$ jar $pdioEvalJar$ io.prediction.metrics.scalding.itemrec.map.MAPAtK --hdfs --dbType $settingsDbType$ --dbName $settingsDbName$ --dbHost $settingsDbHost$ --dbPort $settingsDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --evalid $evalid$ --metricid $metricid$ --algoid $algoid$ --kParam $kParam$")),
paramdefaults = Map("k" -> 20),
paramnames = Map("k" -> "k"),
paramdescription = Map("k" -> "Averaging window size"),
paramorder = Seq("k"))
paramGenInfos.insert(mapk)
paramGenInfos.delete("foo")
paramGenInfos.get("foo") must beNone
}
def backuprestore(paramGenInfos: ParamGenInfos) = {
val mapkbk = ParamGenInfo(
id = "backup",
name = "Mean Average Precision",
description = None,
commands = Some(Seq(
"$hadoop$ jar $pdioEvalJar$ io.prediction.metrics.scalding.itemrec.map.MAPAtKDataPreparator --hdfs --test_dbType $appdataTestDbType$ --test_dbName $appdataTestDbName$ --test_dbHost $appdataTestDbHost$ --test_dbPort $appdataTestDbPort$ --training_dbType $appdataTrainingDbType$ --training_dbName $appdataTrainingDbName$ --training_dbHost $appdataTrainingDbHost$ --training_dbPort $appdataTrainingDbPort$ --modeldata_dbType $modeldataTrainingDbType$ --modeldata_dbName $modeldataTrainingDbName$ --modeldata_dbHost $modeldataTrainingDbHost$ --modeldata_dbPort $modeldataTrainingDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --evalid $evalid$ --metricid $metricid$ --algoid $algoid$ --kParam $kParam$ --goalParam $goalParam$",
"java -Dio.prediction.base=$base$ $configFile$ -Devalid=$evalid$ -Dalgoid=$algoid$ -Dk=$kParam$ -Dmetricid=$metricid$ -Dhdfsroot=$hdfsRoot$ -jar $topkJar$",
"$hadoop$ jar $pdioEvalJar$ io.prediction.metrics.scalding.itemrec.map.MAPAtK --hdfs --dbType $settingsDbType$ --dbName $settingsDbName$ --dbHost $settingsDbHost$ --dbPort $settingsDbPort$ --hdfsRoot $hdfsRoot$ --appid $appid$ --engineid $engineid$ --evalid $evalid$ --metricid $metricid$ --algoid $algoid$ --kParam $kParam$")),
paramdefaults = Map("k" -> 20),
paramnames = Map("k" -> "k"),
paramdescription = Map("k" -> "Averaging window size"),
paramorder = Seq("k"))
paramGenInfos.insert(mapkbk)
val fn = "paramgeninfos.bin"
val fos = new java.io.FileOutputStream(fn)
try {
fos.write(paramGenInfos.backup())
} finally {
fos.close()
}
paramGenInfos.restore(scala.io.Source.fromFile(fn)(scala.io.Codec.ISO8859).map(_.toByte).toArray) map { data =>
data must contain(mapkbk)
} getOrElse 1 === 2
}
}