cros_setup_toolchains: fix binary file reading for real
Indexing a bytes array yields ints in Python 3 unlike Python 2.
Tweak the syntax to always returns bytes, and add some unittests
to make sure the change works under both versions now.
BUG=chromium:997354
TEST=`cros_setup_toolchains --create-packages` works w/python3
Change-Id: Ia29e30053c138a66c2bbb56682c2b9d1badf81d2
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/chromite/+/1960551
Reviewed-by: Michael Mortensen <mmortensen@google.com>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
diff --git a/scripts/cros_setup_toolchains_unittest.py b/scripts/cros_setup_toolchains_unittest.py
new file mode 100644
index 0000000..40765a8
--- /dev/null
+++ b/scripts/cros_setup_toolchains_unittest.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+# Copyright 2019 The Chromium OS Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+"""Test crows_setup_toolchains."""
+
+from __future__ import print_function
+
+import os
+
+from chromite.lib import cros_test_lib
+from chromite.lib import osutils
+from chromite.scripts import cros_setup_toolchains
+
+
+class UtilsTest(cros_test_lib.MockTempDirTestCase):
+ """Tests for various small util funcs."""
+
+ def testFileIsCrosSdkElf(self):
+ """Verify FileIsCrosSdkElf on x86_64 ELFs."""
+ path = os.path.join(self.tempdir, 'file')
+ data = (b'\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00'
+ b'>\x00')
+ osutils.WriteFile(path, data, mode='wb')
+ self.assertTrue(cros_setup_toolchains.FileIsCrosSdkElf(path))
+
+ def testArmIsNotCrosSdkElf(self):
+ """Verify FileIsCrosSdkElf on aarch64 ELFs."""
+ path = os.path.join(self.tempdir, 'file')
+ data = (b'\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x03\x00'
+ b'(\x00')
+ osutils.WriteFile(path, data, mode='wb')
+ self.assertFalse(cros_setup_toolchains.FileIsCrosSdkElf(path))
+
+ def testScriptIsNotCrosSdkElf(self):
+ """Verify FileIsCrosSdkElf on shell scripts."""
+ path = os.path.join(self.tempdir, 'file')
+ data = '#!/bin/sh\necho hi\n'
+ osutils.WriteFile(path, data)
+ self.assertFalse(cros_setup_toolchains.FileIsCrosSdkElf(path))