Skip to content

Commit f0361ac

Browse files
committed
Fix: Create dedicated repo for virtual instead of reusing localRepo
- Creates a separate repository for virtual repos to avoid naming conflicts - Prevents "Case insensitive repository key already exists" error - Repository key is now "rt-client-java-for-virtual-{id}" instead of reusing "rt-client-java-local-{id}"
1 parent d1e0cdd commit f0361ac

File tree

1 file changed

+32
-9
lines changed

1 file changed

+32
-9
lines changed

services/src/test/groovy/org/jfrog/artifactory/client/BaseRepositoryTests.groovy

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -155,22 +155,40 @@ abstract class BaseRepositoryTests extends ArtifactoryTestsBase {
155155
if (prepareVirtualRepo) {
156156
RepositorySettings virtualSettings = getRepositorySettings(RepositoryTypeImpl.VIRTUAL)
157157
def repos = new ArrayList<String>()
158+
Repository repoForVirtual = null
158159

159160
// Determine which repository to use for the virtual repo
160161
// For package types that don't support local repos (like P2), use remote repo
161-
// Otherwise, create a local repo with matching package type
162-
if (prepareLocalRepo && localRepo != null) {
163-
// Use the existing local repo if it's prepared
164-
artifactory.repositories().create(0, localRepo)
165-
repos.add(localRepo.getKey())
162+
// Otherwise, create a dedicated local repo with matching package type
163+
if (prepareLocalRepo) {
164+
// Create a dedicated local repo for virtual repo with matching package type
165+
RepositorySettings localSettingsForVirtual = getRepositorySettings(RepositoryTypeImpl.LOCAL)
166+
XraySettings virtualXraySettings = new XraySettingsImpl()
167+
repoForVirtual = artifactory.repositories().builders().localRepositoryBuilder()
168+
.key("$REPO_NAME_PREFIX-for-virtual-$id")
169+
.description("for-virtual-$id")
170+
.notes("notes-${rnd.nextInt()}")
171+
.archiveBrowsingEnabled(rnd.nextBoolean())
172+
.blackedOut(rnd.nextBoolean())
173+
.excludesPattern("org/${rnd.nextInt()}/**")
174+
.includesPattern("org/${rnd.nextInt()}/**")
175+
.propertySets(Collections.emptyList())
176+
.repositorySettings(localSettingsForVirtual)
177+
.xraySettings(virtualXraySettings)
178+
.customProperties(customProperties)
179+
.build()
180+
artifactory.repositories().create(0, repoForVirtual)
181+
repos.add(repoForVirtual.getKey())
166182
} else if (prepareRemoteRepo && remoteRepo != null) {
167183
// Use remote repo for package types that don't support local repos (e.g., P2)
168-
artifactory.repositories().create(0, remoteRepo)
169-
repos.add(remoteRepo.getKey())
184+
repoForVirtual = remoteRepo
185+
artifactory.repositories().create(0, repoForVirtual)
186+
repos.add(repoForVirtual.getKey())
170187
} else if (prepareGenericRepo && genericRepo != null) {
171188
// Fallback to generic repo
172-
artifactory.repositories().create(0, genericRepo)
173-
repos.add(genericRepo.getKey())
189+
repoForVirtual = genericRepo
190+
artifactory.repositories().create(0, repoForVirtual)
191+
repos.add(repoForVirtual.getKey())
174192
}
175193

176194
virtualRepo = artifactory.repositories().builders().virtualRepositoryBuilder()
@@ -185,6 +203,11 @@ abstract class BaseRepositoryTests extends ArtifactoryTestsBase {
185203
.customProperties(customProperties)
186204
.defaultDeploymentRepo(repos.isEmpty() ? null : repos.last())
187205
.build()
206+
207+
// Store reference to the repo created for virtual for cleanup
208+
if (!prepareGenericRepo && repoForVirtual != null) {
209+
genericRepo = repoForVirtual
210+
}
188211
}
189212
}
190213

0 commit comments

Comments
 (0)