changeset 202:b82b8bc167ed

Fixed thermostat setup
author Zdenek Zambersky <zzambers@redhat.com>
date Tue, 22 Sep 2015 18:43:48 +0200
parents 2d312f47b00a
children a74aa91ab44c
files src/org/thermostat/qa2/framework/TestRunner.java src/org/thermostat/qa2/framework/ThermostatQAConfig.java src/org/thermostat/qa2/framework/utils/ThermostatUtilities.java
diffstat 3 files changed, 84 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/org/thermostat/qa2/framework/TestRunner.java	Wed Aug 26 14:57:04 2015 +0200
+++ b/src/org/thermostat/qa2/framework/TestRunner.java	Tue Sep 22 18:43:48 2015 +0200
@@ -194,10 +194,6 @@
 
         String setupTarget = setupTargetA.value();
 
-        // setup thermostat
-        if (setupThermostat) {
-            ThermostatUtilities.setupThermostat(setupTarget, true);
-        }
         // setup storage
         if (setupStorage) {
             String storageType = setupStorageA.type();
@@ -205,8 +201,9 @@
             boolean badAgentLogin = setupStorageA.badAgentLogin();
             boolean badClientLogin = setupStorageA.badClientLogin();
             boolean agentSaveOnExit = setupStorageA.agentSaveOnExit();
-            ThermostatUtilities.setupStorage(setupTarget, web, badAgentLogin, badClientLogin, agentSaveOnExit, true, false);
+            ThermostatUtilities.setupThermostat(setupTarget, web, badAgentLogin, badClientLogin, agentSaveOnExit, true, false);
         }
+        
         // start storage
         if (startStorage) {
             String storageType = setupStorageA.type();
--- a/src/org/thermostat/qa2/framework/ThermostatQAConfig.java	Wed Aug 26 14:57:04 2015 +0200
+++ b/src/org/thermostat/qa2/framework/ThermostatQAConfig.java	Tue Sep 22 18:43:48 2015 +0200
@@ -186,12 +186,20 @@
         return mongoLogin;
     }
 
