/*******************************************************************************
* Copyright (c) 2013 GigaSpaces Technologies Ltd. All rights reserved
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
* an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
* specific language governing permissions and limitations under the License.
*******************************************************************************/
package org.cloudifysource.esc;
import java.util.HashMap;
import java.util.Map;
import org.cloudifysource.domain.cloud.ScriptLanguages;
import org.cloudifysource.esc.installer.EnvironmentFileBuilder;
import org.junit.Assert;
import org.junit.Test;
/**
* Test the EnvironmentFileBuilder.
* @author adaml
*
*/
public class EnvironmentFileBuilderTest {
private static final String TESTING_VALUE = "TESTING_VALUE";
private static final String EXTERNAL_ENV_VAR_1 = "EXTERNAL_ENV_VAR_1";
private static final String EXTERNAL_ENV_VALUE_1 = "EXTERNAL_ENV_VALUE_1";
private static final String EXTERNAL_ENV_VAR_2 = "EXTERNAL_ENV_VAR_2";
private static final String EXTERNAL_ENV_VALUE_2 = "EXTERNAL_ENV_VALUE_2";
private static final String EXTERNAL_ENV_VAR_3 = "EXTERNAL_ENV_VAR_3";
private static final String EXTERNAL_ENV_VALUE_3 = "EXTERNAL_ENV_VALUE_3";
private static final String INTERNAL_ENV_VAR_1 = "INTERNAL_ENV_VAR_1";
private static final String INTERNAL_ENV_VALUE_1 = "INTERNAL_ENV_VALUE_1";
@Test
public void testLinuxEnvironmentValidity() {
final Map<String, String> externalEnvVars = createExternalEnvFile();
final EnvironmentFileBuilder linuxEnvFileBuilder =
new EnvironmentFileBuilder(ScriptLanguages.LINUX_SHELL, externalEnvVars);
//add a simple var. this variable is not contained in the external env var map
linuxEnvFileBuilder.exportVar(INTERNAL_ENV_VAR_1, INTERNAL_ENV_VALUE_1);
//add a value to an env var that is contained in the external environment var map.
linuxEnvFileBuilder.exportVar(EXTERNAL_ENV_VAR_1, TESTING_VALUE);
String environment = linuxEnvFileBuilder.build().toString();
assertLinuxValidEnvVarString(environment);
}
@Test
public void testWindowsEnvironmentValidity() {
final Map<String, String> externalEnvVars = createExternalEnvFile();
final EnvironmentFileBuilder windowsEnvFileBuilder =
new EnvironmentFileBuilder(ScriptLanguages.WINDOWS_BATCH, externalEnvVars);
//add a simple var. this variable is not contained in the external env var map
windowsEnvFileBuilder.exportVar(INTERNAL_ENV_VAR_1, INTERNAL_ENV_VALUE_1);
//add a value to an env var that is contained in the external environment var map.
windowsEnvFileBuilder.exportVar(EXTERNAL_ENV_VAR_1, TESTING_VALUE);
String environment = windowsEnvFileBuilder.build().toString();
assertWindowsValidEnvVarString(environment);
}
@Test
public void testEnvironmentFileName() {
final EnvironmentFileBuilder winEnvFileBuilder = new EnvironmentFileBuilder(ScriptLanguages.WINDOWS_BATCH,
new HashMap<String, String>());
final EnvironmentFileBuilder linuxEnvFileBuilder = new EnvironmentFileBuilder(ScriptLanguages.LINUX_SHELL,
new HashMap<String, String>());
Assert.assertTrue("env file name mismatch",
winEnvFileBuilder.getEnvironmentFileName().equals("cloudify_env.bat"));
Assert.assertTrue("env file name mismatch",
linuxEnvFileBuilder.getEnvironmentFileName().equals("cloudify_env.sh"));
}
//assert quotes surrounding the value and that external values are being attached, not overridden.
private void assertWindowsValidEnvVarString(final String environment) {
//assert value was set without overrides.
Assert.assertTrue("Expecting internal value " + INTERNAL_ENV_VAR_1 + " to be exported as-is",
environment.contains("SET \"" + INTERNAL_ENV_VAR_1 + "=" + INTERNAL_ENV_VALUE_1 + "\""));
//assert the external value was appended to the env var;
Assert.assertTrue("Value " + EXTERNAL_ENV_VALUE_1 + " was not appended to the internal value.",
environment.contains("SET \"" + EXTERNAL_ENV_VAR_1 + "="
+ TESTING_VALUE + ' ' + EXTERNAL_ENV_VALUE_1 + "\""));
//assert the external value does not override the above value;
Assert.assertFalse(EXTERNAL_ENV_VAR_1 + " was overridden.",
environment.contains("SET \"" + EXTERNAL_ENV_VAR_1 + "="
+ EXTERNAL_ENV_VALUE_1 + "\""));
//assert rest of the external environment vars were set
Assert.assertTrue("External var " + EXTERNAL_ENV_VAR_2 + " were not set.",
environment.contains("SET \"" + EXTERNAL_ENV_VAR_2 + "=" + EXTERNAL_ENV_VALUE_2 + "\""));
Assert.assertTrue("External var " + EXTERNAL_ENV_VAR_3 + " were not set.",
environment.contains("SET \"" + EXTERNAL_ENV_VAR_3 + "=" + EXTERNAL_ENV_VALUE_3 + "\""));
}
//assert quotes surrounding the value and that external values are being attached, not overridden.
private void assertLinuxValidEnvVarString(final String environment) {
//assert value was set without overrides.
Assert.assertTrue("Expecting internal value " + INTERNAL_ENV_VAR_1 + " to be exported as-is",
environment.contains("export \"" + INTERNAL_ENV_VAR_1 + "=" + INTERNAL_ENV_VALUE_1 + "\""));
//assert the external value was appended to the env var;
Assert.assertTrue("Value " + EXTERNAL_ENV_VALUE_1 + " was not appended to the internal value.",
environment.contains("export \"" + EXTERNAL_ENV_VAR_1 + "="
+ TESTING_VALUE + ' ' + EXTERNAL_ENV_VALUE_1 + "\""));
//assert the external value does not override the above value;
Assert.assertFalse(EXTERNAL_ENV_VAR_1 + " was overridden.",
environment.contains("export \"" + EXTERNAL_ENV_VAR_1 + "=" + EXTERNAL_ENV_VALUE_1 + "\""));
//assert rest of the external environment vars were exported
Assert.assertTrue("External var " + EXTERNAL_ENV_VAR_2 + " were not set.",
environment.contains("export \"" + EXTERNAL_ENV_VAR_2 + "=" + EXTERNAL_ENV_VALUE_2 + "\""));
Assert.assertTrue("External var " + EXTERNAL_ENV_VAR_3 + " were not set.",
environment.contains("export \"" + EXTERNAL_ENV_VAR_3 + "=" + EXTERNAL_ENV_VALUE_3 + "\""));
}
private Map<String, String> createExternalEnvFile() {
final Map<String, String> envMap = new HashMap<String, String>();
envMap.put(EXTERNAL_ENV_VAR_1, EXTERNAL_ENV_VALUE_1);
envMap.put(EXTERNAL_ENV_VAR_2, EXTERNAL_ENV_VALUE_2);
envMap.put(EXTERNAL_ENV_VAR_3, EXTERNAL_ENV_VALUE_3);
return envMap;
}
}