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