X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/450cf2524ff41b2a0fcea09e2e6ccbf3bdbf78ed..2666c3b726d190511f072db9e6606a1a99936968:/services/api/test/unit/commit_test.rb diff --git a/services/api/test/unit/commit_test.rb b/services/api/test/unit/commit_test.rb index 301e071f66..af365b19e2 100644 --- a/services/api/test/unit/commit_test.rb +++ b/services/api/test/unit/commit_test.rb @@ -1,3 +1,7 @@ +# Copyright (C) The Arvados Authors. All rights reserved. +# +# SPDX-License-Identifier: AGPL-3.0 + require 'test_helper' require 'helpers/git_test_helper' @@ -18,7 +22,15 @@ class CommitTest < ActiveSupport::TestCase test 'find_commit_range does not bypass permissions' do authorize_with :inactive assert_raises ArgumentError do - c = Commit.find_commit_range 'foo', nil, 'master', [] + Commit.find_commit_range 'foo', nil, 'master', [] + end + end + + def must_pipe(cmd) + begin + return IO.read("|#{cmd}") + ensure + assert $?.success? end end @@ -68,10 +80,51 @@ class CommitTest < ActiveSupport::TestCase authorize_with :active gitint = "git --git-dir #{Rails.configuration.git_internal_dir}" IO.read("|#{gitint} tag -d testtag 2>/dev/null") # "no such tag", fine - assert_match /^fatal: /, IO.read("|#{gitint} show testtag 2>&1") + assert_match(/^fatal: /, IO.read("|#{gitint} show testtag 2>&1")) refute $?.success? Commit.tag_in_internal_repository 'active/foo', '31ce37fe365b3dc204300a3e4c396ad333ed0556', 'testtag' - assert_match /^commit 31ce37f/, IO.read("|#{gitint} show testtag") + assert_match(/^commit 31ce37f/, IO.read("|#{gitint} show testtag")) + assert $?.success? + end + + def with_foo_repository + Dir.chdir("#{Rails.configuration.git_repositories_dir}/#{repositories(:foo).uuid}") do + must_pipe("git checkout master 2>&1") + yield + end + end + + test 'tag_in_internal_repository, new non-tip sha1 in local repo' do + tag = "tag#{rand(10**10)}" + sha1 = nil + with_foo_repository do + must_pipe("git checkout -b branch-#{rand(10**10)} 2>&1") + must_pipe("echo -n #{tag.shellescape} >bar") + must_pipe("git add bar") + must_pipe("git -c user.email=x@x -c user.name=X commit -m -") + sha1 = must_pipe("git log -n1 --format=%H").strip + must_pipe("git rm bar") + must_pipe("git -c user.email=x@x -c user.name=X commit -m -") + end + Commit.tag_in_internal_repository 'active/foo', sha1, tag + gitint = "git --git-dir #{Rails.configuration.git_internal_dir.shellescape}" + assert_match(/^commit /, IO.read("|#{gitint} show #{tag.shellescape}")) + assert $?.success? + end + + test 'tag_in_internal_repository, new unreferenced sha1 in local repo' do + tag = "tag#{rand(10**10)}" + sha1 = nil + with_foo_repository do + must_pipe("echo -n #{tag.shellescape} >bar") + must_pipe("git add bar") + must_pipe("git -c user.email=x@x -c user.name=X commit -m -") + sha1 = must_pipe("git log -n1 --format=%H").strip + must_pipe("git reset --hard HEAD^") + end + Commit.tag_in_internal_repository 'active/foo', sha1, tag + gitint = "git --git-dir #{Rails.configuration.git_internal_dir.shellescape}" + assert_match(/^commit /, IO.read("|#{gitint} show #{tag.shellescape}")) assert $?.success? end