package org.jooby.hazelcast;
import static org.easymock.EasyMock.expect;
import java.util.Properties;
import java.util.function.Consumer;
import org.jooby.Env;
import org.jooby.test.MockUnit;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import com.google.inject.Binder;
import com.google.inject.binder.AnnotatedBindingBuilder;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.typesafe.config.Config;
import javaslang.control.Try.CheckedRunnable;
@RunWith(PowerMockRunner.class)
@PrepareForTest({Hcast.class, Hazelcast.class, com.hazelcast.config.Config.class, Hazelcast.class })
public class HcastTest {
@SuppressWarnings("unchecked")
MockUnit.Block bindings = unit -> {
Config conf = unit.get(Config.class);
expect(conf.getConfig("hazelcast")).andReturn(new Hcast().config().getConfig("hazelcast"));
Properties properties = new Properties();
properties.setProperty("hazelcast.logging.type", "slf4j");
com.hazelcast.config.Config config = unit
.mockConstructor(com.hazelcast.config.Config.class);
unit.registerMock(com.hazelcast.config.Config.class, config);
expect(config.setProperties(properties)).andReturn(config);
AnnotatedBindingBuilder<com.hazelcast.config.Config> abbConfig = unit
.mock(AnnotatedBindingBuilder.class);
abbConfig.toInstance(config);
HazelcastInstance hcast = unit.mock(HazelcastInstance.class);
unit.mockStatic(Hazelcast.class);
hcast.shutdown();
expect(Hazelcast.newHazelcastInstance(config)).andReturn(hcast);
AnnotatedBindingBuilder<HazelcastInstance> abbHI = unit
.mock(AnnotatedBindingBuilder.class);
abbHI.toInstance(hcast);
unit.registerMock(HazelcastInstance.class, hcast);
Binder binder = unit.get(Binder.class);
expect(binder.bind(com.hazelcast.config.Config.class)).andReturn(abbConfig);
expect(binder.bind(HazelcastInstance.class)).andReturn(abbHI);
};
private MockUnit.Block onStop = unit -> {
Env env = unit.get(Env.class);
expect(env.onStop(unit.capture(CheckedRunnable.class))).andReturn(env);
};
@Test
public void defaults() throws Exception {
new MockUnit(Env.class, Config.class, Binder.class)
.expect(bindings)
.expect(onStop)
.run(unit -> {
new Hcast()
.configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class));
}, unit -> {
unit.captured(CheckedRunnable.class).iterator().next().run();
});
}
@SuppressWarnings("unchecked")
@Test
public void withConfigurer() throws Exception {
new MockUnit(Env.class, Config.class, Binder.class, Consumer.class)
.expect(bindings)
.expect(unit -> {
Consumer<com.hazelcast.config.Config> consumer = unit.get(Consumer.class);
consumer.accept(unit.get(com.hazelcast.config.Config.class));
})
.expect(onStop)
.run(unit -> {
new Hcast()
.doWith(unit.get(Consumer.class))
.configure(unit.get(Env.class), unit.get(Config.class), unit.get(Binder.class));
}, unit -> {
unit.captured(CheckedRunnable.class).iterator().next().run();
});
}
}