1
1
package database
2
2
3
3
import (
4
+ "errors"
4
5
"go.uber.org/atomic"
5
6
"testing"
6
7
)
@@ -48,12 +49,14 @@ func TestGenerateAdvisoryLockId(t *testing.T) {
48
49
}
49
50
50
51
func TestCasRestoreOnErr (t * testing.T ) {
52
+ casErr := errors .New ("test lock CAS failure" )
53
+ fErr := errors .New ("test callback error" )
54
+
51
55
testcases := []struct {
52
56
name string
53
57
lock * atomic.Bool
54
58
from bool
55
59
to bool
56
- casErr error
57
60
fErr error
58
61
expectLock bool
59
62
expectError error
@@ -63,46 +66,41 @@ func TestCasRestoreOnErr(t *testing.T) {
63
66
lock : atomic .NewBool (false ),
64
67
from : false ,
65
68
to : true ,
66
- casErr : ErrLocked ,
67
69
fErr : nil ,
68
- expectError : nil ,
69
70
expectLock : true ,
71
+ expectError : nil ,
70
72
},
71
73
{
72
74
name : "Test negative CAS lock" ,
73
75
lock : atomic .NewBool (true ),
74
76
from : false ,
75
77
to : true ,
76
- casErr : ErrLocked ,
77
78
fErr : nil ,
78
79
expectLock : true ,
79
- expectError : ErrLocked ,
80
+ expectError : casErr ,
80
81
},
81
82
{
82
83
name : "Test negative with callback lock" ,
83
84
lock : atomic .NewBool (false ),
84
85
from : false ,
85
86
to : true ,
86
- casErr : ErrLocked ,
87
- fErr : ErrNotLocked ,
87
+ fErr : fErr ,
88
88
expectLock : false ,
89
- expectError : ErrNotLocked ,
89
+ expectError : fErr ,
90
90
},
91
91
}
92
92
93
93
for _ , tc := range testcases {
94
94
t .Run (tc .name , func (t * testing.T ) {
95
- err := CasRestoreOnErr (tc .lock , tc .from , tc .to , tc . casErr , func () error {
95
+ if err := CasRestoreOnErr (tc .lock , tc .from , tc .to , casErr , func () error {
96
96
return tc .fErr
97
- })
97
+ }); err != tc .expectError {
98
+ t .Error ("Incorrect error value returned" )
99
+ }
98
100
99
101
if tc .lock .Load () != tc .expectLock {
100
102
t .Error ("Incorrect state of lock" )
101
103
}
102
-
103
- if err != tc .expectError {
104
- t .Error ("Incorrect error value returned" )
105
- }
106
104
})
107
105
}
108
106
}
0 commit comments