Spring XD — сбои тестов

Я взял последнюю копию исходного кода XD с github и попытался собрать локальную версию. Когда я запускаю задачу сборки, появляются следующие ошибки. Я запускаю Redis на порту 6379. Не уверен, что чего-то еще не хватает.

мой /etc/hosts выглядит нормально на Mac. Мне пришлось сделать тест -x, чтобы пропустить тесты. Любое возможное решение? Должен ли я запускать gemfire?

127.0.0.1 локальный хост 255.255.255.255 широковещательный хост ::1 локальный хост fe80::1%lo0 локальный хост 127.0.0.1 imac

13:49:47.920 [DEBUG] [TestEventLogger] 
13:49:47.920 [DEBUG] [TestEventLogger] org.springframework.integration.x.gemfire.JsonStringToObjectTransformerTests > test FAILED
13:49:47.921 [DEBUG] [TestEventLogger]     java.lang.RuntimeException: java.net.UnknownHostException
13:49:47.921 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.distributed.internal.direct.DirectChannel.initAddress(DirectChannel.java:902)
13:49:47.921 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.distributed.internal.direct.DirectChannel.<init>(DirectChannel.java:126)
13:49:47.921 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.distributed.internal.membership.jgroup.JGroupMembershipManager.<init>(JGroupMembershipManager.java:1575)
13:49:47.921 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.distributed.internal.membership.jgroup.JGroupMemberFactory.newMembershipManager(JGroupMemberFactory.java:111)
13:49:47.921 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.distributed.internal.membership.MemberFactory.newMembershipManager(MemberFactory.java:95)
13:49:47.921 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.distributed.internal.DistributionManager.<init>(DistributionManager.java:1180)
13:49:47.921 [INFO] [system.out] 13:49:47.921 [DEBUG] [org.gradle.process.internal.child.ActionExecutionWorker] Stopping client connection.
13:49:47.921 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.distributed.internal.DistributionManager.<init>(DistributionManager.java:1238)
13:49:47.921 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.distributed.internal.DistributionManager.create(DistributionManager.java:613)
13:49:47.921 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.distributed.internal.InternalDistributedSystem.initialize(InternalDistributedSystem.java:515)
13:49:47.921 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.distributed.internal.InternalDistributedSystem.newInstance(InternalDistributedSystem.java:230)
13:49:47.922 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.distributed.DistributedSystem.connect(DistributedSystem.java:1105)
13:49:47.922 [DEBUG] [TestEventLogger]         at com.gemstone.gemfire.cache.CacheFactory.create(CacheFactory.java:227)
13:49:47.922 [DEBUG] [TestEventLogger]         at org.springframework.integration.x.gemfire.JsonStringToObjectTransformerTests.test(JsonStringToObjectTransformerTests.java:31)
13:49:47.922 [DEBUG] [TestEventLogger]         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
13:49:47.922 [DEBUG] [TestEventLogger]         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
13:49:47.922 [DEBUG] [TestEventLogger]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
13:49:47.922 [DEBUG] [TestEventLogger]         at java.lang.reflect.Method.invoke(Method.java:606)
13:49:47.922 [DEBUG] [TestEventLogger]         at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
13:49:47.922 [DEBUG] [TestEventLogger]         at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
13:49:47.922 [DEBUG] [TestEventLogger]         at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
13:49:47.922 [DEBUG] [TestEventLogger]         at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
13:49:47.922 [DEBUG] [TestEventLogger]         at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
13:49:47.923 [DEBUG] [TestEventLogger]         at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
13:49:47.923 [DEBUG] [TestEventLogger]         at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
13:49:47.923 [DEBUG] [TestEventLogger]         at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
13:49:47.923 [DEBUG] [TestEventLogger]         at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
13:49:47.923 [DEBUG] [TestEventLogger]         at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
13:49:47.923 [DEBUG] [TestEventLogger]         at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
13:49:47.923 [DEBUG] [TestEventLogger]         at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
13:49:47.923 [DEBUG] [TestEventLogger]         at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
13:49:47.923 [DEBUG] [TestEventLogger]         at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:86)
13:49:47.923 [DEBUG] [TestEventLogger]         at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:49)
13:49:47.924 [DEBUG] [TestEventLogger]         at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:69)
13:49:47.924 [DEBUG] [TestEventLogger]         at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:48)
13:49:47.924 [DEBUG] [TestEventLogger]         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
13:49:47.924 [DEBUG] [TestEventLogger]         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
13:49:47.924 [DEBUG] [TestEventLogger]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
13:49:47.924 [DEBUG] [TestEventLogger]         at java.lang.reflect.Method.invoke(Method.java:606)
13:49:47.924 [DEBUG] [TestEventLogger]         at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
13:49:47.924 [DEBUG] [TestEventLogger]         at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
13:49:47.924 [DEBUG] [TestEventLogger]         at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
13:49:47.924 [DEBUG] [TestEventLogger]         at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
13:49:47.925 [DEBUG] [TestEventLogger]         at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
13:49:47.925 [DEBUG] [TestEventLogger]         at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:105)
13:49:47.925 [DEBUG] [TestEventLogger]         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
13:49:47.925 [DEBUG] [TestEventLogger]         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
13:49:47.925 [DEBUG] [TestEventLogger]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
13:49:47.925 [DEBUG] [TestEventLogger]         at java.lang.reflect.Method.invoke(Method.java:606)
13:49:47.925 [DEBUG] [TestEventLogger]         at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
13:49:47.925 [DEBUG] [TestEventLogger]         at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
13:49:47.925 [DEBUG] [TestEventLogger]         at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355)
13:49:47.925 [DEBUG] [TestEventLogger]         at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:64)
13:49:47.925 [DEBUG] [TestEventLogger]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
13:49:47.925 [DEBUG] [TestEventLogger]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
13:49:47.926 [DEBUG] [TestEventLogger]         at java.lang.Thread.run(Thread.java:745)
13:49:47.926 [DEBUG] [TestEventLogger] 
13:49:47.926 [DEBUG] [TestEventLogger]         Caused by:
13:49:47.926 [DEBUG] [TestEventLogger]         java.net.UnknownHostException
13:49:47.926 [DEBUG] [TestEventLogger]             at com.gemstone.gemfire.internal.SocketCreator.getLocalHost(SocketCreator.java:312)
13:49:47.926 [DEBUG] [TestEventLogger]             at com.gemstone.gemfire.distributed.internal.direct.DirectChannel.initAddress(DirectChannel.java:898)
13:49:47.926 [DEBUG] [TestEventLogger]             ... 54 more
13:49:47.928 [DEBUG] [TestEventLogger] 
13:49:47.928 [DEBUG] [TestEventLogger] org.springframework.integration.x.gemfire.JsonStringToObjectTransformerTests FAILED
13:49:47.928 [DEBUG] [TestEventLogger] 
13:49:47.928 [DEBUG] [TestEventLogger] Gradle Test Executor 6 FAILED

