001package org.eclipse.aether.internal.impl; 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 org.eclipse.aether.DefaultRepositorySystemSession; 023import org.eclipse.aether.artifact.Artifact; 024import org.eclipse.aether.artifact.DefaultArtifact; 025import org.eclipse.aether.internal.test.util.TestUtils; 026import org.eclipse.aether.metadata.DefaultMetadata; 027import org.eclipse.aether.metadata.Metadata; 028import org.eclipse.aether.repository.RemoteRepository; 029import org.junit.Test; 030 031import static org.junit.Assert.assertEquals; 032import static org.junit.Assert.assertNotNull; 033import static org.junit.Assert.assertNull; 034 035/** 036 * UT for {@link DefaultLocalPathPrefixComposerFactory}. 037 */ 038public class DefaultLocalPathPrefixComposerFactoryTest 039{ 040 private final Artifact releaseArtifact = new DefaultArtifact("org.group:artifact:1.0"); 041 042 private final Artifact snapshotArtifact = new DefaultArtifact("org.group:artifact:1.0-20220228.180000-1"); 043 044 private final Metadata releaseMetadata = new DefaultMetadata( "org.group", "artifact", "1.0", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT ); 045 046 private final Metadata snapshotMetadata = new DefaultMetadata( "org.group", "artifact", "1.0-SNAPSHOT", "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT ); 047 048 private final Metadata gaMetadata = new DefaultMetadata( "org.group", "artifact", null, "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT ); 049 050 private final Metadata gMetadata = new DefaultMetadata( "org.group", null, null, "maven-metadata.xml", Metadata.Nature.RELEASE_OR_SNAPSHOT ); 051 052 private final RemoteRepository repository = new RemoteRepository.Builder( "my-repo", "default", "https://repo.maven.apache.org/maven2/" ).build(); 053 054 @Test 055 public void defaultConfigNoSplitAllNulls() 056 { 057 DefaultRepositorySystemSession session = TestUtils.newSession(); 058 059 LocalPathPrefixComposerFactory factory = new DefaultLocalPathPrefixComposerFactory(); 060 LocalPathPrefixComposer composer = factory.createComposer( session ); 061 assertNotNull( composer ); 062 063 String prefix; 064 prefix = composer.getPathPrefixForLocalArtifact( releaseArtifact ); 065 assertNull( prefix ); 066 067 prefix = composer.getPathPrefixForLocalMetadata( releaseMetadata ); 068 assertNull( prefix ); 069 070 prefix = composer.getPathPrefixForRemoteArtifact( releaseArtifact, repository ); 071 assertNull( prefix ); 072 073 prefix = composer.getPathPrefixForRemoteMetadata( releaseMetadata, repository ); 074 assertNull( prefix ); 075 } 076 077 @Test 078 public void splitEnabled() 079 { 080 DefaultRepositorySystemSession session = TestUtils.newSession(); 081 session.setConfigProperty( "aether.enhancedLocalRepository.split", Boolean.TRUE.toString() ); 082 083 LocalPathPrefixComposerFactory factory = new DefaultLocalPathPrefixComposerFactory(); 084 LocalPathPrefixComposer composer = factory.createComposer( session ); 085 assertNotNull( composer ); 086 087 String prefix; 088 prefix = composer.getPathPrefixForLocalArtifact( releaseArtifact ); 089 assertNotNull( prefix ); 090 assertEquals( "installed", prefix ); 091 092 prefix = composer.getPathPrefixForLocalMetadata( releaseMetadata ); 093 assertNotNull( prefix ); 094 assertEquals( "installed", prefix ); 095 096 prefix = composer.getPathPrefixForRemoteArtifact( releaseArtifact, repository ); 097 assertNotNull( prefix ); 098 assertEquals( "cached", prefix ); 099 100 prefix = composer.getPathPrefixForRemoteMetadata( releaseMetadata, repository ); 101 assertNotNull( prefix ); 102 assertEquals( "cached", prefix ); 103 } 104 105 @Test 106 public void saneConfig() 107 { 108 DefaultRepositorySystemSession session = TestUtils.newSession(); 109 session.setConfigProperty( "aether.enhancedLocalRepository.split", Boolean.TRUE.toString() ); 110 session.setConfigProperty( "aether.enhancedLocalRepository.splitLocal", Boolean.TRUE.toString() ); 111 session.setConfigProperty( "aether.enhancedLocalRepository.splitRemoteRepository", Boolean.TRUE.toString() ); 112 113 LocalPathPrefixComposerFactory factory = new DefaultLocalPathPrefixComposerFactory(); 114 LocalPathPrefixComposer composer = factory.createComposer( session ); 115 assertNotNull( composer ); 116 117 String prefix; 118 prefix = composer.getPathPrefixForLocalArtifact( releaseArtifact ); 119 assertNotNull( prefix ); 120 assertEquals( "installed/releases", prefix ); 121 122 prefix = composer.getPathPrefixForLocalArtifact( snapshotArtifact ); 123 assertNotNull( prefix ); 124 assertEquals( "installed/snapshots", prefix ); 125 126 prefix = composer.getPathPrefixForLocalMetadata( releaseMetadata ); 127 assertNotNull( prefix ); 128 assertEquals( "installed/releases", prefix ); 129 130 prefix = composer.getPathPrefixForLocalMetadata( snapshotMetadata ); 131 assertNotNull( prefix ); 132 assertEquals( "installed/snapshots", prefix ); 133 134 prefix = composer.getPathPrefixForLocalMetadata( gaMetadata ); 135 assertNotNull( prefix ); 136 assertEquals( "installed/releases", prefix ); 137 138 prefix = composer.getPathPrefixForLocalMetadata( gMetadata ); 139 assertNotNull( prefix ); 140 assertEquals( "installed/releases", prefix ); 141 142 prefix = composer.getPathPrefixForRemoteArtifact( releaseArtifact, repository ); 143 assertNotNull( prefix ); 144 assertEquals( "cached/my-repo", prefix ); 145 146 prefix = composer.getPathPrefixForRemoteArtifact( snapshotArtifact, repository ); 147 assertNotNull( prefix ); 148 assertEquals( "cached/my-repo", prefix ); 149 150 prefix = composer.getPathPrefixForRemoteMetadata( releaseMetadata, repository ); 151 assertNotNull( prefix ); 152 assertEquals( "cached/my-repo", prefix ); 153 154 prefix = composer.getPathPrefixForRemoteMetadata( snapshotMetadata, repository ); 155 assertNotNull( prefix ); 156 assertEquals( "cached/my-repo", prefix ); 157 158 prefix = composer.getPathPrefixForRemoteMetadata( gaMetadata, repository ); 159 assertNotNull( prefix ); 160 assertEquals( "cached/my-repo", prefix ); 161 162 prefix = composer.getPathPrefixForRemoteMetadata( gMetadata, repository ); 163 assertNotNull( prefix ); 164 assertEquals( "cached/my-repo", prefix ); 165 } 166 167 @Test 168 public void fullConfig() 169 { 170 DefaultRepositorySystemSession session = TestUtils.newSession(); 171 session.setConfigProperty( "aether.enhancedLocalRepository.split", Boolean.TRUE.toString() ); 172 session.setConfigProperty( "aether.enhancedLocalRepository.splitLocal", Boolean.TRUE.toString() ); 173 session.setConfigProperty( "aether.enhancedLocalRepository.splitRemote", Boolean.TRUE.toString() ); 174 session.setConfigProperty( "aether.enhancedLocalRepository.splitRemoteRepository", Boolean.TRUE.toString() ); 175 176 LocalPathPrefixComposerFactory factory = new DefaultLocalPathPrefixComposerFactory(); 177 LocalPathPrefixComposer composer = factory.createComposer( session ); 178 assertNotNull( composer ); 179 180 String prefix; 181 prefix = composer.getPathPrefixForLocalArtifact( releaseArtifact ); 182 assertNotNull( prefix ); 183 assertEquals( "installed/releases", prefix ); 184 185 prefix = composer.getPathPrefixForLocalArtifact( snapshotArtifact ); 186 assertNotNull( prefix ); 187 assertEquals( "installed/snapshots", prefix ); 188 189 prefix = composer.getPathPrefixForLocalMetadata( releaseMetadata ); 190 assertNotNull( prefix ); 191 assertEquals( "installed/releases", prefix ); 192 193 prefix = composer.getPathPrefixForLocalMetadata( snapshotMetadata ); 194 assertNotNull( prefix ); 195 assertEquals( "installed/snapshots", prefix ); 196 197 prefix = composer.getPathPrefixForLocalMetadata( gaMetadata ); 198 assertNotNull( prefix ); 199 assertEquals( "installed/releases", prefix ); 200 201 prefix = composer.getPathPrefixForLocalMetadata( gMetadata ); 202 assertNotNull( prefix ); 203 assertEquals( "installed/releases", prefix ); 204 205 prefix = composer.getPathPrefixForRemoteArtifact( releaseArtifact, repository ); 206 assertNotNull( prefix ); 207 assertEquals( "cached/my-repo/releases", prefix ); 208 209 prefix = composer.getPathPrefixForRemoteArtifact( snapshotArtifact, repository ); 210 assertNotNull( prefix ); 211 assertEquals( "cached/my-repo/snapshots", prefix ); 212 213 prefix = composer.getPathPrefixForRemoteMetadata( releaseMetadata, repository ); 214 assertNotNull( prefix ); 215 assertEquals( "cached/my-repo/releases", prefix ); 216 217 prefix = composer.getPathPrefixForRemoteMetadata( snapshotMetadata, repository ); 218 assertNotNull( prefix ); 219 assertEquals( "cached/my-repo/snapshots", prefix ); 220 221 prefix = composer.getPathPrefixForRemoteMetadata( gaMetadata, repository ); 222 assertNotNull( prefix ); 223 assertEquals( "cached/my-repo/releases", prefix ); 224 225 prefix = composer.getPathPrefixForRemoteMetadata( gMetadata, repository ); 226 assertNotNull( prefix ); 227 assertEquals( "cached/my-repo/releases", prefix ); 228 } 229}