Skip to content

Commit

Permalink
MySql routines
Browse files Browse the repository at this point in the history
* start/stop mysqld
* changed scala version to 2.10.2
* upgrade sbt to 0.13.0
* removed full stacktraces when test fails
* moved pl.panasoft-pimps to regular dependencies
* tests
  • Loading branch information
pawelpanasewicz committed Oct 15, 2013
1 parent bfe122a commit 1545036
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 14 deletions.
Binary file added mysql_home_mock/bin/mysqladmin.exe
Binary file not shown.
Binary file added mysql_home_mock/bin/mysqld.exe
Binary file not shown.
10 changes: 4 additions & 6 deletions project/Build.scala
Original file line number Diff line number Diff line change
Expand Up @@ -5,26 +5,24 @@ import scala.sys.process.{ProcessLogger, Process}

object Build extends Build {

lazy val panasoftPimpsProject = RootProject(uri("git://github.com/PawelPanasewicz/panasoft-pimps.git#master"))

lazy val rootProject = Project("mysql-routines", file("."))
lazy val rootProj = Project("mysql-routines", file("."))
.settings(
version := "0.1-SNAPHOT",
organization := "pl.panasoft",
organizationName := "pl.panasoft",
scalaVersion := "2.10.1",
scalaVersion := "2.10.2",
scalacOptions ++= List("-feature", "-language:implicitConversions"),
resolvers ++= commonResolvers,
libraryDependencies ++= commonDependencies,
testOptions in Test += Tests.Argument("-oFD"), //W - without color, F - show full stack traces, S - show short stack traces, D - show durations
testOptions in Test += Tests.Argument("-oD"), //W - without color, F - show full stack traces, S - show short stack traces, D - show durations
sbtPlugin := true
)
.settings(net.virtualvoid.sbt.graph.Plugin.graphSettings: _*)
.dependsOn(panasoftPimpsProject)

val commonDependencies = List(
"org.scalatest" % "scalatest_2.10.0" % "2.0.M5" % "test",
("org.scalamock" %% "scalamock-scalatest-support" % "3.0.1" exclude("org.scalatest", "scalatest_2.10")) % "test",
"pl.panasoft" %% "pimps" % "0.1-SNAPHOT",
"org.scala-sbt" % "io" % "0.13.0"
)

Expand Down
2 changes: 1 addition & 1 deletion project/build.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
sbt.version=0.12.2
sbt.version=0.13.0

16 changes: 9 additions & 7 deletions src/main/scala/pl/panasoft/mysqlroutines/MysqlRoutines.scala
Original file line number Diff line number Diff line change
Expand Up @@ -6,41 +6,43 @@ import pl.panasoft.Pimps._
import java.io.File

object MysqlRoutines {

import MysqlRoutinesHelpers._

def startMysqlD(mysqlHome: File, fOut: (String) => Unit = logStdOut, fErr: (String) => Unit = logStdOut) =
mysqlHome
.uMap(verifyMysqlHome)
.uMap(_.getAbsolutePath)
.uMap(_ + "/bin/mysqld.exe --standalone")
.modify(Process(_).run(ProcessLogger(println, println)))
.modify(Process(_: String).run(ProcessLogger(println, println)))

def stopMySqlD(mysqlHome: File, fOut: (String) => Unit = logStdOut, fErr: (String) => Unit = logStdOut) =
mysqlHome
.uMap(verifyMysqlHome)
.uMap(_.getAbsolutePath)
.uMap(_ + "/bin/mysqladmin.exe -u root shutdown")
.modify(Process(_).!(ProcessLogger(println, println)))
.modify(Process(_: String).!(ProcessLogger(println, println)))

def checkMySqlD(mysqlHome: File, fOut: (String) => Unit = logStdOut, fErr: (String) => Unit = logStdOut) =
mysqlHome
.uMap(verifyMysqlHome)
.uMap(_.getAbsolutePath)
.uMap(_ + "/bin/mysqladmin -u root status")
.modify(Process(_).!(ProcessLogger(println, println)))
.uMap(_ + "/bin/mysqladmin.exe -u root status")
.modify(Process(_: String).!(ProcessLogger(println, println)))

def restoreMysSqlDataDir(dataDir: File, bootstrapDataDir: File) =
sbt.IO.delete(dataDir) andThenPerform
sbt.IO.copyDirectory(bootstrapDataDir, dataDir) andThenPerform
sbt.IO.copyFile(bootstrapDataDir, dataDir)
sbt.IO.copyDirectory(bootstrapDataDir, dataDir) andThenPerform
sbt.IO.copyDirectory(bootstrapDataDir, dataDir)
}

object MysqlRoutinesHelpers {

def verifyMysqlHome(mysqlHome: File) =
mysqlHome
.throwIf(_ => osName != "windows")(MysqlRoutinesException("Unsupported OS:" + osName))
.throwIf(_.isFile)(MysqlRoutinesException("'myslHome' is not a directory: " + mysqlHome.getAbsolutePath))
.throwIf(!_.exists())(MysqlRoutinesException("'mysqlHome' is not a directory: " + mysqlHome.getAbsolutePath))
.throwIf(_.isFile)(MysqlRoutinesException("'mysqlHome' is not a directory: " + mysqlHome.getAbsolutePath))

def logStdOut(m: String) = println(m)

Expand Down
31 changes: 31 additions & 0 deletions src/test/scala/pl/panasoft/mysqlroutines/MySqlRoutinesSpec.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package pl.panasoft.mysqlroutines

import org.scalatest.FreeSpec
import java.io.File

class MysqlRoutinesSpec extends FreeSpec {

"A MySqlRoutines" - {

val mysqlhome = new File("./mysql_home_mock")

"will not work if inproper mysqlhome is provided" in intercept[MysqlRoutinesException] {
MysqlRoutines.startMysqlD(new File("incorrect mysql home dir"))
}

"can start MySQL daemon" in {
MysqlRoutines.startMysqlD(mysqlhome)
}
"can stop MySQL daemon" in {
MysqlRoutines.stopMySqlD(mysqlhome)
}

"can restore data dir" in {
import sbt._
val dataDir = mysqlhome / "data"
val bootstrapDataDir = mysqlhome / "bootstrapDataDir"
MysqlRoutines.restoreMysSqlDataDir(dataDir, bootstrapDataDir)
}
}

}

0 comments on commit 1545036

Please sign in to comment.