001package org.eclipse.aether.internal.impl.synccontext.named;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *  http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import java.util.Collection;
023import java.util.Iterator;
024
025import org.eclipse.aether.artifact.DefaultArtifact;
026import org.eclipse.aether.metadata.DefaultMetadata;
027import org.eclipse.aether.metadata.Metadata;
028import org.hamcrest.Matchers;
029import org.junit.Test;
030
031import static java.util.Collections.emptyList;
032import static java.util.Collections.singletonList;
033import static org.hamcrest.MatcherAssert.assertThat;
034import static org.hamcrest.Matchers.equalTo;
035import static org.hamcrest.Matchers.hasSize;
036
037public class HashingNameMapperTest extends NameMapperTestSupport
038{
039    HashingNameMapper mapper = new HashingNameMapper( GAVNameMapper.gav() );
040
041    @Test
042    public void nullsAndEmptyInputs()
043    {
044        Collection<String> names;
045
046        names = mapper.nameLocks( session, null, null );
047        assertThat( names, Matchers.empty() );
048
049        names = mapper.nameLocks( session, null, emptyList() );
050        assertThat( names, Matchers.empty() );
051
052        names = mapper.nameLocks( session, emptyList(), null );
053        assertThat( names, Matchers.empty() );
054
055        names = mapper.nameLocks( session, emptyList(), emptyList() );
056        assertThat( names, Matchers.empty() );
057    }
058
059    @Test
060    public void singleArtifact_depth0()
061    {
062        configProperties.put( "aether.syncContext.named.hashing.depth", "0" );
063        DefaultArtifact artifact = new DefaultArtifact( "group:artifact:1.0" );
064        Collection<String> names = mapper.nameLocks( session, singletonList( artifact ), null );
065
066        assertThat( names, hasSize( 1 ) );
067        assertThat( names.iterator().next(),
068                equalTo( "46e98183d232f1e16f863025080c7f2b9797fd10" ) );
069    }
070
071    @Test
072    public void singleMetadata_depth0()
073    {
074        configProperties.put( "aether.syncContext.named.hashing.depth", "0" );
075        DefaultMetadata metadata =
076                new DefaultMetadata( "group", "artifact", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT );
077        Collection<String> names = mapper.nameLocks( session, null, singletonList( metadata ) );
078
079        assertThat( names, hasSize( 1 ) );
080        assertThat( names.iterator().next(),
081                equalTo( "293b3990971f4b4b02b220620d2538eaac5f221b" ) );
082    }
083
084    @Test
085    public void oneAndOne_depth0()
086    {
087        configProperties.put( "aether.syncContext.named.hashing.depth", "0" );
088        DefaultArtifact artifact = new DefaultArtifact( "agroup:artifact:1.0" );
089        DefaultMetadata metadata =
090                new DefaultMetadata( "bgroup", "artifact", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT );
091        Collection<String> names = mapper.nameLocks( session, singletonList( artifact ), singletonList( metadata ) );
092
093        assertThat( names, hasSize( 2 ) );
094        Iterator<String> namesIterator = names.iterator();
095
096        // they are sorted as well
097        assertThat( namesIterator.next(),
098                equalTo( "d36504431d00d1c6e4d1c34258f2bf0a004de085" ) );
099        assertThat( namesIterator.next(),
100                equalTo( "fbcebba60d7eb931eca634f6ca494a8a1701b638" ) );
101    }
102
103    @Test
104    public void singleArtifact_depth2()
105    {
106        configProperties.put( "aether.syncContext.named.hashing.depth", "2" );
107        DefaultArtifact artifact = new DefaultArtifact( "group:artifact:1.0" );
108        Collection<String> names = mapper.nameLocks( session, singletonList( artifact ), null );
109
110        assertThat( names, hasSize( 1 ) );
111        assertThat( names.iterator().next(),
112                equalTo( "46/e9/46e98183d232f1e16f863025080c7f2b9797fd10" ) );
113    }
114
115    @Test
116    public void singleMetadata_depth2()
117    {
118        configProperties.put( "aether.syncContext.named.hashing.depth", "2" );
119        DefaultMetadata metadata =
120                new DefaultMetadata( "group", "artifact", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT );
121        Collection<String> names = mapper.nameLocks( session, null, singletonList( metadata ) );
122
123        assertThat( names, hasSize( 1 ) );
124        assertThat( names.iterator().next(),
125                equalTo( "29/3b/293b3990971f4b4b02b220620d2538eaac5f221b" ) );
126    }
127
128    @Test
129    public void oneAndOne_depth2()
130    {
131        configProperties.put( "aether.syncContext.named.hashing.depth", "2" );
132        DefaultArtifact artifact = new DefaultArtifact( "agroup:artifact:1.0" );
133        DefaultMetadata metadata =
134                new DefaultMetadata( "bgroup", "artifact", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT );
135        Collection<String> names = mapper.nameLocks( session, singletonList( artifact ), singletonList( metadata ) );
136
137        assertThat( names, hasSize( 2 ) );
138        Iterator<String> namesIterator = names.iterator();
139
140        // they are sorted as well
141        assertThat( namesIterator.next(),
142                equalTo( "d3/65/d36504431d00d1c6e4d1c34258f2bf0a004de085" ) );
143        assertThat( namesIterator.next(),
144                equalTo( "fb/ce/fbcebba60d7eb931eca634f6ca494a8a1701b638" ) );
145    }
146}