Skip to content

Commit

Permalink
Address merge conflicts
Browse files Browse the repository at this point in the history
Signed-off-by: Madalin Valceleanu <vmadalin@google.com>
  • Loading branch information
vmadalin committed Apr 25, 2024
1 parent 31f7b86 commit 4a380c9
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 31 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -71,28 +71,24 @@ class DaemonToolchainIntegrationTest extends AbstractIntegrationSpec implements
@Requires(IntegTestPreconditions.JavaHomeWithDifferentVersionAvailable)
def "Given non existing toolchain metadata cache When execute any consecutive tasks Then metadata is resolved only for the first build"() {
def otherJvm = AvailableJavaHomes.differentVersion
def otherMetadata = AvailableJavaHomes.getJvmInstallationMetadata(otherJvm)

given:
cleanToolchainsMetadataCache()
createDaemonJvmToolchainCriteria(otherMetadata.languageVersion.majorVersion, otherMetadata.vendor.knownVendor.name())
writeJvmCriteria(otherJvm)

when:
def results = (0..2).collect {
executer
withInstallations(otherJvm).executer
.withArgument("--info")
.requireIsolatedDaemons()
.withStackTraceChecksDisabled() // expect the info logs from JVM metadata detector to contain the stack trace
.withTasks("tasks")
.withTasks("help")
.run()
}

then:
results.size() == 3
def metadataAccessMarker = "Received JVM installation metadata from '$otherJvm.javaHome.absolutePath'"
1 == countMatches(metadataAccessMarker, results[0].plainTextOutput)
0 == countMatches(metadataAccessMarker, results[1].plainTextOutput)
0 == countMatches(metadataAccessMarker, results[2].plainTextOutput)
1 == countReceivedJvmInstallationsMetadata(otherJvm, results[0].plainTextOutput)
0 == countReceivedJvmInstallationsMetadata(otherJvm, results[1].plainTextOutput)
0 == countReceivedJvmInstallationsMetadata(otherJvm, results[2].plainTextOutput)
}

@Requires(IntegTestPreconditions.JavaHomeWithDifferentVersionAvailable)
Expand All @@ -102,7 +98,7 @@ class DaemonToolchainIntegrationTest extends AbstractIntegrationSpec implements

given:
cleanToolchainsMetadataCache()
createDaemonJvmToolchainCriteria(otherMetadata.languageVersion.majorVersion, otherMetadata.vendor.knownVendor.name())
writeJvmCriteria(otherJvm)
buildFile << """
apply plugin: 'jvm-toolchains'
tasks.register('exec', JavaExec) {
Expand All @@ -116,16 +112,13 @@ class DaemonToolchainIntegrationTest extends AbstractIntegrationSpec implements
"""

when:
def result = executer
def result = withInstallations(otherJvm).executer
.withToolchainDetectionEnabled()
.withArgument("--info")
.requireIsolatedDaemons()
.withStackTraceChecksDisabled() // expect the info logs from JVM metadata detector to contain the stack trace
.withTasks("exec")
.run()

then:
def metadataAccessMarker = "Received JVM installation metadata from '$otherJvm.javaHome.absolutePath'"
1 == countMatches(metadataAccessMarker, result.plainTextOutput)
1 == countReceivedJvmInstallationsMetadata(otherJvm, result.plainTextOutput)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,9 @@ import org.gradle.integtests.fixtures.AbstractIntegrationSpec
import org.gradle.integtests.fixtures.AvailableJavaHomes
import org.gradle.internal.concurrent.DefaultExecutorFactory
import org.gradle.internal.jvm.Jvm
import org.gradle.internal.progress.NoOpProgressLoggerFactory
import org.gradle.internal.operations.BuildOperationContext
import org.gradle.internal.operations.BuildOperationRunner
import org.gradle.internal.operations.RunnableBuildOperation
import org.gradle.jvm.toolchain.internal.InstallationLocation
import org.gradle.process.internal.DefaultExecHandleBuilder
import org.gradle.test.precondition.Requires
Expand Down Expand Up @@ -133,7 +135,7 @@ class CachingJvmMetadataDetectorIntegrationTest extends AbstractIntegrationSpec
}

private InstallationLocation createLocation(File file) {
return new InstallationLocation(file, "test")
return InstallationLocation.autoDetected(file, "test")
}

