diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 54a108c5276..f8c40acb2e3 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -109,7 +109,7 @@ jobs:
compatibility-test:
strategy:
matrix:
- go-version: [1.19, 1.18]
+ go-version: ["1.20", 1.19, 1.18]
os: [ubuntu-latest, macos-latest, windows-latest]
# GitHub Actions does not support arm* architectures on default
# runners. It is possible to acomplish this with a self-hosted runner
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 4874e8a8ae7..dbbb8d27a28 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
### Added
- Add the new `go.opentelemetry.io/contrib/instrgen` package to provide auto-generated source code instrumentation. (#3068)
+- Support [Go 1.20]. (#3372)
### Changed
@@ -694,3 +695,5 @@ First official tagged release of `contrib` repository.
[0.8.0]: https://github.com/open-telemetry/opentelemetry-go-contrib/releases/tag/v0.8.0
[0.7.0]: https://github.com/open-telemetry/opentelemetry-go-contrib/releases/tag/v0.7.0
[0.6.1]: https://github.com/open-telemetry/opentelemetry-go-contrib/releases/tag/v0.6.1
+
+[Go 1.20]: https://go.dev/doc/go1.20
diff --git a/README.md b/README.md
index 7a8ee9adf1d..87b5104320d 100644
--- a/README.md
+++ b/README.md
@@ -47,14 +47,19 @@ This project is tested on the following systems.
| OS | Go Version | Architecture |
| ------- | ---------- | ------------ |
+| Ubuntu | 1.20 | amd64 |
| Ubuntu | 1.19 | amd64 |
| Ubuntu | 1.18 | amd64 |
+| Ubuntu | 1.20 | 386 |
| Ubuntu | 1.19 | 386 |
| Ubuntu | 1.18 | 386 |
+| MacOS | 1.20 | amd64 |
| MacOS | 1.19 | amd64 |
| MacOS | 1.18 | amd64 |
+| Windows | 1.20 | amd64 |
| Windows | 1.19 | amd64 |
| Windows | 1.18 | amd64 |
+| Windows | 1.20 | 386 |
| Windows | 1.19 | 386 |
| Windows | 1.18 | 386 |
diff --git a/instrumentation/github.com/astaxie/beego/otelbeego/test/beego_test.go b/instrumentation/github.com/astaxie/beego/otelbeego/test/beego_test.go
index b0a8684da12..9c089f95ee2 100644
--- a/instrumentation/github.com/astaxie/beego/otelbeego/test/beego_test.go
+++ b/instrumentation/github.com/astaxie/beego/otelbeego/test/beego_test.go
@@ -24,6 +24,7 @@ import (
"path/filepath"
"strings"
"testing"
+ "time"
"go.opentelemetry.io/contrib/instrumentation/github.com/astaxie/beego/otelbeego"
"go.opentelemetry.io/contrib/instrumentation/github.com/astaxie/beego/otelbeego/internal"
@@ -36,6 +37,7 @@ import (
"github.com/astaxie/beego"
beegoCtx "github.com/astaxie/beego/context"
+ assetfs "github.com/elazarl/go-bindata-assetfs"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
)
@@ -225,28 +227,59 @@ func TestStatic(t *testing.T) {
assertSpan(t, spans[0], tc)
}
-func TestRender(t *testing.T) {
- // Disable autorender to enable traced render
- beego.BConfig.WebConfig.AutoRender = false
- addTestRoutes(t)
- defer replaceBeego()
- htmlStr := "" +
- "
Hello World" +
- "This is a template test. Hello {{.name}}"
+var htmlStr = `
+
+
+
+ Hello World
+
+ This is a template test. Hello {{.name}}
+
+`
- // Create a temp directory to hold a view
- dir := t.TempDir()
-
- // Create the view
- file, err := os.CreateTemp(dir, "*index.tpl")
- require.NoError(t, err)
- defer file.Close()
- _, err = file.WriteString(htmlStr)
- require.NoError(t, err)
- // Add path to view path
- require.NoError(t, beego.AddViewPath(dir))
- beego.SetViewsPath(dir)
- _, tplName = filepath.Split(file.Name())
+func TestRender(t *testing.T) {
+ tplName = "index.tpl"
+ beego.SetTemplateFSFunc(func() http.FileSystem {
+ return &assetfs.AssetFS{
+ Asset: func(path string) ([]byte, error) {
+ if _, f := filepath.Split(path); f == tplName {
+ return []byte(htmlStr), nil
+ }
+ return nil, os.ErrNotExist
+ },
+ AssetDir: func(path string) ([]string, error) {
+ switch path {
+ case "", `\`:
+ return []string{tplName}, nil
+ }
+ return nil, os.ErrNotExist
+ },
+ AssetInfo: func(path string) (os.FileInfo, error) {
+ if _, f := filepath.Split(path); f == tplName {
+ return &assetfs.FakeFile{
+ Path: path,
+ Len: int64(len(htmlStr)),
+ Timestamp: time.Now(),
+ }, nil
+ }
+ return nil, os.ErrNotExist
+ },
+ }
+ })
+ viewPath := "/"
+ require.NoError(t, beego.AddViewPath(viewPath))
+
+ ctrl := &testController{
+ Controller: beego.Controller{
+ ViewPath: viewPath,
+ EnableRender: true,
+ },
+ T: t,
+ }
+ app := beego.NewApp()
+ app.Handlers.Add("/template/render", ctrl, "get:TemplateRender")
+ app.Handlers.Add("/template/renderstring", ctrl, "get:TemplateRenderString")
+ app.Handlers.Add("/template/renderbytes", ctrl, "get:TemplateRenderBytes")
sr := tracetest.NewSpanRecorder()
tracerProvider := trace.NewTracerProvider(trace.WithSpanProcessor(sr))
@@ -259,7 +292,7 @@ func TestRender(t *testing.T) {
rr := httptest.NewRecorder()
req, err := http.NewRequest(http.MethodGet, fmt.Sprintf("http://localhost/template%s", str), nil)
require.NoError(t, err)
- mw(beego.BeeApp.Handlers).ServeHTTP(rr, req)
+ mw(app.Handlers).ServeHTTP(rr, req)
body, err := io.ReadAll(rr.Result().Body)
require.Equal(t, strings.Replace(htmlStr, "{{.name}}", "test", 1), string(body))
require.NoError(t, err)
@@ -269,16 +302,14 @@ func TestRender(t *testing.T) {
require.Len(t, spans, 6) // 3 HTTP requests, each creating 2 spans
for _, span := range spans {
switch span.Name() {
- case "/template/render":
- case "/template/renderstring":
- case "/template/renderbytes":
+ case "GET":
continue
case internal.RenderTemplateSpanName,
internal.RenderStringSpanName,
internal.RenderBytesSpanName:
assert.Contains(t, span.Attributes(), internal.TemplateKey.String(tplName))
default:
- t.Fatal("unexpected span name")
+ t.Fatal("unexpected span name", span.Name())
}
}
}
diff --git a/instrumentation/github.com/astaxie/beego/otelbeego/test/go.mod b/instrumentation/github.com/astaxie/beego/otelbeego/test/go.mod
index 898a438cf4b..6879eee3f96 100644
--- a/instrumentation/github.com/astaxie/beego/otelbeego/test/go.mod
+++ b/instrumentation/github.com/astaxie/beego/otelbeego/test/go.mod
@@ -4,6 +4,7 @@ go 1.18
require (
github.com/astaxie/beego v1.12.3
+ github.com/elazarl/go-bindata-assetfs v1.0.0
github.com/stretchr/testify v1.8.1
go.opentelemetry.io/contrib/instrumentation/github.com/astaxie/beego/otelbeego v0.39.0
go.opentelemetry.io/contrib/propagators/b3 v1.14.0