/* * Hibernate OGM, Domain model persistence for NoSQL datastores * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.ogm.datastore.mongodb.test.datastore; import static org.junit.Assert.assertEquals; import java.util.HashMap; import java.util.Map; import org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl; import org.hibernate.ogm.cfg.Configurable; import org.hibernate.ogm.cfg.OgmProperties; import org.hibernate.ogm.cfg.OptionConfigurator; import org.hibernate.ogm.datastore.mongodb.MongoDB; import org.hibernate.ogm.datastore.mongodb.MongoDBProperties; import org.hibernate.ogm.datastore.mongodb.configuration.impl.MongoDBConfiguration; import org.hibernate.ogm.datastore.mongodb.options.ReadPreferenceType; import org.hibernate.ogm.options.navigation.impl.OptionsContextImpl; import org.hibernate.ogm.options.navigation.source.impl.OptionValueSources; import org.hibernate.ogm.options.spi.OptionsContext; import org.hibernate.ogm.util.configurationreader.spi.ConfigurationPropertyReader; import org.junit.Before; import org.junit.Test; import com.mongodb.ReadPreference; /** * Test for the {@link MongoDBProperties#READ_PREFERENCE} setting. * * @author Gunnar Morling */ public class ReadPreferenceTest { private Map<String, Object> cfg; private OptionsContext globalOptions; private ConfigurationPropertyReader reader; @Before public void setupConfigurationMapAndContexts() { cfg = new HashMap<String, Object>(); cfg.put( OgmProperties.DATABASE, "database" ); reader = new ConfigurationPropertyReader( cfg, new ClassLoaderServiceImpl() ); globalOptions = OptionsContextImpl.forGlobal( OptionValueSources.getDefaultSources( reader ) ); } @Test public void shouldUsePrimaryByDefault() { MongoDBConfiguration config = new MongoDBConfiguration( reader, globalOptions ); assertEquals( config.buildOptions().getReadPreference(), ReadPreference.primary() ); } @Test public void shouldApplyValueGivenViaProperties() { cfg.put( MongoDBProperties.READ_PREFERENCE, "SECONDARY" ); MongoDBConfiguration config = new MongoDBConfiguration( reader, globalOptions ); assertEquals( config.buildOptions().getReadPreference(), ReadPreference.secondary() ); } @Test public void shouldApplyValueGivenViaGlobalOptions() { cfg.put( OgmProperties.OPTION_CONFIGURATOR, new OptionConfigurator() { @Override public void configure(Configurable configurable) { configurable.configureOptionsFor( MongoDB.class ).readPreference( ReadPreferenceType.SECONDARY_PREFERRED ); } } ); globalOptions = OptionsContextImpl.forGlobal( OptionValueSources.getDefaultSources( reader ) ); MongoDBConfiguration config = new MongoDBConfiguration( reader, globalOptions ); assertEquals( config.buildOptions().getReadPreference(), ReadPreference.secondaryPreferred() ); } }