•••

Сегодня чуть мозг себе не сломал.

В одном из pet-проектов решил забросить-таки на GitHub функционал, который напилил на прошлой неделе. Функционал так себе работает, но работает. Тесты проходятся, всё путём. Сырое, конечно, всё, но, как говорится…

Why do you call this software “beta”? — Because it’s beta than nothing.

Слил в master, добавил чуток документации, git push — и Travis CI валит билд с ошибкой! Тесты не проходят. Но у меня-то на компе проходят, и на ноутбуке проходят тоже. Смотрим логи…

Тесты — те, что валятся в Travis — сделаны на golden-файлах. То есть есть файл с эталонным результатом работы функции, и есть вызов этой функции из теста; если в итоге то, что вернула функция, до байта совпадает с эталоном, тест пройден. А если — как в нашем случае — не совпадает, тест падает, и вываливает в консоль сначала эталон, а потом полученный из функции результат — ну, чтобы глазами можно было сравнить.

А надо сказать, что Travis CI не так чтоб совсем идеально дружит с кириллицей, например. И бывает, что в логе какой-то символ заменяется на глифы со знаком вопроса. И видно, что да, действительно, эталон отличается от результата, потому что в эталоне была буква, а в результате — пара «кривых» глифов. А другие отличия в глаза не так чтобы бросаются…

Кручу так и эдак, гуглю всякое, раз пять перезапускаю билд в Travis с разными параметрами, пытаясь понять, в честь какого праздника Go в Travis работает с Unicode не так, как у меня на компе, и тут глаз цепляется за один из проваленных тестов с довольно коротким выводом — так, что и эталон, и результат поместились на одном экране целиком. И нету «кривых» глифов ни в эталоне, ни в результате! В смысле, эталон и результат совсем одинаковые на вид — но тест валится! Вот это уж совсем странно: неужели какая-то разница в «пробельных» байтах — перевод строки всякий, вот это всё? Да не должно, откуда бы — в контейнере Travis тот же Linux, как и у меня (правда, Ubuntu, а не Debian, но для этих-то целей без разницы)… Читаю ещё внимательнее…

И — наконец-то! — обращаю внимание, что в строке с датой есть-таки расхождение результата с эталоном. Ровно на три часа. Потому что у контейнера Travis локальное время — UTC, а у меня — московское, а в коде функции в этом месте время считается с учётом местной зоны! И это не баг, там действительно так надо. И в golden-файл в итоге попал результат, получаемый для московского времени…

А «кривые» глифы — это просто косяк с отображением лога у Travis, не влияют они ни на что.

Ответы

Реакции