Ответ 1
Чтобы изменить настройки кеша DNS через java.security.Security
вы должны предоставить специальный загрузчик приложений.
package modules
class ApplicationLoader extends GuiceApplicationLoader {
override protected def builder(context: Context): GuiceApplicationBuilder = {
java.security.Security.setProperty("networkaddress.cache.ttl", "1")
super.builder(context)
}
}
Когда вы создаете этот загрузчик приложений, вы можете включить его в вашем application.conf
play.application.loader = "modules.ApplicationLoader"
после этого вы можете использовать приведенный выше код и проверить, работает ли DNS-кеш так, как вы его настроили. Но имейте в виду, что ваша система обращается к DNS-серверу, который кеширует себя, поэтому вы не увидите изменений. Если вы хотите быть уверены, что получите разные адреса для google.com, вам следует использовать авторитетный сервер имен, например ns1.google.com
Если вы хотите написать тест для этого, вы можете написать тест, который запрашивает адрес, а затем ожидает указанное количество времени, пока он не разрешится снова. Но с системой DNS, находящейся вне вашего контроля, такой как google.com, это может стать проблемой, если вы попадете на DNS-сервер с кэшированием. Если вы хотите написать такую проверку, вы можете сделать это с
@RunWith(classOf[JUnitRunner])
class DnsTests extends FlatSpec with Matchers {
"DNS Cache ttl" should "refresh after 1 second"
in new WithApplicationLoader(new modules.ApplicationLoader) {
// put your test code here
}
}
Как вы можете видеть, вы можете поместить пользовательский загрузчик приложения в контекст приложения, запускаемого за тестом.