changeset 187:877b403e8344

Extended support for packaged thermostat changes: Makefile: src/org/thermostat/qa2/framework/ThermostatQAConfig.java: src/org/thermostat/qa2/framework/services/ThermostatStorage.java: src/org/thermostat/qa2/framework/services/ThermostatAgent.java: src/org/thermostat/qa2/framework/services/ThermostatGui.java: src/org/thermostat/qa2/framework/services/ThermostatService.java: src/org/thermostat/qa2/tests/AgentWebStorageTest.java: src/org/thermostat/qa2/tests/CliClientDBModificationsSmokeTest.java: - Added more (changed) configuration options src/org/thermostat/qa2/framework/services/BackupService.java: src/org/thermostat/qa2/framework/utils/ThermostatUtilities.java: - Using sudo to backup and overwrite root-owned thermostat configuration files. src/org/thermostat/qa2/framework/services/Tomcat.java - Added support for running native tomcat. src/org/thermostat/qa2/framework/TestRunner.java: src/org/thermostat/qa2/reporter/Generator.java: - Fixed bug in reporter (when test ends with error).
author Zdenek Zambersky <zzambers@redhat.com>
date Fri, 10 Jul 2015 14:21:09 +0200
parents 7bc828291ea4
children 2f4f704ba819
files Makefile src/org/thermostat/qa2/framework/TestRunner.java src/org/thermostat/qa2/framework/ThermostatQAConfig.java src/org/thermostat/qa2/framework/services/BackupService.java src/org/thermostat/qa2/framework/services/ThermostatAgent.java src/org/thermostat/qa2/framework/services/ThermostatGui.java src/org/thermostat/qa2/framework/services/ThermostatService.java src/org/thermostat/qa2/framework/services/ThermostatStorage.java src/org/thermostat/qa2/framework/services/Tomcat.java src/org/thermostat/qa2/framework/utils/ThermostatUtilities.java src/org/thermostat/qa2/reporter/Generator.java src/org/thermostat/qa2/reporter/LogParser.java src/org/thermostat/qa2/tests/CliClientDBModificationsSmokeTest.java
diffstat 13 files changed, 152 insertions(+), 102 deletions(-) [+]
line wrap: on
line diff
--- a/Makefile	Fri May 22 01:23:01 2015 +0200
+++ b/Makefile	Fri Jul 10 14:21:09 2015 +0200
@@ -45,6 +45,8 @@
 THERMOSTAT_DIR=$(BUILD_DIR)/thermostat
 THERMOSTAT_HOME_DIR=$(THERMOSTAT_DIR)/distribution/target/image
 THERMOSTAT_WEB_DEPLOY_DIR=$(TOMCAT_DIR)/webapps/thermostat
+THERMOSTAT_PACKAGED=false
+THERMOSTAT_WEBSTORAGE_PORT=8080
 
 # refers to thermostat against which compatibility is tested
 THERMOSTAT_OTHER_VERSION=1.2
@@ -126,17 +128,14 @@
 	mkdir -p $(LOGS_DIR)/$(DATE)
 	USER_THERMOSTAT_HOME=$(THERMOSTAT_USER_DIR) \
 	$(JAVA) -cp $(CLASSES_DIR) \
-	-Dtomcat.home=$(TOMCAT_DIR) \
+	-Dthermostat.user.home=$(THERMOSTAT_USER_DIR) \
+	-Dthermostat.version=$(THERMOSTAT_VERSION) \
 	-Dthermostat.home=$(THERMOSTAT_HOME_DIR) \
-	-Dthermostat.user.home=$(THERMOSTAT_USER_DIR) \
-	-Dthermostat.executable.name=thermostat \
-	-Dthermostat.executable.path=$(THERMOSTAT_HOME_DIR)/bin \
-	-Dthermostat.webapp.path=$(THERMOSTAT_DIR)/web/war/target \
-	-Dthermostat.version=$(THERMOSTAT_VERSION) \
-	-Dscreenshot.source=$(SCREENSHOT_SOURCE) \
-	-Dclean.after.gui.test=true	\
-	-Dgnome-keyring.config.path=$(GNOME_KEYRING_USER_DATA_DIR) \
-	-Dbackup.path=$(BUILD_DIR)/backup \
+	-Dthermostat.packaged=$(THERMOSTAT_PACKAGED) \
+	-Dthermostat.webstorage.port=$(THERMOSTAT_WEBSTORAGE_PORT) \
+	-Dtomcat.home=$(TOMCAT_DIR) \
+	-Dgnome-keyring.config.dir=$(GNOME_KEYRING_USER_DATA_DIR) \
+	-Dbackup.dir=$(BUILD_DIR)/backup \
 	org.thermostat.qa2.framework.TestRunner org.thermostat.qa2.tests.$@ 2>&1 | tee $(LOGS_DIR)/$(DATE)/$@.log
 
 .PHONY: run-compatibility-tests
