Salome HOME
Improve tests
[tools/sat.git] / test / log / launch_browser.py
index e2c589340f557dde0c1e479ddf7f7e510a246d6d..9a26384a47d14813eb9ebefbd2bc30dfd2539c3b 100644 (file)
@@ -21,15 +21,22 @@ import os
 import sys
 import threading
 import time
+import shutil
+import io
 
 # get execution path
 testdir = os.path.dirname(os.path.realpath(__file__))
 sys.path.append(os.path.join(testdir, '..', '..'))
 sys.path.append(os.path.join(testdir, '..', '_testTools'))
+sys.path.append(os.path.join(testdir, '..', '..','commands'))
 
 from salomeTools import Sat
 from tools import check_proc_existence_and_kill
+from tools import outRedirection
 import HTMLTestRunner
+import src.xmlManager
+
+sleep_time = 3
 
 class TestLog(unittest.TestCase):
     '''Test of log command: launch of browser
@@ -45,7 +52,7 @@ class TestLog(unittest.TestCase):
         cmd_log = threading.Thread(target=sat.log, args=('',))
         cmd_log.start()
 
-        time.sleep(2)
+        time.sleep(sleep_time)
 
         browser = sat.cfg.USER.browser
         pid = check_proc_existence_and_kill(browser + ".*" + "xml")
@@ -76,7 +83,7 @@ class TestLog(unittest.TestCase):
         self.assertEqual(OK, "OK")
 
     def test_option_terminal(self):
-        '''Test the write of xml log when invoking a command
+        '''Test the terminal option without application
         '''
 
         OK = "KO"
@@ -84,13 +91,14 @@ class TestLog(unittest.TestCase):
         # launch the command that will write a log
         sat = Sat()
         
-        # overwrite the raw_input function in order to be able to test
-        new_ask_value = lambda x: 1
-        sys.modules['log'].ask_value = new_ask_value
+        one = u"1"
+        sys.stdin = io.StringIO(one)
+        
         
         try:
             sat.log('-t')
             OK = "OK"
+            sys.stdin = sys.__stdin__
         except:
             pass
         
@@ -98,29 +106,241 @@ class TestLog(unittest.TestCase):
         self.assertEqual(OK, "OK")
 
     def test_option_terminal2(self):
