Читаем Terraform: инфраструктура на уровне кода полностью

Обратите внимание на аргумент -timeout30m, который используется вместе с коман­дой gotest. Go по умолчанию ограничивает время работы тестов десятью минутами; когда это время заканчивается, тестовое выполнение принудительно завершается, в результате чего тест не просто проваливается, но даже не доходит до кода очистки (terraformdestroy). Эта проверка ALB должна занять около пяти минут, но при реализации тестов, которые развертывают реальную инфраструктуру, время ожидания лучше увеличить, чтобы тест не прервался на полпути и не оставил после себя разного рода инфраструктуру.

Этот тест сгенерирует длинный журнальный вывод, но, если внимательно почитать, можно заметить все его ключевые моменты.

1. Выполнение terraforminit.

2. Выполнение terraformapply.

3. Чтение выходной переменной с помощью terraformapply.

4. Неоднократная отправка HTTP-запросов к ALB.

5. Выполнение terraformdestroy.

Этот код работает несравнимо медленнее модульных тестов на Ruby, но теперь менее чем за пять минут вы автоматически узнаете, ведет ли себя ли ваш модуль alb так, как вы того ожидали. Для инфраструктуры AWS это максимально быстро, и в результате вы должны увериться в том, что ваш код работает как следует. Если в вашем примере есть какая-либо ошибка (например, код состояния для действия по умолчанию был случайно изменен на 401), вы довольно скоро об этом узнаете:

$ go test -v -timeout 30m

(...)

Validation failed for URL

http://terraform-up-and-running-931760451.us-east-2.elb.amazonaws.com.

Response status: 401. Response body: 404: page not found.

(...)

Sleeping for 10s and will try again.

(...)

Validation failed for URL

http://terraform-up-and-running-h2ezYz-931760451.us-east-2.elb.amazonaws.com.

Response status: 401. Response body: 404: page not found.

(...)

Sleeping for 10s and will try again.

(...)

--- FAIL: TestAlbExample (310.19s)

    http_helper.go:94:

    HTTP GET to URL

    http://terraform-up-and-running-931760451.us-east-2.elb.amazonaws.com

    unsuccessful after 10 retries

FAIL     terraform-up-and-running       310.204s

Внедрение зависимостей

Теперь посмотрим, сколько усилий потребуется, чтобы создать модульный тест для чуть более сложного кода. Еще раз вернемся к примеру с веб-сервером на Ruby и представим, что нам нужно добавить новую точку входа /web-service, которая шлет HTTP-вызовы к внешней зависимости:

class Handlers

  def handle(path)

    case path

    when "/"

      [200, 'text/plain', 'Hello, World']

    when "/api"

      [201, 'application/json', '{"foo":"bar"}']

    when "/web-service"

      # Новая точка входа, которая вызывает веб-сервис

      uri = URI("http://www.example.org")

      response = Net::HTTP.get_response(uri)

      [response.code.to_i, response['Content-Type'], response.body]

    else

      [404, 'text/plain', 'Not Found']

    end

  end

end

Обновленный класс Handlers обрабатывает URL-адрес /web-service, отправляя HTTP-запрос типа GET на example.org и передавая ответ. Если обратиться к этой точке входа с помощью curl, получится следующий результат:

$ curl localhost:8000/web-service

    Example Domain

    <-- (...) -->

    

Example Domain

    

      This domain is established to be used for illustrative

      examples in documents. You may use this domain in

      examples without prior coordination or asking for permission.

    

    

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Искусство управления IT-проектами
Искусство управления IT-проектами

В отличие от множества трудов, посвященных руководству проектами и командами, в этой книге не проповедуются никакие новые учения и не превозносятся великие теории. Скотт Беркун считает залогом успеха практику и разнообразие подходов. В книге описываются основные сложности и проблемные ситуации, возникающие в работе менеджера проекта, даны рекомендации по выходу из них.Издание предназначено не только для лидеров команд и менеджеров высшего звена, но и для программистов, тестеров и других исполнителей конкретных проектных заданий. Также оно будет полезно студентам, изучающим бизнес-менеджмент, проектирование изделий или программную инженерию.Текст нового издания значительно переработан автором с целью добиться большей ясности, кроме того, книга дополнена новым приложением и более чем 120 практическими упражнениями.

Скотт Беркун

Деловая литература
iOS. Приемы программирования
iOS. Приемы программирования

Книга, которую вы держите в руках, представляет собой новый, полностью переписанный сборник приемов программирования по работе с iOS. Он поможет вам справиться с наболевшими проблемами, с которыми приходится сталкиваться при разработке приложений для iPhone, iPad и iPod Touch. Вы быстро освоите всю информацию, необходимую для начала работы с iOS 7 SDK, в частности познакомитесь с решениями для добавления в ваши приложения реалистичной физики или движений — в этом вам помогут API UIKit Dynamics.Вы изучите новые многочисленные способы хранения и защиты данных, отправки и получения уведомлений, улучшения и анимации графики, управления файлами и каталогами, а также рассмотрите многие другие темы. При описании каждого приема программирования приводятся образцы кода, которые вы можете смело использовать.

Вандад Нахавандипур

Программирование, программы, базы данных / Программирование / Книги по IT

Похожие книги