code.gitea.io/gitea@v1.22.3/modules/git/git_test.go (about)

     1  // Copyright 2019 The Gitea Authors. All rights reserved.
     2  // SPDX-License-Identifier: MIT
     3  
     4  package git
     5  
     6  import (
     7  	"context"
     8  	"fmt"
     9  	"os"
    10  	"strings"
    11  	"testing"
    12  
    13  	"code.gitea.io/gitea/modules/setting"
    14  	"code.gitea.io/gitea/modules/util"
    15  
    16  	"github.com/hashicorp/go-version"
    17  	"github.com/stretchr/testify/assert"
    18  )
    19  
    20  func testRun(m *testing.M) error {
    21  	gitHomePath, err := os.MkdirTemp(os.TempDir(), "git-home")
    22  	if err != nil {
    23  		return fmt.Errorf("unable to create temp dir: %w", err)
    24  	}
    25  	defer util.RemoveAll(gitHomePath)
    26  	setting.Git.HomePath = gitHomePath
    27  
    28  	if err = InitFull(context.Background()); err != nil {
    29  		return fmt.Errorf("failed to call Init: %w", err)
    30  	}
    31  
    32  	exitCode := m.Run()
    33  	if exitCode != 0 {
    34  		return fmt.Errorf("run test failed, ExitCode=%d", exitCode)
    35  	}
    36  	return nil
    37  }
    38  
    39  func TestMain(m *testing.M) {
    40  	if err := testRun(m); err != nil {
    41  		_, _ = fmt.Fprintf(os.Stderr, "Test failed: %v", err)
    42  		os.Exit(1)
    43  	}
    44  }
    45  
    46  func gitConfigContains(sub string) bool {
    47  	if b, err := os.ReadFile(HomeDir() + "/.gitconfig"); err == nil {
    48  		return strings.Contains(string(b), sub)
    49  	}
    50  	return false
    51  }
    52  
    53  func TestGitConfig(t *testing.T) {
    54  	assert.False(t, gitConfigContains("key-a"))
    55  
    56  	assert.NoError(t, configSetNonExist("test.key-a", "val-a"))
    57  	assert.True(t, gitConfigContains("key-a = val-a"))
    58  
    59  	assert.NoError(t, configSetNonExist("test.key-a", "val-a-changed"))
    60  	assert.False(t, gitConfigContains("key-a = val-a-changed"))
    61  
    62  	assert.NoError(t, configSet("test.key-a", "val-a-changed"))
    63  	assert.True(t, gitConfigContains("key-a = val-a-changed"))
    64  
    65  	assert.NoError(t, configAddNonExist("test.key-b", "val-b"))
    66  	assert.True(t, gitConfigContains("key-b = val-b"))
    67  
    68  	assert.NoError(t, configAddNonExist("test.key-b", "val-2b"))
    69  	assert.True(t, gitConfigContains("key-b = val-b"))
    70  	assert.True(t, gitConfigContains("key-b = val-2b"))
    71  
    72  	assert.NoError(t, configUnsetAll("test.key-b", "val-b"))
    73  	assert.False(t, gitConfigContains("key-b = val-b"))
    74  	assert.True(t, gitConfigContains("key-b = val-2b"))
    75  
    76  	assert.NoError(t, configUnsetAll("test.key-b", "val-2b"))
    77  	assert.False(t, gitConfigContains("key-b = val-2b"))
    78  
    79  	assert.NoError(t, configSet("test.key-x", "*"))
    80  	assert.True(t, gitConfigContains("key-x = *"))
    81  	assert.NoError(t, configSetNonExist("test.key-x", "*"))
    82  	assert.NoError(t, configUnsetAll("test.key-x", "*"))
    83  	assert.False(t, gitConfigContains("key-x = *"))
    84  }
    85  
    86  func TestSyncConfig(t *testing.T) {
    87  	oldGitConfig := setting.GitConfig
    88  	defer func() {
    89  		setting.GitConfig = oldGitConfig
    90  	}()
    91  
    92  	setting.GitConfig.Options["sync-test.cfg-key-a"] = "CfgValA"
    93  	assert.NoError(t, syncGitConfig())
    94  	assert.True(t, gitConfigContains("[sync-test]"))
    95  	assert.True(t, gitConfigContains("cfg-key-a = CfgValA"))
    96  }
    97  
    98  func TestParseGitVersion(t *testing.T) {
    99  	v, err := parseGitVersionLine("git version 2.29.3")
   100  	assert.NoError(t, err)
   101  	assert.Equal(t, "2.29.3", v.String())
   102  
   103  	v, err = parseGitVersionLine("git version 2.29.3.windows.1")
   104  	assert.NoError(t, err)
   105  	assert.Equal(t, "2.29.3", v.String())
   106  
   107  	_, err = parseGitVersionLine("git version")
   108  	assert.Error(t, err)
   109  
   110  	_, err = parseGitVersionLine("git version windows")
   111  	assert.Error(t, err)
   112  }
   113  
   114  func TestCheckGitVersionCompatibility(t *testing.T) {
   115  	assert.NoError(t, checkGitVersionCompatibility(version.Must(version.NewVersion("2.43.0"))))
   116  	assert.ErrorContains(t, checkGitVersionCompatibility(version.Must(version.NewVersion("2.43.1"))), "regression bug of GIT_FLUSH")
   117  	assert.NoError(t, checkGitVersionCompatibility(version.Must(version.NewVersion("2.43.2"))))
   118  }