1
1
package standalone
2
2
3
3
import (
4
+ "errors"
4
5
"os"
5
6
"path/filepath"
6
7
"testing"
@@ -21,51 +22,21 @@ func TestServerModeEnabled(t *testing.T) {
21
22
})
22
23
23
24
t .Run ("Enabled by flag" , func (t * testing.T ) {
25
+ testDataDir , err := filepath .Abs ("testdata" )
26
+ require .NoError (t , err )
27
+
24
28
before := standaloneEnabled
25
29
t .Cleanup (func () {
26
30
standaloneEnabled = before
27
31
})
28
32
truthy := true
29
33
standaloneEnabled = & truthy
30
34
31
- curProcPath , err := os .Executable ()
32
- require .NoError (t , err )
33
-
34
35
settings , enabled := ServerModeEnabled (pluginID )
35
36
require .True (t , enabled )
36
37
require .NotEmpty (t , settings .Address )
37
- require .Equal (t , filepath .Dir ( curProcPath ), settings .Dir )
38
+ require .Equal (t , filepath .Join ( testDataDir , "plugin" ), settings .Dir )
38
39
})
39
-
40
- t .Run ("Nearby dist folder will be used as server directory" ,
41
- func (t * testing.T ) {
42
- curProcPath , err := os .Executable ()
43
- require .NoError (t , err )
44
-
45
- procDir := filepath .Dir (curProcPath )
46
- distDir := filepath .Join (procDir , "dist" )
47
-
48
- err = os .MkdirAll (distDir , 0755 )
49
- require .NoError (t , err )
50
- _ , err = os .Create (filepath .Join (distDir , "plugin.json" ))
51
- require .NoError (t , err )
52
- t .Cleanup (func () {
53
- err = os .RemoveAll (distDir )
54
- require .NoError (t , err )
55
- })
56
-
57
- before := standaloneEnabled
58
- t .Cleanup (func () {
59
- standaloneEnabled = before
60
- })
61
- truthy := true
62
- standaloneEnabled = & truthy
63
-
64
- settings , enabled := ServerModeEnabled (pluginID )
65
- require .True (t , enabled )
66
- require .NotEmpty (t , settings .Address )
67
- require .Equal (t , distDir , settings .Dir )
68
- })
69
40
}
70
41
71
42
func TestClientModeEnabled (t * testing.T ) {
@@ -166,3 +137,181 @@ func TestClientModeEnabled(t *testing.T) {
166
137
require .Zero (t , settings .TargetPID )
167
138
})
168
139
}
140
+
141
+ func Test_findPluginDir (t * testing.T ) {
142
+ tests := []struct {
143
+ name string
144
+ dir string
145
+ pluginID string
146
+ want string
147
+ exists bool
148
+ }{
149
+ {
150
+ name : "existing plugin found from root directory" ,
151
+ pluginID : pluginID ,
152
+ dir : "testdata" ,
153
+ want : filepath .Join ("testdata" , "plugin" ),
154
+ exists : true ,
155
+ },
156
+ {
157
+ name : "existing plugin found from plugin directory" ,
158
+ pluginID : pluginID ,
159
+ dir : filepath .Join ("testdata" , "plugin" ),
160
+ want : filepath .Join ("testdata" , "plugin" ),
161
+ exists : true ,
162
+ },
163
+ {
164
+ name : "existing plugin found from nested plugin directory" ,
165
+ pluginID : "grafana-nested-datasource" ,
166
+ dir : filepath .Join ("testdata" , "plugin" ),
167
+ want : filepath .Join ("testdata" , "plugin" , "datasource" ),
168
+ exists : true ,
169
+ },
170
+ {
171
+ name : "existing plugin found from dist directory" ,
172
+ pluginID : "grafana-foobar-datasource" ,
173
+ dir : filepath .Join ("testdata" , "dist" ),
174
+ want : filepath .Join ("testdata" , "dist" ),
175
+ exists : true ,
176
+ },
177
+ {
178
+ name : "non matching plugin id" ,
179
+ pluginID : pluginID ,
180
+ dir : filepath .Join ("testdata" , "GoLand" ),
181
+ want : "" ,
182
+ },
183
+ {
184
+ name : "non-existing plugin" ,
185
+ pluginID : "non-existing-plugin" ,
186
+ dir : "testdata" ,
187
+ want : "" ,
188
+ },
189
+ {
190
+ name : "empty plugin ID" ,
191
+ pluginID : "" ,
192
+ dir : "testdata" ,
193
+ want : "" ,
194
+ },
195
+ }
196
+
197
+ for _ , tt := range tests {
198
+ t .Run (tt .name , func (t * testing.T ) {
199
+ got , found := findPluginDir (tt .dir , tt .pluginID )
200
+ require .Equal (t , tt .exists , found )
201
+ require .Equal (t , tt .want , got )
202
+ })
203
+ }
204
+ }
205
+
206
+ func TestServerSettings (t * testing.T ) {
207
+ originalWd := currentWd
208
+ defer func () { currentWd = originalWd }()
209
+
210
+ t .Run ("Returns settings for valid plugin" , func (t * testing.T ) {
211
+ testDataDir , err := filepath .Abs (filepath .Join ("testdata" , "plugin" ))
212
+ require .NoError (t , err )
213
+
214
+ currentWd = func () (string , error ) {
215
+ return testDataDir , nil
216
+ }
217
+
218
+ settings , err := serverSettings (pluginID )
219
+ require .NoError (t , err )
220
+ require .NotEmpty (t , settings .Address )
221
+ require .Equal (t , testDataDir , settings .Dir )
222
+ })
223
+
224
+ t .Run ("Returns settings for nested plugin" , func (t * testing.T ) {
225
+ testDataDir , err := filepath .Abs (filepath .Join ("testdata" , "plugin" ))
226
+ require .NoError (t , err )
227
+
228
+ currentWd = func () (string , error ) {
229
+ return testDataDir , nil
230
+ }
231
+
232
+ settings , err := serverSettings ("grafana-nested-datasource" )
233
+ require .NoError (t , err )
234
+ require .NotEmpty (t , settings .Address )
235
+ require .Equal (t , filepath .Join (testDataDir , "datasource" ), settings .Dir )
236
+ })
237
+
238
+ t .Run ("Returns error for invalid plugin ID" , func (t * testing.T ) {
239
+ testDataDir , err := filepath .Abs ("testdata" )
240
+ require .NoError (t , err )
241
+
242
+ currentWd = func () (string , error ) {
243
+ return testDataDir , nil
244
+ }
245
+
246
+ settings , err := serverSettings ("" )
247
+ require .Error (t , err )
248
+ require .Contains (t , err .Error (), "plugin directory not found" )
249
+ require .Empty (t , settings )
250
+ })
251
+
252
+ t .Run ("Handles pkg directory by moving up one level" , func (t * testing.T ) {
253
+ tmpDir , err := os .MkdirTemp ("" , "plugin-test" )
254
+ require .NoError (t , err )
255
+ defer func () {
256
+ err = os .RemoveAll (tmpDir )
257
+ t .Log ("Error removing temp directory:" , err )
258
+ }()
259
+
260
+ pkgDir := filepath .Join (tmpDir , "pkg" )
261
+ err = os .Mkdir (pkgDir , 0755 )
262
+ require .NoError (t , err )
263
+
264
+ distDir := filepath .Join (tmpDir , "dist" )
265
+ err = os .Mkdir (distDir , 0755 )
266
+ require .NoError (t , err )
267
+
268
+ err = os .WriteFile (filepath .Join (distDir , "plugin.json" ), []byte (`{"id": "` + pluginID + `"}` ), 0600 )
269
+ require .NoError (t , err )
270
+
271
+ currentWd = func () (string , error ) {
272
+ return pkgDir , nil
273
+ }
274
+
275
+ settings , err := serverSettings (pluginID )
276
+ require .NoError (t , err )
277
+ require .Equal (t , filepath .Join (tmpDir , "dist" ), settings .Dir )
278
+ require .NotEmpty (t , settings .Address )
279
+ })
280
+
281
+ t .Run ("Uses dist directory when available" , func (t * testing.T ) {
282
+ tmpDir , err := os .MkdirTemp ("" , "plugin-test" )
283
+ require .NoError (t , err )
284
+ defer func () {
285
+ err = os .RemoveAll (tmpDir )
286
+ t .Log ("Error removing temp directory:" , err )
287
+ }()
288
+
289
+ distDir := filepath .Join (tmpDir , "dist" )
290
+ err = os .Mkdir (distDir , 0755 )
291
+ require .NoError (t , err )
292
+
293
+ err = os .WriteFile (filepath .Join (distDir , "plugin.json" ), []byte (`{"id": "` + pluginID + `"}` ), 0600 )
294
+ require .NoError (t , err )
295
+
296
+ currentWd = func () (string , error ) {
297
+ return tmpDir , nil
298
+ }
299
+
300
+ settings , err := serverSettings (pluginID )
301
+ require .NoError (t , err )
302
+ require .Equal (t , filepath .Join (tmpDir , "dist" ), settings .Dir )
303
+ require .NotEmpty (t , settings .Address )
304
+ })
305
+
306
+ t .Run ("Returns error when working directory cannot be determined" , func (t * testing.T ) {
307
+ wdErr := errors .New ("mock working directory error" )
308
+ currentWd = func () (string , error ) {
309
+ return "" , wdErr
310
+ }
311
+
312
+ settings , err := serverSettings (pluginID )
313
+ require .Error (t , err )
314
+ require .ErrorIs (t , err , wdErr )
315
+ require .Empty (t , settings )
316
+ })
317
+ }
0 commit comments