samdjstevens / java-totp

A java library for implementing Time-based One Time Passwords for Multi-Factor Authentication.
MIT License
448 stars 109 forks source link

DataUriEncodingTest.testDataUriEncode fails on Java 11 #19

Closed OlivierJaquemet closed 4 years ago

OlivierJaquemet commented 4 years ago

When running mvn test on Java 11 the following test will fail :

[INFO] Running dev.samstevens.totp.util.DataUriEncodingTest
[ERROR] Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 0.032 s <<< FAILURE! - in dev.samstevens.totp.util.DataUriEncodingTest
[ERROR] testDataUriEncode(dev.samstevens.totp.util.DataUriEncodingTest)  Time elapsed: 0.03 s  <<< FAILURE!
org.junit.ComparisonFailure: expected:<...AAAFeAQAAAADlUEq3AAA[C30lEQVR42u2bPZLiQAyFRREQ7hHmKBzNPpqPwhEcElDWtt5T2267ganaZIPnYIaxPwiEfp96zH9/vUywYMGCBf8jvBgu96f9TINdn38eNlxeN3/cx/IXHl4Fd+F45eNiN/fJQNlQHpndx6W8tSKCO/Az7vsr4GGpli1W97EYv1jdBH+El3wc78GjcNjlKvg77PTNi/scQW4WQW6CP8OMbtr5Ak9FmrS7v00Fgnc1Bd7IVNj86hYgwW0nA5OGi65v/dD2CK52Lk1LucJFy51HxDoSYwn5iPWL4D5Mk0YqLEGOOhyPeRNJ0wX3YeRAXOGihlQ4wsBOc7f+LNhbO6Py1o65VuVoAr3jooK3clxuxKvZwlM5rtHqoKJUC+7D7FY4tdWMyPzIcjwI7sPlJzKi3WBnpkkYPw082S4VCG7gLLk54hYDY9iYI9bjE2wX3YKt6WRufIzEiCaw/Hrl1HZqAgW35RiqXnjjwE7GjJ+AuffYyQje2XmmJhWygK3xHL4ZzzJNCj7DsDM1KbNqbmoFFBDyOxDcg6lCPbfSwhluGrKmCO7DcaOuLqyOuI7EaBze2o5RcE+hop0d+gomXWov42l9JnjrZNgLpjrAeJ4humCG2/fPgo8uaquyzJnD1gnkpD8LbkaPKaJ7TqfM3oVL27DzYU4RvEnKoRVUOY/LH9bo3OQKfgMv+Rgrx7qmpUJFqW/fyQg+wfeR5yo4w2Fqq93fw+xgZ8HN0jaDnCtHqwpV54CK4AZel4wlI25L2x+vQtVBjRd86p/jfs69WVpSoRL8DoawwnI8pv5uFBC4lTwcixJ82HdHfozyQWkqPTW/A8F9eD+11YaGezOv2vzFBXdhzhxVJKAab1Dj18gX/AamjmdoAjPI62G8PIFxFfwFRiCjkzHLbhpjySL4G+xbOcbB4xx/R3fBfbieY+S2FnNaHhx4lwoENzWF49p62AIXqINWIFj/gCNYsGDB/zH8F1f/M45si6u5]AAAAAElFTkSuQmCC> but was:<...AAAFeAQAAAADlUEq3AAA[DD0lEQVR4Xu2ZPXYqMQxGlZMiZZbAUljazNJYyiyBkoIzerqfDDHYcJL6SQWD7WuKb/RnY/57u9rzzBsruLeCeyu4t4J7+z/g3WTuFzucFvu8fG+2fFy/fDuuMdLiZ8FTmG++7vblfjJRtsSS2XHdY+sNKXgCX5j3K/CiEcqG6r6G+KG6FfwW5sEye7SEw+5y2ILfw1CEtfuZIDcjyDPWC34Jx4ffdCa6I8hJk3bkh56ju+AONhnzW6bCh4cWC57Cd5OkuOh9a79acL/a6RxNSxguGjMbsa7EGCFPrDNZ8AROSYMNndX2aTknlTQRv+AJrBwow0WpIq6qfD7wQPy0ggdYOqvy4qlt9EFVDjiL89NLKfgOM8G3s+GpeVxL1UX5+lC7C+7g7FYsW5iWEV35cUd8Wwqew/FJPIfA0hkXPab4TWC9g4KncCu5eWoL23TYOBPr/IJiveAJjG9qWYmRjMjj2k5tYGkFDzDlOHTWPA9GpvxoGA7bvZSCOzjdkDupb5bv8YxvsnbINFnwCEtnDcJucqszzJpyewcFz2AEzqq8ZmlZ2Xjgco+tKX7BA8xE5MD7NXw6pRKj5eFt1Z6CRxhNe52j+/N0UR5MOlbwAOfZlgHlI2sK8UwTKJ0f++eCn13UNOHyRpzSFN1MNaTgEUZgPxHd5+aUW/YusSdrdO4peIRddwWZA3XHp2VqdPsnt+AX8N6W+fOHHIiyxgnk4MQ676ArxwU/w5zTVExQViNFN1RsdazgEf7MyqsgN3zTcNFbdBv2o3PBjzA6tz3I3fYcWFNVZmvBMzgkVf/MfFYRYNJkHoaXgl/BtH0GbBHWWlh1eIv2Bv886vcKHuFm5EfKB4nR2IqntndQ8ByWlvTPVN7W0Kz+U463x8u9gjsYET3/pj0tfN+MKkI33XQu+BV8iQjOVtlpaAhyz04mo3t9rt0FD7ACOUamIEf8PJZ00V3wHPafcswF89GzKrOn4CnM13XPHMjDFeQvorvgsabgopIUKuc49w53BQXf4d9awb0V3FvBvRXcW8G9/Q3+B1f/M451MqUo]AAAAAElFTkSuQmCC>
        at dev.samstevens.totp.util.DataUriEncodingTest.testDataUriEncode(DataUriEncodingTest.java:18)

Explanation : When reading/write an image, the behavior may (will!) different from one Java version to another. This is explained here : https://stackoverflow.com/questions/46790556/java-9-imageio-read-write-gives-a-different-result-than-java-8

Suggested fix (Pull request incoming) : Do not use any image API in this test. Rational : The purpose of the method Utils.getDataUriForImage being tested is not to read or write an image by following some image format specification. But simply to ensure that a specified byte array (representing an image) gets written using the Data URI specification in base64.

Fix : Rewrite the test just to check that :