Skip to main content

Evgeny Kuznetsov

Суслик, suka, — личность…

4 min read

Ни для кого не секрет, что я пишу и поддерживаю апплет для панели уведомлений (или как вы там system tray переводите), управляющий MateBook-специфичными функциями. Ну, то есть если вы этим интересовались — вы в курсе. Но вам пофиг, поэтому — нет. Это нормально.

Вот тоже загадка: апплет работает (ну, должен работать… вроде бы…) на любых MateBook'ах, где есть Linux. При этом звёзд на GitHub у него почти на порядок меньше, чем у моего же гайда по установке Linux на MateBook 13! Это с учётом того, что на апплет есть ссылки и со страницы гайда, и даже со страницы драйвера для MateBook'ов. Да что там, у гайда больше звёзд, чем у драйвера! На секудночку: гайд по одной модели, драйвер поддерживает не меньше четырёх; драйвер для полноценной жизни на MateBook необходим, при этом у гайда звёзд больше… Это к вопросу о смысле кармадрочерства как концепции и логике «лайкающих» на гитхабе, да.

Ладно, Тьма с ними, со звёздами. Апплет у меня.

Я его, кстати, на Go пишу. Не, я в курсе, что Go для этого не очень предназначен, но мне нравится писать на Go. Работает, опять же… В конце концов, простите за откровенность, на Цэ-плюс-плюсе я бы такое не осилил. А так — вот, есть апплет. Работает даже. Ну, такое…

Мне Go очень нравится. Я как раз пока такие вещи пишу, заодно язык изучаю. На той неделе, вот, окончательно интерфейсы вкурил. Страшная сила — эти интерфейсы в Go, не вдруг въедешь, если до этого почти исключительно на bash да на basic (да, у меня тяжёлое детство было). Зато как врубишься — ну прямо восемь стволов и всё небо в попугаях! Сколько раз в ООП тыкался — нет, от лукавого все эти ихние наследования! А тут прям именно такой полиморфизм, как надо. Шоб работало, и шоб голову не сломать при проектировании простой программки на сотню строк. Вот прям нравится!

А ещё мне очень Test Driven Development заходит, в который Go хорошо умеет. Ну, то есть как — хорошо… Умеет, из коробки, очень прилично. Но у меня вот тут затык вышел.

Апплет мой, он же с драйвером непосредственно через файловую систему взаимодействует; и даже не только через os, а прям вот таки через ioutil. И никак не возьму я в толк: вот как мне это тестить?!

Не, afero — отличная вещь, согласен, но мне не нужна абстракция файловой системы насмерть, у меня область применения — как раз только и исключительно локальная ФС. Ну и если без зависимости не обойтись — я бы предпочёл что попроще, у меня маленький апплет для трея, а не промышленная CRM же. А делать mock файловой системы, да со всеми нужными ответами и поддержкой ioutil — я ж нарушусь, разве нет?

Понимаете, у меня задача-то — проще некуда! Апплет при инициализации должен потыкать в разные места в /sys/ и понять, с какой конфигурацией он работает, и там куча вариантов (и будет ещё больше), и очень хочется под это запилить нормальный table-driven test. Потому что

если тебе вдруг захотелось отладочной информации в консоли — здесь нужен тест, а не дебаг!

Это очень правильная мысль. Верная даже, только не помню, чья. Поэтому мне всего только надо — сделать так, чтобы для тестов симулировались разные варианты состояний в /sys/. Мне не нужно в кросс-платформенность, всё равно у меня чисто линуксовая заморочка. Мне не нужны возможности в перспективе заменить файловую систему на облако. Мне просто нужно для go test получить «песочницу» файловой системы с абсолютными путями — хоть в памяти, хоть в tmpFS, хоть на диске, хоть как.

Я реально себе сегодня всё правое полушарие об это сломал, и полинтерета обгуглил. То ли лыжи не едут…

очень озадаченный суслик

Картинка хамски попячена из презентации Francesc Campoy Flores.