engelbart
только один вопрос, чем мы лучше чем тревис
Konstantin
Вы живые)
Ivan
блин, ну у тебя json разные. Положи его один раз в репу и гоняй на нем тесты. Что ты голову морочишь?
Konstantin
Во, сейчас в третий раз перезапустил сборку на нем - тревисе - и все прошло успешно. Магия херова)
Ivan
ну потому что ты делаешь запрос к стороннему API. Одному Богу известно, что он тебе выдаст. Может вообще API с ошибкой работал. У тебя задача протестить свой код или код API?
Aleksandr
ну так добавь в тест логирование - выводи json, http response
Konstantin
Ivan
Ivan
зачем с json-ами и прочим мудрить)
Konstantin
Шмишно
Anonymous
Ну типа, реально странная метода, не то тестируете
Anonymous
Я бы взял для теста какой-нибудь пробный json, на котором заранее известно что он валидный. И на нем бы проверял
Konstantin
Снова таки - переведу сейчас все на тест постоянного json'а
Konstantin
Ошибка в travis'е испарится?
Konstantin
Нет
Konstantin
С ней все равно надо разбираться
Ivan
Konstantin
Шмишно [2]
Ivan
(facepalm)
Konstantin
👌
Ivan
Еще раз научно-популярно: у тебя будет один и тот же код (что и локально) запускаться на одном и том же json (что и локально). Если локально тест будет проходить, то и на трависе будет проходить. А сейчас ты один и тот же код запускаешь на разных json. Ожидаемо, тест падает. Что не понятно?
Aleksandr
Konstantin
Плюс ко всему - эти тесты используются и для определения - не поменялось ли что-то у инстаграма в выдаче, т.к. они ее регулярно меняют, только недавно выдача media по коду была изменена полностью, поменялись имена каждого поля. А если бы у меня тесты прогоняли статичный json - я бы этого и не узнал.
Konstantin
Aleksandr
да никому не хочется этим заниматься, т.к. лучше в ошибках тестах показывать на каких данных они падают. это же поможет и при изменениях апи.
Konstantin
Не хочется - так дело каждого. Я ведь попросил, а не приказал)
А засорять каждый тест огромной выдачей тоже не хочу, хотя если не останется другого выхода - то придется.
Ivan
Konstantin
Ivan
Если код, то кладешь статичный json и тестишь на нем код. Если сторонний сервис, то берешь эталонный json, дергаешь API, сравниваешь json-ы построчно.
Ivan
Ivan
Тебе уже дали несколько советов как это решить: 1) добавить больше логгирования и посмотреть, что за json приходит 2) определиться с тем, что тестируешь 3) тестировать изолированно
Konstantin
Пока подожду, уже отозвалось пару человек пробежать тесты. А там, как уже и сам сказал выше, тесты надо делить, да)
Daniel
коллеги, а вот скажите
у меня есть тест, и я знаю его максимальное время исполнения
и если тест задержался дольше - я хочу, чтобы он не прошел
куда мне вписать этот таймаут?
engelbart
time.Ticker ... t.Fail
Ivan
https://golang.org/cmd/go/#hdr-Description_of_testing_flags -timeout не подходит?
Илья
или context.WithTimeout
Anonymous
Anonymous
Правда это стандартный паттерн, наверняка он уже реализован в каком-нибудь контексте
Илья
https://golang.org/pkg/context/#example_WithTimeout
Daniel
Илья
ну так, тогда так и стоит, в начале теста context background
Илья
и поехали
Daniel
тест должен быть простым
Daniel
и включать в себя как можно меньше компонентов
Илья
ну, тогда time.Ticker
Daniel
если есть возможность использовать существующий - он же существует - функционал - хорошо бы за него зацепиться
Daniel
Илья
или так, не суть, но я бы использовал context, особенно, если вы используете его внутри
Daniel
не использую
Мерль
engelbart
а чо хорошего про контексты почитать
Илья
https://blog.golang.org/context
Илья
https://habrahabr.ru/post/269299/
Slach
всем привет
изучаю чужие исходники
кто нибудь может объяснить где именно в исходниках ledisdb вызывается указанная вот тут функция которая регистрирует обработчики команд?
https://github.com/siddontang/ledisdb/blob/master/server/cmd_kv.go#L518
Илья
init отработает на старте программы
Илья
https://play.golang.org/p/dvHymTy73F
Slach
ох ничесе
спасибо
не знал
engelbart
engelbart
А когда init много в разных файлах, каков порядок?
Илья
не опеределен
Peter
Ого, в 1.8 завезли sync.Map но он какой-то неудобный
Oleg
На пустых интерфейсах. Показательный пример от разработчиков, как писать нестандартные коллекции без генериков :-\
Slava
Приведение к типу - быстрая операция
Oleg
Но не типобезопасная
Slava
да, поэтому sync.Map, sync.Pool не для всех, а для разработчиков библиотек, которые всё это закроют через интерфейс api
Slava
вот то что в context хранится interface =) это большая проблема и косяк, как мне кажется
Мерль
Slava
я бы делал через структуру, если бы можно было её сделать readonly
Slava
я понимаю что то как сделан контекст, это самый простой и доступный вариант в текущем положении
Slava
но этот вариант добавляет много проблем тоже, как и приносит решений
Bald
Ждём вакансию
Oleg
Стесняются
Мерль
concurrency-made-easy.pdf
Мерль
Slava
Раз стесняются, тогда я начну
Slava
Ещё раз напишу =) Мне в команду storage в Dropbox нужен крутой mysql SRE, офисы в Ньй-Йорк, Сан Франциско, Сиэтл, Остин, Дублин. Визы, гринкарты легко. У меня тут всего 2 человека рулят флотом из десятков тысяч машин.