summaryrefslogtreecommitdiffstats
path: root/bin
diff options
context:
space:
mode:
authorMarcin Juszkiewicz <hrw@openembedded.org>2007-04-05 18:20:42 +0000
committerMarcin Juszkiewicz <hrw@openembedded.org>2007-04-05 18:20:42 +0000
commit328eff19a08bd399c6a833d213862039b4432b05 (patch)
treee20fa9422b90a51da620e168dba7f32764bba5c9 /bin
downloadoetest-328eff19a08bd399c6a833d213862039b4432b05.tar.gz
import of bitbake-qa bittest util which can be used as:
- source availability checker - source mirror populate tool - and few others branch is named 'oetest' because this tool will be renamed to 'oetest' as it is useful only with OE metadata
Diffstat (limited to 'bin')
-rw-r--r--bin/.mtn2git_empty0
-rwxr-xr-xbin/bittest126
-rwxr-xr-xbin/bittest_single138
3 files changed, 264 insertions, 0 deletions
diff --git a/bin/.mtn2git_empty b/bin/.mtn2git_empty
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/bin/.mtn2git_empty
diff --git a/bin/bittest b/bin/bittest
new file mode 100755
index 0000000000..5db993edd1
--- /dev/null
+++ b/bin/bittest
@@ -0,0 +1,126 @@
+#!/usr/bin/env python
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+#
+# Copyright (C) 2005, 2006 Holger Hans Peter Freyther
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# Neither the name Holger Hans Peter Freyther nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+import sys, os, optparse
+
+# append the lib subdir and modules subdir to the system python path
+sys.path.append(os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])), 'lib'))
+sys.path.append(os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])), 'modules'))
+
+
+try:
+ import bb
+ import bb.data
+ import bb.parse
+ from bb import cooker
+except:
+ print "Use PYTHONPATH to point to bitbake/lib"
+ sys.exit(-1)
+
+
+from bittest import *
+
+class BBConfiguration( object ):
+ """
+ Manages build options and configurations for one run
+ """
+ def __init__( self, options ):
+ for key, val in options.__dict__.items():
+ setattr( self, key, val )
+
+def start_testing():
+ """
+ Start with testing:
+ We will parse the options to decide which tests should be executed.
+ Then we will parse the base configuration (bitbake.conf) and afterwards
+ our unit testing configuration.
+ We will go through every bbfile, parse it and for each setup we will call
+ the testing method
+ """
+
+ options, args = handle_options( sys.argv )
+
+ tests = []
+ if len(args) == 0:
+ tests = __all_tests__
+ else:
+ for mode in args:
+ if not mode in __all_tests__ and not mode == "example":
+ bb.note("Test %s does not exist" % mode)
+ else:
+ tests.append(mode)
+
+ if len(tests) == 0:
+ bb.note("No tests to run exiting")
+ sys.exit(0)
+
+ bb.note("Running the following tests: %s" % tests )
+
+ # Parse the default config
+ configuration = BBConfiguration(options)
+ configuration.pkgs_to_build = []
+ configuration.data = bb.data.init()
+ configuration.verbose = False
+ configuration.debug = False
+ configuration.debug_domains = []
+ configuration.file = []
+ configuration.cmd = "fetch"
+
+ bb.msg.set_debug_level(0)
+ cook = bb.cooker.BBCooker(configuration)
+ cook.configuration = configuration
+ cook.parseConfigurationFile( os.path.join( "conf", "bitbake.conf" ) )
+ data = _load_config('bitbake.conf')
+ if data == None:
+ bb.error("Could not parse the bitbake.conf")
+ elif bb.data.getVar('BITBAKETEST_BITBAKE_CONF', data ) == None:
+ bb.error("You are not using the bitbake.conf from bittest please check your BBPATH")
+
+ bb.data.inheritFromOS(data)
+
+ # Parse the test configuration
+ test_config = _load_config('testrun.conf')
+ if test_config == None:
+ bb.error("Could not parse the bittest configuration file")
+ test_options = parse_test_options(test_config)
+
+ # start running the test
+ results = run_tests(data, test_config, test_options, tests, options)
+ generate_results(results, options)
+
+
+
+if __name__ == "__main__":
+ start_testing()
diff --git a/bin/bittest_single b/bin/bittest_single
new file mode 100755
index 0000000000..d7182cc6ae
--- /dev/null
+++ b/bin/bittest_single
@@ -0,0 +1,138 @@
+#!/usr/bin/env python
+# ex:ts=4:sw=4:sts=4:et
+# -*- tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*-
+#
+#
+# Copyright (C) 2005, 2006 Holger Hans Peter Freyther
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# Redistributions of source code must retain the above copyright notice,
+# this list of conditions and the following disclaimer.
+#
+# Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# Neither the name Holger Hans Peter Freyther nor the names of its
+# contributors may be used to endorse or promote products derived
+# from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+# (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
+# IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+import sys, os, optparse
+
+# append the lib subdir and modules subdir to the system python path
+sys.path.append(os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])), 'lib'))
+sys.path.append(os.path.join(os.path.dirname(os.path.dirname(sys.argv[0])), 'modules'))
+
+
+def which(path, item):
+ """Useful function for locating a file in a PATH"""
+ found = None
+ for p in (path or "").split(':'):
+ if os.path.exists(os.path.join(p, item)):
+ found = os.path.join(p, item)
+ break
+ return found
+
+
+# Code to try hard to find the BitBake libraries
+try:
+ import bb
+ import bb.data
+ import bb.parse
+except:
+ print "Trying hard to find the BitBake libraries"
+ path = which(os.environ['PATH'], "bitbake")
+ if not path:
+ print "ERROR can't find bitbake in the $PATH. Either place bitbake/bin there or point PYTHONPATH to bitbake/lib."
+ sys.exit(-1)
+
+ sys.path.append(os.path.join(os.path.dirname(os.path.dirname(path)), 'lib'))
+ import bb
+ import bb.data
+ import bb.parse
+
+
+from bittest import *
+
+
+# Start it up now
+if __name__ == "__main__":
+ """
+ In contrast to bittest we will try to update the BBPATH, load local conf to
+ get the TARGET_ARCH, TARGET_OS, DISTRO and MACHINE from the configuration file
+ """
+
+ options, args = handle_options( sys.argv )
+ tests = []
+ if len(args) == 0:
+ tests = __all_tests__
+ else:
+ for mode in args:
+ if not mode in __all_tests__ and not mode == "example":
+ bb.note("Test %s does not exist" % mode)
+ else:
+ tests.append(mode)
+
+ if len(tests) == 0:
+ bb.note("No tests to run exiting")
+ sys.exit(0)
+
+ bb.note("Running the following tests: %s" % tests )
+
+ # Parse the test configuration - use local.conf here the one in the old BBPATH
+ test_config = _load_config('local.conf')
+ if test_config == None:
+ bb.error("Could not parse the local.conf configuration file")
+
+ # extract information from the current setup
+ arch = bb.data.getVar('TARGET_ARCH', test_config, True)
+ tos = bb.data.getVar('TARGET_OS' , test_config, True)
+ distro = bb.data.getVar('DISTRO' , test_config, True)
+ machine= bb.data.getVar('MACHINE' , test_config, True)
+ test_options = [(arch,os,distro,[machine])]
+
+ # Check for issues
+ if None in [arch,tos,distro,machine]:
+ bb.error("Error in your configuration. TARGET_ARCH=%(arch)s, TARGET_OS=%(tos)s, DISTRO=%(distro)s, MACHINE=%(machine)s" % locals() )
+ sys.exit(-3)
+ else:
+ bb.note("Your configuration: TARGET_ARCH=%(arch)s, TARGET_OS=%(tos)s, DISTRO=%(distro)s, MACHINE=%(machine)s" % locals() )
+
+
+
+ # Update the BBPATH now
+ new_path = os.path.dirname(os.path.dirname(sys.argv[0]))+":"+os.environ['BBPATH']
+ os.environ['BBPATH'] = new_path
+
+ # Now start with the real deal
+ # Parse the default config
+ data = _load_config('bitbake.conf')
+ if data == None:
+ bb.error("Could not parse the bitbake.conf")
+ elif bb.data.getVar('BITBAKETEST_BITBAKE_CONF', data ) == None:
+ bb.error("You are not using the bitbake.conf from bittest please check your BBPATH")
+
+ bb.data.inheritFromOS(data)
+
+
+ # start running the test
+ results = run_tests(data, test_config, test_options, tests, options)
+ generate_results(results, options)
+
+