@@ -151,17 +150,16 @@
 	mkdir -p $(LOGS_DIR)/compatibility/$(THERMOSTAT_OTHER_VERSION)/$(DATE)
 	USER_THERMOSTAT_HOME=$(THERMOSTAT_USER_DIR) \
 	$(JAVA) -cp $(CLASSES_DIR) \
-	-Dtomcat.home=$(TOMCAT_DIR) \
-	-Dthermostat.home=$(THERMOSTAT_HOME_DIR) \
 	-Dthermostat.user.home=$(THERMOSTAT_USER_DIR) \
-	-Dthermostat.executable.path=$(THERMOSTAT_HOME_DIR)/bin \
 	-Dthermostat.version=$(THERMOSTAT_VERSION) \
-	-Dthermostat.webapp.path=$(THERMOSTAT_DIR)/web/war/target \
-	-Dthermostat.other.home=$(THERMOSTAT_OTHER_HOME_DIR) \
+	-Dthermostat.home=$(THERMOSTAT_HOME_DIR) \
+	-Dthermostat.packaged=$(THERMOSTAT_PACKAGED) \
 	-Dthermostat.other.version=$(THERMOSTAT_OTHER_VERSION) \
-	-Dthermostat.other.webapp.path=$(THERMOSTAT_OTHER_DIR)/web/war/target \
-	-Dgnome-keyring.config.path=$(GNOME_KEYRING_USER_DATA_DIR) \
-	-Dbackup.path=$(BUILD_DIR)/backup \
+	-Dthermostat.other.home=$(THERMOSTAT_OTHER_HOME_DIR) \
+	-Dthermostat.webstorage.port=$(THERMOSTAT_WEBSTORAGE_PORT) \
+	-Dtomcat.home=$(TOMCAT_DIR) \
+	-Dgnome-keyring.config.dir=$(GNOME_KEYRING_USER_DATA_DIR) \
+	-Dbackup.dir=$(BUILD_DIR)/backup \
 	org.thermostat.qa2.framework.TestRunner org.thermostat.qa2.tests.compatibility.$@ 2>&1 | tee $(LOGS_DIR)/compatibility/$(THERMOSTAT_OTHER_VERSION)/$(DATE)/$@.log
 
 .PHONY: testwarning
@@ -222,8 +220,8 @@
 	cp -r $(FLOTR_DIR) $(REPORT_DIR)
 	$(JAVA) -cp $(CLASSES_DIR) \
 	-Dthermostat.version=$(THERMOSTAT_VERSION) \
-	-Dlogs.path=$(LOGS_DIR) \
-	-Dreports.path=$(REPORT_DIR) \
+	-Dlogs.dir=$(LOGS_DIR) \
+	-Dreports.dir=$(REPORT_DIR) \
 	org.thermostat.qa2.reporter.Reporter
 
 report-compatibility-tests:	$(CLASSES_DIR) flotr
@@ -233,8 +231,8 @@
 	$(JAVA) -cp $(CLASSES_DIR) \
 	-Dthermostat.version=$(THERMOSTAT_VERSION) \
 	-Dthermostat.other.version=$(THERMOSTAT_OTHER_VERSION) \
-	-Dlogs.path=$(LOGS_DIR)/compatibility/$(THERMOSTAT_OTHER_VERSION)/ \
-	-Dreports.path=$(REPORT_DIR)/compatibility/$(THERMOSTAT_OTHER_VERSION) \
+	-Dlogs.dir=$(LOGS_DIR)/compatibility/$(THERMOSTAT_OTHER_VERSION)/ \
+	-Dreports.dir=$(REPORT_DIR)/compatibility/$(THERMOSTAT_OTHER_VERSION) \
 	org.thermostat.qa2.reporter.Reporter
 
 javadoc:
