Make kernel version detection code in EpollReuseAddrTest more robust (#10556)
Motivation: When we try to parse the kernel version we need to be careful what to expect. Especially when a custom kernel is used we may get extra chars in the version numbers. For example I had this one fail because of my custom kernel that I built for io_uring: 5.8.7ioring-fixes+ Modifications: - Try to be a bit more lenient when parsing - If we cant parse the kernel version just use 0.0.0 Result: Tests are more robust
This commit is contained in:
parent
b43ce7ae1d
commit
5631f1b2b7
@ -28,6 +28,9 @@ import io.netty.handler.logging.LoggingHandler;
|
|||||||
import io.netty.util.NetUtil;
|
import io.netty.util.NetUtil;
|
||||||
import io.netty.util.ReferenceCountUtil;
|
import io.netty.util.ReferenceCountUtil;
|
||||||
import io.netty.util.ResourceLeakDetector;
|
import io.netty.util.ResourceLeakDetector;
|
||||||
|
import io.netty.util.internal.logging.InternalLogLevel;
|
||||||
|
import io.netty.util.internal.logging.InternalLogger;
|
||||||
|
import io.netty.util.internal.logging.InternalLoggerFactory;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
import org.junit.Assume;
|
import org.junit.Assume;
|
||||||
import org.junit.Ignore;
|
import org.junit.Ignore;
|
||||||
@ -44,6 +47,8 @@ import java.util.concurrent.Executors;
|
|||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
public class EpollReuseAddrTest {
|
public class EpollReuseAddrTest {
|
||||||
|
private static final InternalLogger LOGGER = InternalLoggerFactory.getInstance(EpollReuseAddrTest.class);
|
||||||
|
|
||||||
private static final int MAJOR;
|
private static final int MAJOR;
|
||||||
private static final int MINOR;
|
private static final int MINOR;
|
||||||
private static final int BUGFIX;
|
private static final int BUGFIX;
|
||||||
@ -58,12 +63,24 @@ public class EpollReuseAddrTest {
|
|||||||
MAJOR = Integer.parseInt(versionParts[0]);
|
MAJOR = Integer.parseInt(versionParts[0]);
|
||||||
MINOR = Integer.parseInt(versionParts[1]);
|
MINOR = Integer.parseInt(versionParts[1]);
|
||||||
if (versionParts.length == 3) {
|
if (versionParts.length == 3) {
|
||||||
BUGFIX = Integer.parseInt(versionParts[2]);
|
int bugFix;
|
||||||
|
try {
|
||||||
|
bugFix = Integer.parseInt(versionParts[2]);
|
||||||
|
} catch (NumberFormatException ignore) {
|
||||||
|
// the last part of the version may include all kind of different things. Especially when
|
||||||
|
// someone compiles his / her own kernel.
|
||||||
|
// Just ignore a parse error here and use 0.
|
||||||
|
bugFix = 0;
|
||||||
|
}
|
||||||
|
BUGFIX = bugFix;
|
||||||
} else {
|
} else {
|
||||||
BUGFIX = 0;
|
BUGFIX = 0;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalStateException("Can not parse kernel version " + kernelVersion);
|
LOGGER.log(InternalLogLevel.INFO, "Unable to parse kernel version: " + kernelVersion);
|
||||||
|
MAJOR = 0;
|
||||||
|
MINOR = 0;
|
||||||
|
BUGFIX = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user