diff --git a/distbuild/pkg/api/README.md b/distbuild/pkg/api/README.md index 6eaf493..5ac4cd0 100644 --- a/distbuild/pkg/api/README.md +++ b/distbuild/pkg/api/README.md @@ -29,4 +29,20 @@ Client и Coordinator общаются через два вызова. - Конструкторы клиентов и хендлеров принимают первым параметром `*zap.Logger`. Запишите в лог события получения/отправки запроса и все ошибки. Это поможет вам отлаживать интеграционные тесты - в следующей части задания. \ No newline at end of file + в следующей части задания. + +- Все методы должны "пробрасывать" контекст. + * Контекст на клиенте нужно передать в функцию `http.NewRequestContext`. + * Контекст на сервере нужно получить из `r.Context()` и передать в `Service`. + +- Код в этом пакете не должен запускать новые горутины. + +- Ошибку из `Service.StartBuild` нужно посылать клиенту. Если эта ошибка произошла после того, +как хендлер начал писать body, то ошибку нужно передавать в потоке json-ов в поле `StatusUpdate.BuildFailed`. + +- Код всех вызовов в этом пакете работает одинаково: + 1. Пользователь вызывает метод `*Client`. + 2. Метод делает HTTP запрос к серверу. + 3. `*Handler` принимает запрос, декодирует его и передает в `*Service`. + 4. (*) В случае вызова `/build`, сервис пишет обновления в `StatusWriter`, а клиентский код читает эти обновления из `StatusReader`. + 5. Ответ или ошибка из `*Service` возвращается пользователю. diff --git a/distbuild/pkg/api/build_test.go b/distbuild/pkg/api/build_test.go index bec6d4c..9437d57 100644 --- a/distbuild/pkg/api/build_test.go +++ b/distbuild/pkg/api/build_test.go @@ -114,6 +114,7 @@ func TestBuildRunning(t *testing.T) { rsp, r, err := env.client.StartBuild(ctx, req) require.NoError(t, err) + defer r.Close() require.Equal(t, started, rsp) @@ -153,7 +154,8 @@ func TestBuildResultsStreaming(t *testing.T) { return ctx.Err() }) - rsp, _, err := env.client.StartBuild(ctx, req) + rsp, r, err := env.client.StartBuild(ctx, req) require.NoError(t, err) + defer r.Close() require.Equal(t, started, rsp) }