diff --git a/rbtools/utils/tests.py b/rbtools/utils/tests.py
deleted file mode 100644
index d77a324cd90043392523290a31b319acd19874db..0000000000000000000000000000000000000000
--- a/rbtools/utils/tests.py
+++ /dev/null
@@ -1,314 +0,0 @@
-from __future__ import unicode_literals
-
-import os
-import re
-import shutil
-import subprocess
-import sys
-
-from kgb import SpyAgency
-
-from rbtools.utils import checks, filesystem
-from rbtools.utils.aliases import replace_arguments
-from rbtools.utils.console import edit_file, edit_text
-from rbtools.utils.errors import EditorError
-from rbtools.utils.filesystem import (cleanup_tempfiles, make_empty_files,
-                                      make_tempdir, make_tempfile)
-from rbtools.utils.process import execute
-from rbtools.utils.testbase import RBTestBase
-
-
-class ChecksTests(RBTestBase):
-    """Unit tests for rbtools.utils.checks."""
-
-    def test_check_install(self):
-        """Testing check_install"""
-        self.assertTrue(checks.check_install([sys.executable, ' --version']))
-        self.assertFalse(checks.check_install([self.gen_uuid()]))
-
-    def test_is_valid_version(self):
-        """Testing is_valid_version"""
-        self.assertTrue(checks.is_valid_version((1, 0, 0), (1, 0, 0)))
-        self.assertTrue(checks.is_valid_version((1, 1, 0), (1, 0, 0)))
-        self.assertTrue(checks.is_valid_version((1, 0, 1), (1, 0, 0)))
-        self.assertTrue(checks.is_valid_version((1, 1, 0), (1, 1, 0)))
-        self.assertTrue(checks.is_valid_version((1, 1, 1), (1, 1, 0)))
-        self.assertTrue(checks.is_valid_version((1, 1, 1), (1, 1, 1)))
-
-        self.assertFalse(checks.is_valid_version((0, 9, 9), (1, 0, 0)))
-        self.assertFalse(checks.is_valid_version((1, 0, 9), (1, 1, 0)))
-        self.assertFalse(checks.is_valid_version((1, 1, 0), (1, 1, 1)))
-
-
-class ConsoleTests(SpyAgency, RBTestBase):
-    """Unit tests for rbtools.utils.console."""
-
-    def test_edit_file(self):
-        """Testing edit_file"""
-        result = edit_file(make_tempfile(b'Test content'))
-
-        self.assertEqual(result, 'TEST CONTENT')
-
-    def test_edit_file_with_invalid_filename(self):
-        """Testing edit_file with invalid filename"""
-        message = (
-            'The file "blargh-bad-filename" does not exist or is not '
-            'accessible.'
-        )
-
-        with self.assertRaisesMessage(EditorError, message):
-            edit_file('blargh-bad-filename')
-
-    def test_edit_file_with_invalid_editor(self):
-        """Testing edit_file with invalid filename"""
-        message = (
-            'The editor "./bad-rbtools-editor" was not found or could not '
-            'be run. Make sure the EDITOR environment variable is set '
-            'to your preferred editor.'
-        )
-
-        os.environ[str('RBTOOLS_EDITOR')] = './bad-rbtools-editor'
-
-        with self.assertRaisesMessage(EditorError, message):
-            edit_file(make_tempfile(b'Test content'))
-
-    def test_edit_file_with_file_deleted(self):
-        """Testing edit_file with file deleted during edit"""
-        def _subprocess_call(*args, **kwargs):
-            os.unlink(filename)
-
-        filename = make_tempfile(b'Test content')
-        message = 'The edited file "%s" was deleted during edit.' % filename
-
-        self.spy_on(subprocess.call, call_fake=_subprocess_call)
-
-        with self.assertRaisesMessage(EditorError, message):
-            edit_file(filename)
-
-    def test_edit_file_with_editor_priority(self):
-        """Testing edit_file editor priority"""
-        self.spy_on(subprocess.call, call_original=False)
-
-        # Save these so we can restore after the tests. We don't need to
-        # save RBTOOLS_EDITOR, because this is taken care of in the base
-        # TestCase class.
-        old_visual = os.environ.get(str('VISUAL'))
-        old_editor = os.environ.get(str('EDITOR'))
-
-        filename = make_tempfile(b'Test content')
-
-        try:
-            os.environ[str('RBTOOLS_EDITOR')] = 'rbtools-editor'
-            os.environ[str('VISUAL')] = 'visual'
-            os.environ[str('EDITOR')] = 'editor'
-
-            edit_file(filename)
-            self.assertTrue(subprocess.call.last_called_with(
-                ['rbtools-editor', filename]))
-
-            os.environ[str('RBTOOLS_EDITOR')] = ''
-            edit_file(filename)
-            self.assertTrue(subprocess.call.last_called_with(
-                ['visual', filename]))
-
-            os.environ[str('VISUAL')] = ''
-            edit_file(filename)
-            self.assertTrue(subprocess.call.last_called_with(
-                ['editor', filename]))
-
-            os.environ[str('EDITOR')] = ''
-            edit_file(filename)
-            self.assertTrue(subprocess.call.last_called_with(
-                ['vi', filename]))
-        finally:
-            if old_visual:
-                os.environ[str('VISUAL')] = old_visual
-
-            if old_editor:
-                os.environ[str('EDITOR')] = old_editor
-
-    def test_edit_text(self):
-        """Testing edit_text"""
-        result = edit_text('Test content')
-
-        self.assertEqual(result, 'TEST CONTENT')
-
-    def test_edit_text_with_filename(self):
-        """Testing edit_text with custom filename"""
-        self.spy_on(subprocess.call)
-
-        result = edit_text('Test content',
-                           filename='my-custom-filename')
-
-        self.assertEqual(result, 'TEST CONTENT')
-        self.assertEqual(
-            os.path.basename(subprocess.call.last_call.args[0][-1]),
-            'my-custom-filename')
-
-
-class FilesystemTests(RBTestBase):
-    """Unit tests for rbtools.utils.filesystem."""
-
-    def test_make_tempfile(self):
-        """Testing make_tempfile"""
-        filename = make_tempfile()
-        self.assertIn(filename, filesystem.tempfiles)
-
-        self.assertTrue(os.path.isfile(filename))
-        self.assertTrue(os.path.basename(filename).startswith('rbtools.'))
-        self.assertEqual(os.stat(filename).st_uid, os.geteuid())
-        self.assertTrue(os.access(filename, os.R_OK | os.W_OK))
-
-    def test_make_tempfile_with_prefix(self):
-        """Testing make_tempfile with prefix"""
-        filename = make_tempfile(prefix='supertest-')
-
-        self.assertIn(filename, filesystem.tempfiles)
-        self.assertTrue(os.path.isfile(filename))
-        self.assertTrue(os.path.basename(filename).startswith('supertest-'))
-        self.assertEqual(os.stat(filename).st_uid, os.geteuid())
-        self.assertTrue(os.access(filename, os.R_OK | os.W_OK))
-
-    def test_make_tempfile_with_suffix(self):
-        """Testing make_tempfile with suffix"""
-        filename = make_tempfile(suffix='.xyz')
-
-        self.assertIn(filename, filesystem.tempfiles)
-        self.assertTrue(os.path.isfile(filename))
-        self.assertTrue(os.path.basename(filename).startswith('rbtools.'))
-        self.assertTrue(os.path.basename(filename).endswith('.xyz'))
-        self.assertEqual(os.stat(filename).st_uid, os.geteuid())
-        self.assertTrue(os.access(filename, os.R_OK | os.W_OK))
-
-    def test_make_tempfile_with_filename(self):
-        """Testing make_tempfile with filename"""
-        filename = make_tempfile(filename='TEST123')
-
-        self.assertIn(filename, filesystem.tempfiles)
-        self.assertEqual(os.path.basename(filename), 'TEST123')
-        self.assertTrue(os.path.isfile(filename))
-        self.assertTrue(os.access(filename, os.R_OK | os.W_OK))
-        self.assertEqual(os.stat(filename).st_uid, os.geteuid())
-
-        parent_dir = os.path.dirname(filename)
-        self.assertIn(parent_dir, filesystem.tempdirs)
-        self.assertTrue(os.access(parent_dir, os.R_OK | os.W_OK | os.X_OK))
-        self.assertEqual(os.stat(parent_dir).st_uid, os.geteuid())
-
-    def test_make_empty_files(self):
-        """Testing make_empty_files"""
-        # Use make_tempdir to get a unique directory name
-        tmpdir = make_tempdir()
-        self.assertTrue(os.path.isdir(tmpdir))
-        cleanup_tempfiles()
-
-        fname = os.path.join(tmpdir, 'file')
-        make_empty_files([fname])
-        self.assertTrue(os.path.isdir(tmpdir))
-        self.assertTrue(os.path.isfile(fname))
-        self.assertEqual(os.stat(fname).st_uid, os.geteuid())
-        self.assertTrue(os.access(fname, os.R_OK | os.W_OK))
-
-        shutil.rmtree(tmpdir, ignore_errors=True)
-
-
-class ProcessTests(RBTestBase):
-    """Unit tests for rbtools.utils.process."""
-
-    def test_execute(self):
-        """Testing execute"""
-        self.assertTrue(re.match('.*?%d.%d.%d' % sys.version_info[:3],
-                        execute([sys.executable, '-V'])))
-
-
-class AliasTests(RBTestBase):
-    """Tests for rbtools.utils.aliases."""
-
-    def test_replace_arguments_basic(self):
-        """Testing replace_arguments with variables and arguments"""
-        self.assertEqual(replace_arguments('$1', ['HEAD'], posix=True),
-                         ['HEAD'])
-
-    def test_replace_arguments_multiple(self):
-        """Testing replace_arguments with multiple variables and arguments"""
-        self.assertEqual(replace_arguments('$1..$2', ['a', 'b'], posix=True),
-                         ['a..b'])
-
-    def test_replace_arguments_blank(self):
-        """Testing replace_arguments with variables and a missing argument"""
-        self.assertEqual(replace_arguments('rbt post $1', [], posix=True),
-                         ['rbt', 'post'])
-
-    def test_replace_arguments_append(self):
-        """Testing replace_arguments with no variables or arguments."""
-        self.assertEqual(
-            replace_arguments('echo', ['a', 'b', 'c'], posix=True),
-            ['echo', 'a', 'b', 'c'])
-
-    def test_replace_arguments_unrecognized_variables(self):
-        """Testing replace_arguments with an unrecognized variable name"""
-        self.assertEqual(replace_arguments('$1 $test', ['f'], posix=True),
-                         ['f', '$test'])
-
-    def test_replace_arguments_star(self):
-        """Testing replace_arguments with the special $* variable"""
-        self.assertEqual(replace_arguments('$*', ['a', 'b', 'c'], posix=True),
-                         ['a', 'b', 'c'])
-
-    def test_replace_arguments_star_whitespace(self):
-        """Testing replace_arguments with the special $* variable with
-        whitespace-containing arguments
-        """
-        self.assertEqual(
-            replace_arguments('$*', ['a', 'b', 'c d e'], posix=True),
-            ['a', 'b', 'c d e'])
-
-    def test_replace_arguments_unescaped_non_posix(self):
-        """Testing replace_arguments in non-POSIX mode does not evaluate escape
-        sequences
-        """
-        self.assertEqual(replace_arguments(r'"$1 \\"', ['a'], posix=False),
-                         [r'"a \\"'])
-
-    def test_replace_arguments_invalid_quote(self):
-        """Testing replace_arguments with invalid quotes in POSIX and non-POSIX
-        mode raises an error
-        """
-        self.assertRaises(
-            ValueError,
-            lambda: replace_arguments('"foo', [], posix=True))
-
-        self.assertRaises(
-            ValueError,
-            lambda: replace_arguments('"foo', [], posix=False))
-
-    def test_replace_arguments_invalid_quote_posix(self):
-        """Testing replace_arguments with escaped ending quote in non-POSIX
-        mode does not escape the quote
-        """
-        self.assertEqual(replace_arguments('"\\"', [], posix=False),
-                         ['"\\"'])
-
-    def test_replace_arguments_invalid_quote_non_posix(self):
-        """Testing replace_arguments with escaped ending quote in POSIX mode
-        raises an error
-        """
-        self.assertRaises(
-            ValueError,
-            lambda: replace_arguments('"\\"', [], posix=True))
-
-    def test_replace_arguments_quoted_non_posix(self):
-        """Testing replace_arguments in non-POSIX mode with a quoted sequence
-        in the command
-        """
-        self.assertEqual(
-            replace_arguments("find . -iname '*.pyc' -delete", [],
-                              posix=False),
-            ['find', '.', '-iname', "'*.pyc'", '-delete'])
-
-    def test_replace_arguments_escaped_posix(self):
-        """Testing replace_arguments in POSIX mode evaluates escape sequences
-        """
-        self.assertEqual(
-            replace_arguments(r'$1 \\ "\\" "\""', ['a'], posix=True),
-            ['a', '\\', '\\', '"'])
diff --git a/rbtools/utils/tests/__init__.py b/rbtools/utils/tests/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/rbtools/utils/tests/test_aliases.py b/rbtools/utils/tests/test_aliases.py
new file mode 100644
index 0000000000000000000000000000000000000000..1d963715640b6802fd4f1a32d0694ad1084d034c
--- /dev/null
+++ b/rbtools/utils/tests/test_aliases.py
@@ -0,0 +1,99 @@
+"""Unit tests for rbtools.utils.aliases."""
+
+from __future__ import unicode_literals
+
+from rbtools.utils.aliases import replace_arguments
+from rbtools.utils.testbase import RBTestBase
+
+
+class AliasTests(RBTestBase):
+    """Tests for rbtools.utils.aliases."""
+
+    def test_replace_arguments_basic(self):
+        """Testing replace_arguments with variables and arguments"""
+        self.assertEqual(replace_arguments('$1', ['HEAD'], posix=True),
+                         ['HEAD'])
+
+    def test_replace_arguments_multiple(self):
+        """Testing replace_arguments with multiple variables and arguments"""
+        self.assertEqual(replace_arguments('$1..$2', ['a', 'b'], posix=True),
+                         ['a..b'])
+
+    def test_replace_arguments_blank(self):
+        """Testing replace_arguments with variables and a missing argument"""
+        self.assertEqual(replace_arguments('rbt post $1', [], posix=True),
+                         ['rbt', 'post'])
+
+    def test_replace_arguments_append(self):
+        """Testing replace_arguments with no variables or arguments."""
+        self.assertEqual(
+            replace_arguments('echo', ['a', 'b', 'c'], posix=True),
+            ['echo', 'a', 'b', 'c'])
+
+    def test_replace_arguments_unrecognized_variables(self):
+        """Testing replace_arguments with an unrecognized variable name"""
+        self.assertEqual(replace_arguments('$1 $test', ['f'], posix=True),
+                         ['f', '$test'])
+
+    def test_replace_arguments_star(self):
+        """Testing replace_arguments with the special $* variable"""
+        self.assertEqual(replace_arguments('$*', ['a', 'b', 'c'], posix=True),
+                         ['a', 'b', 'c'])
+
+    def test_replace_arguments_star_whitespace(self):
+        """Testing replace_arguments with the special $* variable with
+        whitespace-containing arguments
+        """
+        self.assertEqual(
+            replace_arguments('$*', ['a', 'b', 'c d e'], posix=True),
+            ['a', 'b', 'c d e'])
+
+    def test_replace_arguments_unescaped_non_posix(self):
+        """Testing replace_arguments in non-POSIX mode does not evaluate escape
+        sequences
+        """
+        self.assertEqual(replace_arguments(r'"$1 \\"', ['a'], posix=False),
+                         [r'"a \\"'])
+
+    def test_replace_arguments_invalid_quote(self):
+        """Testing replace_arguments with invalid quotes in POSIX and non-POSIX
+        mode raises an error
+        """
+        self.assertRaises(
+            ValueError,
+            lambda: replace_arguments('"foo', [], posix=True))
+
+        self.assertRaises(
+            ValueError,
+            lambda: replace_arguments('"foo', [], posix=False))
+
+    def test_replace_arguments_invalid_quote_posix(self):
+        """Testing replace_arguments with escaped ending quote in non-POSIX
+        mode does not escape the quote
+        """
+        self.assertEqual(replace_arguments('"\\"', [], posix=False),
+                         ['"\\"'])
+
+    def test_replace_arguments_invalid_quote_non_posix(self):
+        """Testing replace_arguments with escaped ending quote in POSIX mode
+        raises an error
+        """
+        self.assertRaises(
+            ValueError,
+            lambda: replace_arguments('"\\"', [], posix=True))
+
+    def test_replace_arguments_quoted_non_posix(self):
+        """Testing replace_arguments in non-POSIX mode with a quoted sequence
+        in the command
+        """
+        self.assertEqual(
+            replace_arguments("find . -iname '*.pyc' -delete", [],
+                              posix=False),
+            ['find', '.', '-iname', "'*.pyc'", '-delete'])
+
+    def test_replace_arguments_escaped_posix(self):
+        """Testing replace_arguments in POSIX mode evaluates escape sequences
+        """
+        self.assertEqual(
+            replace_arguments(r'$1 \\ "\\" "\""', ['a'], posix=True),
+            ['a', '\\', '\\', '"'])
diff --git a/rbtools/utils/tests/test_checks.py b/rbtools/utils/tests/test_checks.py
new file mode 100644
index 0000000000000000000000000000000000000000..a4a068a10a9953d9be7cad4ff1d646d31fca3ab0
--- /dev/null
+++ b/rbtools/utils/tests/test_checks.py
@@ -0,0 +1,30 @@
+"""Unit tests for rbtools.utils.checks."""
+
+from __future__ import unicode_literals
+
+import sys
+
+from rbtools.utils import checks
+from rbtools.utils.testbase import RBTestBase
+
+
+class ChecksTests(RBTestBase):
+    """Unit tests for rbtools.utils.checks."""
+
+    def test_check_install(self):
+        """Testing check_install"""
+        self.assertTrue(checks.check_install([sys.executable, ' --version']))
+        self.assertFalse(checks.check_install([self.gen_uuid()]))
+
+    def test_is_valid_version(self):
+        """Testing is_valid_version"""
+        self.assertTrue(checks.is_valid_version((1, 0, 0), (1, 0, 0)))
+        self.assertTrue(checks.is_valid_version((1, 1, 0), (1, 0, 0)))
+        self.assertTrue(checks.is_valid_version((1, 0, 1), (1, 0, 0)))
+        self.assertTrue(checks.is_valid_version((1, 1, 0), (1, 1, 0)))
+        self.assertTrue(checks.is_valid_version((1, 1, 1), (1, 1, 0)))
+        self.assertTrue(checks.is_valid_version((1, 1, 1), (1, 1, 1)))
+
+        self.assertFalse(checks.is_valid_version((0, 9, 9), (1, 0, 0)))
+        self.assertFalse(checks.is_valid_version((1, 0, 9), (1, 1, 0)))
+        self.assertFalse(checks.is_valid_version((1, 1, 0), (1, 1, 1)))
diff --git a/rbtools/utils/tests/test_console.py b/rbtools/utils/tests/test_console.py
new file mode 100644
index 0000000000000000000000000000000000000000..32000214eb5685ce4afdd0f985cf981bb8de92c0
--- /dev/null
+++ b/rbtools/utils/tests/test_console.py
@@ -0,0 +1,119 @@
+"""Unit tests for rbtools.utils.console."""
+
+from __future__ import unicode_literals
+
+import os
+import subprocess
+
+from kgb import SpyAgency
+
+from rbtools.utils.console import edit_file, edit_text
+from rbtools.utils.errors import EditorError
+from rbtools.utils.filesystem import make_tempfile
+from rbtools.utils.testbase import RBTestBase
+
+
+class ConsoleTests(SpyAgency, RBTestBase):
+    """Unit tests for rbtools.utils.console."""
+
+    def test_edit_file(self):
+        """Testing edit_file"""
+        result = edit_file(make_tempfile(b'Test content'))
+
+        self.assertEqual(result, 'TEST CONTENT')
+
+    def test_edit_file_with_invalid_filename(self):
+        """Testing edit_file with invalid filename"""
+        message = (
+            'The file "blargh-bad-filename" does not exist or is not '
+            'accessible.'
+        )
+
+        with self.assertRaisesMessage(EditorError, message):
+            edit_file('blargh-bad-filename')
+
+    def test_edit_file_with_invalid_editor(self):
+        """Testing edit_file with invalid filename"""
+        message = (
+            'The editor "./bad-rbtools-editor" was not found or could not '
+            'be run. Make sure the EDITOR environment variable is set '
+            'to your preferred editor.'
+        )
+
+        os.environ[str('RBTOOLS_EDITOR')] = './bad-rbtools-editor'
+
+        with self.assertRaisesMessage(EditorError, message):
+            edit_file(make_tempfile(b'Test content'))
+
+    def test_edit_file_with_file_deleted(self):
+        """Testing edit_file with file deleted during edit"""
+        def _subprocess_call(*args, **kwargs):
+            os.unlink(filename)
+
+        filename = make_tempfile(b'Test content')
+        message = 'The edited file "%s" was deleted during edit.' % filename
+
+        self.spy_on(subprocess.call, call_fake=_subprocess_call)
+
+        with self.assertRaisesMessage(EditorError, message):
+            edit_file(filename)
+
+    def test_edit_file_with_editor_priority(self):
+        """Testing edit_file editor priority"""
+        self.spy_on(subprocess.call, call_original=False)
+
+        # Save these so we can restore after the tests. We don't need to
+        # save RBTOOLS_EDITOR, because this is taken care of in the base
+        # TestCase class.
+        old_visual = os.environ.get(str('VISUAL'))
+        old_editor = os.environ.get(str('EDITOR'))
+
+        filename = make_tempfile(b'Test content')
+
+        try:
+            os.environ[str('RBTOOLS_EDITOR')] = 'rbtools-editor'
+            os.environ[str('VISUAL')] = 'visual'
+            os.environ[str('EDITOR')] = 'editor'
+
+            edit_file(filename)
+            self.assertTrue(subprocess.call.last_called_with(
+                ['rbtools-editor', filename]))
+
+            os.environ[str('RBTOOLS_EDITOR')] = ''
+            edit_file(filename)
+            self.assertTrue(subprocess.call.last_called_with(
+                ['visual', filename]))
+
+            os.environ[str('VISUAL')] = ''
+            edit_file(filename)
+            self.assertTrue(subprocess.call.last_called_with(
+                ['editor', filename]))
+
+            os.environ[str('EDITOR')] = ''
+            edit_file(filename)
+            self.assertTrue(subprocess.call.last_called_with(
+                ['vi', filename]))
+        finally:
+            if old_visual:
+                os.environ[str('VISUAL')] = old_visual
+
+            if old_editor:
+                os.environ[str('EDITOR')] = old_editor
+
+    def test_edit_text(self):
+        """Testing edit_text"""
+        result = edit_text('Test content')
+
+        self.assertEqual(result, 'TEST CONTENT')
+
+    def test_edit_text_with_filename(self):
+        """Testing edit_text with custom filename"""
+        self.spy_on(subprocess.call)
+
+        result = edit_text('Test content',
+                           filename='my-custom-filename')
+
+        self.assertEqual(result, 'TEST CONTENT')
+        self.assertEqual(
+            os.path.basename(subprocess.call.last_call.args[0][-1]),
+            'my-custom-filename')
diff --git a/rbtools/utils/tests/test_filesystem.py b/rbtools/utils/tests/test_filesystem.py
new file mode 100644
index 0000000000000000000000000000000000000000..d251084014b9a6ff928eea861ed8792f90e42118
--- /dev/null
+++ b/rbtools/utils/tests/test_filesystem.py
@@ -0,0 +1,77 @@
+"""Unit tests for rbtools.utils.filesystem."""
+
+from __future__ import unicode_literals
+
+import os
+import shutil
+
+from rbtools.utils import filesystem
+from rbtools.utils.filesystem import (cleanup_tempfiles, make_empty_files,
+                                      make_tempdir, make_tempfile)
+from rbtools.utils.testbase import RBTestBase
+
+
+class FilesystemTests(RBTestBase):
+    """Unit tests for rbtools.utils.filesystem."""
+
+    def test_make_tempfile(self):
+        """Testing make_tempfile"""
+        filename = make_tempfile()
+        self.assertIn(filename, filesystem.tempfiles)
+
+        self.assertTrue(os.path.isfile(filename))
+        self.assertTrue(os.path.basename(filename).startswith('rbtools.'))
+        self.assertEqual(os.stat(filename).st_uid, os.geteuid())
+        self.assertTrue(os.access(filename, os.R_OK | os.W_OK))
+
+    def test_make_tempfile_with_prefix(self):
+        """Testing make_tempfile with prefix"""
+        filename = make_tempfile(prefix='supertest-')
+
+        self.assertIn(filename, filesystem.tempfiles)
+        self.assertTrue(os.path.isfile(filename))
+        self.assertTrue(os.path.basename(filename).startswith('supertest-'))
+        self.assertEqual(os.stat(filename).st_uid, os.geteuid())
+        self.assertTrue(os.access(filename, os.R_OK | os.W_OK))
+
+    def test_make_tempfile_with_suffix(self):
+        """Testing make_tempfile with suffix"""
+        filename = make_tempfile(suffix='.xyz')
+
+        self.assertIn(filename, filesystem.tempfiles)
+        self.assertTrue(os.path.isfile(filename))
+        self.assertTrue(os.path.basename(filename).startswith('rbtools.'))
+        self.assertTrue(os.path.basename(filename).endswith('.xyz'))
+        self.assertEqual(os.stat(filename).st_uid, os.geteuid())
+        self.assertTrue(os.access(filename, os.R_OK | os.W_OK))
+
+    def test_make_tempfile_with_filename(self):
+        """Testing make_tempfile with filename"""
+        filename = make_tempfile(filename='TEST123')
+
+        self.assertIn(filename, filesystem.tempfiles)
+        self.assertEqual(os.path.basename(filename), 'TEST123')
+        self.assertTrue(os.path.isfile(filename))
+        self.assertTrue(os.access(filename, os.R_OK | os.W_OK))
+        self.assertEqual(os.stat(filename).st_uid, os.geteuid())
+
+        parent_dir = os.path.dirname(filename)
+        self.assertIn(parent_dir, filesystem.tempdirs)
+        self.assertTrue(os.access(parent_dir, os.R_OK | os.W_OK | os.X_OK))
+        self.assertEqual(os.stat(parent_dir).st_uid, os.geteuid())
+
+    def test_make_empty_files(self):
+        """Testing make_empty_files"""
+        # Use make_tempdir to get a unique directory name
+        tmpdir = make_tempdir()
+        self.assertTrue(os.path.isdir(tmpdir))
+        cleanup_tempfiles()
+
+        fname = os.path.join(tmpdir, 'file')
+        make_empty_files([fname])
+        self.assertTrue(os.path.isdir(tmpdir))
+        self.assertTrue(os.path.isfile(fname))
+        self.assertEqual(os.stat(fname).st_uid, os.geteuid())
+        self.assertTrue(os.access(fname, os.R_OK | os.W_OK))
+
+        shutil.rmtree(tmpdir, ignore_errors=True)
diff --git a/rbtools/utils/tests/test_process.py b/rbtools/utils/tests/test_process.py
new file mode 100644
index 0000000000000000000000000000000000000000..903d40b34f1b3ee2918280f9c9c3878fda9a46f7
--- /dev/null
+++ b/rbtools/utils/tests/test_process.py
@@ -0,0 +1,18 @@
+"""Unit tests for rbtools.utils.process."""
+
+from __future__ import unicode_literals
+
+import re
+import sys
+
+from rbtools.utils.process import execute
+from rbtools.utils.testbase import RBTestBase
+
+
+class ProcessTests(RBTestBase):
+    """Unit tests for rbtools.utils.process."""
+
+    def test_execute(self):
+        """Testing execute"""
+        self.assertTrue(re.match('.*?%d.%d.%d' % sys.version_info[:3],
+                        execute([sys.executable, '-V'])))
