lucene: `TestStressLockFactories` fails on Windows in a freshly cloned repository

Description

NOTE: test params are: codec=Asserting(Lucene99): {}, docValues:{}, maxPointsInLeafNode=189, maxMBSortInHeap=5.965018891538125, sim=Asserting(RandomSimilarity(queryNorm=true): {}), locale=sg, timezone=Australia/Lindeman NOTE: Windows 10 10.0 amd64/Amazon.com Inc. 17.0.9 (64-bit)/cpus=1,threads=1,free=205992248,total=324009984

testNativeFSLockFactory

  1> Listening on /127.0.0.1:20018...
   >     java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:20021" "accept,resolve")
   >         at __randomizedtesting.SeedInfo.seed([2D42F3FDF1FAF153:31931CEF68004D20]:0)
   >         at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:485)
   >         at java.base/java.security.AccessController.checkPermission(AccessController.java:1068)
   >         at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:416)
   >         at java.base/java.lang.SecurityManager.checkAccept(SecurityManager.java:1035)
   >         at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:682)
   >         at java.base/java.net.ServerSocket.platformImplAccept(ServerSocket.java:641)
   >         at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:617)
   >         at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:574)
   >         at java.base/java.net.ServerSocket.accept(ServerSocket.java:532)
   >         at org.apache.lucene.store.LockVerifyServer.run(LockVerifyServer.java:62)
   >         at org.apache.lucene.store.TestStressLockFactories.runImpl(TestStressLockFactories.java:53)
   >         at org.apache.lucene.store.TestStressLockFactories.testNativeFSLockFactory(TestStressLockFactories.java:100)

testSimpleFSLockFactory

  1> Listening on /127.0.0.1:20022...
   >     java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:20024" "accept,resolve")
   >         at __randomizedtesting.SeedInfo.seed([2D42F3FDF1FAF153:3FCA00FD49472207]:0)
   >         at java.base/java.security.AccessControlContext.checkPermission(AccessControlContext.java:485)
   >         at java.base/java.security.AccessController.checkPermission(AccessController.java:1068)
   >         at java.base/java.lang.SecurityManager.checkPermission(SecurityManager.java:416)
   >         at java.base/java.lang.SecurityManager.checkAccept(SecurityManager.java:1035)
   >         at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:682)
   >         at java.base/java.net.ServerSocket.platformImplAccept(ServerSocket.java:641)
   >         at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:617)
   >         at java.base/java.net.ServerSocket.implAccept(ServerSocket.java:574)
   >         at java.base/java.net.ServerSocket.accept(ServerSocket.java:532)
   >         at org.apache.lucene.store.LockVerifyServer.run(LockVerifyServer.java:62)
   >         at org.apache.lucene.store.TestStressLockFactories.runImpl(TestStressLockFactories.java:53)
   >         at org.apache.lucene.store.TestStressLockFactories.testSimpleFSLockFactory(TestStressLockFactories.java:104)

Gradle command to reproduce

gradlew test --tests TestStressLockFactories.testNativeFSLockFactory -Dtests.seed=2D42F3FDF1FAF153 -Dtests.locale=sg -Dtests.timezone=Australia/Lindeman -Dtests.asserts=true -Dtests.file.encoding=UTF-8

gradlew test --tests TestStressLockFactories.testSimpleFSLockFactory -Dtests.seed=2D42F3FDF1FAF153 -Dtests.locale=sg -Dtests.timezone=Australia/Lindeman -Dtests.asserts=true -Dtests.file.encoding=UTF-8

About this issue

  • Original URL
  • State: closed
  • Created 6 months ago
  • Comments: 29 (29 by maintainers)

Most upvoted comments

sorry, i’m late to the party. yes, the entire purpose of this is to ensure tests only use ephemeral ports when binding. otherwise there will be port conflicts. so we should not be lenient about it.

seems like any issue here is in the JDK not respecting the operating system’s configuration: not in lucene.

I think the problem you’re getting is not due to the JDK but to something preventing processes from binding to local ports. I suspect a firewall rule, perhaps?

Then changing gradle\testing\randomization\policies\tests.policy from

permission java.net.SocketPermission "127.0.0.1:0", "accept,listen,resolve";

to

permission java.net.SocketPermission "127.0.0.1:1024-", "accept,listen,resolve";

wouldn’t have helped, I suppose. But it did.

What do you think of catching this AccessControlException and wrapping it with AssumptionViolatedException ?