go-yadro-testtask

module
v0.0.0-...-e1495b3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 17, 2023 License: Unlicense

README

go-yadro-testtask

Тестовое задание от компании Yadro на обработку событий из входного файла

Сборка и запуск

Обычный способ

Для сборки проекта и запуска проекта следуйте инструкции:

  1. Загрузить репозиторий на свой компьютер. Для этого вам нужно выполнить команду:
git clone https://github.com/SpeedCrash100/go-yadro-testtask
  1. Собрать проект:
go build -o program ./cmd
  1. Вы получите программу program запустите её указав входной файл:
./program <file_name>
Сборка и запуск в Docker. Srly?
  1. После загрузки репозитория собрать контейнер с приложением можно используя следующую команду:
docker build . --tag go-yadro-task:1
  1. Для внесения входных файлов в контейнер можно воспользоваться опцией --mount в docker run Указав в ключе source место с входными файлами и в target место где они будут располагаться в контейнере.
  2. Запуск программы, где тестовые примеры из 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

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL