#!/usr/bin/env ruby
# Tests for the automerge plugin.
#
# Required local configuration:
# - gerrit running on 0.0.0.0:29418
# - 2 cloned projects
# - local user must be an owner of these repos

gem "minitest"
require 'minitest/autorun'
require 'json'
require 'open3'

PROJECTS_DIR="~/"
PROJECT1="project1"
PROJECT2="project2"

class TestAutomerge < MiniTest::Test
  HOST = "0.0.0.0"
  PORT = 29418
  GERRIT_SSH = "ssh -p #{PORT} #{HOST}"

  def setup
    clean_local_repo(PROJECT1)
    clean_local_repo(PROJECT2)
    clean_gerrit([PROJECT1, PROJECT2])
  end

  def test_no_topic
    commit_id = create_review(PROJECT1, "review0 on #{PROJECT1}")
    approve_review(commit_id)
    check_status(commit_id, 'MERGED')
  end

  def test_normal_topic_1_repo
    commit_id = create_review(PROJECT1, "review0 on #{PROJECT1}", "topic1")
    check_status(commit_id, 'NEW')
    approve_review(commit_id)
    check_status(commit_id, 'MERGED')
  end

  def test_crossrepo_topic_1_repo
    commit_id = create_review(PROJECT1, "review0 on #{PROJECT1}", "crossrepo/topic1")
    approve_review(commit_id)
    check_status(commit_id, 'MERGED')
  end

  def test_crossrepo_topic_1_repo_over_not_merged_commit
    commit0 = create_review(PROJECT1, "review0 on #{PROJECT1}")
    commit0b = create_review(PROJECT1, "review0b on #{PROJECT1}", "crossrepo/topic1")

    check_last_message_contains(commit0b, "This cross-repo review depends on a not merged commit")
  end

  def test_normal_topic_2_repos
    commit1 = create_review(PROJECT1, "review1 on #{PROJECT1}", "topic2")
    commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", "topic2")
    approve_review(commit1)
    check_status(commit1, 'MERGED')
    check_status(commit2, 'NEW')
    approve_review(commit2)
    check_status(commit2, 'MERGED')
  end

  def test_crossrepo_topic_2_repos
    commit1 = create_review(PROJECT1, "review1 on #{PROJECT1}", "crossrepo/topic2")
    commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", "crossrepo/topic2")
    approve_review(commit1)
    check_status(commit1, 'NEW')
    check_status(commit2, 'NEW')

    approve_review(commit2)

    check_status(commit1, 'MERGED')
    check_status(commit2, 'MERGED')
  end

  def test_crossrepo_topic_2_repos_above_non_mergeable_commit
    commit1a = create_review(PROJECT1, "review1a on #{PROJECT1}")
    commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}", "crossrepo/topic2")
    commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", "crossrepo/topic2")
    approve_review(commit1b)
    check_status(commit1a, 'NEW')
    check_status(commit1b, 'NEW')
    check_status(commit2, 'NEW')

    approve_review(commit2)

    check_last_message_contains(commit2, "blocked by a non merged commit below")
    check_status(commit1a, 'NEW')
    check_status(commit1b, 'NEW')
    check_status(commit2, 'NEW')
  end

 def test_crossrepo_topic_2_repos_below_not_merged_commit
    commit1 = create_review(PROJECT1, "review1 on #{PROJECT1}", "crossrepo/topic2")
    commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}")
    commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", "crossrepo/topic2")
    approve_review(commit1)
    check_status(commit1, 'NEW')
    check_status(commit2, 'NEW')

    approve_review(commit2)

    check_status(commit1, 'MERGED')
    check_status(commit2, 'MERGED')
  end

  def test_refupdatedevent_merge_upper_commit
    commit1a = create_review(PROJECT1, "review1a on #{PROJECT1}")
    commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}")
    approve_review(commit1b)
    check_status(commit1a, 'NEW')
    check_status(commit1b, 'NEW')

    approve_review(commit1a)

    check_status(commit1a, 'MERGED')
    check_status(commit1b, 'MERGED')
  end

 def test_refupdatedevent_merge_upper_crossrepo
    commit1a = create_review(PROJECT1, "review1a on #{PROJECT1}")
    commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}", "crossrepo/topic2")
    commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", "crossrepo/topic2")
    approve_review(commit1b)
    approve_review(commit2)
    check_status(commit1a, 'NEW')
    check_status(commit1b, 'NEW')
    check_status(commit2, 'NEW')

    approve_review(commit1a)

    check_status(commit1a, 'MERGED')
    check_status(commit1b, 'MERGED')
    check_status(commit2, 'MERGED')
  end

  def test_refupdatedevent_does_not_merge_non_mergeable_upper_crossrepo
    commit1a = create_review(PROJECT1, "review1a on #{PROJECT1}")
    commit1b = create_review(PROJECT1, "review1b on #{PROJECT1}", "crossrepo/topic2")
    commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", "crossrepo/topic2")
    approve_review(commit1b)
    check_status(commit1a, 'NEW')
    check_status(commit1b, 'NEW')
    check_status(commit2, 'NEW')

    approve_review(commit1a)

    check_status(commit1a, 'MERGED')
    check_status(commit1b, 'NEW')
    check_status(commit2, 'NEW')
  end

  def test_two_reviews_with_same_changed_id
    commit1 = create_review(PROJECT1, "review1 on #{PROJECT1}")
    change_id = read_change_id(PROJECT1)
    abandon_review(commit1)
    # Reuse Change-Id of abandoned review
    commit2 = create_review(PROJECT2, "review2 on #{PROJECT2}", nil, change_id)

    approve_review(commit2)

    check_status(commit2, 'MERGED')
  end

  private

  def project_dir(project_name)
    "#{PROJECTS_DIR}#{project_name}"
  end

  def clean_local_repo(project_name)
    execute("cd #{project_dir(project_name)} && git fetch && git reset --hard FETCH_HEAD")
  end

  def clean_gerrit(projects)
    projects_query = projects.map{|project| "project:#{project}" }.join(" OR ")
    query = "status:open AND (#{projects_query})"
    reviews = gerrit_query(query)
    reviews.each do |review|
      review_number = review['number']
      execute("#{GERRIT_SSH} gerrit review --abandon #{review_number},1")
    end
  end

  def read_change_id(project_name, commit_id = "HEAD")
    change_id = execute(["cd #{project_dir(project_name)}",
                         "git show #{commit_id} | grep Change-Id | sed 's/^.*Change-Id: \\([Ia-f0-9]*\\)$/\\1/'"
                        ].join(" && "))
    refute(change_id.empty?, "missing change-id")
    change_id
  end

  def create_review(project_name, message, topic = nil, change_id = nil)
    topic_suffix = "/#{topic}" if topic
    message = "#{message}\n\nChange-Id: #{change_id}" if change_id
    execute(["cd #{project_dir(project_name)}",
             "echo 0 >> a",
             "git add .",
             %Q(git commit -m "#{message}"),
             "git push origin HEAD:refs/for/master#{topic_suffix}"
            ].join(" && "))
    commit_id = execute("cd #{project_dir(project_name)} && git rev-parse HEAD")
    refute(commit_id.empty?, "missing commit-id")
    commit_id
  end

  def approve_review(commit_id)
    execute("#{GERRIT_SSH} gerrit review --verified 1 --code-review 2 #{commit_id}")
  end

  def abandon_review(commit_id)
    execute("#{GERRIT_SSH} gerrit review --abandon #{commit_id}")
  end

  def check_status(commit_id, expected_status)
    reviews = gerrit_query("commit:#{commit_id}")
    assert_equal(1, reviews.size, "missing review with commit #{commit_id}")
    review = reviews[0]
    assert_equal(expected_status, review['status'], "wrong status on review: #{review['number']}")
  end

  def check_label(commit_id, label_name, expected_label_value)
    reviews = gerrit_query("commit:#{commit_id}", "--all-approvals")
    assert_equal(1, reviews.size, "missing review with commit #{commit_id}")
    review = reviews[0]
    code_review_approvals = review['patchSets'][0]['approvals'].select {|ap| ap['description'] == "Code-Review"}
    refute(code_review_approvals.empty?)
    assert_equal(expected_label_value, code_review_approvals[0]['value'], "wrong label on review: #{review['number']}")
  end

  def check_last_message_contains(commit_id, expected_content)
    reviews = gerrit_query("commit:#{commit_id}", "--comments")
    assert_equal(1, reviews.size, "missing review with commit #{commit_id}")
    messages = reviews[0]['comments'].map{|comment| comment['message'] }
    assert(messages.last.include?(expected_content), "missing comment containing '#{expected_content}'")
  end

  def gerrit_query(query, options = "")
    jsons = `#{GERRIT_SSH} gerrit query --format JSON #{options} '#{query}' | grep -v type\\"\\:\\"stats`
    hashes = []
    jsons.each_line do |line|
      hashes << JSON.parse(line)
    end
    hashes
  end

  # Run a command as a child process and wait for its end.
  def execute(command, opts={})
    _, stdout, stderr, wait_thr = Open3.popen3(command, opts)
    if wait_thr.value != 0
      puts "Command failed: #{command}: stdout: #{stdout.read}, stderr: #{stderr.read}"
      raise RuntimeError, stderr.read
    end
    return stdout.read
  end
end
