Как я могу протестировать функциональность валидации в провайдере терраформ

Я написал более сложную логику проверки для полей, которые мне нужно проверить в настраиваемом провайдере терраформ. Я, конечно, могу протестировать, что это модульные тесты, но этого недостаточно; зачем, если я действительно забыл применить валидатор?

Итак, мне действительно нужно использовать конфигурацию terraform и сделать так, чтобы провайдер делал это нормально, естественно.

В принципе, я ожидаю ошибки. Документация, кажется, указывает, что я должен выполнить сопоставление регулярного выражения на выходе. Но этого не может быть; кажется супер хрупким. Может кто подскажет, как это делается?

      func TestValidation(t *testing.T) {
    const userBasic = `
        resource "my_user" "dude" {
            name    = "the.dude%d"
            password = "Password1" // needs a special char to pass
            email   = "the.dude%d@domain.com"
            groups  = [ "readers" ]
        }
    `
    rgx, _ := regexp.Compile("abc")
    resource.UnitTest(t, resource.TestCase{
        Providers:    testAccProviders,
        Steps: []resource.TestStep{
            {
                Config: userBasic,
                ExpectError: rgx,
            },
        },
    })
}

Этот код явно не работает. И многие исследования не дают ответов.

1 ответ

Начиная с версии 2.3.0 sdk вы можете установитьErrorCheck функционировать на resource.TestCase чтобы обеспечить более сложную проверку ошибок.

Например:

      resource.UnitTest(t, resource.TestCase{
    Providers:  testAccProviders,
    ErrorCheck: func(err error) error {
        if err == nil {
            return errors.New("expected error but got none")
        }

        // your validation code here

        // some simple example with string matching
        if strings.Contains(err.Error(), "your expected error message blah") {
           return nil
        }

        // return original error if no match
        return err
    },
    Steps: []resource.TestStep{
        {
            Config: userBasic,
        },
    },
})
Другие вопросы по тегам