@@ -24,6 +24,7 @@ import (
24
24
"path/filepath"
25
25
"strings"
26
26
"testing"
27
+ "time"
27
28
28
29
"go.opentelemetry.io/contrib/instrumentation/github.com/astaxie/beego/otelbeego"
29
30
"go.opentelemetry.io/contrib/instrumentation/github.com/astaxie/beego/otelbeego/internal"
@@ -36,6 +37,7 @@ import (
36
37
37
38
"github.com/astaxie/beego"
38
39
beegoCtx "github.com/astaxie/beego/context"
40
+ assetfs "github.com/elazarl/go-bindata-assetfs"
39
41
"github.com/stretchr/testify/assert"
40
42
"github.com/stretchr/testify/require"
41
43
)
@@ -225,28 +227,59 @@ func TestStatic(t *testing.T) {
225
227
assertSpan (t , spans [0 ], tc )
226
228
}
227
229
228
- func TestRender (t * testing.T ) {
229
- // Disable autorender to enable traced render
230
- beego .BConfig .WebConfig .AutoRender = false
231
- addTestRoutes (t )
232
- defer replaceBeego ()
233
- htmlStr := "<!DOCTYPE html><html lang=\" en\" >" +
234
- "<head><meta charset=\" UTF-8\" ><title>Hello World</title></head>" +
235
- "<body>This is a template test. Hello {{.name}}</body></html>"
230
+ var htmlStr = `<!DOCTYPE html>
231
+ <html lang="en">
232
+ <head>
233
+ <meta charset="UTF-8">
234
+ <title>Hello World</title>
235
+ </head>
236
+ <body>This is a template test. Hello {{.name}}</body>
237
+ </html>
238
+ `
236
239
237
- // Create a temp directory to hold a view
238
- dir := t .TempDir ()
239
-
240
- // Create the view
241
- file , err := os .CreateTemp (dir , "*index.tpl" )
242
- require .NoError (t , err )
243
- defer file .Close ()
244
- _ , err = file .WriteString (htmlStr )
245
- require .NoError (t , err )
246
- // Add path to view path
247
- require .NoError (t , beego .AddViewPath (dir ))
248
- beego .SetViewsPath (dir )
249
- _ , tplName = filepath .Split (file .Name ())
240
+ func TestRender (t * testing.T ) {
241
+ tplName = "index.tpl"
242
+ beego .SetTemplateFSFunc (func () http.FileSystem {
243
+ return & assetfs.AssetFS {
244
+ Asset : func (path string ) ([]byte , error ) {
245
+ if _ , f := filepath .Split (path ); f == tplName {
246
+ return []byte (htmlStr ), nil
247
+ }
248
+ return nil , os .ErrNotExist
249
+ },
250
+ AssetDir : func (path string ) ([]string , error ) {
251
+ switch path {
252
+ case "" , `\` :
253
+ return []string {tplName }, nil
254
+ }
255
+ return nil , os .ErrNotExist
256
+ },
257
+ AssetInfo : func (path string ) (os.FileInfo , error ) {
258
+ if _ , f := filepath .Split (path ); f == tplName {
259
+ return & assetfs.FakeFile {
260
+ Path : path ,
261
+ Len : int64 (len (htmlStr )),
262
+ Timestamp : time .Now (),
263
+ }, nil
264
+ }
265
+ return nil , os .ErrNotExist
266
+ },
267
+ }
268
+ })
269
+ viewPath := "/"
270
+ require .NoError (t , beego .AddViewPath (viewPath ))
271
+
272
+ ctrl := & testController {
273
+ Controller : beego.Controller {
274
+ ViewPath : viewPath ,
275
+ EnableRender : true ,
276
+ },
277
+ T : t ,
278
+ }
279
+ app := beego .NewApp ()
280
+ app .Handlers .Add ("/template/render" , ctrl , "get:TemplateRender" )
281
+ app .Handlers .Add ("/template/renderstring" , ctrl , "get:TemplateRenderString" )
282
+ app .Handlers .Add ("/template/renderbytes" , ctrl , "get:TemplateRenderBytes" )
250
283
251
284
sr := tracetest .NewSpanRecorder ()
252
285
tracerProvider := trace .NewTracerProvider (trace .WithSpanProcessor (sr ))
@@ -259,7 +292,7 @@ func TestRender(t *testing.T) {
259
292
rr := httptest .NewRecorder ()
260
293
req , err := http .NewRequest (http .MethodGet , fmt .Sprintf ("http://localhost/template%s" , str ), nil )
261
294
require .NoError (t , err )
262
- mw (beego . BeeApp .Handlers ).ServeHTTP (rr , req )
295
+ mw (app .Handlers ).ServeHTTP (rr , req )
263
296
body , err := io .ReadAll (rr .Result ().Body )
264
297
require .Equal (t , strings .Replace (htmlStr , "{{.name}}" , "test" , 1 ), string (body ))
265
298
require .NoError (t , err )
@@ -269,16 +302,14 @@ func TestRender(t *testing.T) {
269
302
require .Len (t , spans , 6 ) // 3 HTTP requests, each creating 2 spans
270
303
for _ , span := range spans {
271
304
switch span .Name () {
272
- case "/template/render" :
273
- case "/template/renderstring" :
274
- case "/template/renderbytes" :
305
+ case "GET" :
275
306
continue
276
307
case internal .RenderTemplateSpanName ,
277
308
internal .RenderStringSpanName ,
278
309
internal .RenderBytesSpanName :
279
310
assert .Contains (t , span .Attributes (), internal .TemplateKey .String (tplName ))
280
311
default :
281
- t .Fatal ("unexpected span name" )
312
+ t .Fatal ("unexpected span name" , span . Name () )
282
313
}
283
314
}
284
315
}
0 commit comments