2021-03-12 16:47:54 +00:00
|
|
|
|
# fileleak
|
|
|
|
|
|
|
|
|
|
Реализуйте библиотеку для поиска утечек файлов в тестах.
|
|
|
|
|
|
|
|
|
|
Библиотека содержит единственную функцию - `VerifyNone`. Пользователь должен вызвать эту функцию в начале своего теста.
|
|
|
|
|
|
2021-03-12 19:41:11 +00:00
|
|
|
|
Библиотека смотрит на все открытые файлы процесса в начале и в конце теста. Если в конце теста находятся открытые файлы,
|
2021-03-12 16:47:54 +00:00
|
|
|
|
которые не были открыты на момент старта теста, то библиотека фейлит весь тест.
|
|
|
|
|
|
2021-03-12 17:55:55 +00:00
|
|
|
|
Эта задача будет корректно работать только на `linux`. Если вы пользуетесь другой операционной системой,
|
|
|
|
|
вам придётся отлаживаться через CI.
|
|
|
|
|
|
|
|
|
|
Чтобы узнать открытые файлы процесса, нужно прочитать директорию `/proc/self/fd`.
|
|
|
|
|
Эта директория содержит символические ссылки. Именем ссылки является номер файлового дескриптора, а значением
|
2021-03-12 16:47:54 +00:00
|
|
|
|
ссылки является какое-то текстовое описание открытого файла. Значение ссылки можно прочитать, используя `os.Readlink`.
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
prime@bee ~/C/shad-go> ls -lah /proc/self/fd
|
|
|
|
|
total 0
|
|
|
|
|
dr-x------ 2 prime prime 0 мар 12 19:44 ./
|
|
|
|
|
dr-xr-xr-x 9 prime prime 0 мар 12 19:44 ../
|
|
|
|
|
lrwx------ 1 prime prime 64 мар 12 19:44 0 -> /dev/pts/7
|
|
|
|
|
lrwx------ 1 prime prime 64 мар 12 19:44 1 -> /dev/pts/7
|
|
|
|
|
lrwx------ 1 prime prime 64 мар 12 19:44 2 -> /dev/pts/7
|
|
|
|
|
lr-x------ 1 prime prime 64 мар 12 19:44 3 -> /proc/871308/fd/
|
|
|
|
|
```
|