--- a/src/org/thermostat/qa2/framework/TestRunner.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/framework/TestRunner.java	Fri Jul 10 14:21:09 2015 +0200
@@ -146,7 +146,7 @@
                         ++passedCount;
                         break;
                     case FAILED:
-                        System.out.println("FAILED: " + testName + ": FAILED null");
+                        System.out.println("FAILED: " + testName);
                         if (t != null) {
                             t.printStackTrace(System.out);
                         }
--- a/src/org/thermostat/qa2/framework/ThermostatQAConfig.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/framework/ThermostatQAConfig.java	Fri Jul 10 14:21:09 2015 +0200
@@ -44,7 +44,7 @@
     public static String tomcatHome;
     public static int mongoPort = 27518;
     public static int agentPort = 12000;
-    public static int webStoragePort = 8080;
+    public static int webStoragePort;
     public static String gnomeKeyringConfigDir;
     public static String backupDir;
     public static String logsDir;
@@ -63,7 +63,7 @@
     public static String thermostatHome;
     public static String thermostatUserHome;
     public static String thermostatVersion;
-    public static String thermostatWebAppDir;
+    public static boolean thermostatPackaged;
 
     //////////////////////
     // other thermostat //
@@ -76,20 +76,26 @@
     static {
         tomcatHome = System.getProperty("tomcat.home");
 
-        thermostatHome = System.getProperty("thermostat.home");
         thermostatUserHome = System.getProperty("thermostat.user.home");
         thermostatVersion = System.getProperty("thermostat.version");
-        thermostatWebAppDir = System.getProperty("thermostat.webapp.path");
+        thermostatHome = System.getProperty("thermostat.home");
 
-        thermostatOtherHome = System.getProperty("thermostat.other.home");
-        thermostatOtherVersion = System.getProperty("thermostat.other.version");
-        thermostatOtherWebAppDir = System.getProperty("thermostat.other.webapp.path");
+        String webPortVal = System.getProperty("thermostat.webstorage.port");
+        if (webPortVal != null) {
+            webStoragePort = Integer.parseInt(webPortVal);
+        }
 
-        gnomeKeyringConfigDir = System.getProperty("gnome-keyring.config.path");
-        backupDir = System.getProperty("backup.path");
+        thermostatOtherVersion = System.getProperty("thermostat.other.version");
+        thermostatOtherHome = System.getProperty("thermostat.other.home");
+
+        gnomeKeyringConfigDir = System.getProperty("gnome-keyring.config.dir");
+        backupDir = System.getProperty("backup.dir");
 
-        logsDir = System.getProperty("logs.path");
-        reportDir = System.getProperty("reports.path");
+        logsDir = System.getProperty("logs.dir");
+        reportDir = System.getProperty("reports.dir");
+
+        String packaged = System.getProperty("thermostat.packaged");
+        thermostatPackaged = packaged != null && packaged.toLowerCase().equals("true");
     }
 
     static String getPatternsDir() {
@@ -123,16 +129,7 @@
     }
 
     public static String getWebAppPath(String target) {
-        String dir = getTargetAsBoolean(target) ? thermostatWebAppDir : thermostatOtherWebAppDir;
-        File dirFile = new File(dir);
-        File[] files = dirFile.listFiles();
-        for (File f : files) {
-            String name = f.getName();
-            if (name.toLowerCase().endsWith(".war")) {
-                return dir + File.separator + name.substring(0, name.length() - 4);
-            }
-        }
-        throw new IllegalArgumentException("web app not found");
+        return getThermostatHome(target) + File.separator + "webapp";
     }
 
     public static String getThermostatHome(String target) {
@@ -156,13 +153,29 @@
     }
 
     public static String getThermostatExecutablePath(String target) {
-        return getThermostatHome(target) + File.separator + "bin" + File.separator + "thermostat";
+        return getThermostatBinDir(target) + File.separator + "thermostat";
+    }
+
+    public static String getThermostatBinDir(String target) {
+        return getThermostatHome(target) + File.separator + "bin";
+    }
+
+    public static String getThermostatEtcDir(String target) {
+        return getThermostatHome(target) + File.separator + "etc";
     }
 
     public static String getThermostatOutputTextsDir() {
         return "." + File.separator + "outputtexts" + File.separator + thermostatVersion;
     }
 
+    public static boolean isThermostatPackaged(String target) {
+        return getTargetAsBoolean(target) ? thermostatPackaged : false;
+    }
+
+    public static String getBackupDir() {
+        return backupDir;
+    }
+
     public static boolean isCompatibilityTesting() {
         return thermostatOtherVersion != null;
     }
