@@ -2,12 +2,15 @@ package config
22
33import (
44 "os"
5+ "sync"
56 "testing"
67 "time"
78
89 "github.com/stretchr/testify/assert"
910)
1011
12+ var mockMu sync.Mutex
13+
1114var cfg = CLIConfig {
1215 Host : "deepsource.io" ,
1316 User : "test" ,
@@ -82,13 +85,18 @@ func TestConfigWriteFile(t *testing.T) {
8285
8386 t .Run ("error when tomlMarshal fails" , func (t * testing.T ) {
8487 // Save original function
88+ mockMu .Lock ()
8589 originalTomlMarshalFn := tomlMarshalFn
86- defer func () { tomlMarshalFn = originalTomlMarshalFn }()
87-
88- // Mock tomlMarshalFn to return an error
89- tomlMarshalFn = func (v interface {}) ([]byte , error ) {
90+ tomlMarshalFn = func (_ interface {}) ([]byte , error ) {
9091 return nil , assert .AnError
9192 }
93+ mockMu .Unlock ()
94+
95+ defer func () {
96+ mockMu .Lock ()
97+ tomlMarshalFn = originalTomlMarshalFn
98+ mockMu .Unlock ()
99+ }()
92100
93101 testCfg := CLIConfig {
94102 Host : "deepsource.io" ,
@@ -102,13 +110,18 @@ func TestConfigWriteFile(t *testing.T) {
102110
103111 t .Run ("error when configDir fails" , func (t * testing.T ) {
104112 // Save original function
113+ mockMu .Lock ()
105114 originalConfigDirFn := configDirFn
106- defer func () { configDirFn = originalConfigDirFn }()
107-
108- // Mock configDirFn to return an error
109115 configDirFn = func () (string , error ) {
110116 return "" , assert .AnError
111117 }
118+ mockMu .Unlock ()
119+
120+ defer func () {
121+ mockMu .Lock ()
122+ configDirFn = originalConfigDirFn
123+ mockMu .Unlock ()
124+ }()
112125
113126 testCfg := CLIConfig {
114127 Host : "deepsource.io" ,
@@ -122,13 +135,18 @@ func TestConfigWriteFile(t *testing.T) {
122135
123136 t .Run ("error when MkdirAll fails" , func (t * testing.T ) {
124137 // Save original functions
138+ mockMu .Lock ()
125139 originalOsMkdirAllFn := osMkdirAllFn
126- defer func () { osMkdirAllFn = originalOsMkdirAllFn }()
127-
128- // Mock osMkdirAllFn to return an error
129- osMkdirAllFn = func (path string , perm os.FileMode ) error {
140+ osMkdirAllFn = func (_ string , _ os.FileMode ) error {
130141 return assert .AnError
131142 }
143+ mockMu .Unlock ()
144+
145+ defer func () {
146+ mockMu .Lock ()
147+ osMkdirAllFn = originalOsMkdirAllFn
148+ mockMu .Unlock ()
149+ }()
132150
133151 testCfg := CLIConfig {
134152 Host : "deepsource.io" ,
@@ -142,9 +160,8 @@ func TestConfigWriteFile(t *testing.T) {
142160
143161 t .Run ("error when configPath fails after MkdirAll" , func (t * testing.T ) {
144162 // Save original function
163+ mockMu .Lock ()
145164 originalConfigDirFn := configDirFn
146- defer func () { configDirFn = originalConfigDirFn }()
147-
148165 // Mock configDirFn to succeed first time (for configDir) but fail second time (for configPath)
149166 callCount := 0
150167 configDirFn = func () (string , error ) {
@@ -154,6 +171,13 @@ func TestConfigWriteFile(t *testing.T) {
154171 }
155172 return "" , assert .AnError
156173 }
174+ mockMu .Unlock ()
175+
176+ defer func () {
177+ mockMu .Lock ()
178+ configDirFn = originalConfigDirFn
179+ mockMu .Unlock ()
180+ }()
157181
158182 testCfg := CLIConfig {
159183 Host : "deepsource.io" ,
@@ -166,14 +190,18 @@ func TestConfigWriteFile(t *testing.T) {
166190 })
167191
168192 t .Run ("error when WriteFile fails" , func (t * testing.T ) {
169- // Save original function
193+ mockMu . Lock ()
170194 originalOsWriteFileFn := osWriteFileFn
171- defer func () { osWriteFileFn = originalOsWriteFileFn }()
172-
173- // Mock osWriteFileFn to return an error
174- osWriteFileFn = func (name string , data []byte , perm os.FileMode ) error {
195+ osWriteFileFn = func (_ string , _ []byte , _ os.FileMode ) error {
175196 return assert .AnError
176197 }
198+ mockMu .Unlock ()
199+
200+ defer func () {
201+ mockMu .Lock ()
202+ osWriteFileFn = originalOsWriteFileFn
203+ mockMu .Unlock ()
204+ }()
177205
178206 testCfg := CLIConfig {
179207 Host : "deepsource.io" ,
0 commit comments