repl.info

Vaultをインメモリで起動してテストに使うテクニックの紹介

Hashicorp Vaultを扱うコードのテストを書く場合、Vaultへのアクセス部分をモックするかテスト時にVaultサーバーを起動するかのどちらかを選ぶことになる。今回は、テスト前にVaultをインメモリで起動する方法を紹介する。

テストのためのVaultのリポジトリの中には、テスト用のサーバーを起動する関数がいくつかある。これを使うことで、UnsealeされたVaultサーバーを使うことができる。

package foo



import (

  "testing"

  vhttp "github.com/hashicorp/vault/http"

  "github.com/hashicorp/vault/vault"

)



func Test_vault(t *testing.T) {

  core, _, token := vault.TestCoreUnsealed(t)

  ln, addr := vhttp.TestServer(t, core)

  defer ln.Close()



  // ここにVaultのAPIを使うテストを書く



}

ただし、この場合はKVSは使えるがPKIは使えない。PKIに関するテストを行いたい場合、vault.CoreConfigでバックエンドとしてPKIを指定する必要がある。

package foo



import (

  "testing"

  vhttp "github.com/hashicorp/vault/http"

  "github.com/hashicorp/vault/vault"

)



func Test_vault_with_pki(t *testing.T) {

  coreConfig := &vault.CoreConfig{

    LogicalBackends: map[string]logical.Factory{

      "pki": pki.Factory,

    },

  }

  core, _, token := vault.TestCoreUnsealedWithConfig(t, coreConfig)

  ln, addr := vhttp.TestServer(t, core)



  // ここにVaultのAPIを使うテストを書く



}

このように、インメモリでVaultを起動すればより本番環境に近い形でテストを行うこともできるし、別途Vaultを頑張って起動する必要もなくなる。便利なのでお試しください。