1
1
// Copyright (c) HashiCorp, Inc.
2
2
// SPDX-License-Identifier: BUSL-1.1
3
-
4
3
package server
5
4
6
5
import (
@@ -14,6 +13,10 @@ import (
14
13
"github.com/stretchr/testify/require"
15
14
)
16
15
16
+ const (
17
+ removeControllerSql = `delete from server_controller where private_id = $1`
18
+ )
19
+
17
20
func TestRepository_UpsertController (t * testing.T ) {
18
21
ctx := context .Background ()
19
22
conn , _ := db .TestSetup (t , "postgres" )
@@ -22,10 +25,8 @@ func TestRepository_UpsertController(t *testing.T) {
22
25
testKms := kms .TestKms (t , conn , wrapper )
23
26
testRepo , err := NewRepository (ctx , rw , rw , testKms )
24
27
require .NoError (t , err )
25
-
26
28
iamRepo := iam .TestRepo (t , conn , wrapper )
27
29
iam .TestScopes (t , iamRepo )
28
-
29
30
tests := []struct {
30
31
name string
31
32
controller * Controller
@@ -81,3 +82,147 @@ func TestRepository_UpsertController(t *testing.T) {
81
82
})
82
83
}
83
84
}
85
+
86
+ func TestRepository_UpdateControllerStatus (t * testing.T ) {
87
+ ctx := context .Background ()
88
+ conn , _ := db .TestSetup (t , "postgres" )
89
+ rw := db .New (conn )
90
+ wrapper := db .TestWrapper (t )
91
+ testKms := kms .TestKms (t , conn , wrapper )
92
+ testRepo , err := NewRepository (ctx , rw , rw , testKms )
93
+ require .NoError (t , err )
94
+
95
+ iamRepo := iam .TestRepo (t , conn , wrapper )
96
+ iam .TestScopes (t , iamRepo )
97
+
98
+ tests := map [string ]struct {
99
+ originalController * Controller
100
+ updatedController * Controller
101
+ wantCount int
102
+ wantErr bool
103
+ cleanUpFunc func (t * testing.T , rw * db.Db , privateId string )
104
+ }{
105
+ "nil-controller" : {
106
+ wantErr : true ,
107
+ },
108
+ "empty-id" : {
109
+ updatedController : NewController ("" , WithAddress ("127.0.0.1" )),
110
+ wantErr : true ,
111
+ },
112
+ "empty-address" : {
113
+ updatedController : NewController ("test-controller" ),
114
+ wantErr : true ,
115
+ },
116
+ "controller-not-found" : {
117
+ updatedController : NewController ("test-controller" , WithAddress ("127.0.0.1" ), WithDescription ("new ipv4 description" )),
118
+ wantErr : true ,
119
+ },
120
+ "valid-ipv4-controller" : {
121
+ originalController : NewController ("ipv4-controller" , WithAddress ("127.0.0.1" ), WithDescription ("ipv4 description" )),
122
+ updatedController : NewController ("ipv4-controller" , WithAddress ("127.0.0.2" ), WithDescription ("new ipv4 description" )),
123
+ wantCount : 1 ,
124
+ cleanUpFunc : func (t * testing.T , rw * db.Db , privateId string ) {
125
+ t .Helper ()
126
+ c , err := rw .Exec (ctx , removeControllerSql , []any {privateId })
127
+ require .NoError (t , err )
128
+ require .Equal (t , 1 , c )
129
+ },
130
+ },
131
+ "valid-ipv6-controller" : {
132
+ originalController : NewController ("test-ipv6-controller" , WithAddress ("[2001:4860:4860:0:0:0:0:8888]" ), WithDescription ("ipv6 description" )),
133
+ updatedController : NewController ("test-ipv6-controller" , WithAddress ("[2001:4860:4860:0:0:0:0:9999]" ), WithDescription ("new ipv6 description" )),
134
+ wantCount : 1 ,
135
+ cleanUpFunc : func (t * testing.T , rw * db.Db , privateId string ) {
136
+ t .Helper ()
137
+ c , err := rw .Exec (ctx , removeControllerSql , []any {privateId })
138
+ require .NoError (t , err )
139
+ require .Equal (t , 1 , c )
140
+ },
141
+ },
142
+ "valid-abbreviated-ipv6-controller" : {
143
+ originalController : NewController ("test-abbreviated-ipv6-controller" , WithAddress ("[2001:4860:4860::8888]" ), WithDescription ("abbreviated ipv6 description" )),
144
+ updatedController : NewController ("test-abbreviated-ipv6-controller" , WithAddress ("[2001:4860:4860::9999]" ), WithDescription ("new abbreviated ipv6 description" )),
145
+ wantCount : 1 ,
146
+ cleanUpFunc : func (t * testing.T , rw * db.Db , privateId string ) {
147
+ t .Helper ()
148
+ c , err := rw .Exec (ctx , removeControllerSql , []any {privateId })
149
+ require .NoError (t , err )
150
+ require .Equal (t , 1 , c )
151
+ },
152
+ },
153
+ "valid-controller-short-name" : {
154
+ originalController : NewController ("test" , WithAddress ("127.0.0.1" ), WithDescription ("short name description" )),
155
+ updatedController : NewController ("test" , WithAddress ("127.0.0.2" ), WithDescription ("new short name description" )),
156
+ wantCount : 1 ,
157
+ cleanUpFunc : func (t * testing.T , rw * db.Db , privateId string ) {
158
+ t .Helper ()
159
+ c , err := rw .Exec (ctx , removeControllerSql , []any {privateId })
160
+ require .NoError (t , err )
161
+ require .Equal (t , 1 , c )
162
+ },
163
+ },
164
+ // Test case for updating a controller with the same attributes validating update_time is updated
165
+ "duplicate-ipv4-controller-update" : {
166
+ originalController : NewController ("ipv4-controller" , WithAddress ("127.0.0.1" ), WithDescription ("new ipv4 description" )),
167
+ updatedController : NewController ("ipv4-controller" , WithAddress ("127.0.0.1" ), WithDescription ("new ipv4 description" )),
168
+ wantCount : 1 ,
169
+ cleanUpFunc : func (t * testing.T , rw * db.Db , privateId string ) {
170
+ t .Helper ()
171
+ c , err := rw .Exec (ctx , removeControllerSql , []any {privateId })
172
+ require .NoError (t , err )
173
+ require .Equal (t , 1 , c )
174
+ },
175
+ },
176
+ "duplicate-ipv6-controller-update" : {
177
+ originalController : NewController ("test-ipv6-controller" , WithAddress ("[2001:4860:4860:0:0:0:0:8888]" ), WithDescription ("ipv6 description" )),
178
+ updatedController : NewController ("test-ipv6-controller" , WithAddress ("[2001:4860:4860:0:0:0:0:8888]" ), WithDescription ("ipv6 description" )),
179
+ wantCount : 1 ,
180
+ cleanUpFunc : func (t * testing.T , rw * db.Db , privateId string ) {
181
+ t .Helper ()
182
+ c , err := rw .Exec (ctx , removeControllerSql , []any {privateId })
183
+ require .NoError (t , err )
184
+ require .Equal (t , 1 , c )
185
+ },
186
+ },
187
+ }
188
+
189
+ for name , tt := range tests {
190
+ t .Run (name , func (t * testing.T ) {
191
+ assert , require := assert .New (t ), require .New (t )
192
+
193
+ var originalControllerEntry * Controller
194
+ if tt .originalController != nil {
195
+ _ , err := testRepo .UpsertController (ctx , tt .originalController )
196
+ require .NoError (err )
197
+
198
+ controllerList , err := testRepo .ListControllers (ctx , []Option {}... )
199
+ require .NoError (err )
200
+ originalControllerEntry = controllerList [0 ]
201
+ }
202
+
203
+ got , err := testRepo .UpdateControllerStatus (ctx , tt .updatedController )
204
+ if tt .wantErr {
205
+ require .Error (err )
206
+ assert .Equal (0 , got )
207
+ if tt .cleanUpFunc != nil {
208
+ tt .cleanUpFunc (t , rw , tt .updatedController .PrivateId )
209
+ }
210
+ return
211
+ }
212
+ require .NoError (err )
213
+ assert .Equal (tt .wantCount , got )
214
+
215
+ controllerList , err := testRepo .ListControllers (ctx , []Option {}... )
216
+ require .NoError (err )
217
+ require .Len (controllerList , 1 )
218
+
219
+ updatedControllerEntry := controllerList [0 ]
220
+
221
+ assert .Equal (tt .updatedController .PrivateId , updatedControllerEntry .PrivateId )
222
+ assert .Equal (tt .updatedController .Address , updatedControllerEntry .Address )
223
+ assert .Equal (tt .updatedController .Description , updatedControllerEntry .Description )
224
+ assert .True (updatedControllerEntry .UpdateTime .AsTime ().After (originalControllerEntry .UpdateTime .AsTime ()))
225
+ tt .cleanUpFunc (t , rw , tt .updatedController .PrivateId )
226
+ })
227
+ }
228
+ }
0 commit comments