--- a/src/org/thermostat/qa2/framework/services/BackupService.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/framework/services/BackupService.java	Fri Jul 10 14:21:09 2015 +0200
@@ -46,6 +46,7 @@
     String[] files;
     ArrayList<String> backupFiles = new ArrayList();
     String backupDir;
+    boolean asRoot = false;
 
     public BackupService(String file) {
         this(new String[]{file});
@@ -64,6 +65,10 @@
     public String getServiceName() throws Exception {
         return "Backup service: " + Arrays.toString(files);
     }
+    
+    public void setRunAsRoot(boolean asRoot){
+        this.asRoot = asRoot;
+    }
 
     @Override
     public void startServiceImpl() throws Exception {
@@ -71,7 +76,11 @@
         for (String file : files) {
             if (new File(file).exists()) {
                 String backupPath = FileUtilities.getUniqueFile(backupDir + File.separator + FileUtilities.getFileName(file));
-                ProcessUtilities.run("cp", "-arT", "--", file, backupPath);
+                if (asRoot) {
+                    ProcessUtilities.run("sudo", "-n", "cp", "-arT", "--", file, backupPath);
+                } else {
+                    ProcessUtilities.run("cp", "-arT", "--", file, backupPath);
+                }
                 backupFiles.add(backupPath);
             }
         }
@@ -80,8 +89,13 @@
     @Override
     public void stopServiceImpl() throws Exception {
         for (int i = 0; i < backupFiles.size(); ++i) {
-            ProcessUtilities.run("rm", "-rf", "--", files[i]);
-            ProcessUtilities.run("mv", "--", backupFiles.get(i), files[i]);
+            if (asRoot) {
+                ProcessUtilities.run("sudo", "-n", "rm", "-rf", "--", files[i]);
+                ProcessUtilities.run("sudo", "-n", "mv", "--", backupFiles.get(i), files[i]);
+            } else {
+                ProcessUtilities.run("rm", "-rf", "--", files[i]);
+                ProcessUtilities.run("mv", "--", backupFiles.get(i), files[i]);
+            }
         }
         setRunning(false);
     }
--- a/src/org/thermostat/qa2/framework/services/ThermostatAgent.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/framework/services/ThermostatAgent.java	Fri Jul 10 14:21:09 2015 +0200
@@ -30,7 +30,6 @@
  */
 package org.thermostat.qa2.framework.services;
 
-import java.io.File;
 import org.thermostat.qa2.framework.ThermostatQAConfig;
 import org.thermostat.qa2.framework.utils.CommonUtilities;
 
@@ -45,11 +44,11 @@
     }
 
     public ThermostatAgent(String targetThermostat) {
-        this(ThermostatQAConfig.getThermostatHome(targetThermostat), ThermostatQAConfig.getThermostatUserHome(targetThermostat));
+        this(ThermostatQAConfig.getThermostatExecutablePath(targetThermostat), ThermostatQAConfig.getThermostatUserHome(targetThermostat));
     }
 
-    public ThermostatAgent(String thermostatHome, String thermostatUserHome) {
-        super(thermostatHome + File.separator + "bin" + File.separator + "thermostat", "agent");
+    public ThermostatAgent(String thermostatExecutable, String thermostatUserHome) {
+        super(thermostatExecutable, "agent");
         addEnvVariable("USER_THERMOSTAT_HOME", thermostatUserHome);
     }
 
--- a/src/org/thermostat/qa2/framework/services/ThermostatGui.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/framework/services/ThermostatGui.java	Fri Jul 10 14:21:09 2015 +0200
@@ -30,7 +30,6 @@
  */
 package org.thermostat.qa2.framework.services;
 
-import java.io.File;
 import org.thermostat.qa2.framework.NativeProcess;
 import org.thermostat.qa2.framework.ThermostatQAConfig;
 import org.thermostat.qa2.framework.utils.CommonUtilities;
@@ -46,11 +45,11 @@
     }
 
     public ThermostatGui(String targetThermostat) {
-        this(ThermostatQAConfig.getThermostatHome(targetThermostat), ThermostatQAConfig.getThermostatUserHome(targetThermostat));
+        this(ThermostatQAConfig.getThermostatExecutablePath(targetThermostat), ThermostatQAConfig.getThermostatUserHome(targetThermostat));
     }
 
-    public ThermostatGui(String thermostatHome, String thermostatUserHome) {
-        super(thermostatHome + File.separator + "bin" + File.separator + "thermostat", "gui", "-J-Dawt.useSystemAAFontSettings=false", "-J-Dswing.aatext=false");
+    public ThermostatGui(String thermostatExecutable, String thermostatUserHome) {
+        super(thermostatExecutable, "gui", "-J-Dawt.useSystemAAFontSettings=false", "-J-Dswing.aatext=false");
         addEnvVariable("USER_THERMOSTAT_HOME", thermostatUserHome);
     }
 
--- a/src/org/thermostat/qa2/framework/services/ThermostatService.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/framework/services/ThermostatService.java	Fri Jul 10 14:21:09 2015 +0200
@@ -30,7 +30,6 @@
  */
 package org.thermostat.qa2.framework.services;
 
-import java.io.File;
 import org.thermostat.qa2.framework.ThermostatQAConfig;
 
 /**
@@ -44,11 +43,11 @@
     }
 
     public ThermostatService(String targetThermostat) {
-        this(ThermostatQAConfig.getThermostatHome(targetThermostat), ThermostatQAConfig.getThermostatUserHome(targetThermostat));
+        this(ThermostatQAConfig.getThermostatExecutablePath(targetThermostat), ThermostatQAConfig.getThermostatUserHome(targetThermostat));
     }
 
-    public ThermostatService(String thermostatHome, String thermostatUserHome) {
-        super(thermostatHome + File.separator + "bin" + File.separator + "thermostat", "service");
+    public ThermostatService(String thermostatExecutable, String thermostatUserHome) {
+        super(thermostatExecutable, "service");
         addEnvVariable("USER_THERMOSTAT_HOME", thermostatUserHome);
     }
 
--- a/src/org/thermostat/qa2/framework/services/ThermostatStorage.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/framework/services/ThermostatStorage.java	Fri Jul 10 14:21:09 2015 +0200
@@ -30,7 +30,6 @@
  */
 package org.thermostat.qa2.framework.services;
 
-import java.io.File;
 import java.io.IOException;
 import java.util.List;
 import org.thermostat.qa2.framework.NativeProcess;
@@ -43,7 +42,7 @@
  */
 public class ThermostatStorage extends AbstractService {
 
-    public String thermostatHome;
+    public String thermostatExecutable;
     public String thermostatUserHome;
 
     public ThermostatStorage() {
@@ -51,11 +50,11 @@
     }
 
     public ThermostatStorage(String targetThermostat) {
-        this(ThermostatQAConfig.getThermostatHome(targetThermostat), ThermostatQAConfig.getThermostatUserHome(targetThermostat));
+        this(ThermostatQAConfig.getThermostatExecutablePath(targetThermostat), ThermostatQAConfig.getThermostatUserHome(targetThermostat));
     }
 
-    public ThermostatStorage(String thermostatHome, String thermostatUserHome) {
-        this.thermostatHome = thermostatHome;
+    public ThermostatStorage(String thermostatExecutable, String thermostatUserHome) {
+        this.thermostatExecutable = thermostatExecutable;
         this.thermostatUserHome = thermostatUserHome;
     }
 
@@ -70,7 +69,7 @@
     @Override
     public void startServiceImpl() throws Exception {
         setRunning(true);
-        startProcess = new NativeProcess(thermostatHome + File.separator + "bin" + File.separator + "thermostat", "storage", "--start");
+        startProcess = new NativeProcess(thermostatExecutable, "storage", "--start");
         startProcess.setLabel(getServiceName());
         startProcess.setEnvironmentVariable("USER_THERMOSTAT_HOME", thermostatUserHome);
         //if (startStdoutBuffering) {
@@ -89,7 +88,7 @@
     @Override
     public void stopServiceImpl() throws Exception {
         setRunning(false);
-        stopProcess = new NativeProcess(thermostatHome + File.separator + "bin" + File.separator + "thermostat", "storage", "--stop");
+        stopProcess = new NativeProcess(thermostatExecutable, "storage", "--stop");
         stopProcess.setLabel(getServiceName());
         stopProcess.setEnvironmentVariable("USER_THERMOSTAT_HOME", thermostatUserHome);
         if (stopStdoutBuffering) {
--- a/src/org/thermostat/qa2/framework/services/Tomcat.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/framework/services/Tomcat.java	Fri Jul 10 14:21:09 2015 +0200
@@ -41,19 +41,23 @@
 public class Tomcat extends AbstractService {
 
     String tomcatHome;
-    String thermostatHome;
+    String thermostatEtcDir;
+    boolean packaged = false;
 
     public Tomcat() {
         this("tested");
     }
 
     public Tomcat(String targetThermostat) {
-        this(ThermostatQAConfig.tomcatHome, ThermostatQAConfig.getThermostatHome(targetThermostat));
+        this(ThermostatQAConfig.tomcatHome, ThermostatQAConfig.getThermostatEtcDir(targetThermostat));
+        if (targetThermostat.equals("tested") && ThermostatQAConfig.thermostatPackaged) {
+            packaged = true;
+        }
     }
 
-    public Tomcat(String tomcatHome, String thermostatHome) {
+    public Tomcat(String tomcatHome, String thermostatEtcDir) {
         this.tomcatHome = tomcatHome;
-        this.thermostatHome = thermostatHome;
+        this.thermostatEtcDir = thermostatEtcDir;
     }
 
     @Override
@@ -68,11 +72,16 @@
     @Override
     public void startServiceImpl() throws Exception {
         setRunning(true);
-        NativeProcess process = new org.thermostat.qa2.framework.NativeProcess(tomcatHome + File.separator + "bin" + File.separator + "startup.sh");
+        NativeProcess process;
+        if (packaged) {
+            process = new org.thermostat.qa2.framework.NativeProcess("sudo", "-n", "systemctl", "start", "tomcat@thermostat");
+        } else {
+            process = new org.thermostat.qa2.framework.NativeProcess(tomcatHome + File.separator + "bin" + File.separator + "startup.sh");
+            if (thermostatEtcDir != null) {
+                process.setEnvironmentVariable("JAVA_OPTS", "-Djava.security.auth.login.config=" + thermostatEtcDir + File.separator + "thermostat_jaas.conf");
+            }
+        }
         process.setLabel(getServiceName());
-        if (thermostatHome != null) {
-            process.setEnvironmentVariable("JAVA_OPTS", "-Djava.security.auth.login.config=" + thermostatHome + File.separator + "etc" + File.separator + "thermostat_jaas.conf");
-        }
         process.start();
         process.waitFor();
         waitForListeningPort(webPort, timeout);
@@ -82,7 +91,12 @@
     @Override
     public void stopServiceImpl() throws Exception {
         setRunning(false);
-        NativeProcess process = new org.thermostat.qa2.framework.NativeProcess(tomcatHome + File.separator + "bin" + File.separator + "shutdown.sh");
+        NativeProcess process;
+        if (packaged) {
+            process = new org.thermostat.qa2.framework.NativeProcess("sudo", "-n", "systemctl", "stop", "tomcat@thermostat");
+        } else {
+            process = new org.thermostat.qa2.framework.NativeProcess(tomcatHome + File.separator + "bin" + File.separator + "shutdown.sh");
+        }
         process.setLabel(getServiceName());
         process.start();
         process.waitFor();
--- a/src/org/thermostat/qa2/framework/utils/ThermostatUtilities.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/framework/utils/ThermostatUtilities.java	Fri Jul 10 14:21:09 2015 +0200
@@ -52,7 +52,6 @@
     /* 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 {
-        String thermostatHome = ThermostatQAConfig.getThermostatHome(setupTarget);
         String thermostatUserHome = ThermostatQAConfig.getThermostatUserHome(setupTarget);
         if (new File(thermostatUserHome).exists()) {
             if (backupUserHome) {
@@ -61,15 +60,15 @@
             }
             ProcessUtilities.run("rm", "-rf", "--", thermostatUserHome);
         }
-        runThermostatSetup(thermostatHome, thermostatUserHome);
+        runThermostatSetup(ThermostatQAConfig.getThermostatBinDir(setupTarget), thermostatUserHome);
     }
 
-    public static void runThermostatSetup(String thermostatHome, String thermostatUserHome) throws Exception {
+    public static void runThermostatSetup(String executableDir, String thermostatUserHome) throws Exception {
         NativeProcess process;
         CommonUtilities.printHeading("Running Thermostat setup ...");
-        String setupPath1 = thermostatHome + File.separator + "bin" + File.separator + "thermostat-devsetup";
-        String setupPath2 = thermostatHome + File.separator + "bin" + File.separator + "thermostat-setup";
-        String setupPath3 = thermostatHome + File.separator + "bin" + File.separator + "thermostat-setup-user-home";
+        String setupPath1 = executableDir + File.separator + "thermostat-devsetup";
+        String setupPath2 = executableDir + File.separator + "thermostat-setup";
+        String setupPath3 = executableDir + File.separator + "thermostat-setup-user-home";
         if (new File(setupPath1).exists()) {
             process = new NativeProcess(setupPath1);
         } else if (new File(setupPath2).exists()) {
@@ -78,7 +77,7 @@
         } else if (new File(setupPath3).exists()) {
             process = new NativeProcess(setupPath3);
         } else {
-            throw new Exception("script to setup thermostat cannot be found in: " + thermostatHome + File.separator + "bin");
+            throw new Exception("script to setup thermostat cannot be found in: " + executableDir);
         }
         process.setLabel("Thermostat setup");
         process.setEnvironmentVariable("USER_THERMOSTAT_HOME", thermostatUserHome);
@@ -90,15 +89,16 @@
      it does not modify existing storage (database),
      it can also start backup services if reqested */
     public static void setupStorage(String setupTarget, boolean web, boolean badAgentLogin, boolean badClientLogin, boolean agentSaveOnExit, boolean backupThermostatConfig, boolean backupUserHome) throws Exception {
-        if (web) {
+        boolean packedThermostat = ThermostatQAConfig.isThermostatPackaged(setupTarget);
+        if (web && !packedThermostat) {
             deployThermostatWebApp(setupTarget);
-
             String tomcatHome = ThermostatQAConfig.getTomcatHome();
             CommonUtilities.printHeading("Cleaning up tomcat logs");
             ProcessUtilities.shellRun("rm -rf -- \"" + tomcatHome + File.separator + "logs" + File.separator + "\"" + "*");
         }
         if (backupThermostatConfig) {
-            BackupService backupService = new BackupService(ThermostatQAConfig.getThermostatHome(setupTarget) + File.separator + "etc");
+            BackupService backupService = new BackupService(ThermostatQAConfig.getThermostatEtcDir(setupTarget));
+            backupService.setRunAsRoot(packedThermostat);
             backupService.start();
         }
         if (backupUserHome) {
@@ -143,13 +143,27 @@
         CommonUtilities.printHeading("Copying thermostat config files ...");
         webStorage = web;
         String thermostatUserConfigDir = ThermostatQAConfig.getThermostatUserHome(setupTarget) + File.separator + "etc";
-        String thermostatConfigDir = ThermostatQAConfig.getThermostatHome(setupTarget) + File.separator + "etc";
+        String thermostatConfigDir = ThermostatQAConfig.getThermostatEtcDir(setupTarget);
         FileUtilities.printLineListToFile(thermostatUserConfigDir + File.separator + "agent.auth", getAgentAuth(badAgentLogin));
         FileUtilities.printLineListToFile(thermostatUserConfigDir + File.separator + "agent.properties", getAgentProperties(web, saveOnExit));
         FileUtilities.printLineListToFile(thermostatUserConfigDir + File.separator + "client.properties", getClientProperties(web, badClientLogin));
 
-        FileUtilities.printLineListToFile(thermostatConfigDir + File.separator + "thermostat-users.properties", getThermostatUsers());
-        FileUtilities.printLineListToFile(thermostatConfigDir + File.separator + "thermostat-roles.properties", getThermostatRoles());
+        boolean needsRoot = ThermostatQAConfig.isThermostatPackaged(setupTarget);
+        String usersFile = thermostatConfigDir + File.separator + "thermostat-users.properties";
+        String rolesFile = thermostatConfigDir + File.separator + "thermostat-roles.properties";
+        if (needsRoot) {
+            String usersTmpFile = FileUtilities.getUniqueFile(ThermostatQAConfig.getBackupDir() + File.separator + "thermostat-users.properties");
+            String rolesTmpFile = FileUtilities.getUniqueFile(ThermostatQAConfig.getBackupDir() + File.separator + "thermostat-roles.properties");
+
+            FileUtilities.printLineListToFile(usersTmpFile, getThermostatUsers());
+            FileUtilities.printLineListToFile(rolesTmpFile, getThermostatRoles());
+
+            ProcessUtilities.run("sudo", "-n", "mv", "-f", usersTmpFile, usersFile);
+            ProcessUtilities.run("sudo", "-n", "mv", "-f", rolesTmpFile, rolesFile);
+        } else {
+            FileUtilities.printLineListToFile(usersFile, getThermostatUsers());
+            FileUtilities.printLineListToFile(rolesFile, getThermostatRoles());
+        }
     }
 
     public static final String storageTemplatesDir = "templates" + File.separator + "storage-config";
@@ -245,11 +259,11 @@
         if (new File(deployedAppPath).exists()) {
             ProcessUtilities.shellRun("rm -rf " + deployedAppPath);
         }
-        String path = ThermostatQAConfig.getWebAppPath(setupTarget);
-        String name = new File(path).getName();
+        String webAppPath = ThermostatQAConfig.getWebAppPath(setupTarget);
+        String name = new File(webAppPath).getName();
 
-        ProcessUtilities.shellRun("cp -r " + path + " " + deployDir);
-        ProcessUtilities.shellRun("mv " + deployDir + File.separator + new File(path).getName() + " " + deployedAppPath);
+        ProcessUtilities.shellRun("cp -r " + webAppPath + " " + deployDir);
+        ProcessUtilities.shellRun("mv " + deployDir + File.separator + name + " " + deployedAppPath);
     }
 
     /* Starts thermostat shell executes requested command in it,
--- a/src/org/thermostat/qa2/reporter/Generator.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/reporter/Generator.java	Fri Jul 10 14:21:09 2015 +0200
@@ -47,7 +47,7 @@
  * @author Zdeněk Žamberský
  */
 public class Generator {
-    
+
     public static final String testsNamePattern = "${TESTS_NAME}";
 
     public static final String resultsUrlPattern = "${RESULTS_URL}";
@@ -177,13 +177,15 @@
                 }
                 output.add("]]></pre>");
             }
-            output.add("<h5>log:</h5>");
             List<String> log = method.getLog();
-            output.add("<pre class='stack-trace'><![CDATA[" + ((log != null && log.size() > 0) ? log.get(0) : ""));
-            for (int i = 1; i < log.size(); ++i) {
-                output.add(log.get(i));
+            if (log != null) {
+                output.add("<h5>log:</h5>");
+                output.add("<pre class='stack-trace'><![CDATA[" + ((log != null && log.size() > 0) ? log.get(0) : ""));
+                for (int i = 1; i < log.size(); ++i) {
+                    output.add(log.get(i));
+                }
+                output.add("]]></pre>");
             }
-            output.add("]]></pre>");
             output.add("</div>");
             output.add("</td></tr>");
         }
--- a/src/org/thermostat/qa2/reporter/LogParser.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/reporter/LogParser.java	Fri Jul 10 14:21:09 2015 +0200
@@ -86,7 +86,7 @@
                 }
 
                 TestMethodResult testMethod = new TestMethodResult(methodName, result);
-                if (result == FAILED || beforeMethod) {
+                if (result == FAILED || result == ERROR || beforeMethod) {
                     String reason = getReason(methodLine);
                     List<String> stackTrace = new ArrayList();
                     for (;;) {
--- a/src/org/thermostat/qa2/tests/CliClientDBModificationsSmokeTest.java	Fri May 22 01:23:01 2015 +0200
+++ b/src/org/thermostat/qa2/tests/CliClientDBModificationsSmokeTest.java	Fri Jul 10 14:21:09 2015 +0200
@@ -30,7 +30,6 @@
  */
 package org.thermostat.qa2.tests;
 
-import java.io.File;
 import java.util.List;
 import static org.thermostat.qa2.framework.Assert.*;
 import org.thermostat.qa2.framework.NativeProcess;
@@ -65,7 +64,7 @@
         mongo.writeln("quit()");
         mongo.waitFor();
 
-        String[] thermostatCmds = {ThermostatQAConfig.thermostatHome + File.separator + "bin" + File.separator + "thermostat", "shell"};
+        String[] thermostatCmds = {ThermostatQAConfig.getThermostatExecutablePath(), "shell"};
         Shell thermostat = new Shell(thermostatCmds);
         thermostat.setEnvironmentVariable("USER_THERMOSTAT_HOME", ThermostatQAConfig.getThermostatUserHome());
         thermostat.setStdOutMode(NativeProcess.MODE_LOG_AND_BUFFER);