private CachingJvmMetadataDetector createCachingJvmMetadataDetector() {
Expand All @@ -142,7 +144,7 @@ class CachingJvmMetadataDetectorIntegrationTest extends AbstractIntegrationSpec
TestFiles.tmpDirTemporaryFileProvider(temporaryFolder.getTestDirectory())
)
def globalCacheDir = new GlobalCacheDir(createHomeDirProvider())
def cacheFactory = new DefaultCacheFactory(DefaultFileLockManagerTestHelper.createDefaultFileLockManager(), new DefaultExecutorFactory(), new NoOpProgressLoggerFactory())
def cacheFactory = new DefaultCacheFactory(DefaultFileLockManagerTestHelper.createDefaultFileLockManager(), new DefaultExecutorFactory(), createBuildOperationRunner())
def cacheBuilderFactory = new DefaultUnscopedCacheBuilderFactory(cacheFactory)
def globalScopedCacheBuilderFactory = new DefaultGlobalScopedCacheBuilderFactory(globalCacheDir.dir, cacheBuilderFactory)
return new CachingJvmMetadataDetector(delegate, globalScopedCacheBuilderFactory)
Expand All @@ -165,6 +167,15 @@ class CachingJvmMetadataDetectorIntegrationTest extends AbstractIntegrationSpec
}
}

private BuildOperationRunner createBuildOperationRunner() {
Stub(BuildOperationRunner) {
run(_ as RunnableBuildOperation) >> { RunnableBuildOperation operation ->
def context = Stub(BuildOperationContext)
operation.run(context)
}
}
}

