1
0
mirror of https://github.com/open-telemetry/opentelemetry-go.git synced 2025-10-31 00:07:40 +02:00
Files
opentelemetry-go/sdk/log/simple_test.go
Mikhail Mazurskiy 5e1c62a2d5 Modernize (#7089)
Use
https://pkg.go.dev/golang.org/x/tools/gopls/internal/analysis/modernize
to update code to new style.

---------

Co-authored-by: Flc゛ <four_leaf_clover@foxmail.com>
Co-authored-by: Damien Mathieu <42@dmathieu.com>
2025-07-29 10:19:11 +02:00

141 lines
2.8 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package log_test
import (
"context"
"io"
"strings"
"sync"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.opentelemetry.io/otel/sdk/log"
)
type exporter struct {
records []log.Record
exportCalled bool
shutdownCalled bool
forceFlushCalled bool
}
func (e *exporter) Export(_ context.Context, r []log.Record) error {
e.records = r
e.exportCalled = true
return nil
}
func (e *exporter) Shutdown(context.Context) error {
e.shutdownCalled = true
return nil
}
func (e *exporter) ForceFlush(context.Context) error {
e.forceFlushCalled = true
return nil
}
func TestSimpleProcessorOnEmit(t *testing.T) {
e := new(exporter)
s := log.NewSimpleProcessor(e)
r := new(log.Record)
r.SetSeverityText("test")
_ = s.OnEmit(context.Background(), r)
require.True(t, e.exportCalled, "exporter Export not called")
assert.Equal(t, []log.Record{*r}, e.records)
}
func TestSimpleProcessorShutdown(t *testing.T) {
e := new(exporter)
s := log.NewSimpleProcessor(e)
_ = s.Shutdown(context.Background())
require.True(t, e.shutdownCalled, "exporter Shutdown not called")
}
func TestSimpleProcessorForceFlush(t *testing.T) {
e := new(exporter)
s := log.NewSimpleProcessor(e)
_ = s.ForceFlush(context.Background())
require.True(t, e.forceFlushCalled, "exporter ForceFlush not called")
}
type writerExporter struct {
io.Writer
}
func (e *writerExporter) Export(_ context.Context, records []log.Record) error {
for _, r := range records {
_, _ = io.WriteString(e.Writer, r.Body().String())
}
return nil
}
func (e *writerExporter) Shutdown(context.Context) error {
return nil
}
func (e *writerExporter) ForceFlush(context.Context) error {
return nil
}
func TestSimpleProcessorEmpty(t *testing.T) {
assert.NotPanics(t, func() {
var s log.SimpleProcessor
ctx := context.Background()
record := new(log.Record)
assert.NoError(t, s.OnEmit(ctx, record), "OnEmit")
assert.NoError(t, s.ForceFlush(ctx), "ForceFlush")
assert.NoError(t, s.Shutdown(ctx), "Shutdown")
})
}
func TestSimpleProcessorConcurrentSafe(t *testing.T) {
const goRoutineN = 10
var wg sync.WaitGroup
wg.Add(goRoutineN)
r := new(log.Record)
r.SetSeverityText("test")
ctx := context.Background()
e := &writerExporter{new(strings.Builder)}
s := log.NewSimpleProcessor(e)
for range goRoutineN {
go func() {
defer wg.Done()
_ = s.OnEmit(ctx, r)
_ = s.Shutdown(ctx)
_ = s.ForceFlush(ctx)
}()
}
wg.Wait()
}
func BenchmarkSimpleProcessorOnEmit(b *testing.B) {
r := new(log.Record)
r.SetSeverityText("test")
ctx := context.Background()
s := log.NewSimpleProcessor(nil)
b.ReportAllocs()
b.ResetTimer()
b.RunParallel(func(pb *testing.PB) {
var out error
for pb.Next() {
out = s.OnEmit(ctx, r)
}
_ = out
})
}