1*760c253cSXin Li#!/usr/bin/env python3 2*760c253cSXin Li# -*- coding: utf-8 -*- 3*760c253cSXin Li# Copyright 2014 The ChromiumOS Authors 4*760c253cSXin Li# Use of this source code is governed by a BSD-style license that can be 5*760c253cSXin Li# found in the LICENSE file. 6*760c253cSXin Li 7*760c253cSXin Li"""Test translation of xbuddy names.""" 8*760c253cSXin Li 9*760c253cSXin Li 10*760c253cSXin Liimport argparse 11*760c253cSXin Liimport sys 12*760c253cSXin Li 13*760c253cSXin Liimport download_images 14*760c253cSXin Li 15*760c253cSXin Li 16*760c253cSXin Li# On May 1, 2014: 17*760c253cSXin Li# latest : lumpy-release/R34-5500.132.0 18*760c253cSXin Li# latest-beta : lumpy-release/R35-5712.43.0 19*760c253cSXin Li# latest-official: lumpy-release/R36-5814.0.0 20*760c253cSXin Li# latest-dev : lumpy-release/R36-5814.0.0 21*760c253cSXin Li# latest-canary : lumpy-release/R36-5814.0.0 22*760c253cSXin Li 23*760c253cSXin Li 24*760c253cSXin Liclass ImageDownloaderBuildIDTest(object): 25*760c253cSXin Li """Test translation of xbuddy names.""" 26*760c253cSXin Li 27*760c253cSXin Li def __init__(self): 28*760c253cSXin Li parser = argparse.ArgumentParser() 29*760c253cSXin Li parser.add_argument( 30*760c253cSXin Li "-c", 31*760c253cSXin Li "--chromeos_root", 32*760c253cSXin Li dest="chromeos_root", 33*760c253cSXin Li help="Directory containing ChromeOS root.", 34*760c253cSXin Li ) 35*760c253cSXin Li 36*760c253cSXin Li options = parser.parse_known_args(sys.argv[1:])[0] 37*760c253cSXin Li if options.chromeos_root is None: 38*760c253cSXin Li self._usage(parser, "--chromeos_root must be set") 39*760c253cSXin Li self.chromeos_root = options.chromeos_root 40*760c253cSXin Li self.tests_passed = 0 41*760c253cSXin Li self.tests_run = 0 42*760c253cSXin Li self.tests_failed = 0 43*760c253cSXin Li 44*760c253cSXin Li def _usage(self, parser, message): 45*760c253cSXin Li print("ERROR: " + message) 46*760c253cSXin Li parser.print_help() 47*760c253cSXin Li sys.exit(0) 48*760c253cSXin Li 49*760c253cSXin Li def print_test_status(self): 50*760c253cSXin Li print("----------------------------------------\n") 51*760c253cSXin Li print("Tests attempted: %d" % self.tests_run) 52*760c253cSXin Li print("Tests passed: %d" % self.tests_passed) 53*760c253cSXin Li print("Tests failed: %d" % self.tests_failed) 54*760c253cSXin Li print("\n----------------------------------------") 55*760c253cSXin Li 56*760c253cSXin Li def assert_failure(self, msg): 57*760c253cSXin Li print("Assert failure: %s" % msg) 58*760c253cSXin Li self.print_test_status() 59*760c253cSXin Li sys.exit(1) 60*760c253cSXin Li 61*760c253cSXin Li def assertIsNotNone(self, arg, arg_name): 62*760c253cSXin Li if arg is None: 63*760c253cSXin Li self.tests_failed = self.tests_failed + 1 64*760c253cSXin Li self.assert_failure("%s is not None" % arg_name) 65*760c253cSXin Li 66*760c253cSXin Li def assertNotEqual(self, arg1, arg2, arg1_name, arg2_name): 67*760c253cSXin Li if arg1 == arg2: 68*760c253cSXin Li self.tests_failed = self.tests_failed + 1 69*760c253cSXin Li self.assert_failure( 70*760c253cSXin Li "%s is not NotEqual to %s" % (arg1_name, arg2_name) 71*760c253cSXin Li ) 72*760c253cSXin Li 73*760c253cSXin Li def assertEqual(self, arg1, arg2, arg1_name, arg2_name): 74*760c253cSXin Li if arg1 != arg2: 75*760c253cSXin Li self.tests_failed = self.tests_failed + 1 76*760c253cSXin Li self.assert_failure( 77*760c253cSXin Li "%s is not Equal to %s" % (arg1_name, arg2_name) 78*760c253cSXin Li ) 79*760c253cSXin Li 80*760c253cSXin Li def test_one_id(self, downloader, test_id, result_string, exact_match): 81*760c253cSXin Li print("Translating '%s'" % test_id) 82*760c253cSXin Li self.tests_run = self.tests_run + 1 83*760c253cSXin Li 84*760c253cSXin Li result = downloader.GetBuildID(self.chromeos_root, test_id) 85*760c253cSXin Li # Verify that we got a build id back. 86*760c253cSXin Li self.assertIsNotNone(result, "result") 87*760c253cSXin Li 88*760c253cSXin Li # Verify that the result either contains or exactly matches the 89*760c253cSXin Li # result_string, depending on the exact_match argument. 90*760c253cSXin Li if exact_match: 91*760c253cSXin Li self.assertEqual(result, result_string, "result", result_string) 92*760c253cSXin Li else: 93*760c253cSXin Li self.assertNotEqual( 94*760c253cSXin Li result.find(result_string), -1, "result.find", "-1" 95*760c253cSXin Li ) 96*760c253cSXin Li self.tests_passed = self.tests_passed + 1 97*760c253cSXin Li 98*760c253cSXin Li def test_get_build_id(self): 99*760c253cSXin Li """Test that the actual translating of xbuddy names is working properly.""" 100*760c253cSXin Li downloader = download_images.ImageDownloader(log_level="quiet") 101*760c253cSXin Li 102*760c253cSXin Li self.test_one_id( 103*760c253cSXin Li downloader, "remote/lumpy/latest-dev", "lumpy-release/R", False 104*760c253cSXin Li ) 105*760c253cSXin Li self.test_one_id( 106*760c253cSXin Li downloader, 107*760c253cSXin Li "remote/trybot-lumpy-release-afdo-use/R35-5672.0.0-b86", 108*760c253cSXin Li "trybot-lumpy-release-afdo-use/R35-5672.0.0-b86", 109*760c253cSXin Li True, 110*760c253cSXin Li ) 111*760c253cSXin Li self.test_one_id( 112*760c253cSXin Li downloader, 113*760c253cSXin Li "remote/lumpy-release/R35-5672.0.0", 114*760c253cSXin Li "lumpy-release/R35-5672.0.0", 115*760c253cSXin Li True, 116*760c253cSXin Li ) 117*760c253cSXin Li self.test_one_id( 118*760c253cSXin Li downloader, "remote/lumpy/latest-dev", "lumpy-release/R", False 119*760c253cSXin Li ) 120*760c253cSXin Li self.test_one_id( 121*760c253cSXin Li downloader, "remote/lumpy/latest-official", "lumpy-release/R", False 122*760c253cSXin Li ) 123*760c253cSXin Li self.test_one_id( 124*760c253cSXin Li downloader, "remote/lumpy/latest-beta", "lumpy-release/R", False 125*760c253cSXin Li ) 126*760c253cSXin Li 127*760c253cSXin Li self.print_test_status() 128*760c253cSXin Li 129*760c253cSXin Li 130*760c253cSXin Liif __name__ == "__main__": 131*760c253cSXin Li tester = ImageDownloaderBuildIDTest() 132*760c253cSXin Li tester.test_get_build_id() 133