amazon-web-services - 模拟AWS Go SSM GetParameter调用

标签 amazon-web-services unit-testing go

我正在尝试遵循this example,但是使用它来模拟SSM GetParameter调用。
我要做的就是发送inputParameter的值,并验证输出是否为outputParameter的值。

当我运行go test时,它只会引发我定义的错误,但不确定原因。我究竟做错了什么?

这是我的功能:

package main

import (
        "fmt"
        "log"
        "github.com/aws/aws-sdk-go/aws"
        "github.com/aws/aws-sdk-go/aws/session"
        "github.com/aws/aws-sdk-go/service/ssm"
        "github.com/aws/aws-sdk-go/service/ssm/ssmiface"

)

type AWS struct {
        Config  *aws.Config
        Session *session.Session
        SSM     ssmiface.SSMAPI
}



func (self *AWS) GetSSMValue(SSMPath string) string {
        req, err := self.SSM.GetParameter(&ssm.GetParameterInput{
                Name:           aws.String(SSMPath),
                WithDecryption: aws.Bool(false),
        })
        if err != nil {
                log.Fatalln("Unable to retrieve value: ", err)
        }
        SSMValue := *req.Parameter.Value

        return SSMValue
}


func main() {
        Aws := new(AWS)
        Aws.Config = &aws.Config{Region: aws.String("us-west-2")}
        Aws.Session, _ = session.NewSession(Aws.Config)

        ssmsvc := ssm.New(Aws.Session)
        Aws.SSM = ssmiface.SSMAPI(ssmsvc)

        inputParam := "/path/to/my/parameter"
        myValue := Aws.GetSSMValue(inputParam)
        fmt.Println(myValue)

}

和我的测试:
package main

import (
        "errors"
        "github.com/aws/aws-sdk-go/service/ssm"
        "github.com/aws/aws-sdk-go/service/ssm/ssmiface"
        "testing"
)

type mockSSM struct {
        ssmiface.SSMAPI
        response string
        err  error
}

func (sp *mockSSM) GetParameter(input *ssm.GetParameterInput) (*ssm.GetParameterOutput, error) {
        output := new(ssm.GetParameterOutput)
        return output, sp.err

}

func TestGetSSMValue(t *testing.T) {
        inputParameter := "path/to/my/test"
        outputParameter := "MyTestOutput"
        retriever := new(AWS)
        retriever.SSM = &mockSSM{
                response: outputParameter,
                err:  errors.New("my custom error"),
        }
        if actualValue := retriever.GetSSMValue(inputParameter); actualValue != outputParameter {
                t.Errorf("Expected %q but got %q", outputParameter, actualValue)
        }

}

最佳答案

实际上一切都正确,您只需要添加1行代码即可初始化输出。参数:output.Parameter = &ssm.Parameter{Value: aws.String("MyTestOutput")}
而且您func必须看起来像这样:

func (sp *mockSSM) GetParameter(input *ssm.GetParameterInput) (*ssm.GetParameterOutput, error) {
    output := new(ssm.GetParameterOutput)
    output.Parameter = &ssm.Parameter{Value: aws.String("MyTestOutput")}
    return output, nil
}

关于amazon-web-services - 模拟AWS Go SSM GetParameter调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58940962/

相关文章:

php - Laravel- 创建存档并从 Amazon S3 下载文件

javascript - 在 Lambda 函数中从 AWS SES 发送电子邮件时访问被拒绝

unit-testing - 代码覆盖的陷阱

regex - 转义字符串特殊字符以在 golang 正则表达式中使用

go - 测量每个流的 gRPC 带宽

amazon-web-services - aws eks 创建集群错误 - us-east-1e 当前没有足够的容量来支持集群

amazon-web-services - 使用 IF 函数检查参数是否已设置,而无需同时创建条件

c# - 如何等待元素加载到 selenium webdriver 中?

ruby - 如何使用 MiniTest 测试记录器消息?

parsing - 在go中将字符串拆分为 map 的简单方法