2012-03-05 03:20:13 +01:00
# test_run.py -- Tests for selftest.run
# Copyright (C) 2012 Jelmer Vernooij <jelmer@samba.org>
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; version 3
# of the License or (at your option) any later version of
# the License.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
# MA 02110-1301, USA.
""" Tests for selftest.run. """
2012-03-11 20:58:00 +01:00
import datetime
2012-03-05 03:39:57 +01:00
import os
2012-03-11 20:58:00 +01:00
import subunit
import tempfile
2012-03-05 03:39:57 +01:00
2012-03-05 03:27:40 +01:00
from selftest . run import (
expand_command_list ,
expand_environment_strings ,
2012-03-05 03:39:57 +01:00
expand_command_run ,
2012-03-05 03:49:50 +01:00
exported_envvars_str ,
2012-03-11 20:58:00 +01:00
now ,
run_testsuite_command ,
2012-03-05 03:27:40 +01:00
)
2012-03-05 03:20:13 +01:00
from selftest . tests import TestCase
class ExpandEnvironmentStringsTests ( TestCase ) :
def test_no_vars ( self ) :
self . assertEquals ( " foo bar " , expand_environment_strings ( " foo bar " , { } ) )
def test_simple ( self ) :
self . assertEquals ( " foo bar " ,
expand_environment_strings ( " foo $BLA " , { " BLA " : " bar " } ) )
def test_unknown ( self ) :
self . assertEquals ( " foo $BLA " ,
expand_environment_strings ( " foo $BLA " , { } ) )
2012-03-05 03:27:40 +01:00
class ExpandCommandListTests ( TestCase ) :
def test_no_list ( self ) :
self . assertIs ( None , expand_command_list ( " test bla " ) )
def test_list ( self ) :
self . assertEquals ( " test --list " , expand_command_list ( " test $LISTOPT " ) )
2012-03-05 03:39:57 +01:00
class ExpandCommandRunTests ( TestCase ) :
def test_idlist ( self ) :
self . assertEquals ( ( " test foo bar " , None ) ,
expand_command_run ( " test " , False , True , subtests = [ " foo " , " bar " ] ) )
def test_idlist_all ( self ) :
self . assertEquals ( ( " test " , None ) ,
expand_command_run ( " test " , False , True ) )
def test_loadlist ( self ) :
( cmd , tmpf ) = expand_command_run ( " test $LOADLIST " , True , False ,
subtests = [ " foo " , " bar " ] )
self . addCleanup ( os . remove , tmpf )
f = open ( tmpf , ' r ' )
try :
self . assertEquals ( f . read ( ) , " foo \n bar \n " )
finally :
f . close ( )
self . assertEquals ( " test --load-list= %s " % tmpf , cmd )
def test_loadlist_all ( self ) :
self . assertEquals ( ( " test " , None ) ,
expand_command_run ( " test $LOADLIST " , True , False ) )
2012-03-05 03:49:50 +01:00
class ExportedEnvvarsStrTests ( TestCase ) :
def test_no_vars ( self ) :
self . assertEquals ( " " , exported_envvars_str ( { } , [ " foo " , " bar " ] ) )
def test_vars ( self ) :
self . assertEquals ( " foo=1 \n " ,
exported_envvars_str ( { " foo " : " 1 " } , [ " foo " , " bar " ] ) )
def test_vars_unknown ( self ) :
self . assertEquals ( " foo=1 \n " ,
exported_envvars_str ( { " foo " : " 1 " , " bla " : " 2 " } , [ " foo " , " bar " ] ) )
2012-03-11 20:58:00 +01:00
class NowTests ( TestCase ) :
def test_basic ( self ) :
self . assertIsInstance ( now ( ) , datetime . datetime )
self . assertIsNot ( now ( ) . tzinfo , None )
class MockSubunitOps ( object ) :
def __init__ ( self ) :
self . calls = [ ]
def start_testsuite ( self , name ) :
self . calls . append ( ( " start-testsuite " , name ) )
def progress ( self , count , whence ) :
self . calls . append ( ( " progress " , count , whence ) )
def time ( self , t ) :
self . calls . append ( ( " time " , ) )
def end_testsuite ( self , name , result , details = None ) :
self . calls . append ( ( " end-testsuite " , name , result , details ) )
class RunTestsuiteCommandTests ( TestCase ) :
def test_success_no_env ( self ) :
outf = tempfile . TemporaryFile ( )
subunit_ops = MockSubunitOps ( )
exit_code = run_testsuite_command ( " thetestsuitename " , " echo doing something " , subunit_ops , outf = outf )
self . assertEquals ( [
( " start-testsuite " , " thetestsuitename " ) ,
( " progress " , None , subunit . PROGRESS_PUSH ) ,
( " time " , ) ,
( " time " , ) ,
( " progress " , None , subunit . PROGRESS_POP ) ,
( " end-testsuite " , " thetestsuitename " , " success " , None ) ,
] , subunit_ops . calls )
self . assertEquals ( 0 , exit_code )
outf . seek ( 0 )
self . assertEquals ( """ \
doing something
command : echo doing something
expanded command : echo doing something
""" , outf.read())
def test_failure ( self ) :
outf = tempfile . TemporaryFile ( )
subunit_ops = MockSubunitOps ( )
exit_code = run_testsuite_command ( " thetestsuitename " , " exit 3 " , subunit_ops , outf = outf )
self . assertEquals ( [
( " start-testsuite " , " thetestsuitename " ) ,
( " progress " , None , subunit . PROGRESS_PUSH ) ,
( " time " , ) ,
( " time " , ) ,
( " progress " , None , subunit . PROGRESS_POP ) ,
( " end-testsuite " , " thetestsuitename " , " failure " , " Exit code was 3 " ) ,
] , subunit_ops . calls )
self . assertEquals ( 3 , exit_code )
outf . seek ( 0 )
self . assertEquals ( """ \
command : exit 3
expanded command : exit 3
""" , outf.read())
def test_error ( self ) :
outf = tempfile . TemporaryFile ( )
subunit_ops = MockSubunitOps ( )
exit_code = run_testsuite_command ( " thetestsuitename " ,
" thisisacommandthatdoesnotexist 2>/dev/null " , subunit_ops , outf = outf )
self . assertEquals ( [
( " start-testsuite " , " thetestsuitename " ) ,
( " progress " , None , subunit . PROGRESS_PUSH ) ,
( " time " , ) ,
( " time " , ) ,
( " progress " , None , subunit . PROGRESS_POP ) ,
( " end-testsuite " , " thetestsuitename " , " failure " , " Exit code was 127 " ) ,
] , subunit_ops . calls )
self . assertEquals ( 127 , exit_code )
outf . seek ( 0 )
self . assertEquals ( """ \
command : thisisacommandthatdoesnotexist 2 > / dev / null
expanded command : thisisacommandthatdoesnotexist 2 > / dev / null
""" , outf.read())