>  기사  >  백엔드 개발  >  Go 단위 테스트에서 Pulumi 리소스를 모의하는 방법은 무엇입니까?

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

WBOY
WBOY앞으로
2024-02-06 09:24:04618검색

如何在 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으로 문의하시기 바랍니다. 삭제