README
¶
go-yadro-testtask
Тестовое задание от компании Yadro на обработку событий из входного файла
Сборка и запуск
Обычный способ
Для сборки проекта и запуска проекта следуйте инструкции:
- Загрузить репозиторий на свой компьютер. Для этого вам нужно выполнить команду:
git clone https://github.com/SpeedCrash100/go-yadro-testtask
- Собрать проект:
go build -o program ./cmd
- Вы получите программу
program
запустите её указав входной файл:
./program <file_name>
Сборка и запуск в Docker. Srly?
- После загрузки репозитория собрать контейнер с приложением можно используя следующую команду:
docker build . --tag go-yadro-task:1
- Для внесения входных файлов в контейнер можно воспользоваться опцией
--mount
вdocker run
Указав в ключеsource
место с входными файлами и вtarget
место где они будут располагаться в контейнере. - Запуск программы, где тестовые примеры из test_cases/input примонтированы к папке
/app/data
происходит следующей командой:
docker run --rm -it --mount "type=bind,source=./test_cases/input,target=/app/data" go-yadro-task:1 /app/program /app/data/stock.txt
Последний аргумент задает входной файл. В данном случае, используется файл stock.txt, в котором представлен пример из самого задания.
Тестирование
Для программы написаны базовые тест, которые можно запустить командной:
go test ./pkg
Тест TestApp
Данный тест может автоматизированно использовать входные данные из папки test_cases/input
для запуска программы и затем проверять соответствие вывода test_cases/output
. Для этого файлы в этой директории должны иметь одинаковые имена и расширения.
Что бы запустить только этот тест используйте:
go test ./pkg --run TestApp
Добавьте флаг -v
, что бы удостоверится, что все тесты выполняются.
Пример вывода с флагом -v
:
=== RUN TestApp
=== RUN TestApp/client_already_in_club.txt
app_test.go:98: app process error: <nil>
=== RUN TestApp/client_leaves_in_valid_order.txt
app_test.go:98: app process error: <nil>
=== RUN TestApp/client_unknown_symbols.txt
app_test.go:98: app process error: invalid event format
=== RUN TestApp/error_event_invalid_order.txt
app_test.go:98: app process error: invalid order of events
=== RUN TestApp/events_after_close.txt
app_test.go:98: app process error: <nil>
=== RUN TestApp/invalid_time_leading_zeros.txt
app_test.go:98: app process error: invalid time in input files
=== RUN TestApp/invalid_time_out_of_range.txt
app_test.go:98: app process error: time format valid but values are out of range
=== RUN TestApp/no_events.txt
app_test.go:98: app process error: <nil>
=== RUN TestApp/stock.txt
app_test.go:98: app process error: <nil>
=== RUN TestApp/table_out_of_range.txt
app_test.go:98: app process error: invalid event format
=== RUN TestApp/unknown_client.txt
app_test.go:98: app process error: <nil>
--- PASS: TestApp (0.00s)
--- PASS: TestApp/client_already_in_club.txt (0.00s)
--- PASS: TestApp/client_leaves_in_valid_order.txt (0.00s)
--- PASS: TestApp/client_unknown_symbols.txt (0.00s)
--- PASS: TestApp/error_event_invalid_order.txt (0.00s)
--- PASS: TestApp/events_after_close.txt (0.00s)
--- PASS: TestApp/invalid_time_leading_zeros.txt (0.00s)
--- PASS: TestApp/invalid_time_out_of_range.txt (0.00s)
--- PASS: TestApp/no_events.txt (0.00s)
--- PASS: TestApp/stock.txt (0.00s)
--- PASS: TestApp/table_out_of_range.txt (0.00s)
--- PASS: TestApp/unknown_client.txt (0.00s)
PASS
ok github.com/speedcrash100/go-yadro-testtask/pkg 0.002s
Как работает приложение
Приложение имеет состояние State, которое может изменятся и дополняться согласно входным событиям реализующие InputEvent