package org.ovirt.engine.core.config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.util.List; import org.junit.BeforeClass; import org.junit.Test; import org.ovirt.engine.core.config.entity.ConfigKey; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class EngineConfigTest { private static final Logger log = LoggerFactory.getLogger(EngineConfigTest.class); private EngineConfig config = EngineConfig.getInstance(); @BeforeClass public static void setConfigFilePathProperty() throws UnsupportedEncodingException { final String path = URLDecoder.decode(ClassLoader.getSystemResource("engine-config.conf").getPath(), "UTF-8"); System.setProperty(EngineConfig.CONFIG_FILE_PATH_PROPERTY, path); } @Test public void testConfigDirWithFlagSet() throws Exception { // get the real path of the config file final String path = URLDecoder.decode(ClassLoader.getSystemResource("engine-config.conf").getPath(), "UTF-8"); assertNotNull(path); EngineConfigExecutor.main("-a", "--config=" + path); } @Test public void getValueWithMultipleVersions() throws Exception { final String key = "MaxNumOfVmSockets"; log.info("getValue: Testing fetch multiple version of {}", key); List<ConfigKey> keys = config.getEngineConfigLogic().getConfigDao().getKeysForName(key); for (ConfigKey configKey : keys) { log.info("{} version: {}", configKey.getDisplayValue(), configKey.getVersion()); } assertTrue(keys.size() > 0); } @Test(expected = IllegalAccessException.class) public void setOutOfRangeValue() throws Exception { final String outOfRangeForFenceQuietTime = "601"; final String key = "FenceQuietTimeBetweenOperationsInSec"; // Should throw IllegalAccessException since the given value is out of range config.getEngineConfigLogic().persist(key, outOfRangeForFenceQuietTime, ""); } @Test public void setStringValueFromFlag() throws Exception { final String certificateFileNameKey = "CertificateFileName"; // Backing up current CertificateFileName ConfigKey originalAuthenticationMethod = config.getEngineConfigLogic().fetchConfigKey(certificateFileNameKey, "general"); final String certificateFileNameNewValue = "/certs/"; setKeyAndValidate(certificateFileNameKey, certificateFileNameNewValue, "general"); // Restoring original value and making sure it was restored successfully restoreOriginalValue(certificateFileNameKey, originalAuthenticationMethod); } private void setKeyAndValidate(final String keyName, final String value, final String version) throws IllegalAccessException { config.getEngineConfigLogic().persist(keyName, value, version); ConfigKey currentConfigKey = config.getEngineConfigLogic().fetchConfigKey(keyName, "general"); assertEquals(value, currentConfigKey.getValue()); } private void restoreOriginalValue(final String keyName, ConfigKey originialValue) throws IllegalAccessException { config.getEngineConfigLogic().persist(keyName, originialValue.getValue(), originialValue.getVersion()); ConfigKey currentConfigKey = config.getEngineConfigLogic().fetchConfigKey(keyName, "general"); assertEquals(originialValue.getValue(), currentConfigKey.getValue()); } }