person SathiyaS    schedule 29.10.2014    source источник


Ответы (2)


Странный. Я согласен, ваш /etc/hosts выглядит хорошо. Я видел это на компьютерах с Linux, которые иногда используют 127.0.1.1 вместо 127.0.0.1. Тест просто запускает кеш с помощью new CacheFactory().create();. Если вы являетесь пользователем GemFire, вы можете проверить, есть ли у вас какие-либо файлы gemfire.properties или cache.xml в вашем домашнем каталоге, текущем каталоге или пути к классам. GemFire ​​печально известен тем, что находит их.

person dturanski    schedule 29.10.2014

Согласен, с вашим файлом /etc/hosts все в порядке (хотя я бы отформатировал его так, чтобы каждая запись хоста находилась в одной строке).

Кажется, вы используете GemFire ​​7?

Кроме того, какого поставщика/версии Java вы используете на своем Mac (Apple или Oracle JDK/JRE и версия)?

Ваша версия Mac OS X может быть фактором (???), особенно если вы отключили сеть (т. Е. Нет «активной» сетевой карты, подключенной к действительному IP-адресу, как определено ifconfig), хотя это менее чем ясно.

В двух словах, GemFire ​​пытается разрешить/найти фактический IP-адрес локальной системы (используя внутренний класс SocketCreator GemFire), когда петлевой адрес указан только IP (как в вашем файле /etc/hosts) или возвращен InetAddress. получить локальный хост().

Этот процесс разрешения довольно сложен и, к сожалению, содержится в блоке «статического инициализатора» внутри класса SocketCreator, когда класс загружается.

Кажется маловероятным, что InetAddress.getLocalHost() когда-либо вернет значение null, но в этом случае причина возникновения исключения UnknownHostException в GemFire ​​заключалась в том, что переменная-член класса SocketCreator.localHost была нулевой...

310:  public static InetAddress getLocalHost() throws UnknownHostException {
311:    if (localHost == null) {
312:      throw new UnknownHostException();
313:    }
314:    return localHost;
315:  }

Статическая переменная-член SocketCreator.localHost инициализируется внутри блока статического инициализатора.

Итак, либо статический инициализатор не был вызван, либо InetAddress.getLocalHost() (возможно, из-за того, что сеть была отключена?) вернул null, хотя просмотр кода GemFire ​​привел бы к исключению NullPointerException (которое я не уверен, могло ли быть где-то проглочено) , так что это больше похоже на первое, но на самом деле ни один из ответов не кажется вероятным.

Одним из возможных обходных путей (поскольку он позволяет избежать этого шага разрешения IP-адресов при запуске GemFire ​​Membership, как видно из трассировки стека) может быть изменение тестового класса Spring XD, JsonStringToObjectTransformerTests, в строке 31, чтобы быть...

31:    new CacheFactory().set("mcast-port", "0").set("log-level", "warning").create();

Это позволило избежать вызова SocketCreator.getLocalHost() из DirectChannel.initAddress(DirectChannel.java:898).

Кроме того, установка уровня логирования для предупреждения уменьшает шум GemFire ​​и значительно ускоряет тест.

Надеюсь это поможет.

person John Blum    schedule 30.10.2014
comment
Если подумать об этом немного подробнее, у вас есть несколько других вариантов, если предложенное изменение кода не работает. 1) вы можете изменить создание CacheFactory так, чтобы оно также было... new CacheFactory().set(mcast-port, 0).set(disable-tcp, true).set(..).create(), отключая как Multicast UDP и TCP, поскольку фактически это один узел. 2) Наконец, если это не окажется успешным, GemFire ​​имеет (скрытое) системное свойство для явной установки адреса привязки JGroups, что и ищет DirectChannel в случае, если адрес привязки не был задан явно. Свойство системы GemFire ​​- это... - person John Blum; 30.10.2014
comment
gemfire.jg-bind-address Если указано с помощью CacheFactory, оно просто становится... например. новый CacheFactory().set(jg-bind-address, InetAddress.getLocalHost(). getCanonicalHostName()).set(..).create(); - person John Blum; 30.10.2014