ホームページ  >  記事  >  バックエンド開発  >  Go 単体テストで Pulumi リソースをモックするにはどうすればよいですか?

Go 単体テストで Pulumi リソースをモックするにはどうすればよいですか?

WBOY
WBOY転載
2024-02-06 09:24:04621ブラウズ

如何在 Go 单元测试中模拟 Pulumi 资源?

質問の内容

aws openidconnectprovider pulumi リソースから入力を取得し、iam ロールを作成し、その oidc プロバイダーからのインクルードをアタッチする関数があります。サプライヤーの情報の役割ポリシーを引き受けます。

質問: この関数のテストを作成し、関数呼び出しへの入力として oidc プロバイダーをモックしようとしています。テスト出力が期待どおりになるように正しくシミュレートする方法がわかりません。現在、シミュレートされたデータが期待どおりに出ていないようです。

モックを正しく使用していないようですが、ここでの例はあきらめます

その他のドキュメントはこちら

リーリー リーリー リーリー
package mypkg

import (
   "github.com/pulumi/pulumi-aws/sdk/v5/go/aws/iam"
   "github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)

func createmycustomrole(ctx *pulumi.context, name string, oidcprovider *iam.openidconnectprovider, opts ...pulumi.resourceoption) (*iam.role, error) {
    role := &iam.role{}

    componenturn := fmt.sprintf("%s-custom-role", name)

    err := ctx.registercomponentresource("pkg:aws:mycustomrole", componenturn, role, opts...)
    if err != nil {
        return nil, err
    }

    url := oidc.url.applyt(func(s string) string {
        return fmt.sprint(strings.replaceall(s, "https://", ""), ":sub")
    }).(pulumi.stringoutput)

    assumerolepolicy := pulumi.sprintf(`{
            "version": "2012-10-17",
            "statement": [{
                "effect": "allow",
                "principal": { "federated": "%s" },
                "action": "sts:assumerolewithwebidentity",
                "condition": {
                    "stringequals": {
                        "%s": [
                            "system:serviceaccount:kube-system:*",
                            "system:serviceaccount:kube-system:cluster-autoscaler"
                        ]
                    }
                }
            }]
        }`, oidcprovider.arn, url)

    roleurn := fmt.sprintf("%s-custom-role", name)

    role, err = iam.newrole(ctx, roleurn, &iam.roleargs{
            name:             pulumi.string(roleurn),
            description:      pulumi.string("create custom role"),
            assumerolepolicy: assumerolepolicy,
            tags:             pulumi.tostringmap(map[string]string{"project": "test"}),
        })
    if err != nil {
        return nil, err
    }

    return role, nil
}


正解


newresourceの使い方が間違っていたことが判明しました。

getopenidconnectprovider がテスト関数で呼び出されると、リソースを読み取り、新しいリソース出力を作成し、mocks.newresource への呼び出しをトリガーします。 修正は、モック出力を使用して、getopenidconnectprovider

openidconnectprovider

によって返されるリソース タイプの newresource 関数呼び出しで if ステートメントを定義することです。 リーリー 以下のコード スニペットは、上記の newresource に加えられた変更と比較して違いが示されないように、

assert

を変更した場所です。 リーリー

以上がGo 単体テストで Pulumi リソースをモックするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。