+    public static Login getAgentLogin(boolean web) {
+        return web ? agentLogin : mongoLogin;
+    }
+
     public static Login getAgentLogin() {
-        return ThermostatUtilities.isWebStorageConfigured() ? agentLogin : mongoLogin;
+        return getAgentLogin(ThermostatUtilities.isWebStorageConfigured());
+    }
+
+    public static Login getClientLogin(boolean web) {
+        return web ? clientLogin : mongoLogin;
     }
 
     public static Login getClientLogin() {
-        return ThermostatUtilities.isWebStorageConfigured() ? clientLogin : mongoLogin;
+        return getClientLogin(ThermostatUtilities.isWebStorageConfigured());
     }
 
     public static Login getCommandChannelLogin() {
--- a/src/org/thermostat/qa2/framework/utils/ThermostatUtilities.java	Wed Aug 26 14:57:04 2015 +0200
+++ b/src/org/thermostat/qa2/framework/utils/ThermostatUtilities.java	Tue Sep 22 18:43:48 2015 +0200
@@ -49,6 +49,78 @@
  */
 public class ThermostatUtilities {
 
+    public static void setupThermostat(String setupTarget, boolean web, boolean badAgentLogin, boolean badClientLogin, boolean agentSaveOnExit, boolean backupThermostatConfig, boolean backupUserHome) throws Exception {
+        String thermostatHome = ThermostatQAConfig.getThermostatHome(setupTarget);
+        String thermostatUserHome = ThermostatQAConfig.getThermostatUserHome(setupTarget);
+        boolean needsRoot = ThermostatQAConfig.isThermostatPackaged(setupTarget);
+
+        if (backupThermostatConfig) {
+            BackupService backupService = new BackupService(ThermostatQAConfig.getThermostatEtcDir(setupTarget));
+            backupService.setRunAsRoot(needsRoot);
+            backupService.start();
+        }
+
+        if (new File(thermostatUserHome).exists()) {
+            if (backupUserHome) {
+                BackupService backupService = new BackupService(thermostatUserHome);
+                backupService.start();
+            }
+            ProcessUtilities.run("rm", "-rf", "--", thermostatUserHome);
+        }
+
+        CommonUtilities.printHeading("Running Thermostat setup ...");
+        String binDir = ThermostatQAConfig.getThermostatBinDir(setupTarget);
+        String setupPath = binDir + File.separator + "thermostat-setup";
+        NativeProcess process;
+        Login mongoLogin = ThermostatQAConfig.getMongoLogin();
+        Login clientLogin = ThermostatQAConfig.getClientLogin(true);
+        Login agentLogin = ThermostatQAConfig.getAgentLogin(true);
+
+        process = new NativeProcess("bash", "-c", "echo -e \"yes\\n"
+                + mongoLogin.getUsername() + "\\n"
+                + mongoLogin.getPassword() + "\\n" + mongoLogin.getPassword() + "\\n"
+                + clientLogin.getUsername() + "\\n"
+                + clientLogin.getPassword() + "\\n" + clientLogin.getPassword() + "\\n"
+                + agentLogin.getUsername() + "\\n"
+                + agentLogin.getPassword() + "\\n" + agentLogin.getPassword()
+                + "\\n\" | " + setupPath);
+        process.setLabel("Thermostat setup");
+        process.setEnvironmentVariable("USER_THERMOSTAT_HOME", thermostatUserHome);
+        process.start();
+        process.waitFor();
+
+        Login agentBadLogin = badAgentLogin ? ThermostatQAConfig.getAgentBadLogin() : ThermostatQAConfig.getAgentLogin(web);
+        String agentAuthFile = thermostatUserHome + File.separator + "etc" + File.separator + "agent.auth";
+        changeConfigProperty(agentAuthFile, "username", agentBadLogin.getUsername());
+        changeConfigProperty(agentAuthFile, "password", agentBadLogin.getPassword());
+
+        String clientPropertiesFile = thermostatUserHome + File.separator + "etc" + File.separator + "client.properties";
+        changeConfigProperty(clientPropertiesFile, "connection-url", ThermostatQAConfig.getStroageUrl(web));
+
+        Login clientBadLogin = badClientLogin ? ThermostatQAConfig.getClientBadLogin() : ThermostatQAConfig.getClientLogin(web);
+        changeConfigProperty(clientPropertiesFile, "username", clientBadLogin.getUsername());
+        changeConfigProperty(clientPropertiesFile, "password", clientBadLogin.getPassword());
+
+        String agentPropertiesFile = thermostatHome + File.separator + "etc" + File.separator + "agent.properties";
+        changeConfigProperty(agentPropertiesFile, "SAVE_ON_EXIT", agentSaveOnExit ? "true" : "false", needsRoot);
+        changeConfigProperty(agentPropertiesFile, "DB_URL", ThermostatQAConfig.getStroageUrl(web), needsRoot);
+
+        webStorage = web;
+    }
+
+    public static void changeConfigProperty(String file, String name, String value) throws Exception {
+        changeConfigProperty(file, name, value, false);
+    }
+
+    public static void changeConfigProperty(String file, String name, String value, boolean root) throws Exception {
+        ProcessUtilities.shellRun((root ? "sudo -n " : "") + "sed -i 's/" + escapeForSed(name) + "=.*/" + escapeForSed(name) + "=" + escapeForSed(value) + "/g' " + file);
+    }
+
+    public static String escapeForSed(String string) {
+        String result = string.replace("/", "\\/");
+        return result;
+    }
+
     /* runs thermostat setup (creates thermostat user home dir (database)),
      backup service (on thermostat user home) is started  before if requested */
     public static void setupThermostat(String setupTarget, boolean backupUserHome) throws Exception {