99
1010package org.elasticsearch.gradle.internal.info
1111
12- import spock.lang.Ignore
12+
1313import spock.lang.Specification
1414
1515import org.gradle.api.JavaVersion
@@ -19,9 +19,7 @@ import org.gradle.api.provider.ProviderFactory
1919import org.gradle.testfixtures.ProjectBuilder
2020import org.junit.Assert
2121
22- import java.util.concurrent.CountDownLatch
2322import java.util.concurrent.Executors
24- import java.util.concurrent.Future
2523import java.util.concurrent.TimeUnit
2624import java.util.concurrent.atomic.AtomicInteger
2725
@@ -31,35 +29,18 @@ class BuildParameterExtensionSpec extends Specification {
3129
3230 ProjectBuilder projectBuilder = new ProjectBuilder ()
3331
34- @Ignore
3532 def " #getterName is cached anc concurrently accessible" () {
3633 given :
3734 def project = projectBuilder. build()
3835 def providers = project. getProviders();
3936 def buildParams = extension(project, providers)
40- int numberOfThreads = 10 ;
4137 when :
42- var service = Executors . newFixedThreadPool(numberOfThreads)
43- var latch = new CountDownLatch (numberOfThreads)
4438 def testedProvider = buildParams. " $getterName " ()
45- def futures = (1 .. numberOfThreads). collect {
46- service. submit(
47- () -> {
48- try {
49- testedProvider. get()
50- } catch (AssertionError e) {
51- latch. countDown()
52- Assert . fail (" Accessing cached provider more than once" )
53- }
54- latch. countDown()
55- }
56- )
57- }
58- latch. await(10 , TimeUnit . SECONDS )
5939
6040 then :
41+ testedProvider. get()
42+ testedProvider. get()
6143
62- futures. any { it. isCancelled() || it. isDone() == false } == false
6344 where :
6445 getterName << [
6546 " getRuntimeJavaHome" ,
@@ -99,10 +80,10 @@ class BuildParameterExtensionSpec extends Specification {
9980
10081 private Provider providerMock () {
10182 Provider provider = Mock (Provider )
102- AtomicInteger counter = new AtomicInteger (0 )
83+ AtomicInteger counter = new AtomicInteger (1 )
10384 provider. getOrNull() >> {
104- println " accessing provider"
105- return counter. get() == 1 ? fail (" Accessing cached provider more than once" ) : counter. incrementAndGet()
85+ println " accessing provider # ${ counter.get() } "
86+ return counter. get() == 2 ? fail (" Accessing cached provider more than once" ) : counter. incrementAndGet()
10687 }
10788 provider. get() >> {
10889 fail (" Accessing cached provider directly" )
0 commit comments