/var/log/jsoizo

メモ帳 技術とか趣味とか

Scala

AWS JDBC Driver for MySQLをslick経由で使いたい

前回、AWS JDBC Driver for MySQLの検証を行ったが、実際にはそのままJDBCドライバを使うということはなく、scalaなアプリケーションで使いたいときにはslickから呼び出すことが多いと思われる。 また、AWS JDBC Driver for MySQLはコネクションプールとして…

AWS JDBC Driver for MySQLのfailover機能に関する動作検証

これは スタンバイアドベントカレンダーの9日目です。 はじめに Amazon Aurora for MySQLでクラスタを組んでいて、可用性を高めるために書き込み可能インスタンスを複数並べてActive/Standby構成にすることがある。 このような運用をしているとき、Activeな…

SlickでMySQLのIO周りを実装したときのユニットテスト

このあたりをいい感じに書けるとMySQL周りのユニットテストが簡易にできるので、 MySQLの実行環境の用意 DDLの適用 それぞれについて書きつつ、最終的にサンプルを示す。 なおtestcontainersを使ってこのへんを一気にやってしまうということもできるが、コン…

RedisまわりのUTを書きたかったらjedis-mockがべんり

タイトルの通り。 redisアクセスするScalaコードのユニットテストでつかって便利だった。 github.com wiremockみたいにredisのプロトコルをモックしてくれるやつ。 使い方 READMEに書いてあるとおりで特に詰まることはない。 以下はscalatestから呼び出すサ…

scala.collection.immutable.SetOpts, scala.collection.SetOptsのメソッドツアー

前の記事でsubsetsの挙動を確認したついでに、collectionの中でもSet固有に実装されているメソッドを一通り叩いてみる。 特に明示しない場合このようなSet[Int]に対して叩くものとする。 val set = Set(1,2,3)

Set[T]から取りうるすべての組み合わせを生成するにはsubsets

タイトルの通り。 scala> Set(1,2,3) val res0: scala.collection.immutable.Set[Int] = Set(1, 2, 3) scala> res0.subsets().toList val res1: List[scala.collection.immutable.Set[Int]] = List(Set(), Set(1), Set(2), Set(3), Set(1, 2), Set(1, 3), Se…

ScalaTestのAsync Specで複数のassertをしたい

こういうAsyncなテストがあり複数assertしたかったりする。 given-when-then-andのand相当。 class FooSpec extends AsyncFunSpec with Matchers { it("awesome test") { val f1: Future[String] = Future { Thread.sleep(1000) "foo" } val f2: Future[Stri…

Try,Option,EitherのorElse

Pull Requestでレビューをしていてこういう実装を見かけた。 fooで失敗したらbar, barで失敗したらbazを呼び出したい。 def foo(s: String): String = ??? def bar(s: String): String = ??? def baz(s: String): String = ??? val input: String = "awesome…

FutureがFailしたときの例外型を検査するユニットテストの書き方

FutureがFailureを返すときのExceptionの型を検査したい場合、どのようにUTを書けばよいかのメモ。 たとえば以下のように3の倍数または5の倍数でExceptionを吐く Foo.scala をテストしたい。 object Foo { class BarException extends Exception("bar") clas…

Scala + GraalVM AOTコンパイル + AWS Lambdaでwebアプリを動かしたい

この記事は スタンバイ Advent Calendar 2021 の21日目です。 はじめに 業務ツール用の適当なアプリケーションを動かしたいだとか、サービス間の連携のためにちょっとpub/subから取り出して他のdbやファイルサーバに保存するだけとか、そういう用途でAWS Lam…