亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中模擬 Hashicorp 金庫

在 Go 中模擬 Hashicorp 金庫

Go
蝴蝶刀刀 2023-07-17 16:58:37
有沒有一種簡單的方法可以在 go 測試中模擬 Hashicorp 金庫?我在 Go 中創建了一個訪問 Vault 的服務,并希望為其創建適當的測試。我沒有找到我喜歡的簡單解決方案(比如 python 中的 moto )。我還嘗試在 docker 中以開發模式使用保管庫(采用系統測試路線),但我在通過 API 寫入它時遇到問題。想法?
查看完整描述

3 回答

?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

更新:這個答案已經過時了。

“不幸的是,[這個]答案已經有好幾年了。以前它是“盡力而為”的支持,但團隊去年決定不再支持在 Go 中導入 Vault、API 或 SDK 作為模塊。我帶來不便敬請諒解?!?/p>

--

有沒有一種簡單的方法可以在 Go 測試中模擬 HashiCorp Vault?

不。使用真實的東西!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。



查看完整回答
反對 回復 2023-07-17
?
梵蒂岡之花

TA貢獻1900條經驗 獲得超5個贊

需要注意的一件非常重要的事情:

TestCoreUnsealed不使用常規的 KV 后端,而是使用 aPassthroughBackend來本質上模擬 kv 行為。

查看完整回答
反對 回復 2023-07-17
?
婷婷同學_

TA貢獻1844條經驗 獲得超8個贊

因為 Go 是一種靜態類型語言,所以我們必須在編譯時知道事物的類型。因此,要進行這種類型的獨立測試,我們需要在代碼中創建在測試方面具有邏輯意義的邊界。

在 Go 中創建接口來定義這些邊界,因此從這個意義上說,您希望在您和此第三方庫之間創建一個接口,以便您可以用您可以控制的函數/方法/類型替換庫函數/方法/類型的輸入和輸出并定義了條件,以便您可以測試代碼對第三方的輸出或條件的行為方式。

查看完整回答
反對 回復 2023-07-17
  • 3 回答
  • 0 關注
  • 181 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號