34 lines
1.2 KiB
Markdown
34 lines
1.2 KiB
Markdown
|
## iprange [BONUS]
|
|||
|
|
|||
|
В этой задаче вам предстоит познакомиться с фаззингом, и его нативной поддержкой в go.
|
|||
|
|
|||
|
Нужно поправить баги в функции `ParseList`.
|
|||
|
|
|||
|
`ParseList` принимает на вход строку с описанием рейнджей ip адрессов в одном из `n` форматов
|
|||
|
* `10.0.0.1`
|
|||
|
* `10.0.0.0/24`
|
|||
|
* `10.0.0.*`
|
|||
|
* `10.0.0.1-10`
|
|||
|
и возвращает список пар `(min ip, max ip)` (см. [example](./example_test.go)).
|
|||
|
|
|||
|
Для обнаружения бага (crash функции) предлагается написать fuzz тест на функцию `ParseList`.
|
|||
|
|
|||
|
### Проверка решения
|
|||
|
|
|||
|
Во-первых должны работать имеющиеся тесты
|
|||
|
```
|
|||
|
go test -v ./iprange...
|
|||
|
```
|
|||
|
|
|||
|
Во-вторых, в CI есть приватные тесты, молча падающие на неправильной `ParseList`.
|
|||
|
|
|||
|
Как запустить fuzz тесты?
|
|||
|
```
|
|||
|
go test -v -fuzz=. ./iprange...
|
|||
|
```
|
|||
|
|
|||
|
### Ссылки
|
|||
|
|
|||
|
* design draft https://go.googlesource.com/proposal/+/master/design/draft-fuzzing.md
|
|||
|
* fuzzing tutorial в блоге go https://go.dev/doc/tutorial/fuzz
|