Description
There might be a ClassCastException happening when starting the TestingZooKeeper instance. The following test reproduces the issue:
@Test public void testTestingZooKeeperServer() throws Exception { final Map<String, Object> customProperties = new HashMap<>(); customProperties.put("maxSessionTimeout", 60_000); final Path tmpDirPath = Files.createTempDirectory("tmp-"); final InstanceSpec instanceSpec = new InstanceSpec(tmpDirPath.toFile(), 0, 0, 0, true, 0, 10, 1, customProperties, "host-name"); final QuorumConfigBuilder quorumConfigBuilder = new QuorumConfigBuilder(instanceSpec); final TestingZooKeeperServer zkServer = new TestingZooKeeperServer(quorumConfigBuilder); zkServer.start(); }
The test above will fail with a ClassCastException because InstantSpec allows a Map<String, Object> for custom properties, i.e. a non-String value like Integer can be used.
This Map is then passed over into a Properties instance in QuorumConfigBuilder:163. These Properties are then written to a temporary file in ZooKeeper's ZooKeeperServerEmbeddedImpl:58 which expects only to have String values. The previously set Integer value isn't converted to a String anywhere, though.