xref: /aosp_15_r20/external/toolchain-utils/crosperf/compare_machines.py (revision 760c253c1ed00ce9abd48f8546f08516e57485fe)
1*760c253cSXin Li# -*- coding: utf-8 -*-
2*760c253cSXin Li# Copyright 2014 The ChromiumOS Authors
3*760c253cSXin Li# Use of this source code is governed by a BSD-style license that can be
4*760c253cSXin Li# found in the LICENSE file.
5*760c253cSXin Li
6*760c253cSXin Li"""Module to compare two machines."""
7*760c253cSXin Li
8*760c253cSXin Li
9*760c253cSXin Liimport argparse
10*760c253cSXin Liimport os.path
11*760c253cSXin Liimport sys
12*760c253cSXin Li
13*760c253cSXin Lifrom machine_manager import CrosMachine
14*760c253cSXin Li
15*760c253cSXin Li
16*760c253cSXin Lidef PrintUsage(msg):
17*760c253cSXin Li    print(msg)
18*760c253cSXin Li    print("Usage: ")
19*760c253cSXin Li    print(
20*760c253cSXin Li        "\n compare_machines.py --chromeos_root=/path/to/chroot/ "
21*760c253cSXin Li        "machine1 machine2 ..."
22*760c253cSXin Li    )
23*760c253cSXin Li
24*760c253cSXin Li
25*760c253cSXin Lidef Main(argv):
26*760c253cSXin Li
27*760c253cSXin Li    parser = argparse.ArgumentParser()
28*760c253cSXin Li    parser.add_argument(
29*760c253cSXin Li        "--chromeos_root",
30*760c253cSXin Li        default="/path/to/chromeos",
31*760c253cSXin Li        dest="chromeos_root",
32*760c253cSXin Li        help="ChromeOS root checkout directory",
33*760c253cSXin Li    )
34*760c253cSXin Li    parser.add_argument("remotes", nargs=argparse.REMAINDER)
35*760c253cSXin Li
36*760c253cSXin Li    options = parser.parse_args(argv)
37*760c253cSXin Li
38*760c253cSXin Li    machine_list = options.remotes
39*760c253cSXin Li    if len(machine_list) < 2:
40*760c253cSXin Li        PrintUsage("ERROR: Must specify at least two machines.")
41*760c253cSXin Li        return 1
42*760c253cSXin Li    elif not os.path.exists(options.chromeos_root):
43*760c253cSXin Li        PrintUsage(
44*760c253cSXin Li            "Error: chromeos_root does not exist %s" % options.chromeos_root
45*760c253cSXin Li        )
46*760c253cSXin Li        return 1
47*760c253cSXin Li
48*760c253cSXin Li    chroot = options.chromeos_root
49*760c253cSXin Li    cros_machines = []
50*760c253cSXin Li    test_machine_checksum = None
51*760c253cSXin Li    for m in machine_list:
52*760c253cSXin Li        cm = CrosMachine(m, chroot, "average")
53*760c253cSXin Li        cros_machines = cros_machines + [cm]
54*760c253cSXin Li        test_machine_checksum = cm.machine_checksum
55*760c253cSXin Li
56*760c253cSXin Li    ret = 0
57*760c253cSXin Li    for cm in cros_machines:
58*760c253cSXin Li        print("checksum for %s : %s" % (cm.name, cm.machine_checksum))
59*760c253cSXin Li        if cm.machine_checksum != test_machine_checksum:
60*760c253cSXin Li            ret = 1
61*760c253cSXin Li            print("Machine checksums do not all match")
62*760c253cSXin Li
63*760c253cSXin Li    if ret == 0:
64*760c253cSXin Li        print("Machines all match.")
65*760c253cSXin Li
66*760c253cSXin Li    return ret
67*760c253cSXin Li
68*760c253cSXin Li
69*760c253cSXin Liif __name__ == "__main__":
70*760c253cSXin Li    retval = Main(sys.argv[1:])
71*760c253cSXin Li    sys.exit(retval)
72