gpt4 book ai didi

go - 在 Go 中模拟 Hashicorp 保险库

转载 作者:数据小太阳 更新时间:2023-10-29 03:38:19 25 4
gpt4 key购买 nike

有没有一种简单的方法可以在 go 测试中模拟 Hashicorp 保险库?

我在 Go 中创建了一个访问 Vault 的服务,并想为它创建适当的测试。

我没有找到我喜欢的简单解决方案(比如 python 中的 moto)。我还尝试在 docker 中以开发模式使用保管库(采用系统测试路线),但我无法通过 API 写入它。想法?

最佳答案

Is there an easy way to mock HashiCorp Vault in Go tests?

不要。使用真实的东西! HashiCorp 提供有用的实用程序函数来动态启动服务器1。这使您的测试更有用,并且通常可以作为开发人员如何设置本地开发服务器的可操作指南。

这是一个非常基本的例子。测试框架非常灵活(这也使其相当复杂)。有关更多选项,请参阅包文档,包括在 HA 模式下运行多个服务器。我发现 Vault 自己的测试用例在设置更复杂的场景时非常有用。

package main

import (
"net"
"testing"

"github.com/hashicorp/vault/api"
"github.com/hashicorp/vault/http"
"github.com/hashicorp/vault/vault"
)

func TestVaultStuff(t *testing.T) {
ln, client := createTestVault(t)
defer ln.Close()

// Pass the client to the code under test.
myFunction(client)
}

func createTestVault(t *testing.T) (net.Listener, *api.Client) {
t.Helper()

// Create an in-memory, unsealed core (the "backend", if you will).
core, keyShares, rootToken := vault.TestCoreUnsealed(t)
_ = keyShares

// Start an HTTP server for the core.
ln, addr := http.TestServer(t, core)

// Create a client that talks to the server, initially authenticating with
// the root token.
conf := api.DefaultConfig()
conf.Address = addr

client, err := api.NewClient(conf)
if err != nil {
t.Fatal(err)
}
client.SetToken(rootToken)

// Setup required secrets, policies, etc.
_, err = client.Logical().Write("secret/foo", map[string]interface{}{
"secret": "bar",
})
if err != nil {
t.Fatal(err)
}

return ln, client
}

1 他们为所有项目提供测试服务器,而不仅仅是 Vault。米切尔桥本在 his talk on advanced testing 中解释了理性.

关于go - 在 Go 中模拟 Hashicorp 保险库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57771228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com