This is an automated email from the ASF dual-hosted git repository. michaelo pushed a commit to branch MRESOLVER-56 in repository https://gitbox.apache.org/repos/asf/maven-resolver.git
commit 086e624dbc33e74a3ef439c4b94c46b847d6b079 Author: Michael Osipov <micha...@apache.org> AuthorDate: Sun May 31 00:13:08 2020 +0200 [MRESOLVER-56] Support SHA-256 and SHA-512 as checksums --- .../connector/basic/ChecksumCalculatorTest.java | 44 ++++++++++++++------- .../connector/basic/ChecksumValidatorTest.java | 9 ++++- .../impl/Maven2RepositoryLayoutFactory.java | 11 ++++-- .../eclipse/aether/internal/impl/SimpleDigest.java | 30 ++++++++++---- .../impl/Maven2RepositoryLayoutFactoryTest.java | 46 ++++++++++++++-------- .../aether/spi/connector/layout/ChecksumTest.java | 14 +++++-- .../org/eclipse/aether/util/ChecksumUtilTest.java | 40 ++++++++++++++----- 7 files changed, 137 insertions(+), 57 deletions(-) diff --git a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java index b0921e1..a903386 100644 --- a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java +++ b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumCalculatorTest.java @@ -8,9 +8,9 @@ package org.eclipse.aether.connector.basic; * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -39,6 +39,10 @@ import org.junit.Test; public class ChecksumCalculatorTest { + private static final String SHA512 = "SHA-512"; + + private static final String SHA256 = "SHA-256"; + private static final String SHA1 = "SHA-1"; private static final String MD5 = "MD5"; @@ -70,40 +74,46 @@ public class ChecksumCalculatorTest @Test public void testNoOffset() { - ChecksumCalculator calculator = newCalculator( SHA1, MD5 ); + ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 ); calculator.init( 0 ); calculator.update( toBuffer( "Hello World!" ) ); Map<String, Object> digests = calculator.get(); assertNotNull( digests ); + assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) ); + assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) ); assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) ); assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) ); - assertEquals( 2, digests.size() ); + assertEquals( 4, digests.size() ); } @Test public void testWithOffset() { - ChecksumCalculator calculator = newCalculator( SHA1, MD5 ); + ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 ); calculator.init( 6 ); calculator.update( toBuffer( "World!" ) ); Map<String, Object> digests = calculator.get(); assertNotNull( digests ); + assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) ); + assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) ); assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) ); assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) ); - assertEquals( 2, digests.size() ); + assertEquals( 4, digests.size() ); } @Test public void testWithExcessiveOffset() { - ChecksumCalculator calculator = newCalculator( SHA1, MD5 ); + ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 ); calculator.init( 100 ); calculator.update( toBuffer( "World!" ) ); Map<String, Object> digests = calculator.get(); assertNotNull( digests ); + assertTrue( digests.get( SHA512 ) instanceof IOException ); + assertTrue( digests.get( SHA256 ) instanceof IOException ); assertTrue( digests.get( SHA1 ) instanceof IOException ); assertTrue( digests.get( MD5 ) instanceof IOException ); - assertEquals( 2, digests.size() ); + assertEquals( 4, digests.size() ); } @Test @@ -122,42 +132,48 @@ public class ChecksumCalculatorTest @Test public void testNoInitCall() { - ChecksumCalculator calculator = newCalculator( SHA1, MD5 ); + ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 ); calculator.update( toBuffer( "Hello World!" ) ); Map<String, Object> digests = calculator.get(); assertNotNull( digests ); + assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) ); + assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) ); assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) ); assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) ); - assertEquals( 2, digests.size() ); + assertEquals( 4, digests.size() ); } @Test public void testRestart() { - ChecksumCalculator calculator = newCalculator( SHA1, MD5 ); + ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 ); calculator.init( 0 ); calculator.update( toBuffer( "Ignored" ) ); calculator.init( 0 ); calculator.update( toBuffer( "Hello World!" ) ); Map<String, Object> digests = calculator.get(); assertNotNull( digests ); + assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) ); + assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) ); assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) ); assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) ); - assertEquals( 2, digests.size() ); + assertEquals( 4, digests.size() ); } @Test public void testRestartAfterError() { - ChecksumCalculator calculator = newCalculator( SHA1, MD5 ); + ChecksumCalculator calculator = newCalculator( SHA512, SHA256, SHA1, MD5 ); calculator.init( 100 ); calculator.init( 0 ); calculator.update( toBuffer( "Hello World!" ) ); Map<String, Object> digests = calculator.get(); assertNotNull( digests ); + assertEquals( "861844d6704e8573fec34d967e20bcfef3d424cf48be04e6dc08f2bd58c729743371015ead891cc3cf1c9d34b49264b510751b1ff9e537937bc46b5d6ff4ecc8", digests.get( SHA512 ) ); + assertEquals( "7f83b1657ff1fc53b92dc18148a1d65dfc2d4b1fa3d677284addd200126d9069", digests.get( SHA256 ) ); assertEquals( "2ef7bde608ce5404e97d5f042f95f89f1c232871", digests.get( SHA1 ) ); assertEquals( "ed076287532e86365e841e92bfc50d8c", digests.get( MD5 ) ); - assertEquals( 2, digests.size() ); + assertEquals( 4, digests.size() ); } } diff --git a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java index 0e860ce..3bb7385 100644 --- a/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java +++ b/maven-resolver-connector-basic/src/test/java/org/eclipse/aether/connector/basic/ChecksumValidatorTest.java @@ -8,9 +8,9 @@ package org.eclipse.aether.connector.basic; * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -167,6 +167,11 @@ public class ChecksumValidatorTest } + // FIXME Modify tests for SHA-2 family + private static final String SHA512 = "SHA-512"; + + private static final String SHA256 = "SHA-256"; + private static final String SHA1 = "SHA-1"; private static final String MD5 = "MD5"; diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactory.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactory.java index 9202c4b..d8dff28 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactory.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactory.java @@ -8,9 +8,9 @@ package org.eclipse.aether.internal.impl; * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -55,7 +55,7 @@ public final class Maven2RepositoryLayoutFactory /** * Sets the priority of this component. - * + * * @param priority The priority. * @return This component for chaining, never {@code null}. */ @@ -155,7 +155,10 @@ public final class Maven2RepositoryLayoutFactory private List<Checksum> getChecksums( URI location ) { - return Arrays.asList( Checksum.forLocation( location, "SHA-1" ), Checksum.forLocation( location, "MD5" ) ); + return Arrays.asList( Checksum.forLocation( location, "SHA-512" ), + Checksum.forLocation( location, "SHA-256" ), + Checksum.forLocation( location, "SHA-1" ), + Checksum.forLocation( location, "MD5" ) ); } } diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java index 479ae76..0f83c59 100644 --- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java +++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/SimpleDigest.java @@ -8,9 +8,9 @@ package org.eclipse.aether.internal.impl; * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -37,18 +37,32 @@ class SimpleDigest { try { - digest = MessageDigest.getInstance( "SHA-1" ); + digest = MessageDigest.getInstance( "SHA-512" ); } - catch ( NoSuchAlgorithmException e ) + catch ( NoSuchAlgorithmException ne3 ) { try { - digest = MessageDigest.getInstance( "MD5" ); + digest = MessageDigest.getInstance( "SHA-256" ); } - catch ( NoSuchAlgorithmException ne ) + catch ( NoSuchAlgorithmException ne2 ) { - digest = null; - hash = 13; + try + { + digest = MessageDigest.getInstance( "SHA-1" ); + } + catch ( NoSuchAlgorithmException ne1 ) + { + try + { + digest = MessageDigest.getInstance( "MD5" ); + } + catch ( NoSuchAlgorithmException ne0 ) + { + digest = null; + hash = 13; + } + } } } } diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactoryTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactoryTest.java index 7411a1d..4d14cb0 100644 --- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactoryTest.java +++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/Maven2RepositoryLayoutFactoryTest.java @@ -8,9 +8,9 @@ package org.eclipse.aether.internal.impl; * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -154,9 +154,11 @@ public class Maven2RepositoryLayoutFactoryTest DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0" ); URI uri = layout.getLocation( artifact, false ); List<Checksum> checksums = layout.getChecksums( artifact, false, uri ); - assertEquals( 2, checksums.size() ); - assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" ); - assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" ); + assertEquals( 4, checksums.size() ); + assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha512", "SHA-512" ); + assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha256", "SHA-256" ); + assertChecksum( checksums.get( 2 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" ); + assertChecksum( checksums.get( 3 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" ); } @Test @@ -165,9 +167,11 @@ public class Maven2RepositoryLayoutFactoryTest DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "ext", "1.0" ); URI uri = layout.getLocation( artifact, true ); List<Checksum> checksums = layout.getChecksums( artifact, true, uri ); - assertEquals( 2, checksums.size() ); - assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" ); - assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" ); + assertEquals( 4, checksums.size() ); + assertChecksum( checksums.get( 0 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha512", "SHA-512" ); + assertChecksum( checksums.get( 1 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha256", "SHA-256" ); + assertChecksum( checksums.get( 2 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.sha1", "SHA-1" ); + assertChecksum( checksums.get( 3 ), "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.ext.md5", "MD5" ); } @Test @@ -178,10 +182,14 @@ public class Maven2RepositoryLayoutFactoryTest Metadata.Nature.RELEASE_OR_SNAPSHOT ); URI uri = layout.getLocation( metadata, false ); List<Checksum> checksums = layout.getChecksums( metadata, false, uri ); - assertEquals( 2, checksums.size() ); - assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1", + assertEquals( 4, checksums.size() ); + assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha512", + "SHA-512" ); + assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha256", + "SHA-256" ); + assertChecksum( checksums.get( 2 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1", "SHA-1" ); - assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" ); + assertChecksum( checksums.get( 3 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" ); } @Test @@ -192,10 +200,14 @@ public class Maven2RepositoryLayoutFactoryTest Metadata.Nature.RELEASE_OR_SNAPSHOT ); URI uri = layout.getLocation( metadata, true ); List<Checksum> checksums = layout.getChecksums( metadata, true, uri ); - assertEquals( 2, checksums.size() ); - assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1", + assertEquals( 4, checksums.size() ); + assertChecksum( checksums.get( 0 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha512", + "SHA-512" ); + assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha256", + "SHA-256" ); + assertChecksum( checksums.get( 2 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.sha1", "SHA-1" ); - assertChecksum( checksums.get( 1 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" ); + assertChecksum( checksums.get( 3 ), "org/apache/maven/plugins/maven-jar-plugin/maven-metadata.xml.md5", "MD5" ); } @Test @@ -204,7 +216,7 @@ public class Maven2RepositoryLayoutFactoryTest DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "asc", "1.0" ); URI uri = layout.getLocation( artifact, false ); List<Checksum> checksums = layout.getChecksums( artifact, false, uri ); - assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-1", "MD5" ); + assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-512", "SHA-256", "SHA-1", "MD5" ); artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" ); uri = layout.getLocation( artifact, false ); @@ -218,7 +230,7 @@ public class Maven2RepositoryLayoutFactoryTest DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "asc", "1.0" ); URI uri = layout.getLocation( artifact, true ); List<Checksum> checksums = layout.getChecksums( artifact, true, uri ); - assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-1", "MD5" ); + assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.asc", "SHA-512", "SHA-256", "SHA-1", "MD5" ); artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" ); uri = layout.getLocation( artifact, true ); @@ -235,7 +247,7 @@ public class Maven2RepositoryLayoutFactoryTest DefaultArtifact artifact = new DefaultArtifact( "g.i.d", "a-i.d", "cls", "jar.asc", "1.0" ); URI uri = layout.getLocation( artifact, true ); List<Checksum> checksums = layout.getChecksums( artifact, true, uri ); - assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.jar.asc", "SHA-1", "MD5" ); + assertChecksums( checksums, "g/i/d/a-i.d/1.0/a-i.d-1.0-cls.jar.asc", "SHA-512", "SHA-256", "SHA-1", "MD5" ); } } diff --git a/maven-resolver-spi/src/test/java/org/eclipse/aether/spi/connector/layout/ChecksumTest.java b/maven-resolver-spi/src/test/java/org/eclipse/aether/spi/connector/layout/ChecksumTest.java index bcd49b4..4d701b5 100644 --- a/maven-resolver-spi/src/test/java/org/eclipse/aether/spi/connector/layout/ChecksumTest.java +++ b/maven-resolver-spi/src/test/java/org/eclipse/aether/spi/connector/layout/ChecksumTest.java @@ -8,9 +8,9 @@ package org.eclipse.aether.spi.connector.layout; * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -33,7 +33,15 @@ public class ChecksumTest @Test public void testForLocation() { - Checksum cs = Checksum.forLocation( URI.create( "dir/sub%20dir/file.txt" ), "SHA-1" ); + Checksum cs = Checksum.forLocation( URI.create( "dir/sub%20dir/file.txt" ), "SHA-512" ); + assertEquals( "SHA-512", cs.getAlgorithm() ); + assertEquals( "dir/sub%20dir/file.txt.sha512", cs.getLocation().toString() ); + + cs = Checksum.forLocation( URI.create( "dir/sub%20dir/file.txt" ), "SHA-256" ); + assertEquals( "SHA-256", cs.getAlgorithm() ); + assertEquals( "dir/sub%20dir/file.txt.sha256", cs.getLocation().toString() ); + + cs = Checksum.forLocation( URI.create( "dir/sub%20dir/file.txt" ), "SHA-1" ); assertEquals( "SHA-1", cs.getAlgorithm() ); assertEquals( "dir/sub%20dir/file.txt.sha1", cs.getLocation().toString() ); diff --git a/maven-resolver-util/src/test/java/org/eclipse/aether/util/ChecksumUtilTest.java b/maven-resolver-util/src/test/java/org/eclipse/aether/util/ChecksumUtilTest.java index 6082386..733c290 100644 --- a/maven-resolver-util/src/test/java/org/eclipse/aether/util/ChecksumUtilTest.java +++ b/maven-resolver-util/src/test/java/org/eclipse/aether/util/ChecksumUtilTest.java @@ -8,9 +8,9 @@ package org.eclipse.aether.util; * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at - * + * * http://www.apache.org/licenses/LICENSE-2.0 - * + * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY @@ -40,11 +40,11 @@ public class ChecksumUtilTest private static final String EMPTY = "EMPTY"; private static final String PATTERN = "PATTERN"; private static final String TEXT = "TEXT"; - + private Map<String, File> files = new HashMap<>(3); - + private Map<String, byte[]> bytes = new HashMap<>(3); - + private static Map<String, String> emptyChecksums = new HashMap<>(); private static Map<String, String> patternChecksums = new HashMap<>(); @@ -58,10 +58,16 @@ public class ChecksumUtilTest { emptyChecksums.put( "MD5", "d41d8cd98f00b204e9800998ecf8427e" ); emptyChecksums.put( "SHA-1", "da39a3ee5e6b4b0d3255bfef95601890afd80709" ); + emptyChecksums.put( "SHA-256", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ); + emptyChecksums.put( "SHA-512", "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e" ); patternChecksums.put( "MD5", "14f01d6c7de7d4cf0a4887baa3528b5a" ); patternChecksums.put( "SHA-1", "feeeda19f626f9b0ef6cbf5948c1ec9531694295" ); + patternChecksums.put( "SHA-256", "81d480a714840ab206dc8de62ca6119036f65499ad9e2e227c2465551bed684d" ); + patternChecksums.put( "SHA-512", "931aa34118d9a85b9514e0224046d736a5bd7e2b2f366505fe1ad07ed85e1a4ac0cbc18e9b9a7fe36ce835be2a18cb571202a4975d182553faff336970eb0b7e" ); textChecksums.put( "MD5", "12582d1a662cefe3385f2113998e43ed" ); textChecksums.put( "SHA-1", "a8ae272db549850eef2ff54376f8cac2770745ee" ); + textChecksums.put( "SHA-256", "35829adced2979761ba521dc2bb7d166e92ebed7342319d041398e509d481a46" ); + textChecksums.put( "SHA-512", "2d6d19570b26080fa88101af2256ce3dae63512b06864cd36a05371c81d6dbd0ec226dd75f22e8d46a9582e1fc40ee6e7a02d43c852f3c92255982b835db6e7c" ); } @Before @@ -96,7 +102,7 @@ public class ChecksumUtilTest for ( Map.Entry<String,File> fileEntry : files.entrySet() ) { - checksums = ChecksumUtils.calc( fileEntry.getValue(), Arrays.asList( "SHA-1", "MD5" ) ); + checksums = ChecksumUtils.calc( fileEntry.getValue(), Arrays.asList( "SHA-512", "SHA-256", "SHA-1", "MD5" ) ); for ( Entry<String, Object> entry : checksums.entrySet() ) { @@ -121,7 +127,7 @@ public class ChecksumUtilTest { for ( int i = 0; i < 150; i++ ) { - ChecksumUtils.calc( file, Arrays.asList( "SHA-1", "MD5" ) ); + ChecksumUtils.calc( file, Arrays.asList( "SHA-512", "SHA-256", "SHA-1", "MD5" ) ); } assertTrue( "Could not delete file", file.delete() ); } @@ -134,15 +140,23 @@ public class ChecksumUtilTest { for ( Map<String, String> checksums : sums.values() ) { + String sha512 = checksums.get( "SHA-512" ); + String sha256 = checksums.get( "SHA-256" ); String sha1 = checksums.get( "SHA-1" ); String md5 = checksums.get( "MD5" ); + File sha512File = createTempFile( sha512 ); + File sha256File = createTempFile( sha256 ); File sha1File = createTempFile( sha1 ); File md5File = createTempFile( md5 ); + assertEquals( sha512, ChecksumUtils.read( sha512File ) ); + assertEquals( sha256, ChecksumUtils.read( sha256File ) ); assertEquals( sha1, ChecksumUtils.read( sha1File ) ); assertEquals( md5, ChecksumUtils.read( md5File ) ); + assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha512)", sha512File.delete() ); + assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha256)", sha256File.delete() ); assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha1)", sha1File.delete() ); assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.md5)", md5File.delete() ); } @@ -154,15 +168,23 @@ public class ChecksumUtilTest { for ( Map<String, String> checksums : sums.values() ) { + String sha512 = checksums.get( "SHA-512" ); + String sha256 = checksums.get( "SHA-256" ); String sha1 = checksums.get( "SHA-1" ); String md5 = checksums.get( "MD5" ); + File sha512File = createTempFile( "sha512-checksum = " + sha512 ); + File sha256File = createTempFile( "sha256-checksum = " + sha256 ); File sha1File = createTempFile( "sha1-checksum = " + sha1 ); File md5File = createTempFile( md5 + " test" ); + assertEquals( sha512, ChecksumUtils.read( sha512File ) ); + assertEquals( sha256, ChecksumUtils.read( sha256File ) ); assertEquals( sha1, ChecksumUtils.read( sha1File ) ); assertEquals( md5, ChecksumUtils.read( md5File ) ); + assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha512)", sha512File.delete() ); + assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha256)", sha256File.delete() ); assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.sha1)", sha1File.delete() ); assertTrue( "ChecksumUtils leaks file handles (cannot delete checksums.md5)", md5File.delete() ); } @@ -188,7 +210,7 @@ public class ChecksumUtilTest assertEquals( "ff", ChecksumUtils.toHexString( new byte[] { -1 } ) ); assertEquals( "00017f", ChecksumUtils.toHexString( new byte[] { 0, 1, 127 } ) ); } - + @Test public void testCalcWithByteArray() throws Throwable { @@ -196,7 +218,7 @@ public class ChecksumUtilTest for ( Map.Entry<String, byte[]> bytesEntry : bytes.entrySet() ) { - checksums = ChecksumUtils.calc( bytesEntry.getValue(), Arrays.asList( "SHA-1", "MD5" ) ); + checksums = ChecksumUtils.calc( bytesEntry.getValue(), Arrays.asList( "SHA-512", "SHA-256", "SHA-1", "MD5" ) ); for ( Entry<String, Object> entry : checksums.entrySet() ) {