2019-06-19 19:53:37 +03:00
// Copyright 2019 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2019-06-19 19:53:37 +03:00
package git
import (
2019-12-15 12:51:28 +03:00
"context"
2019-06-19 19:53:37 +03:00
"fmt"
"os"
"testing"
2021-06-25 19:54:08 +03:00
2022-06-10 04:57:49 +03:00
"code.gitea.io/gitea/modules/setting"
"code.gitea.io/gitea/modules/util"
2024-02-14 20:18:30 +03:00
"github.com/hashicorp/go-version"
2022-06-10 04:57:49 +03:00
"github.com/stretchr/testify/assert"
2019-06-19 19:53:37 +03:00
)
2022-06-10 04:57:49 +03:00
func testRun ( m * testing . M ) error {
2022-07-08 11:09:07 +03:00
gitHomePath , err := os . MkdirTemp ( os . TempDir ( ) , "git-home" )
2022-06-10 04:57:49 +03:00
if err != nil {
return fmt . Errorf ( "unable to create temp dir: %w" , err )
}
2022-07-08 11:09:07 +03:00
defer util . RemoveAll ( gitHomePath )
setting . Git . HomePath = gitHomePath
2022-06-10 04:57:49 +03:00
2022-08-09 06:22:24 +03:00
if err = InitFull ( context . Background ( ) ) ; err != nil {
2022-06-10 04:57:49 +03:00
return fmt . Errorf ( "failed to call Init: %w" , err )
}
exitCode := m . Run ( )
if exitCode != 0 {
return fmt . Errorf ( "run test failed, ExitCode=%d" , exitCode )
}
return nil
2019-06-19 19:53:37 +03:00
}
func TestMain ( m * testing . M ) {
2022-06-10 04:57:49 +03:00
if err := testRun ( m ) ; err != nil {
_ , _ = fmt . Fprintf ( os . Stderr , "Test failed: %v" , err )
os . Exit ( 1 )
}
}
2021-06-25 19:54:08 +03:00
2024-02-14 20:18:30 +03:00
func TestParseGitVersion ( t * testing . T ) {
v , err := parseGitVersionLine ( "git version 2.29.3" )
assert . NoError ( t , err )
assert . Equal ( t , "2.29.3" , v . String ( ) )
v , err = parseGitVersionLine ( "git version 2.29.3.windows.1" )
assert . NoError ( t , err )
assert . Equal ( t , "2.29.3" , v . String ( ) )
_ , err = parseGitVersionLine ( "git version" )
assert . Error ( t , err )
_ , err = parseGitVersionLine ( "git version windows" )
assert . Error ( t , err )
}
func TestCheckGitVersionCompatibility ( t * testing . T ) {
assert . NoError ( t , checkGitVersionCompatibility ( version . Must ( version . NewVersion ( "2.43.0" ) ) ) )
assert . ErrorContains ( t , checkGitVersionCompatibility ( version . Must ( version . NewVersion ( "2.43.1" ) ) ) , "regression bug of GIT_FLUSH" )
assert . NoError ( t , checkGitVersionCompatibility ( version . Must ( version . NewVersion ( "2.43.2" ) ) ) )
}