make perftest: for performance testing
[sfrench/samba-autobuild/.git] / selftest / tests / test_testlist.py
index 5f03887b4efc16e4cbd875b1b8a8a812ecddec81..d82b00cefdba7700fc780e98c517477f32e40a32 100644 (file)
 
 """Tests for selftest.testlist."""
 
+import os
+import tempfile
+
+from samba.tests import TestCase
+
 from selftest.testlist import (
+    RestrictedTestManager,
     find_in_list,
+    open_file_or_pipe,
     read_test_regexes,
+    read_testlist,
+    read_testlist_file,
     )
 
 from cStringIO import StringIO
 
-import unittest
-
 
-class FindInListTests(unittest.TestCase):
+class FindInListTests(TestCase):
 
     def test_empty(self):
         self.assertIs(None, find_in_list([], "foo.test"))
@@ -39,7 +46,7 @@ class FindInListTests(unittest.TestCase):
             find_in_list([("foo.*bar", "because")], "foo.bla.bar"))
 
 
-class ReadTestRegexesTests(unittest.TestCase):
+class ReadTestRegexesTests(TestCase):
 
     def test_comment(self):
         f = StringIO("# I am a comment\n # I am also a comment\n")
@@ -53,3 +60,89 @@ class ReadTestRegexesTests(unittest.TestCase):
         f = StringIO(" foo # because\nbar\n")
         self.assertEquals([("foo", "because"), ("bar", None)],
             list(read_test_regexes(f)))
+
+
+class ReadTestlistTests(TestCase):
+
+    def test_read_list(self):
+        inf = StringIO("-- TEST --\nfoo\nbar\nbla\n")
+        outf = StringIO()
+        self.assertEquals([('foo', 'bar', 'bla', None)],
+                list(read_testlist(inf, outf)))
+        self.assertEquals("", outf.getvalue())
+
+    def test_read_list_passes_through(self):
+        inf = StringIO("MORENOISE\n-- TEST --\nfoo\nbar\nbla\nNOISE\n")
+        outf = StringIO()
+        self.assertEquals([('foo', 'bar', 'bla', None)],
+                list(read_testlist(inf, outf)))
+        self.assertEquals("MORENOISE\nNOISE\n", outf.getvalue())
+
+
+
+class RestrictedTestManagerTests(TestCase):
+
+    def test_unused(self):
+        mgr = RestrictedTestManager(["foo.bar"])
+        self.assertEquals(["foo.bar"], list(mgr.iter_unused()))
+
+    def test_run_testsuite(self):
+        mgr = RestrictedTestManager(["foo.bar"])
+        self.assertEquals(None, mgr.should_run_testsuite("foo.bar"))
+
+    def test_run_subtest(self):
+        mgr = RestrictedTestManager(["foo.bar.bla"])
+        self.assertEquals(["bla"], mgr.should_run_testsuite("foo.bar"))
+
+    def test_run_subtest_after_testsuite(self):
+        mgr = RestrictedTestManager(["foo.bar", "foo.bar.bla"])
+        self.assertEquals(None, mgr.should_run_testsuite("foo.bar"))
+
+    def test_run_multiple_subtests(self):
+        mgr = RestrictedTestManager(["foo.bar.blie", "foo.bar.bla"])
+        self.assertEquals(["blie", "bla"], mgr.should_run_testsuite("foo.bar"))
+
+    def test_run_nomatch(self):
+        mgr = RestrictedTestManager(["foo.bar"])
+        self.assertEquals([], mgr.should_run_testsuite("foo.blie.bla"))
+
+
+class OpenFileOrPipeTests(TestCase):
+
+    def test_regular_file(self):
+        (fd, p) = tempfile.mkstemp()
+        self.addCleanup(os.remove, p)
+        f = os.fdopen(fd, 'w')
+        try:
+            f.write('data\nbla\n')
+        finally:
+            f.close()
+        f = open_file_or_pipe(p, 'r')
+        try:
+            self.assertEquals("data\nbla\n", f.read())
+        finally:
+            f.close()
+
+    def test_pipe(self):
+        f = open_file_or_pipe('echo foo|', 'r')
+        try:
+            self.assertEquals("foo\n", f.read())
+        finally:
+            f.close()
+
+
+class ReadTestListFileTests(TestCase):
+
+    def test_regular_file(self):
+        (fd, p) = tempfile.mkstemp()
+        self.addCleanup(os.remove, p)
+        f = os.fdopen(fd, 'w')
+        try:
+            f.write('noise\n-- TEST --\ndata\nenv\ncmd\n')
+        finally:
+            f.close()
+        outf = StringIO()
+        self.assertEquals(
+            [('data', 'env', 'cmd', None)],
+            list(read_testlist_file(p, outf)))
+        self.assertEquals("noise\n", outf.getvalue())