Closed witjem closed 8 years ago
валится org.itevents.service.security.AESCryptTokenServiceTest#shouldEncryptDecrypt http://pastebin.com/7aauPF2e
ключи в lp(local.properties) указаны, в tlp нет, так как их нет в tlp.TEMPLATE
В мене тест проходить, треба розбиратись
Тест должен раскодировать закодированный токен или что? из названия не понятно
Він повинен закодувати і розкодувати токен.
@roma-ilnitsky вообще-то тогда это уже не юнит тест
А зачем objectMapper вынес в контекст? Но благодаря этому стало очевидно почему у меня валился тест. Теперь у меня валится весь контекст. No qualifying bean of type [org.codehaus.jackson.map.ObjectMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency.
objectMapper щоб в тестах можна було його замокати та контролювати. Напевно в градл забув додати jackson хоча дивно що його немає, оскільки спрінг якось в json серіалізує об'єкти
Так ты в тестах и без контекста его замокал. В градле он есть...
Почему используешь не SpringJUnit4ClassRunner ?
Бо в ньому немає потреби
shouldCreateToken(). Создаешь юзера, но при этом используешь левые логин и пароль
Почему нет потребности? Не пойму ход мысли. С одной стороны кидаешь объект в контекст чтобы использовать в тестах его моки, с другой стороны исключаешь спринг из тестов.
А навіщо, я використовую мокіто для тесту, мені не потрібен спрінг для даного тесту
Есть такой метод assertNull называется...
В AESCryptTokenServiceTest весь спринг заменил константами и рефлексией, а потом говоришь что спринг тебе не нужен
NOT PASSED
За assertNull
дякую, буду знати )
З приводу AESCryptTokenServiceTest
не згоден, для тестування мені повністю вистачає Mockito, якщо можна ще якось реалізувати тест, здорово, але моя реалізація така, чим вона погана не зрозуміло. Наведи якісь аргументи.
Если постараться, то и ни Mokito ни Junit могут быть не нужны. Все можно сделать на чистой джаве. Однако эти фреймворки, как и Spring, придумали для сокращения кода и облегчения жизни программисту. В данном случае Spring может сократить код наполовину, а также избавить от нарушения принципа DRY, так как некоторые константы лежат в пропертях. К тому же тесты из этого класса все равно падают. http://pastebin.com/nvGvnhf4
strToken -> jsonToken str -> jsonToken
@IgorMaksymov це інтиграційний тест, він зразу перевіряє на правельність закодування і розкодування.
@vaa25
зачем появился spring-config-mocks.xml? треба перейменувати в spring-security-mocks.xml
Він виник із за того що в secyrity залежить від userService been
а в тестах потрібно мокати деякі біни щоб не піднімати усі біни проекту для тестування однієї фічі
це інтиграційний тест
интеграционные у нас в отдельной папке лежат, хотя я сомневаюсь что это он.
Він виник із за того що в secyrity залежить від userService been а в тестах потрібно мокати деякі біни щоб не піднімати усі біни проекту для тестування однієї фічі
Ну и в каком месте этот мок используется?
@vaa25
userService
біна в JwtTokenService
@roma-ilnitsky
@vaa25 використовується в CryptTokenServiceTest
Не вижу замоканого UserService. А если его нет, то это мертвый код
@vaa25 Як ти сказав, краще використовувати SpringJUnit4ClassRunner.class в CryptTokenServiceTest щоб зменшити код. Якщо я використовую SpringJUnit4ClassRunner.class в тесті, мені потрібно вказати ContextConfiguration, тому я вказав spring-security.xml, але в мене один бін із spring-security не піднімається із за залежності до userService, таким чином я створив spring-security-mocks.xml в якому обявив userService бін.
Звісно можна обійтись без SpringJUnit4ClassRunner.class але тоді прийдеться гратися із рефлексіїю, тоді коду буде трохи більше.
@roma-ilnitsky созданием spring-security-mocks.xml ты нарушил DRY. Что тебе мешает испортировать нужную зависимость ?
@IgorMaksymov Я не можу підняти spring-security.xml біни без userServise біна
@roma-ilnitsky @ContextConfiguration({ "classpath:applicationContextTestAddon.xml", "classpath*:spring-security.xml" })
поскольку я не могу сбилдить проект из-за отсутвия проперти в темплейте, кидаю ответ как есть.
@IgorMaksymov
поскольку я не могу сбилдить проект из-за отсутвия проперти в темплейте
Какой именно проперти отсутствует?
что-то про AES Encrypt
В темплейте они есть
@vaa25 действительно, не в тот темплейт смотрел. Это уже не в первый раз, когда я так путаюсь, думаю, надо их как-то переименовать или выделить слово TEST
@roma-ilnitsky "classpath:spring-security.xml", "classpath:applicationContext.xml"
@IgorMaksymov
"classpath:applicationContext.xml"
подымает весь контекст
"classpath:spring-security-mocks.xml"
мокает только UserService
Разница есть?
@roma-ilnitsky
strToken
говорит о том, что это токен в виде строки созданной методом toString(), который тоже кстати нужно исправить, если не удалить
str
говорит о том, что это произвольная строка
Рекомендую эти переменные порефакторить, например так:
strToken -> jsonToken str -> jsonToken
@vaa25 есть, там мы нарушаем DRY, а в другом способе не нарушаем. но поднимаем лишнее..
@IgorMaksymov lets listen teamlead about it
Need merge
to @roma-ilnitsky
CryptTokenService
is placed in package security, but interface TokenService
is placed at up level. Why?AESCryptTokenException
created with another principle. Why?xml
declaring for AESCryptTokenService
. It's different from the our general approach. Use annotation @Service
for class and @Value
for fields.JwtAuthenticationProvider.additionalAuthenticationChecks
method is not implemented. May be you need some explanation in comment?JwtTokenAuthenticationFilter
:
doFilterInternal
method signature has weird formatting.doFilterInternal
method need refactoring - it is difficult to read.doFilterInternal method
, so you should or handle it, or make as described in the article section number 10.setAuthenticationDetailsSource
is not usedAESCryptTokenService
:
ObjectMapper
? It's a simple class with default constructor. If you create it by new, you could test AESCryptTokenService
without mocks.String TOKEN
in test AESCryptTokenServiceTest
? It seems like fraud :)JwtTokenServiceTest
. Using encrypt(any())
you allow errors appear inside method logic without control. You should create new Token using input params of method and encrypting it.@roma-ilnitsky, I have the same opinion as @romach about his comments (magic numbers, etc.)
@alex-anakin
AES/CBC/PKCS5PADDING
encrypt kay ? @roma-ilnitsky keys for test can be in travis.properties
@AndriyBaibak 2:30
Refactor code
@roma-ilnitsky
String BEARER = "Bearer "
- variable name should explain it's purpose, don't duplicate it's value.authenticationDetailsSource
is never used.JwtTokenAuthenticationFilter
. And don't forget about constructor because you have logic in it.@Component("jwtAuthenticationFilter")
@Override
annotation if you implement interface methodadditionalAuthenticationChecks
method unnessesarity implementation inside braces/* */
-type of comments for one line of comment. It reduces code readability.String generateToken = "someGenerateToken"
? Verb in past time?shouldFailedDecryptToken()
additionally check exception message text.FAILED
@AndriyBaibak 1:00
@alex-anakin Refactore done @AndriyBaibak 3:00
Додана JWT (JSON Web Token) авторизація
Security пакет перенесений в service шар JWT криптується за допомогою AES, тому потрібно вказати 2 ключа aes.init.vector.hex та aes.key.hex Трохи перероблений swagger під JWT авторизацію connected to #116