Запустим тесты каналов (код находится в loadgen/cmd/tests/chans_test.go
):
cd loadgen
go test -run "^TestReadFromClosed$" -timeout 5s -v -count=1 ./...
go test -run "^TestWriteToClosed$" -timeout 5s -v -count=1 ./...
go test -run "^TestCloseClosed$" -timeout 5s -v -count=1 ./...
go test -run "^TestReadFromNil$" -timeout 5s -v -count=1 ./...
go test -run "^TestWriteToNil$" -timeout 5s -v -count=1 ./...
go test -run "^TestCloseNil$" -timeout 5s -v -count=1 ./...
Запустим Postgres:
make pg
и накатим миграции:
docker run --rm \
-v $(realpath ./app/internal/store/migrations):/migrations \
migrate/migrate:v4.16.2 \
-path=/migrations \
-database postgres://gopher:[email protected]:5432/gopher_corp?sslmode=disable \
up
Скомпилируем утилиту datagen
:
make build-datagen
и сгенирируем данные для 100000 сотрудников:
./cmd/datagen/datagen -d postgres://gopher:gopher@localhost:5432/gopher_corp?sslmode=disable -n 1000000
Для остановки:
make stop-pg
Для удаления данных из БД:
make clean-data
Для реализации генератор наргрузки необходимо реализовать функцию loadgen/internal/loadgen/generator.go:runGenerator
.
Вот спецификация генератора:
- Диспетчер генерирует набор имен (длину можно выбрать произвольно, но она должна быть больше 200) при помощи
common.NamesFetcher
и рассылает их рабочим - Рабочие отправляют http-запросы сервису, получают ответы. Если ответ содержит код отличный от
200
и404
, то ошибка логируется - Длительность теста передается через конфиурацию. Как только время вышло, рабочие должны корректно завершиться
- Результат работы функции -
loadTestResult
, который содержит реальную длительность тестов и количество успешно выполненных операций (при которых код овтета200
или404
)
Для запуска генератора скомпилируйте его:
make build-loadgen
И запустите с необходимыми параметрами:
./cmd/loadgen/loadgen -dur "5s" -workers 10
Номинальная реализация этой функции здесь: loadgen/internal/loadgen/generator_nominal.go:runGeneratorNominal
См. пример в файле app/cmd/migrations/main.go
Запустим приложение:
./cmd/migrations/migrations -dsn postgres://gopher:gopher@localhost:5432/gopher_corp?sslmode=disable
Запустим load-генератор с race-детектором. Для этого скомпилируем его с подключенным детектором:
make race-build-loadgen
И запустим:
./cmd/loadgen/loadgen -dur "5s" -workers 10