blob: 79188ad09bb50f1bc94f7423956db9584b3db502 [file] [log] [blame]
package org.apache.maven.buildcache.checksum;
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* 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
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import org.apache.maven.buildcache.hash.HashAlgorithm;
import org.apache.maven.buildcache.hash.HashChecksum;
import org.junit.jupiter.api.Test;
import static org.apache.maven.buildcache.hash.HashFactory.XX;
import static org.apache.maven.buildcache.hash.HashFactory.XXMM;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class XXHashTest
{
private static final byte[] HELLO_ARRAY = "hello".getBytes( StandardCharsets.UTF_8 );
private static final byte[] WORLD_ARRAY = "world".getBytes( StandardCharsets.UTF_8 );
private static final long HELLO_LONG = 2794345569481354659L;
private static final long WORLD_LONG = -1767385783675760145L;
private static final String EMPTY_HASH = "ef46db3751d8e999";
private static final String HELLO_HASH = "26c7827d889f6da3";
private static final String WORLD_HASH = "e778fbfe66ee51ef";
private static final String HELLO_CHECKSUM = "c07c10338a825a5d";
private static final String WORLD_CHECKSUM = "cb21505d7a714523";
private static final String FULL_CHECKSUM = "b8ca8fa824d335e9";
private static final HashAlgorithm ALGORITHM = XX.createAlgorithm();
@Test
public void testEmptyArray()
{
byte[] emptyArray = new byte[0];
String hash = ALGORITHM.hash( emptyArray );
assertEquals( EMPTY_HASH, hash );
}
@Test
public void testSimpleHash()
{
String helloHash = ALGORITHM.hash( HELLO_ARRAY );
assertEquals( HELLO_HASH, helloHash );
String worldHash = ALGORITHM.hash( WORLD_ARRAY );
assertEquals( WORLD_HASH, worldHash );
}
@Test
public void testSimpleChecksum()
{
String helloChecksum = ALGORITHM.hash( longToBytes( 1, HELLO_LONG ) );
assertEquals( HELLO_CHECKSUM, helloChecksum );
String worldChecksum = ALGORITHM.hash( longToBytes( 1, WORLD_LONG ) );
assertEquals( WORLD_CHECKSUM, worldChecksum );
String checksum = ALGORITHM.hash( longToBytes( 2, HELLO_LONG, WORLD_LONG ) );
assertEquals( FULL_CHECKSUM, checksum );
}
@Test
public void testEmptyBuffer()
{
assertEmptyBuffer( XX.createChecksum( 0 ) );
assertEmptyBuffer( XXMM.createChecksum( 0 ) );
}
@Test
public void testSingleHash()
{
assertSingleHash( XX.createChecksum( 1 ) );
assertSingleHash( XXMM.createChecksum( 1 ) );
}
@Test
public void testSingleChecksum()
{
assertSingleChecksum( XX.createChecksum( 1 ) );
assertSingleChecksum( XXMM.createChecksum( 1 ) );
}
@Test
public void testNotFullChecksum()
{
assertSingleChecksum( XX.createChecksum( 2 ) );
assertSingleChecksum( XXMM.createChecksum( 2 ) );
}
@Test
public void testFullChecksum()
{
assertFullChecksum( XX.createChecksum( 2 ) );
assertFullChecksum( XXMM.createChecksum( 2 ) );
}
private void assertEmptyBuffer( HashChecksum checksum )
{
assertEquals( EMPTY_HASH, checksum.digest() );
}
private void assertSingleHash( HashChecksum checksum )
{
assertEquals( HELLO_HASH, checksum.update( HELLO_ARRAY ) );
assertEquals( HELLO_CHECKSUM, checksum.digest() );
}
private void assertSingleChecksum( HashChecksum checksum )
{
assertEquals( HELLO_HASH, checksum.update( HELLO_HASH ) );
assertEquals( HELLO_CHECKSUM, checksum.digest() );
}
private void assertFullChecksum( HashChecksum checksum )
{
assertEquals( HELLO_HASH, checksum.update( HELLO_HASH ) );
assertEquals( WORLD_HASH, checksum.update( WORLD_HASH ) );
assertEquals( FULL_CHECKSUM, checksum.digest() );
}
private byte[] longToBytes( int size, long... values )
{
final ByteBuffer buffer = ByteBuffer.allocate( size * Long.SIZE / Byte.SIZE );
for ( long value : values )
{
buffer.putLong( value );
}
return buffer.array();
}
}