Go 단위 테스트에서 Pulumi 리소스를 모의하는 방법은 무엇입니까?

WBOY
풀어 주다: 2024-02-06 09:24:04
앞으로
616명이 탐색했습니다.

如何在 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에 대한 호출을 트리거합니다.

수정 사항은 모의 출력을 사용하여 getopenidconnectprovideropenidconnectprovider에서 반환된 리소스 유형에 대한 newresource 함수 호출에서 if 문을 정의하는 것입니다.

으아아아

아래 코드 조각은 제가 변경한 것입니다. assert 위의 newresource에 대한 변경 사항과 비교하여 현재 차이점을 표시하지 않습니다.

으아아아

위 내용은 Go 단위 테스트에서 Pulumi 리소스를 모의하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:stackoverflow.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!