diff options
-rwxr-xr-x | node/prepare_build_config.py | 28 | ||||
-rw-r--r-- | tests/test_prepare_build_config.py | 58 |
2 files changed, 77 insertions, 9 deletions
diff --git a/node/prepare_build_config.py b/node/prepare_build_config.py index 3086453..6949305 100755 --- a/node/prepare_build_config.py +++ b/node/prepare_build_config.py @@ -65,11 +65,11 @@ def validate_config(config, slave_type): raise BuildConfigMismatchException("Incompatible slave type, job owner and build type") -def convert_config_to_shell(config_text): +def convert_config_to_shell(config_text, out_filename): config = {} - out = open(BUILD_CONFIG_FILE, "w") + out = open(out_filename, "w") - for l in cfg.split("\n"): + for l in config_text.split("\n"): l = l.strip() if not l or l[0] == "#": continue @@ -79,15 +79,25 @@ def convert_config_to_shell(config_text): var, val = l.split("=", 1) val = shell_unquote(val) config[var] = val - print "%s=%s" % (var, pipes.quote(val)) + out.write("%s=%s\n" % (var, pipes.quote(val))) out.close() + return config - -if __name__ == "__main__": - config_text = base64.b64decode(sys.argv[1]) - config = convert_config_to_shell(config_text, get_slave_type()) +def main(config_in, is_base64): + if is_base64: + config_in = base64.b64decode(config_in) + config = convert_config_to_shell(config_in, BUILD_CONFIG_FILE) try: - validate_config(config) + validate_config(config, get_slave_type()) except BuildConfigMismatchException, e: print str(e) sys.exit(1) + +if __name__ == "__main__": + optparser = optparse.OptionParser(usage="%prog") + optparser.add_option("--base64", action="store_true", help="Process only jobs matching regex pattern") + options, args = optparser.parse_args(sys.argv[1:]) + if len(args) != 1: + optparser.error("Wrong number of arguments") + main(args[0], opts.base64) + diff --git a/tests/test_prepare_build_config.py b/tests/test_prepare_build_config.py index e8692c4..ff504f7 100644 --- a/tests/test_prepare_build_config.py +++ b/tests/test_prepare_build_config.py @@ -1,5 +1,7 @@ import sys import os +import base64 +import tempfile sys.path.append(os.path.dirname(__file__) + "/../node") import prepare_build_config @@ -36,3 +38,59 @@ def test_validate_config(): assert False, "Mismatch wasn't caught" except prepare_build_config.BuildConfigMismatchException: pass + + del os.environ["JOB_NAME"] + +def test_convert_config_to_shell(): + config_base64 = """\ +TUFOSUZFU1RfUkVQTz1naXQ6Ly9hbmRyb2lkLmdpdC5saW5hcm8ub3JnL3BsYXRmb3JtL21hbmlm +ZXN0LmdpdApNQU5JRkVTVF9CUkFOQ0g9bGluYXJvX2FuZHJvaWRfMi4zLjUKTUFOSUZFU1RfRklM +RU5BTUU9c3RhZ2luZy1vbWFwNDQ2MC54bWwKVEFSR0VUX1BST0RVQ1Q9cGFuZGFib2FyZApUQVJH +RVRfU0lNVUxBVE9SPWZhbHNlClRPT0xDSEFJTl9VUkw9aHR0cHM6Ly9hbmRyb2lkLWJ1aWxkLmxp +bmFyby5vcmcvamVua2lucy9qb2IvbGluYXJvLWFuZHJvaWRfdG9vbGNoYWluLTQuNi1ienIvbGFz +dFN1Y2Nlc3NmdWxCdWlsZC9hcnRpZmFjdC9idWlsZC9vdXQvYW5kcm9pZC10b29sY2hhaW4tZWFi +aS00LjYtZGFpbHktbGludXgteDg2LnRhci5iejIKTEFWQV9TVUJNSVQ9MQ== +""" + config_dict = { + 'TARGET_SIMULATOR': 'false', + 'TARGET_PRODUCT': 'pandaboard', + 'TOOLCHAIN_URL': 'https://android-build.linaro.org/jenkins/job/linaro-android_toolchain-4.6-bzr/lastSuccessfulBuild/artifact/build/out/android-toolchain-eabi-4.6-daily-linux-x86.tar.bz2', + 'MANIFEST_BRANCH': 'linaro_android_2.3.5', + 'MANIFEST_FILENAME': 'staging-omap4460.xml', 'LAVA_SUBMIT': '1', + 'MANIFEST_REPO': 'git://android.git.linaro.org/platform/manifest.git' + } + + config_text = base64.b64decode(config_base64) + out_fd, out_filename = tempfile.mkstemp() + os.close(out_fd) + dict = prepare_build_config.convert_config_to_shell(config_text, out_filename) + assert dict == config_dict + +def test_main(): + config_base64 = """\ +TUFOSUZFU1RfUkVQTz1naXQ6Ly9hbmRyb2lkLmdpdC5saW5hcm8ub3JnL3BsYXRmb3JtL21hbmlm +ZXN0LmdpdApNQU5JRkVTVF9CUkFOQ0g9bGluYXJvX2FuZHJvaWRfMi4zLjUKTUFOSUZFU1RfRklM +RU5BTUU9c3RhZ2luZy1vbWFwNDQ2MC54bWwKVEFSR0VUX1BST0RVQ1Q9cGFuZGFib2FyZApUQVJH +RVRfU0lNVUxBVE9SPWZhbHNlClRPT0xDSEFJTl9VUkw9aHR0cHM6Ly9hbmRyb2lkLWJ1aWxkLmxp +bmFyby5vcmcvamVua2lucy9qb2IvbGluYXJvLWFuZHJvaWRfdG9vbGNoYWluLTQuNi1ienIvbGFz +dFN1Y2Nlc3NmdWxCdWlsZC9hcnRpZmFjdC9idWlsZC9vdXQvYW5kcm9pZC10b29sY2hhaW4tZWFi +aS00LjYtZGFpbHktbGludXgteDg2LnRhci5iejIKTEFWQV9TVUJNSVQ9MQ== +""" + config_dict = { + 'TARGET_SIMULATOR': 'false', + 'TARGET_PRODUCT': 'pandaboard', + 'TOOLCHAIN_URL': 'https://android-build.linaro.org/jenkins/job/linaro-android_toolchain-4.6-bzr/lastSuccessfulBuild/artifact/build/out/android-toolchain-eabi-4.6-daily-linux-x86.tar.bz2', + 'MANIFEST_BRANCH': 'linaro_android_2.3.5', + 'MANIFEST_FILENAME': 'staging-omap4460.xml', 'LAVA_SUBMIT': '1', + 'MANIFEST_REPO': 'git://android.git.linaro.org/platform/manifest.git' + } + + out_fd, out_filename = tempfile.mkstemp() + prepare_build_config.BUILD_CONFIG_FILE = out_filename + os.environ["JOB_NAME"] = "foo_bar" + prepare_build_config.main(config_base64, True) + dict = {} + for l in open(out_filename): + var, val = l.rstrip().split("=", 1) + dict[var] = val + assert dict == config_dict |