private static ExpiringCredentialRefreshConfig refreshConfigThatPerformsReloginEveryGivenPercentageOfLifetime( double refreshWindowFactor, short minPeriodSeconds, short bufferSeconds, boolean clientReloginAllowedBeforeLogout) { Map<Object, Object> configs = new HashMap<>(); configs.put(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_FACTOR, refreshWindowFactor); configs.put(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_JITTER, 0); configs.put(SaslConfigs.SASL_LOGIN_REFRESH_MIN_PERIOD_SECONDS, minPeriodSeconds); configs.put(SaslConfigs.SASL_LOGIN_REFRESH_BUFFER_SECONDS, bufferSeconds); return new ExpiringCredentialRefreshConfig(new ConfigDef().withClientSaslSupport().parse(configs), clientReloginAllowedBeforeLogout); } }
@Test(expected = ConfigException.class) public void testSaslLoginRefreshWindowJitterMinValueIsReallyMinimum() { Map<Object, Object> props = new HashMap<>(); props.put(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_JITTER, "-0.000001"); new ConfigDef().withClientSaslSupport().parse(props); }
@Test public void testSaslLoginRefreshMaxValuesAreValid() { Map<Object, Object> props = new HashMap<>(); props.put(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_FACTOR, "1.0"); props.put(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_JITTER, "0.25"); props.put(SaslConfigs.SASL_LOGIN_REFRESH_MIN_PERIOD_SECONDS, "900"); props.put(SaslConfigs.SASL_LOGIN_REFRESH_BUFFER_SECONDS, "3600"); Map<String, Object> vals = new ConfigDef().withClientSaslSupport().parse(props); assertEquals(Double.valueOf("1.0"), vals.get(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_FACTOR)); assertEquals(Double.valueOf("0.25"), vals.get(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_JITTER)); assertEquals(Short.valueOf("900"), vals.get(SaslConfigs.SASL_LOGIN_REFRESH_MIN_PERIOD_SECONDS)); assertEquals(Short.valueOf("3600"), vals.get(SaslConfigs.SASL_LOGIN_REFRESH_BUFFER_SECONDS)); }
@Test(expected = ConfigException.class) public void testSaslLoginRefreshBufferSecondsMinValueIsReallyMinimum() { Map<Object, Object> props = new HashMap<>(); props.put(SaslConfigs.SASL_LOGIN_REFRESH_BUFFER_SECONDS, "-1"); new ConfigDef().withClientSaslSupport().parse(props); }
@Test public void testNestedClass() { // getName(), not getSimpleName() or getCanonicalName(), is the version that should be able to locate the class Map<String, Object> props = Collections.<String, Object>singletonMap("name", NestedClass.class.getName()); new ConfigDef().define("name", Type.CLASS, Importance.HIGH, "docs").parse(props); }
@Test public void testSaslLoginRefreshMinValuesAreValid() { Map<Object, Object> props = new HashMap<>(); props.put(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_FACTOR, "0.5"); props.put(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_JITTER, "0.0"); props.put(SaslConfigs.SASL_LOGIN_REFRESH_MIN_PERIOD_SECONDS, "0"); props.put(SaslConfigs.SASL_LOGIN_REFRESH_BUFFER_SECONDS, "0"); Map<String, Object> vals = new ConfigDef().withClientSaslSupport().parse(props); assertEquals(Double.valueOf("0.5"), vals.get(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_FACTOR)); assertEquals(Double.valueOf("0.0"), vals.get(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_JITTER)); assertEquals(Short.valueOf("0"), vals.get(SaslConfigs.SASL_LOGIN_REFRESH_MIN_PERIOD_SECONDS)); assertEquals(Short.valueOf("0"), vals.get(SaslConfigs.SASL_LOGIN_REFRESH_BUFFER_SECONDS)); }
@Test(expected = ConfigException.class) public void testSaslLoginRefreshWindowFactorMinValueIsReallyMinimum() { Map<Object, Object> props = new HashMap<>(); props.put(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_FACTOR, "0.499999"); new ConfigDef().withClientSaslSupport().parse(props); }
@Test(expected = ConfigException.class) public void testSaslLoginRefreshWindowFactorMaxValueIsReallyMaximum() { Map<Object, Object> props = new HashMap<>(); props.put(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_FACTOR, "1.0001"); new ConfigDef().withClientSaslSupport().parse(props); }
@Test(expected = ConfigException.class) public void testSaslLoginRefreshWindowJitterMaxValueIsReallyMaximum() { Map<Object, Object> props = new HashMap<>(); props.put(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_JITTER, "0.251"); new ConfigDef().withClientSaslSupport().parse(props); }
@Test(expected = ConfigException.class) public void testSaslLoginRefreshMinPeriodSecondsMinValueIsReallyMinimum() { Map<Object, Object> props = new HashMap<>(); props.put(SaslConfigs.SASL_LOGIN_REFRESH_MIN_PERIOD_SECONDS, "-1"); new ConfigDef().withClientSaslSupport().parse(props); }
@Test(expected = ConfigException.class) public void testSaslLoginRefreshMinPeriodSecondsMaxValueIsReallyMaximum() { Map<Object, Object> props = new HashMap<>(); props.put(SaslConfigs.SASL_LOGIN_REFRESH_MIN_PERIOD_SECONDS, "901"); new ConfigDef().withClientSaslSupport().parse(props); }
@Test(expected = ConfigException.class) public void testSaslLoginRefreshBufferSecondsMaxValueIsReallyMaximum() { Map<Object, Object> props = new HashMap<>(); props.put(SaslConfigs.SASL_LOGIN_REFRESH_BUFFER_SECONDS, "3601"); new ConfigDef().withClientSaslSupport().parse(props); } }
@Test(expected = ConfigException.class) public void testMissingDependentConfigs() { // Should not be possible to parse a config if a dependent config has not been defined final ConfigDef configDef = new ConfigDef() .define("parent", Type.STRING, Importance.HIGH, "parent docs", "group", 1, Width.LONG, "Parent", Collections.singletonList("child")); configDef.parse(Collections.emptyMap()); }
private void testBadInputs(Type type, Object... values) { for (Object value : values) { Map<String, Object> m = new HashMap<String, Object>(); m.put("name", value); ConfigDef def = new ConfigDef().define("name", type, Importance.HIGH, "docs"); try { def.parse(m); fail("Expected a config exception on bad input for value " + value); } catch (ConfigException e) { // this is good } } }
@Test(expected = ConfigException.class) public void testMissingRequired() { new ConfigDef().define("a", Type.INT, Importance.HIGH, "docs").parse(new HashMap<String, Object>()); }
@Test public void testParsingEmptyDefaultValueForStringFieldShouldSucceed() { new ConfigDef().define("a", Type.STRING, "", ConfigDef.Importance.HIGH, "docs") .parse(new HashMap<String, Object>()); }
@Test public void testNullDefault() { ConfigDef def = new ConfigDef().define("a", Type.INT, null, null, null, "docs"); Map<String, Object> vals = def.parse(new Properties()); assertEquals(null, vals.get("a")); }
@Test public void testNullDefaultWithValidator() { final String key = "enum_test"; ConfigDef def = new ConfigDef(); def.define(key, Type.STRING, ConfigDef.NO_DEFAULT_VALUE, ValidString.in("ONE", "TWO", "THREE"), Importance.HIGH, "docs"); Properties props = new Properties(); props.put(key, "ONE"); Map<String, Object> vals = def.parse(props); assertEquals("ONE", vals.get(key)); }
@Test public void testSaslLoginRefreshDefaults() { Map<String, Object> vals = new ConfigDef().withClientSaslSupport().parse(Collections.emptyMap()); assertEquals(SaslConfigs.DEFAULT_LOGIN_REFRESH_WINDOW_FACTOR, vals.get(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_FACTOR)); assertEquals(SaslConfigs.DEFAULT_LOGIN_REFRESH_WINDOW_JITTER, vals.get(SaslConfigs.SASL_LOGIN_REFRESH_WINDOW_JITTER)); assertEquals(SaslConfigs.DEFAULT_LOGIN_REFRESH_MIN_PERIOD_SECONDS, vals.get(SaslConfigs.SASL_LOGIN_REFRESH_MIN_PERIOD_SECONDS)); assertEquals(SaslConfigs.DEFAULT_LOGIN_REFRESH_BUFFER_SECONDS, vals.get(SaslConfigs.SASL_LOGIN_REFRESH_BUFFER_SECONDS)); }
@Test public void testSslPasswords() { ConfigDef def = new ConfigDef(); SslConfigs.addClientSslSupport(def); Properties props = new Properties(); props.put(SslConfigs.SSL_KEY_PASSWORD_CONFIG, "key_password"); props.put(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG, "keystore_password"); props.put(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG, "truststore_password"); Map<String, Object> vals = def.parse(props); assertEquals(new Password("key_password"), vals.get(SslConfigs.SSL_KEY_PASSWORD_CONFIG)); assertEquals(Password.HIDDEN, vals.get(SslConfigs.SSL_KEY_PASSWORD_CONFIG).toString()); assertEquals(new Password("keystore_password"), vals.get(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG)); assertEquals(Password.HIDDEN, vals.get(SslConfigs.SSL_KEYSTORE_PASSWORD_CONFIG).toString()); assertEquals(new Password("truststore_password"), vals.get(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG)); assertEquals(Password.HIDDEN, vals.get(SslConfigs.SSL_TRUSTSTORE_PASSWORD_CONFIG).toString()); }