Re[2]: timezone
От: Аноним  
Дата: 10.10.12 07:16
Оценка:
Здравствуйте, ., Вы писали:

.>Здравствуйте, Аноним, Вы писали:


>> http://bugs.mysql.com/bug.php?id=22695


>> Как воспроизвести такой баг в ява проге и протестить его через junit

>> Есть идеи?
.>Я не совсем понял что значит из java. Если именно парсинг данных, то вот примерно так:
.>
.>        final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
.>        simpleDateFormat.setTimeZone(TimeZone.getTimeZone("Canada/Eastern"));
.>        simpleDateFormat.setLenient(false);
.>        final Date date = simpleDateFormat.parse("2012-03-11 02:49:54");
.>

.>Оно кидает исключение ParseException: Unparseable date
.>Как обернуть это в JUnit думаю сам догадаешься.

.>Я использовал другую дату, мне точно известную, потому что не понял какая там в баге таймзона используется.


.>Если тебе нужно протестить именно mysql, то это уже integration test, какой-нибудь сервер mysql поднимать и слать запросы через jdbc.


Мне и самому не все тут ясно.
Примерно так. При попытке вставить дату или может быть timestamp в некоторых случаях mySql валится в исключение.
Я поразеваю, что всем виной неверная дата или неверная дата для mySql в какой-то временной зоне.
Типа у меня все работает, а кое-где кое у кого возникает редкий глюк.

Сначала хочу воспроизвести глюк тестом.
из доков на mySql
//A timestamp. The range is '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07'
//UTC. TIMESTAMP values are stored as the number of seconds since the epoch ('1970-01-01 00:00:00' UTC).
//A TIMESTAMP cannot represent the value '1970-01-01 00:00:00' because that is equivalent to 0 seconds from
//the epoch and the value 0 is reserved for representing '0000-00-00 00:00:00', the “zero” TIMESTAMP value.

Date date = new java.util.Date(1251136551293L); по-моему в некоторых временных зонах дата уйдет в 1969 год и вставка в MySql
должна выпадсть в экспешн. Наверно есть и други невкусные даты. Может быть в разных субд могут быть другие невалидные даты.
Нужен список таких дат. Составлять вручную?

Хочу каким-то тестом отловить все методы где есть вставка дат в базу данных и подсунуть им некорекные даты.
Может быть и нужно поднимать MySql и т.д. но хотелось бы обойтись без этого.
Пока ищу идеи, как это правильно делать.

Может бы есть способ как то проверять дату перед вставкой на валидность?

Вот такие пироги.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.