199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest lldb logging. This test just makes sure logging doesn't crash, and produces some output. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprecht 699451b44SJordan Rupprecht 799451b44SJordan Rupprechtimport os 899451b44SJordan Rupprechtimport lldb 999451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 1099451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1199451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1299451b44SJordan Rupprecht 1399451b44SJordan Rupprecht 1499451b44SJordan Rupprechtclass LogTestCase(TestBase): 1599451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 1699451b44SJordan Rupprecht 1799451b44SJordan Rupprecht def setUp(self): 1899451b44SJordan Rupprecht super(LogTestCase, self).setUp() 1999451b44SJordan Rupprecht self.log_file = self.getBuildArtifact("log-file.txt") 2099451b44SJordan Rupprecht 2164c87a94SJonas Devlieghere 2299451b44SJordan Rupprecht def test_file_writing(self): 2399451b44SJordan Rupprecht self.build() 2499451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 2599451b44SJordan Rupprecht self.expect("file " + exe, 2699451b44SJordan Rupprecht patterns=["Current executable set to .*a.out"]) 2799451b44SJordan Rupprecht 2899451b44SJordan Rupprecht if (os.path.exists(self.log_file)): 2999451b44SJordan Rupprecht os.remove(self.log_file) 3099451b44SJordan Rupprecht 3199451b44SJordan Rupprecht # By default, Debugger::EnableLog() will set log options to 3299451b44SJordan Rupprecht # PREPEND_THREAD_NAME + OPTION_THREADSAFE. We don't want the 3399451b44SJordan Rupprecht # threadnames here, so we enable just threadsafe (-t). 34*70841b97SJonas Devlieghere self.runCmd("log enable -f '%s' lldb commands" % (self.log_file)) 3599451b44SJordan Rupprecht 3699451b44SJordan Rupprecht self.runCmd("command alias bp breakpoint") 3799451b44SJordan Rupprecht 3899451b44SJordan Rupprecht self.runCmd("bp set -n main") 3999451b44SJordan Rupprecht 4099451b44SJordan Rupprecht self.runCmd("bp l") 4199451b44SJordan Rupprecht 4299451b44SJordan Rupprecht self.runCmd("log disable lldb") 4399451b44SJordan Rupprecht 4499451b44SJordan Rupprecht self.assertTrue(os.path.isfile(self.log_file)) 4599451b44SJordan Rupprecht 4664c87a94SJonas Devlieghere with open(self.log_file, 'r') as f: 4764c87a94SJonas Devlieghere log_lines = f.read() 4899451b44SJordan Rupprecht os.remove(self.log_file) 4999451b44SJordan Rupprecht 5099451b44SJordan Rupprecht self.assertGreater( 5199451b44SJordan Rupprecht len(log_lines), 5299451b44SJordan Rupprecht 0, 5399451b44SJordan Rupprecht "Something was written to the log file.") 5499451b44SJordan Rupprecht 5599451b44SJordan Rupprecht # Check that lldb truncates its log files 5699451b44SJordan Rupprecht def test_log_truncate(self): 5799451b44SJordan Rupprecht # put something in our log file 5899451b44SJordan Rupprecht with open(self.log_file, "w") as f: 5999451b44SJordan Rupprecht for i in range(1, 1000): 6099451b44SJordan Rupprecht f.write("bacon\n") 6199451b44SJordan Rupprecht 62*70841b97SJonas Devlieghere self.runCmd("log enable -f '%s' lldb commands" % self.log_file) 6399451b44SJordan Rupprecht self.runCmd("help log") 6499451b44SJordan Rupprecht self.runCmd("log disable lldb") 6599451b44SJordan Rupprecht 6699451b44SJordan Rupprecht self.assertTrue(os.path.isfile(self.log_file)) 6799451b44SJordan Rupprecht with open(self.log_file, "r") as f: 6899451b44SJordan Rupprecht contents = f.read() 6999451b44SJordan Rupprecht 7099451b44SJordan Rupprecht # check that it got removed 7199451b44SJordan Rupprecht self.assertEquals(contents.find("bacon"), -1) 7299451b44SJordan Rupprecht 7399451b44SJordan Rupprecht # Check that lldb can append to a log file 7499451b44SJordan Rupprecht def test_log_append(self): 7599451b44SJordan Rupprecht # put something in our log file 7699451b44SJordan Rupprecht with open(self.log_file, "w") as f: 7799451b44SJordan Rupprecht f.write("bacon\n") 7899451b44SJordan Rupprecht 79*70841b97SJonas Devlieghere self.runCmd( "log enable -a -f '%s' lldb commands" % self.log_file) 8099451b44SJordan Rupprecht self.runCmd("help log") 8199451b44SJordan Rupprecht self.runCmd("log disable lldb") 8299451b44SJordan Rupprecht 8399451b44SJordan Rupprecht self.assertTrue(os.path.isfile(self.log_file)) 8464c87a94SJonas Devlieghere with open(self.log_file, 'r') as f: 8599451b44SJordan Rupprecht contents = f.read() 8699451b44SJordan Rupprecht 8799451b44SJordan Rupprecht # check that it is still there 8899451b44SJordan Rupprecht self.assertEquals(contents.find("bacon"), 0) 8999451b44SJordan Rupprecht 9099451b44SJordan Rupprecht # Enable all log options and check that nothing crashes. 9199451b44SJordan Rupprecht @skipIfWindows 9299451b44SJordan Rupprecht def test_all_log_options(self): 9399451b44SJordan Rupprecht if (os.path.exists(self.log_file)): 9499451b44SJordan Rupprecht os.remove(self.log_file) 9599451b44SJordan Rupprecht 96*70841b97SJonas Devlieghere self.runCmd("log enable -v -s -T -p -n -S -F -f '%s' lldb commands" % self.log_file) 9799451b44SJordan Rupprecht self.runCmd("help log") 9899451b44SJordan Rupprecht self.runCmd("log disable lldb") 9999451b44SJordan Rupprecht 10099451b44SJordan Rupprecht self.assertTrue(os.path.isfile(self.log_file)) 101