Тестирование jCache с помощью Hazelcast Provider

Как выполнить модульные тесты для кэширования с помощью jCache и HazelcastProvider?

В настоящее время я получаю эту ошибку:

Caused by: java.lang.IllegalStateException: Unable to connect to any address in the config! The following addresses were tried: [localhost/127.0.0.1:5701, localhost/127.0.0.1:5702, localhost/127.0.0.1:5703]

Упрощенный код ниже:

@RunWith(SpringJUnit4ClassRunner.class)
@TestPropertySource("classpath:provider.properties")
@ContextConfiguration(classes = {
    CustomCacheConfiguration.class
})

У меня есть кеш, объявленный в файле hazelcast.xml вместе с мультикастом, поэтому, как я правильно понимаю, у меня должен быть встроенный экземпляр.

//РЕДАКТИРОВАТЬ

вот файл hazelcast.xml:

<hazelcast xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.hazelcast.com/schema/config
                           http://www.hazelcast.com/schema/config/hazelcast-config-3.8.xsd"
       xmlns="http://www.hazelcast.com/schema/config">
    <group>
        <name>test</name>
        <password>test</password>
    </group>
    <network>
        <join>
            <multicast enabled="true"/>
        </join>
     </network>

    <!-- cache definitions -->
</hazelcast>

И вот логи:

Jun 28, 2017 10:55:45 AM com.hazelcast.client.config.XmlClientConfigLocator
INFO: Loading 'hazelcast-client-default.xml' from classpath.
Jun 28, 2017 10:55:45 AM com.hazelcast.client.config.XmlClientConfigLocator
INFO: Loading 'hazelcast-client-default.xml' from classpath.
Jun 28, 2017 10:55:45 AM com.hazelcast.core.LifecycleService
INFO: hz.client_0 [dev] [3.8.2] HazelcastClient 3.8.2 (20170518 - a60f944) is STARTING
Jun 28, 2017 10:55:46 AM com.hazelcast.core.LifecycleService
INFO: hz.client_0 [dev] [3.8.2] HazelcastClient 3.8.2 (20170518 - a60f944) is STARTED
Jun 28, 2017 10:55:46 AM com.hazelcast.client.spi.impl.ClusterListenerSupport
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5701 as owner member
Jun 28, 2017 10:55:46 AM com.hazelcast.client.spi.impl.ClusterListenerSupport
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5702 as owner member
Jun 28, 2017 10:55:46 AM com.hazelcast.client.spi.impl.ClusterListenerSupport
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5703 as owner member
Jun 28, 2017 10:55:46 AM com.hazelcast.client.spi.impl.ClusterListenerSupport
WARNING: hz.client_0 [dev] [3.8.2] Unable to get alive cluster connection, try in 2940 ms later, attempt 1 of 2.
Jun 28, 2017 10:55:49 AM com.hazelcast.client.spi.impl.ClusterListenerSupport
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5703 as owner member
Jun 28, 2017 10:55:49 AM com.hazelcast.client.spi.impl.ClusterListenerSupport
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5702 as owner member
Jun 28, 2017 10:55:49 AM com.hazelcast.client.spi.impl.ClusterListenerSupport
INFO: hz.client_0 [dev] [3.8.2] Trying to connect to [127.0.0.1]:5701 as owner member
Jun 28, 2017 10:55:49 AM com.hazelcast.client.spi.impl.ClusterListenerSupport
WARNING: hz.client_0 [dev] [3.8.2] Unable to get alive cluster connection, try in 2996 ms later, attempt 2 of 2.
Jun 28, 2017 10:55:52 AM com.hazelcast.core.LifecycleService
INFO: hz.client_0 [dev] [3.8.2] HazelcastClient 3.8.2 (20170518 - a60f944) is SHUTTING_DOWN
Jun 28, 2017 10:55:52 AM com.hazelcast.core.LifecycleService
INFO: hz.client_0 [dev] [3.8.2] HazelcastClient 3.8.2 (20170518 - a60f944) is SHUTDOWN

person Forin    schedule 28.06.2017    source источник
comment
Можешь выложить логи? Возможно, Hazelcast не запускается. Строго говоря, это не будет модульным тестом, и вы можете использовать фиктивные объекты. Кроме того, загляните на github. com/hazelcast/hazelcast/tree/master/hazelcast/src/test/, чтобы увидеть, как там выполняются тесты.   -  person Neil Stevenson    schedule 28.06.2017
comment
Вы должны проверить путь к классам и другие компоненты. Файл hazelcast.xml будет использоваться сервером Hazelcast, и либо вы его не запускаете, либо он запускается недостаточно быстро. У вас есть сообщение об ошибке из файла HazelcastClient. Клиент запускается и не может найти сервер для подключения, поэтому либо вы запускаете клиент вместо сервера, либо клиент перед сервером.   -  person Neil Stevenson    schedule 28.06.2017
comment
Проблема в том, что я нигде не запускаю клиент, кажется, что во время тестирования hazelcast не может загрузить мой xml-файл, поэтому загружает файл по умолчанию для клиента.   -  person Forin    schedule 29.06.2017
comment
com.hazelcast:hazelcast-client зависит от com.hazelcast:hazelcast - клиент зависит от сервера, а не наоборот. Таким образом, код сервера никогда не может запустить клиент. Но явно что-то в ваших настройках есть. Можете ли вы опубликовать полный пример на Github и дать ссылку на него здесь? В качестве альтернативы убедитесь, что вы удалили com.hazelcast:hazelcast-client из пути к классам и посмотрите, что произойдет. Стоит также проверить, как у вас установлен hazelcast.jcache.provider.type.   -  person Neil Stevenson    schedule 29.06.2017
comment
Я думаю, что нашел решение, я разместил его как ответ. Есть ли у вас какие-либо предложения, опасения?   -  person Forin    schedule 29.06.2017


Ответы (1)


Думаю, я нашел решение.

Я создал новый файл hazelcast-test.xml со следующим XML:

<hazelcast xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.hazelcast.com/schema/config
                           http://www.hazelcast.com/schema/config/hazelcast-config-3.9.xsd"
       xmlns="http://www.hazelcast.com/schema/config">

    <properties>
        <property name="hazelcast.shutdownhook.enabled">false</property>
    </properties>

    <network>
        <join>
            <multicast enabled="false"/>
            <tcp-ip enabled="false"/>
        </join>
    </network>

    <import resource="classpath:hazelcast-cache-declarations.xml"/>
</hazelcast>

И затем в тестах я добавил это:

@BeforeClass
public void init() {
    Config config = new ClasspathXmlConfig("hazelcast-test.xml");
    HazelcastInstance instance = Hazelcast.newHazelcastInstance(config);
}

@AfterClass
public void clean() {
    Hazelcast.shutdownAll();
}
person Forin    schedule 29.06.2017
comment
Вы создаете экземпляр Hazelcast в @Before, а не в @BeforeClass, поэтому у вас будет более одного, если у вас есть несколько методов @Test. Это могло бы объяснить ошибку, но на самом деле нужно загрузить больше кода, прежде чем какая-либо причина станет очевидной. - person Neil Stevenson; 29.06.2017
comment
Я исправил это, спасибо за указание на аннотацию @BeforeClass. Я изменил ответ, теперь все тесты работают. - person Forin; 04.07.2017