engelbart
только один вопрос, чем мы лучше чем тревис
Konstantin
Вы живые)
Ivan
блин, ну у тебя json разные. Положи его один раз в репу и гоняй на нем тесты. Что ты голову морочишь?
Konstantin
блин, ну у тебя json разные. Положи его один раз в репу и гоняй на нем тесты. Что ты голову морочишь?
Это хорошая идея, потихоньку буду переводить тесты парсинега на такой подход, но к сожалению проблема не исчезает и почему-то тревису выдается другой json
Konstantin
Во, сейчас в третий раз перезапустил сборку на нем - тревисе - и все прошло успешно. Магия херова)
Ivan
ну потому что ты делаешь запрос к стороннему API. Одному Богу известно, что он тебе выдаст. Может вообще API с ошибкой работал. У тебя задача протестить свой код или код API?
Aleksandr
ну так добавь в тест логирование - выводи json, http response
Ivan
зачем с json-ами и прочим мудрить)
Konstantin
Шмишно
Anonymous
Ну типа, реально странная метода, не то тестируете
Anonymous
Я бы взял для теста какой-нибудь пробный json, на котором заранее известно что он валидный. И на нем бы проверял
Konstantin
Снова таки - переведу сейчас все на тест постоянного json'а
Konstantin
Ошибка в travis'е испарится?
Konstantin
Нет
Konstantin
С ней все равно надо разбираться
Konstantin
Шмишно [2]
Ivan
(facepalm)
Konstantin
👌
Ivan
Еще раз научно-популярно: у тебя будет один и тот же код (что и локально) запускаться на одном и том же json (что и локально). Если локально тест будет проходить, то и на трависе будет проходить. А сейчас ты один и тот же код запускаешь на разных json. Ожидаемо, тест падает. Что не понятно?
Konstantin
Еще раз научно-популярно: у тебя будет один и тот же код (что и локально) запускаться на одном и том же json (что и локально). Если локально тест будет проходить, то и на трависе будет проходить. А сейчас ты один и тот же код запускаешь на разных json. Ожидаемо, тест падает. Что не понятно?
Объясняю и я: начав проверять статичный json - тесты будут проходить только из-за того, что json вечно один и тот же. Проблема из-за которой падает тест тревиса испарится? Я отвечу лучше, а то ваш ответ уже выше - нет она не испарится, причина по которой получается разный json остается и ее надо решать.
Konstantin
Плюс ко всему - эти тесты используются и для определения - не поменялось ли что-то у инстаграма в выдаче, т.к. они ее регулярно меняют, только недавно выдача media по коду была изменена полностью, поменялись имена каждого поля. А если бы у меня тесты прогоняли статичный json - я бы этого и не узнал.
Konstantin
но решать проблему тревиса надо на стороне тревиса. надо узнать баг ли это тревиса или редкий кейс, невоспроизводимый человеком, но тем не менее существующий
Поэтому я и прошу кого-нибудь еще пробежать тесты, чтобы понять - может мне так везет, а может дело в версии или чем-то еще.
Aleksandr
да никому не хочется этим заниматься, т.к. лучше в ошибках тестах показывать на каких данных они падают. это же поможет и при изменениях апи.
Konstantin
Не хочется - так дело каждого. Я ведь попросил, а не приказал) А засорять каждый тест огромной выдачей тоже не хочу, хотя если не останется другого выхода - то придется.
Konstantin
Еще раз спрашиваю тогда: тебе нужно протестировать код, который работает с json-ом или сторонний сервис, который этот json генерирует? Это будут 2 разных теста.
Я проверяю и то, и другое. Но да, это стоит разделить, но сейчас мне не до этого, потому что хочу решить именно эту проблему с тревисом.
Ivan
Если код, то кладешь статичный json и тестишь на нем код. Если сторонний сервис, то берешь эталонный json, дергаешь API, сравниваешь json-ы построчно.
Ivan
Я проверяю и то, и другое. Но да, это стоит разделить, но сейчас мне не до этого, потому что хочу решить именно эту проблему с тревисом.
у тебя нет проблемы с тревисом. У тебя есть проблема, что ты не понятно что и как тестируешь))
Konstantin
у тебя нет проблемы с тревисом. У тебя есть проблема, что ты не понятно что и как тестируешь))
Ее бы не было - выдавая он всегда ошибку. А тут она происходит рандомно, так что по мне - это проблема с тревисом.
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
Правда это стандартный паттерн, наверняка он уже реализован в каком-нибудь контексте
Илья
https://golang.org/pkg/context/#example_WithTimeout
Daniel
https://golang.org/cmd/go/#hdr-Description_of_testing_flags -timeout не подходит?
ну дефолтные 10 минут мне многовато все же. мне надо или дефолт изменить, или автоматически при запуске go test без параметров пропихнуть правильный
Daniel
или context.WithTimeout
так я умею.
Илья
ну так, тогда так и стоит, в начале теста context background
Илья
и поехали
Daniel
тест должен быть простым
Daniel
и включать в себя как можно меньше компонентов
Илья
ну, тогда time.Ticker
Daniel
если есть возможность использовать существующий - он же существует - функционал - хорошо бы за него зацепиться
Daniel
Илья
или так, не суть, но я бы использовал context, особенно, если вы используете его внутри
Daniel
не использую
Мерль
коллеги, а вот скажите у меня есть тест, и я знаю его максимальное время исполнения и если тест задержался дольше - я хочу, чтобы он не прошел куда мне вписать этот таймаут?
смотря какой тест если в нём есть функция, принимающая context - то через него но вообще time.AfterFunc - универсальная штука, имхо
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 человека рулят флотом из десятков тысяч машин.