Bug 1304508 - Remove makefile mkdir testing; r?ted
Several years ago, joey starting writing a handful of unit tests for
primitives in our make files. IIRC a lot of the impetus behind this
work was to flush out bugs between GNU make and pymake.
AFAICT the only survivor of these tests today is check_mkdir.py. The
test is a one-off and has been a bit fragile over the years,
contributing technical debt along the way. And as part of removing the
last references to pymake in automation, it is once again showing
itself and failing in a way that has to do with the way the test
is written and not an issue with the code it is testing. Enough is
enough. This commit removes the test and eliminates the technical
debt. I don't think it will be missed.
MozReview-Commit-ID: 3OzurtFbcyD
deleted file mode 100644
--- a/config/tests/makefiles/autodeps/check_mkdir.py
+++ /dev/null
@@ -1,270 +0,0 @@
-#!/usr/bin/env python
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this file,
-# You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-import os
-import sys
-import tempfile
-
-from subprocess import call
-from shutil import rmtree
-
-import logging
-import unittest
-import mozunit
-
-
-def banner():
- """
- Display interpreter and system info for the test env
- """
- print '*' * 75
- cmd = os.path.basename(__file__)
- print "%s: python version is %s" % (cmd, sys.version)
- print '*' * 75
-
-
-def myopts(vals):
- """
- Storage for extra command line args passed.
-
- Returns:
- hash - argparse::Namespace object values
- """
-
- if not hasattr(myopts, 'vals'):
- if 'argparse' in sys.modules:
- tmp = { } # key existance enables unittest module debug
- else:
- tmp = { 'debug': False, 'verbose': False }
-
- for k in dir(vals):
- if k[0:1] == '_':
- continue
- tmp[k] = getattr(vals, k)
- myopts.vals = tmp
-
- return myopts.vals
-
-
-def path2posix(src):
- """
- Normalize directory path syntax
-
- Keyword arguments:
- src - path to normalize
-
- Returns:
- scalar - a file path with drive separators and windows slashes removed
-
- Todo:
- move to {build,config,tools,toolkit}/python for use in a library
- """
-
- ## (drive, tail) = os.path.splitdrive(src)
- ## Support path testing on all platforms
- drive = ''
- winpath = src.find(':')
- if -1 != winpath and 10 > winpath:
- (drive, tail) = src.split(':', 1)
-
- if drive:
- todo = [ '', drive.rstrip(':').lstrip('/').lstrip('\\') ]
- todo.extend( tail.lstrip('/').lstrip('\\').split('\\') ) # c:\a => [a]
- else: # os.name == 'posix'
- todo = src.split('\\')
-
- dst = '/'.join(todo)
- return dst
-
-
-def checkMkdir(work, debug=False):
- """
- Verify arg permutations for directory mutex creation.
-
- Keyword arguments:
- None
-
- Returns:
- Exception on error
-
- Note:
- Exception() rather than self.assertTrue() is used in this test
- function to enable scatch cleanup on test exit/failure conditions.
- Not guaranteed by python closures on early exit.
- """
-
- logging.debug("Testing: checkMkdir")
-
- # On Windows, don't convert paths to POSIX
- skipposix = sys.platform == "win32"
- if skipposix:
- path = os.path.abspath(__file__)
- dirname_fun = os.path.dirname
- else:
- path = path2posix(os.path.abspath(__file__))
- import posixpath
- dirname_fun = posixpath.dirname
-
- src = dirname_fun(path)
- # root is 5 directories up from path
- root = reduce(lambda x, _: dirname_fun(x), xrange(5), path)
-
- rootP = path2posix(root)
- srcP = path2posix(src)
- workP = path2posix(work)
-
- # C:\foo -vs- /c/foo
- # [0] command paths use /c/foo
- # [1] os.path.exists() on mingw() requires C:\
- paths = [
- "mkdir_bycall", # function generated
- "mkdir_bydep", # explicit dependency
- "mkdir_bygen", # by GENERATED_DIRS macro
- ]
-
- ## Use make from the parent "make check" call when available
- cmd = { 'make': 'make' }
- shell0 = os.environ.get('MAKE')
- if shell0:
- shell = os.path.splitext(shell0)[0] # strip: .exe, .py
- if -1 != shell.find('make'):
- print "MAKE COMMAND FOUND: %s" % (shell0)
- cmd['make'] = shell0 if skipposix else path2posix(shell0)
-
- args = []
- args.append('%s' % (cmd['make']))
- args.append('-C %s' % (work if skipposix else workP))
- args.append("-f %s/testor.tmpl" % (src if skipposix else srcP))
- args.append('topsrcdir=%s' % (root if skipposix else rootP))
- args.append('deps_mkdir_bycall=%s' % paths[0])
- args.append('deps_mkdir_bydep=%s' % paths[1])
- args.append('deps_mkdir_bygen=%s' % paths[2])
- args.append('checkup') # target
-
- # Call will fail on mingw with output redirected ?!?
- if debug:
- pass
- if False: # if not debug:
- args.append('>/dev/null')
-
- cmd = '%s' % (' '.join(args))
- logging.debug("Running: %s" % (cmd))
- rc = call(cmd, shell=True)
- if rc:
- raise Exception("make failed ($?=%s): cmd=%s" % (rc, cmd))
-
- for i in paths:
- path = os.path.join(work, i)
- logging.debug("Did testing mkdir(%s) succeed?" % (path))
- if not os.path.exists(path):
- raise Exception("Test path %s does not exist" % (path))
-
-
-def parseargs():
- """
- Support additional command line arguments for testing
-
- Returns:
- hash - arguments of interested parsed from the command line
- """
-
- opts = None
- try:
- import argparse2
- parser = argparse.ArgumentParser()
- parser.add_argument('--debug',
- action="store_true",
- default=False,
- help='Enable debug mode')
- # Cannot overload verbose, Verbose: False enables debugging
- parser.add_argument('--verbose',
- action="store_true",
- default=False,
- help='Enable verbose mode')
- parser.add_argument('unittest_args',
- nargs='*'
- # help='Slurp/pass remaining args to unittest'
- )
- opts = parser.parse_args()
-
- except ImportError:
- pass
-
- return opts
-
-
-class TestMakeLogic(unittest.TestCase):
- """
- Test suite used to validate makefile library rules and macros
- """
-
- def setUp(self):
- opts = myopts(None) # NameSpace object not hash
- self.debug = opts['debug']
- self.verbose = opts['verbose']
-
- if self.debug:
- logging.basicConfig(level=logging.DEBUG)
-
- if self.verbose:
- print
- print "ENVIRONMENT DUMP:"
- print '=' * 75
- for k,v in os.environ.items():
- print "env{%s} => %s" % (k, v)
- print
-
-
- def test_path2posix(self):
-
- todo = {
- '/dev/null' : '/dev/null',
- 'A:\\a\\b\\c' : '/A/a/b/c',
- 'B:/x/y' : '/B/x/y',
- 'C:/x\\y/z' : '/C/x/y/z',
- '//FOO/bar/tans': '//FOO/bar/tans',
- '//X\\a/b\\c/d' : '//X/a/b/c/d',
- '\\c:mozilla\\sandbox': '/c/mozilla/sandbox',
- }
-
- for val,exp in todo.items():
- found = path2posix(val)
- tst = "posix2path(%s): %s != %s)" % (val, exp, found)
- self.assertEqual(exp, found, "%s: invalid path detected" % (tst))
-
-
- def test_mkdir(self):
- """
- Verify directory creation rules and macros
- """
-
- failed = True
-
- # Exception handling is used to cleanup scratch space on error
- try:
- work = tempfile.mkdtemp()
- checkMkdir(work, self.debug)
- failed = False
- finally:
- if os.path.exists(work):
- rmtree(work)
-
- self.assertFalse(failed, "Unit test failure detected")
-
-
-if __name__ == '__main__':
- banner()
- opts = parseargs()
- myopts(opts)
-
- if opts:
- if hasattr(opts, 'unittest_args'):
- sys.argv[1:] = opts.unittest_args
- else:
- sys.argv[1:] = []
-
- mozunit.main()
deleted file mode 100644
--- a/config/tests/makefiles/autodeps/testor.tmpl
+++ /dev/null
@@ -1,64 +0,0 @@
-# -*- makefile -*-
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this file,
-# You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-###########################################################################
-## Intent: Standalone unit tests for makefile rules and target logic
-###########################################################################
-
-deps =$(NULL)
-tgts =$(NULL)
-
-ifdef VERBOSE
- tgts += show
-endif
-
-# Define macros
-include $(topsrcdir)/config/makefiles/makeutils.mk
-include $(topsrcdir)/config/makefiles/autotargets.mk
-
-##########################
-## Verify threadsafe mkdir
-##########################
-ifdef deps_mkdir_bycall
- deps += $(call mkdir_deps,deps_mkdir_bycall)
- tgts += check_mkdir
-endif
-ifdef deps_mkdir_bydep
- deps += $(foreach dir,$(deps_mkdir_bydep),$(dir)/.mkdir.done)
- tgts += check_mkdir
-endif
-ifdef deps_mkdir_bygen
- GENERATED_DIRS += $(deps_mkdir_bygen)
- tgts += check_mkdir
-endif
-
-###########################
-## Minimal environment load
-###########################
-MKDIR ?= mkdir -p
-TOUCH ?= touch
-
-INCLUDED_CONFIG_MK = 1
-MOZILLA_DIR := $(topsrcdir)
-include $(topsrcdir)/config/rules.mk
-
-##-------------------##
-##---] TARGETS [---##
-##-------------------##
-all::
-
-# Quarks:
-# o Use of 'all' would trigger export target processing
-checkup: $(tgts)
-
-# AUTO_DEPS - verify GENERATED_DIRS
-check_mkdir: $(deps) $(AUTO_DEPS)
-
-show:
- @echo "tgts=[$(tgts)]"
- @echo "deps=[$(deps)]"
- find $(dir $(deps)) -print
--- a/config/tests/python.ini
+++ b/config/tests/python.ini
@@ -1,6 +1,5 @@
[test_mozbuild_reading.py]
[unit-expandlibs.py]
[unit-mozunit.py]
[unit-nsinstall.py]
[unit-printprereleasesuffix.py]
-[makefiles/autodeps/check_mkdir.py]