// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package test

import (
	"time"

	"v.io/jiri"
	"v.io/jiri/collect"
	"v.io/jiri/runutil"
	"v.io/x/devtools/internal/test"
	"v.io/x/lib/envvar"
)

// runMakefileTest is a helper for running tests through make commands.
func runMakefileTest(jirix *jiri.X, testName, testDir, target string, env map[string]string, profiles []string, timeout time.Duration) (_ *test.Result, e error) {
	return runMakefileTestWithExtraDeps(jirix, testName, testDir, target, env, profiles, nil, timeout)
}

// runMakefileTestWithExtraDeps is a helper for running tests through make commands with extra dependencies.
func runMakefileTestWithExtraDeps(jirix *jiri.X, testName, testDir, target string, env map[string]string, profiles []string, initExtraDeps func() (func() error, error), timeout time.Duration) (_ *test.Result, e error) {
	// Install base profile first, before any test-specific profiles.
	profiles = append([]string{"v23:base"}, profiles...)

	// Initialize the test.
	cleanup, err := initTest(jirix, testName, profiles)
	if err != nil {
		return nil, newInternalError(err, "Init")
	}
	defer collect.Error(func() error { return cleanup() }, &e)
	if initExtraDeps != nil {
		cleanup, err := initExtraDeps()
		if err != nil {
			return nil, newInternalError(err, "InitExtraDeps")
		}
		defer collect.Error(func() error { return cleanup() }, &e)
	}

	s := jirix.NewSeq()

	// Set up the environment
	merged := envvar.MergeMaps(jirix.Env(), env)

	// Navigate to project directory, run make clean and make target.
	err = s.Pushd(testDir).
		Verbose(true).
		Run("make", "clean").
		Verbose(true).
		Timeout(timeout).Env(merged).Last("make", target)
	if err != nil {
		if runutil.IsTimeout(err) {
			return &test.Result{
				Status:       test.TimedOut,
				TimeoutValue: timeout,
			}, nil
		} else {
			return nil, newInternalError(err, "Make "+target)
		}
	}

	return &test.Result{Status: test.Passed}, nil
}
