Я написал код, который будет печатать состояние кластера EMR на основе идентификатора кластера. Но мне сложно во время юнит-тестирования.
emrinterface.EMR:
type EMR struct {
Client emriface.EMRAPI
}
func NewEMR() *EMR {
sess := session.CreateNewSession()
return &EMR{
Client: emr.New(sess),
}
}
состояние кластера печати на основе идентификатора кластера:
func GetClusterStatus(e entities.Cluster) (string, error) {
clusterID := ClusterID(e)
emrService := emrinterface.NewEMR()
clusterDetails, err := emrService.Client.DescribeCluster(&emr.DescribeClusterInput{
ClusterId: clusterID})
if err != nil {
return "error", err
}
clusterStatus := *clusterDetails.Cluster.Status.State
return fmt.Sprintf(clusterStatus), nil
}
main
func main() {
lambda.Start(GetClusterStatus)
}
модульный тест:
func setup() *emrtestutils.MockEMR {
return &emrtestutils.MockEMR{}
}
func TestGetClusterStatus(t *testing.T) {
testCases := []struct {
entities.Cluster
status string
err error
}{
{entities.Cluster{ClusterID: "j-dfdslkj3kl213kj"}, "STARTING", nil},
}
for _, testCase := range testCases {
mockEMR := setup()
mockEMR.On("MockEMRDescribeCluster",
&emr.DescribeClusterInput{
ClusterId: aws.String("jdfdslkj3kl213kj")}).Return("STARTING", testCase.err)
res, err := GetClusterStatus(testCase.Cluster)
fmt.Println(err)
assert.Equal(t, res, testCase.status)
}
}