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 }