-        '''Test the write of xml log when invoking a command
+        '''Test the terminal option with application
         '''
 
         OK = "KO"
         
         # launch the command that will write a log
         sat = Sat()
-        
-        # overwrite the raw_input function in order to be able to test
-        new_ask_value = lambda x: 1
-        sys.modules['log'].ask_value = new_ask_value
-        
+              
         sat.config('appli-test -v VARS.python')
         
+        one = u"1"
+        sys.stdin = io.StringIO(one)
+        
         try:
-            sat.log('appli-test -t')
+            sat.log('appli-test --last')
             OK = "OK"
+            sys.stdin = sys.__stdin__
         except:
             pass
         
         # pyunit method to compare 2 str
         self.assertEqual(OK, "OK")
 
+    def test_option_terminal3(self):
+        '''Test the terminal option with 0 as input
+        '''
+
+        OK = "KO"
+        
+        # launch the command that will write a log
+        sat = Sat()
+              
+        sat.config('appli-test -v VARS.python')
+        
+        zero = u"0\n1"
+        sys.stdin = io.StringIO(zero)
+        
+        try:
+            sat.log('--terminal')
+            OK = "OK"
+        finally:
+            sys.stdin = sys.__stdin__
+        
+        # pyunit method to compare 2 str
+        self.assertEqual(OK, "OK")
+
+    def test_option_terminal4(self):
+        '''Test the terminal option with input bigger than the number of logs
+        '''
+
+        OK = "KO"
+        
+        # launch the command that will write a log
+        sat = Sat()
+              
+        sat.config('appli-test -v VARS.python')
+        
+        nb_logs = len(os.listdir(sat.cfg.SITE.log.logDir))
+        
+        nb_logs_u = unicode(str(nb_logs) + "\n1")
+        sys.stdin = io.StringIO(nb_logs_u)
+        
+        try:
+            sat.log('--terminal')
+            OK = "OK"
+        finally:
+            sys.stdin = sys.__stdin__
+        
+        # pyunit method to compare 2 str
+        self.assertEqual(OK, "OK")
+
+    def test_option_terminal5(self):
+        '''Test the terminal option with input return
+        '''
+
+        OK = "KO"
+        
+        # launch the command that will write a log
+        sat = Sat()
+              
+        sat.config('appli-test -v VARS.python')
+        
+        ret = unicode("\n0")
+        sys.stdin = io.StringIO(ret)
+        
+        try:
+            sat.log('--terminal')
+            OK = "OK"
+        finally:
+            sys.stdin = sys.__stdin__
+        
+        # pyunit method to compare 2 str
+        self.assertEqual(OK, "OK")
+
+    def test_option_terminal6(self):
+        '''Test the terminal option with input not int
+        '''
+
+        OK = "KO"
+        
+        # launch the command that will write a log
+        sat = Sat()
+              
+        sat.config('appli-test -v VARS.python')
+        
+        ret = unicode("blabla\n0")
+        sys.stdin = io.StringIO(ret)
+        
+        try:
+            sat.log('--terminal')
+            OK = "OK"
+        finally:
+            sys.stdin = sys.__stdin__
+        
+        # pyunit method to compare 2 str
+        self.assertEqual(OK, "OK")
+
+    def test_option_last(self):
+        '''Test the option --last
+        '''
+
+        OK = "KO"
+        
+        # launch the command that will write a log
+        sat = Sat("-oUSER.browser='konqueror'")
+              
+        sat.config('appli-test -v VARS.python')
+        
+        cmd_log = threading.Thread(target=sat.log, args=('appli-test --last',))
+        cmd_log.start()
+        
+        time.sleep(sleep_time)
+
+        browser = sat.cfg.USER.browser
+        pid = check_proc_existence_and_kill(browser + ".*" + "xml")
+        
+        if pid:
+            OK = "OK"
+        
+        # pyunit method to compare 2 str
+        self.assertEqual(OK, "OK")
+
+    def test_option_clean(self):
+        '''Test the option --clean
+        '''
+
+        OK = "KO"
+        
+        # launch the command that will write a log
+        sat = Sat()
+               
+        sat.config('-v VARS.user')
+        
+        nb_logs_t0 = len(os.listdir(sat.cfg.SITE.log.logDir))
+
+        sat.log('--clean 1')
+        
+        nb_logs_t1 = len(os.listdir(sat.cfg.SITE.log.logDir))
+        
+        if nb_logs_t1-nb_logs_t0 == 0:
+            OK = "OK"
+        
+        # pyunit method to compare 2 str
+        self.assertEqual(OK, "OK")
+
+    def test_option_clean2(self):
+        '''Test the option --clean with big number of files to clean
+        '''
+
+        OK = "KO"
+        
+        # launch the command that will write a log
+        sat = Sat()
+               
+        sat.config('-v VARS.user')
+        
+        nb_logs_t0 = len(os.listdir(sat.cfg.SITE.log.logDir))
+        
+        if os.path.exists(sat.cfg.SITE.log.logDir + "_save"):
+            shutil.rmtree(sat.cfg.SITE.log.logDir + "_save")
+        shutil.copytree(sat.cfg.SITE.log.logDir,sat.cfg.SITE.log.logDir + "_save")
+        
+        sat.log('--clean ' + str(nb_logs_t0))
+        
+        nb_logs_t1 = len(os.listdir(sat.cfg.SITE.log.logDir))
+        
+        shutil.rmtree(sat.cfg.SITE.log.logDir)
+        shutil.move(sat.cfg.SITE.log.logDir + "_save", sat.cfg.SITE.log.logDir)
+                
+        if nb_logs_t0-nb_logs_t1 > 10:
+            OK = "OK"
+        
+        # pyunit method to compare 2 str
+        self.assertEqual(OK, "OK")
+
+    def test_option_full(self):
+        '''Test the option --full
+        '''
+
+        OK = "KO"
+
+        sat = Sat("-oUSER.browser='konqueror'")
+        cmd_log = threading.Thread(target=sat.log, args=('--full',))
+        cmd_log.start()
+
+        time.sleep(sleep_time)
+
+        browser = sat.cfg.USER.browser
+        check_proc_existence_and_kill(browser + ".*" + "xml")
+        
+        # Read and check the hat.xml file contains at least one log file corresponding to log
+        hatFilePath = os.path.join(sat.cfg.SITE.log.logDir, "hat.xml")
+        xmlHatFile = src.xmlManager.ReadXmlFile(hatFilePath)
+        for field in xmlHatFile.xmlroot:
+            if field.attrib[b'cmd'] == b'log':
+                OK = "OK"
+                break
+
+        # pyunit method to compare 2 str
+        self.assertEqual(OK, "OK")
+
+    def test_description(self):
+        '''Test the sat -h log
+        '''        
+
+        OK = "KO"
+
+        import log
+        
+        if "Gives access to the logs produced" in log.description():
+            OK = "OK"
+
+        # pyunit method to compare 2 str
+        self.assertEqual(OK, "OK")
+
 # test launch
 if __name__ == '__main__':
     HTMLTestRunner.main()