private void assertFailureJvmMetadata(JvmInstallationMetadata expected, JvmInstallationMetadata actual) {
assertEquals(expected.isValidInstallation(), actual.isValidInstallation())
assertEquals(expected.errorMessage, actual.errorMessage)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ import org.gradle.initialization.GradleUserHomeDirProvider
import org.gradle.initialization.layout.GlobalCacheDir
import org.gradle.internal.concurrent.DefaultExecutorFactory
import org.gradle.internal.jvm.Jvm
import org.gradle.internal.progress.NoOpProgressLoggerFactory
import org.gradle.internal.operations.BuildOperationContext
import org.gradle.internal.operations.BuildOperationRunner
import org.gradle.internal.operations.RunnableBuildOperation
import org.gradle.jvm.toolchain.internal.InstallationLocation
import org.gradle.test.fixtures.file.TestFile
import org.gradle.test.precondition.Requires
Expand Down Expand Up @@ -101,7 +103,7 @@ class CachingJvmMetadataDetectorTest extends Specification {
TestFiles.tmpDirTemporaryFileProvider(temporaryFolder)
)
def detector = createCachingJvmMetadataDetector(metaDataDetector)
detector.getMetadata(new InstallationLocation(Jvm.current().getJavaHome(), "current Java home"))
detector.getMetadata(InstallationLocation.autoDetected(Jvm.current().getJavaHome(), "current Java home"))
File javaHome1 = Jvm.current().javaHome
def link = new TestFile(Files.createTempDirectory(temporaryFolder.toPath(), null).toFile(), "jdklink")
link.createLink(javaHome1)
Expand All @@ -126,12 +128,21 @@ class CachingJvmMetadataDetectorTest extends Specification {

private CachingJvmMetadataDetector createCachingJvmMetadataDetector(JvmMetadataDetector delegate) {
def globalCacheDir = new GlobalCacheDir(createHomeDirProvider())
def cacheFactory = new DefaultCacheFactory(DefaultFileLockManagerTestHelper.createDefaultFileLockManager(), new DefaultExecutorFactory(), new NoOpProgressLoggerFactory())
def cacheFactory = new DefaultCacheFactory(DefaultFileLockManagerTestHelper.createDefaultFileLockManager(), new DefaultExecutorFactory(), createBuildOperationRunner())
def cacheBuilderFactory = new DefaultUnscopedCacheBuilderFactory(cacheFactory)
def globalScopedCacheBuilderFactory = new DefaultGlobalScopedCacheBuilderFactory(globalCacheDir.dir, cacheBuilderFactory)
return new CachingJvmMetadataDetector(delegate, globalScopedCacheBuilderFactory)
}

private BuildOperationRunner createBuildOperationRunner() {
Stub(BuildOperationRunner) {
run(_ as RunnableBuildOperation) >> { RunnableBuildOperation operation ->
def context = Stub(BuildOperationContext)
operation.run(context)
}
}
}

private GradleUserHomeDirProvider createHomeDirProvider() {
return new GradleUserHomeDirProvider() {
@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,18 +53,12 @@
import org.gradle.internal.jvm.inspection.JvmMetadataDetector;
import org.gradle.internal.jvm.inspection.JvmVersionDetector;
import org.gradle.internal.jvm.inspection.ReportingJvmMetadataDetector;
import org.gradle.internal.logging.events.OutputEventListener;
import org.gradle.internal.logging.progress.DefaultProgressLoggerFactory;
import org.gradle.internal.logging.progress.ProgressLoggerFactory;
import org.gradle.internal.logging.services.ProgressLoggingBridge;
import org.gradle.internal.nativeintegration.ProcessEnvironment;
import org.gradle.internal.nativeintegration.filesystem.FileSystem;
import org.gradle.internal.operations.DefaultBuildOperationIdFactory;
import org.gradle.internal.remote.internal.inet.InetAddressFactory;
import org.gradle.internal.remote.services.MessagingServices;
import org.gradle.internal.service.ServiceRegistration;
import org.gradle.internal.service.scopes.Scope.Global;
import org.gradle.internal.time.Clock;
import org.gradle.process.internal.DefaultExecActionFactory;
import org.gradle.process.internal.ExecFactory;
import org.gradle.process.internal.ExecHandleFactory;
Expand Down Expand Up @@ -106,9 +100,8 @@ DocumentationRegistry createDocumentationRegistry() {
return new DocumentationRegistry();
}

JvmMetadataDetector createJvmMetadataDetector(GradleUserHomeDirProvider gradleUserHomeDirProvider, FileLockManager fileLockManager, ExecutorFactory executorFactory, ExecHandleFactory execHandleFactory, TemporaryFileProvider temporaryFileProvider, OutputEventListener outputEventListener, Clock clock) {
ProgressLoggerFactory progressLoggerFactory = new DefaultProgressLoggerFactory(new ProgressLoggingBridge(outputEventListener), clock, new DefaultBuildOperationIdFactory());
CacheFactory defaultCacheFactory = new DefaultCacheFactory(fileLockManager, executorFactory, progressLoggerFactory);
JvmMetadataDetector createJvmMetadataDetector(GradleUserHomeDirProvider gradleUserHomeDirProvider, FileLockManager fileLockManager, ExecutorFactory executorFactory, ExecHandleFactory execHandleFactory, TemporaryFileProvider temporaryFileProvider) {
CacheFactory defaultCacheFactory = new DefaultCacheFactory(fileLockManager, executorFactory, null);
File globalCacheDir = new File(gradleUserHomeDirProvider.getGradleUserHomeDirectory(), GLOBAL_CACHE_DIR_NAME);
DefaultUnscopedCacheBuilderFactory cacheBuilderFactory = new DefaultUnscopedCacheBuilderFactory(defaultCacheFactory);
return new CachingJvmMetadataDetector(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ import org.gradle.integtests.fixtures.AbstractIntegrationSpec
import org.gradle.internal.jvm.Jvm
import org.gradle.internal.jvm.inspection.JvmInstallationMetadata
import org.gradle.test.fixtures.file.TestFile
import org.gradle.util.GradleVersion

import java.util.regex.Pattern

/**
* Introduces helper methods to write integration tests using Java toolchains.
Expand Down Expand Up @@ -105,4 +108,19 @@ trait JavaToolchainFixture {
assert classFile.exists()
return JavaVersion.forClass(classFile.bytes)
}

/**
* Cleans resolved toolchains metadata stored under Gradle USER_HOME cache directory
*/
def cleanToolchainsMetadataCache() {
executer.gradleUserHomeDir.file("caches", GradleVersion.current().version, "toolchainsMetadata").deleteDir()
}

/**
* Returns the number of received metadata installations given a JVM from the specified build output.
*/
int countReceivedJvmInstallationsMetadata(Jvm jvm, String output) {
def metadataAccessMarker = "Received JVM installation metadata from '$jvm.javaHome.absolutePath'"
return Pattern.compile(Pattern.quote(metadataAccessMarker)).matcher(output).count
}
}

0 comments on commit 4a380c9

Please sign in to comment.