git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
	"Brandon Williams" <bmwill@google.com>,
	"Jeff King" <peff@peff.net>,
	"Joachim Durchholz" <jo@durchholz.org>,
	"Stefan Beller" <sbeller@google.com>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
Subject: [PATCH 0/2] test: Detect *lots* of bugs by adding non-alnum to trash dir names
Date: Sun,  9 Apr 2017 19:11:15 +0000	[thread overview]
Message-ID: <20170409191117.25175-1-avarab@gmail.com> (raw)

There's a patch now on the ML for an issue with read v.s. read -r in
submodule revealed when the submodule name contains a \.

That fix is fine, but we should do better and structurally arrange our
tests to detect these sorts of issues before they're reported.

This series changes the test library so that we interpolate the result
of:

    perl -e 'print join q[], grep { /[^[:alnum:]]/ and !m<[./]> } map chr, 0x01..0x7f'

Into the trash directory name we generate. Doing this makes 30% of the
test suite fail. Most of the diffstat below is just adding:

    test_fails_on_unusual_directory_names=1

To those tests that failed, which makes them not use these garbage
trash directory names.

Some of those failures are legitimate bugs, some are an artifact of us
using shellscripting as our test language (namely interpolating ' and
" somewhere).

It might make sense to mark these tests more granularly, e.g.:

    test_fails_on_unusual_directory_name_types=quotes

etc., if the test fails just because of " or ', but I think as it is
this makes sense for inclusion, it makes sure we don't regress on the
remaining 70% of our test suite.

Ævar Arnfjörð Bjarmason (2):
  tests: mark tests that fail when the TEST_DIRECTORY is unusual
  test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY
    name

 t/README                                         | 12 ++++++++++++
 t/t0000-basic.sh                                 |  2 ++
 t/t0003-attributes.sh                            |  1 +
 t/t0021-conversion.sh                            |  1 +
 t/t0060-path-utils.sh                            |  1 +
 t/t0300-credentials.sh                           |  1 +
 t/t0302-credential-store.sh                      |  1 +
 t/t1006-cat-file.sh                              |  1 +
 t/t1013-read-tree-submodule.sh                   |  1 +
 t/t1020-subdirectory.sh                          |  1 +
 t/t1050-large.sh                                 |  1 +
 t/t1060-object-corruption.sh                     |  1 +
 t/t1300-repo-config.sh                           |  1 +
 t/t1305-config-include.sh                        |  1 +
 t/t1308-config-set.sh                            |  1 +
 t/t1309-early-config.sh                          |  1 +
 t/t1500-rev-parse.sh                             |  1 +
 t/t1504-ceiling-dirs.sh                          |  1 +
 t/t1507-rev-parse-upstream.sh                    |  1 +
 t/t1510-repo-setup.sh                            |  1 +
 t/t1515-rev-parse-outside-repo.sh                |  1 +
 t/t2013-checkout-submodule.sh                    |  1 +
 t/t2025-worktree-add.sh                          |  1 +
 t/t2027-worktree-list.sh                         |  1 +
 t/t2028-worktree-move.sh                         |  1 +
 t/t3040-subprojects-basic.sh                     |  1 +
 t/t3050-subprojects-fetch.sh                     |  1 +
 t/t3409-rebase-preserve-merges.sh                |  1 +
 t/t3426-rebase-submodule.sh                      |  1 +
 t/t3501-revert-cherry-pick.sh                    |  1 +
 t/t3512-cherry-pick-submodule.sh                 |  1 +
 t/t3513-revert-submodule.sh                      |  1 +
 t/t3600-rm.sh                                    |  1 +
 t/t3900-i18n-commit.sh                           |  1 +
 t/t3906-stash-submodule.sh                       |  1 +
 t/t4027-diff-submodule.sh                        |  1 +
 t/t4030-diff-textconv.sh                         |  1 +
 t/t4031-diff-rewrite-binary.sh                   |  1 +
 t/t4035-diff-quiet.sh                            |  1 +
 t/t4041-diff-submodule-option.sh                 |  1 +
 t/t4059-diff-submodule-not-initialized.sh        |  1 +
 t/t4060-diff-submodule-option-diff-format.sh     |  1 +
 t/t4137-apply-submodule.sh                       |  1 +
 t/t4203-mailmap.sh                               |  1 +
 t/t4207-log-decoration-colors.sh                 |  1 +
 t/t4255-am-submodule.sh                          |  1 +
 t/t5000-tar-tree.sh                              |  1 +
 t/t5001-archive-attr.sh                          |  1 +
 t/t5002-archive-attr-pattern.sh                  |  1 +
 t/t5003-archive-zip.sh                           |  1 +
 t/t5150-request-pull.sh                          |  1 +
 t/t5300-pack-object.sh                           |  1 +
 t/t5304-prune.sh                                 |  1 +
 t/t5305-include-tag.sh                           |  1 +
 t/t5306-pack-nobase.sh                           |  1 +
 t/t5310-pack-bitmaps.sh                          |  1 +
 t/t5311-pack-bitmaps-shallow.sh                  |  1 +
 t/t5400-send-pack.sh                             |  1 +
 t/t5401-update-hooks.sh                          |  1 +
 t/t5402-post-merge-hook.sh                       |  1 +
 t/t5403-post-checkout-hook.sh                    |  1 +
 t/t5404-tracking-branches.sh                     |  1 +
 t/t5406-remote-rejects.sh                        |  1 +
 t/t5407-post-rewrite-hook.sh                     |  1 +
 t/t5500-fetch-pack.sh                            |  1 +
 t/t5501-fetch-push-alternates.sh                 |  1 +
 t/t5502-quickfetch.sh                            |  1 +
 t/t5505-remote.sh                                |  1 +
 t/t5509-fetch-push-namespaces.sh                 |  1 +
 t/t5510-fetch.sh                                 |  1 +
 t/t5512-ls-remote.sh                             |  1 +
 t/t5514-fetch-multiple.sh                        |  1 +
 t/t5515-fetch-merge-logic.sh                     |  1 +
 t/t5516-fetch-push.sh                            |  1 +
 t/t5519-push-alternates.sh                       |  1 +
 t/t5520-pull.sh                                  |  1 +
 t/t5521-pull-options.sh                          |  1 +
 t/t5522-pull-symlink.sh                          |  1 +
 t/t5524-pull-msg.sh                              |  1 +
 t/t5525-fetch-tagopt.sh                          |  1 +
 t/t5526-fetch-submodules.sh                      |  1 +
 t/t5527-fetch-odd-refs.sh                        |  1 +
 t/t5531-deep-submodule-push.sh                   |  1 +
 t/t5533-push-cas.sh                              |  1 +
 t/t5535-fetch-push-symref.sh                     |  1 +
 t/t5536-fetch-conflicts.sh                       |  1 +
 t/t5537-fetch-shallow.sh                         |  1 +
 t/t5538-push-shallow.sh                          |  1 +
 t/t5539-fetch-http-shallow.sh                    |  1 +
 t/t5540-http-push-webdav.sh                      |  1 +
 t/t5541-http-push-smart.sh                       |  1 +
 t/t5542-push-http-shallow.sh                     |  1 +
 t/t5544-pack-objects-hook.sh                     |  1 +
 t/t5545-push-options.sh                          |  1 +
 t/t5547-push-quarantine.sh                       |  1 +
 t/t5550-http-fetch-dumb.sh                       |  1 +
 t/t5551-http-fetch-smart.sh                      |  1 +
 t/t5560-http-backend-noserver.sh                 |  1 +
 t/t5561-http-backend.sh                          |  1 +
 t/t5570-git-daemon.sh                            |  1 +
 t/t5572-pull-submodule.sh                        |  1 +
 t/t5600-clone-fail-cleanup.sh                    |  1 +
 t/t5601-clone.sh                                 |  1 +
 t/t5604-clone-reference.sh                       |  1 +
 t/t5605-clone-local.sh                           |  1 +
 t/t5606-clone-options.sh                         |  1 +
 t/t5609-clone-branch.sh                          |  1 +
 t/t5610-clone-detached.sh                        |  1 +
 t/t5611-clone-config.sh                          |  1 +
 t/t5612-clone-refspec.sh                         |  1 +
 t/t5613-info-alternate.sh                        |  1 +
 t/t5614-clone-submodules.sh                      |  1 +
 t/t5615-alternate-env.sh                         |  1 +
 t/t5801-remote-helpers.sh                        |  1 +
 t/t5802-connect-helper.sh                        |  1 +
 t/t5810-proto-disable-local.sh                   |  1 +
 t/t5812-proto-disable-http.sh                    |  1 +
 t/t5813-proto-disable-ssh.sh                     |  1 +
 t/t5814-proto-disable-ext.sh                     |  1 +
 t/t5815-submodule-protos.sh                      |  1 +
 t/t5900-repo-selection.sh                        |  1 +
 t/t6008-rev-list-submodule.sh                    |  1 +
 t/t6030-bisect-porcelain.sh                      |  1 +
 t/t6040-tracking-info.sh                         |  1 +
 t/t6041-bisect-submodule.sh                      |  1 +
 t/t6050-replace.sh                               |  1 +
 t/t6060-merge-index.sh                           |  1 +
 t/t6134-pathspec-in-submodule.sh                 |  1 +
 t/t6200-fmt-merge-msg.sh                         |  1 +
 t/t6500-gc.sh                                    |  1 +
 t/t7001-mv.sh                                    |  1 +
 t/t7003-filter-branch.sh                         |  1 +
 t/t7005-editor.sh                                |  1 +
 t/t7006-pager.sh                                 |  1 +
 t/t7008-grep-binary.sh                           |  1 +
 t/t7010-setup.sh                                 |  1 +
 t/t7064-wtstatus-pv2.sh                          |  1 +
 t/t7103-reset-bare.sh                            |  1 +
 t/t7112-reset-submodule.sh                       |  1 +
 t/t7300-clean.sh                                 |  1 +
 t/t7400-submodule-basic.sh                       |  1 +
 t/t7402-submodule-rebase.sh                      |  1 +
 t/t7403-submodule-sync.sh                        |  1 +
 t/t7405-submodule-merge.sh                       |  1 +
 t/t7406-submodule-update.sh                      |  1 +
 t/t7407-submodule-foreach.sh                     |  1 +
 t/t7408-submodule-reference.sh                   |  1 +
 t/t7409-submodule-detached-work-tree.sh          |  1 +
 t/t7410-submodule-checkout-to.sh                 |  1 +
 t/t7411-submodule-config.sh                      |  1 +
 t/t7413-submodule-is-active.sh                   |  1 +
 t/t7504-commit-msg-hook.sh                       |  1 +
 t/t7506-status-submodule.sh                      |  1 +
 t/t7507-commit-verbose.sh                        |  1 +
 t/t7517-per-repo-email.sh                        |  1 +
 t/t7613-merge-submodule.sh                       |  1 +
 t/t7700-repack.sh                                |  1 +
 t/t7800-difftool.sh                              |  1 +
 t/t7810-grep.sh                                  |  1 +
 t/t7814-grep-recurse-submodules.sh               |  1 +
 t/t9001-send-email.sh                            |  1 +
 t/t9020-remote-svn.sh                            |  1 +
 t/t9100-git-svn-basic.sh                         |  1 +
 t/t9101-git-svn-props.sh                         |  1 +
 t/t9102-git-svn-deep-rmdir.sh                    |  1 +
 t/t9103-git-svn-tracked-directory-removed.sh     |  1 +
 t/t9104-git-svn-follow-parent.sh                 |  1 +
 t/t9105-git-svn-commit-diff.sh                   |  1 +
 t/t9106-git-svn-commit-diff-clobber.sh           |  1 +
 t/t9107-git-svn-migrate.sh                       |  1 +
 t/t9108-git-svn-glob.sh                          |  1 +
 t/t9109-git-svn-multi-glob.sh                    |  1 +
 t/t9110-git-svn-use-svm-props.sh                 |  1 +
 t/t9114-git-svn-dcommit-merge.sh                 |  1 +
 t/t9115-git-svn-dcommit-funky-renames.sh         |  1 +
 t/t9116-git-svn-log.sh                           |  1 +
 t/t9117-git-svn-init-clone.sh                    |  1 +
 t/t9118-git-svn-funky-branch-names.sh            |  1 +
 t/t9120-git-svn-clone-with-percent-escapes.sh    |  1 +
 t/t9122-git-svn-author.sh                        |  1 +
 t/t9123-git-svn-rebuild-with-rewriteroot.sh      |  1 +
 t/t9124-git-svn-dcommit-auto-props.sh            |  1 +
 t/t9125-git-svn-multi-glob-branch-names.sh       |  1 +
 t/t9127-git-svn-partial-rebuild.sh               |  1 +
 t/t9128-git-svn-cmd-branch.sh                    |  1 +
 t/t9129-git-svn-i18n-commitencoding.sh           |  1 +
 t/t9131-git-svn-empty-symlink.sh                 |  1 +
 t/t9132-git-svn-broken-symlink.sh                |  1 +
 t/t9133-git-svn-nested-git-repo.sh               |  1 +
 t/t9134-git-svn-ignore-paths.sh                  |  1 +
 t/t9137-git-svn-dcommit-clobber-series.sh        |  1 +
 t/t9138-git-svn-authors-prog.sh                  |  1 +
 t/t9140-git-svn-reset.sh                         |  1 +
 t/t9141-git-svn-multiple-branches.sh             |  1 +
 t/t9142-git-svn-shallow-clone.sh                 |  1 +
 t/t9143-git-svn-gc.sh                            |  1 +
 t/t9144-git-svn-old-rev_map.sh                   |  1 +
 t/t9145-git-svn-master-branch.sh                 |  1 +
 t/t9146-git-svn-empty-dirs.sh                    |  1 +
 t/t9147-git-svn-include-paths.sh                 |  1 +
 t/t9148-git-svn-propset.sh                       |  1 +
 t/t9150-svk-mergetickets.sh                      |  1 +
 t/t9151-svn-mergeinfo.sh                         |  1 +
 t/t9153-git-svn-rewrite-uuid.sh                  |  1 +
 t/t9154-git-svn-fancy-glob.sh                    |  1 +
 t/t9155-git-svn-fetch-deleted-tag.sh             |  1 +
 t/t9156-git-svn-fetch-deleted-tag-2.sh           |  1 +
 t/t9157-git-svn-fetch-merge.sh                   |  1 +
 t/t9158-git-svn-mergeinfo.sh                     |  1 +
 t/t9159-git-svn-no-parent-mergeinfo.sh           |  1 +
 t/t9160-git-svn-preserve-empty-dirs.sh           |  1 +
 t/t9161-git-svn-mergeinfo-push.sh                |  1 +
 t/t9162-git-svn-dcommit-interactive.sh           |  1 +
 t/t9163-git-svn-reset-clears-caches.sh           |  1 +
 t/t9164-git-svn-dcommit-concurrent.sh            |  1 +
 t/t9165-git-svn-fetch-merge-branch-of-branch.sh  |  1 +
 t/t9166-git-svn-fetch-merge-branch-of-branch2.sh |  1 +
 t/t9167-git-svn-cmd-branch-subproject.sh         |  1 +
 t/t9168-git-svn-partially-globbed-names.sh       |  1 +
 t/t9200-git-cvsexportcommit.sh                   |  1 +
 t/t9300-fast-import.sh                           |  1 +
 t/t9350-fast-export.sh                           |  1 +
 t/t9400-git-cvsserver-server.sh                  |  1 +
 t/t9401-git-cvsserver-crlf.sh                    |  1 +
 t/t9402-git-cvsserver-refs.sh                    |  1 +
 t/t9500-gitweb-standalone-no-errors.sh           |  1 +
 t/t9502-gitweb-standalone-parse-output.sh        |  1 +
 t/t9600-cvsimport.sh                             |  1 +
 t/t9601-cvsimport-vendor-branch.sh               |  1 +
 t/t9602-cvsimport-branches-tags.sh               |  1 +
 t/t9604-cvsimport-timestamps.sh                  |  1 +
 t/t9700-perl-git.sh                              |  1 +
 t/t9902-completion.sh                            |  1 +
 t/test-lib.sh                                    |  4 ++++
 234 files changed, 249 insertions(+)

-- 
2.11.0


             reply	other threads:[~2017-04-09 19:11 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-04-09 19:11 Ævar Arnfjörð Bjarmason [this message]
2017-04-09 19:11 ` [PATCH 1/2] tests: mark tests that fail when the TEST_DIRECTORY is unusual Ævar Arnfjörð Bjarmason
2017-04-09 19:11 ` [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name Ævar Arnfjörð Bjarmason
2017-04-10  1:47   ` SZEDER Gábor
2017-04-10  8:02     ` Ævar Arnfjörð Bjarmason
2017-04-10 11:19       ` SZEDER Gábor
2017-04-10 11:40         ` Ævar Arnfjörð Bjarmason
2017-04-10 13:38           ` Jeff King
2017-04-10 14:59             ` Joachim Durchholz
2017-04-10 16:57               ` Jeff King
2017-04-10 18:19                 ` Joachim Durchholz
2017-04-10 19:22                   ` Jeff King
2017-04-10 13:43           ` SZEDER Gábor
2017-04-10 23:23   ` Ævar Arnfjörð Bjarmason
2017-04-11  0:30     ` [PATCH] connect.c: handle errors from split_cmdline Jeff King
2017-04-11  0:35       ` Jeff King
2017-04-11  9:27         ` Ævar Arnfjörð Bjarmason
2017-04-11 10:54           ` Jeff King
2017-04-11 11:06             ` Ævar Arnfjörð Bjarmason
2017-04-17  0:51               ` Junio C Hamano
2017-04-17  0:54               ` Junio C Hamano
2017-04-19 10:59                 ` Ævar Arnfjörð Bjarmason
2017-04-11  1:14     ` [PATCH 2/2] test-lib: exhaustively insert non-alnum ASCII into the TRASH_DIRECTORY name Jeff King
2017-04-11  6:28     ` Joachim Durchholz
2017-04-09 20:37 ` [PATCH 0/2] test: Detect *lots* of bugs by adding non-alnum to trash dir names Joachim Durchholz

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170409191117.25175-1-avarab@gmail.com \
    --to=avarab@gmail.com \
    --cc=bmwill@google.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=jo@durchholz.org \
    --cc=peff@peff.net \
    --cc=sbeller@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).