Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add isolate module #5861

Closed
wants to merge 11 commits into from
Closed
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Add unit tests
pellared committed Jul 8, 2024

Verified

This commit was created on GitHub.com and signed with GitHub’s verified signature.
commit 6d3b7c020cb2aa64d762e69ccf8efcd7a0fa7db2
10 changes: 8 additions & 2 deletions processors/isolate/go.mod
Original file line number Diff line number Diff line change
@@ -2,16 +2,22 @@ module go.opentelemetry.io/contrib/processors/isolate

go 1.21

require go.opentelemetry.io/otel/sdk/log v0.4.0
require (
github.com/stretchr/testify v1.9.0
go.opentelemetry.io/otel/log v0.4.0
go.opentelemetry.io/otel/sdk/log v0.4.0
)

require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
go.opentelemetry.io/otel v1.28.0 // indirect
go.opentelemetry.io/otel/log v0.4.0 // indirect
go.opentelemetry.io/otel/metric v1.28.0 // indirect
go.opentelemetry.io/otel/sdk v1.28.0 // indirect
go.opentelemetry.io/otel/trace v1.28.0 // indirect
golang.org/x/sys v0.22.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
2 changes: 2 additions & 0 deletions processors/isolate/go.sum
Original file line number Diff line number Diff line change
@@ -27,5 +27,7 @@ go.opentelemetry.io/otel/trace v1.28.0 h1:GhQ9cUuQGmNDd5BTCP2dAvv75RdMxEfTmYejp+
go.opentelemetry.io/otel/trace v1.28.0/go.mod h1:jPyXzNPg6da9+38HEwElrQiHlVMTnVfM3/yv2OlIHaI=
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
99 changes: 99 additions & 0 deletions processors/isolate/processor_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0

package isolate

import (
"context"
"strconv"
"testing"

"github.com/stretchr/testify/assert"

logapi "go.opentelemetry.io/otel/log"
"go.opentelemetry.io/otel/sdk/log"
)

const testAttrCount = 10

var testCtx = context.WithValue(context.Background(), "k", "v") //nolint // Simplify for testing.

func TestLogProcessorOnEmit(t *testing.T) {
wrapped := &processor{ReturnErr: assert.AnError}

p := NewLogProcessor(wrapped)

var r log.Record
for i := 0; i < testAttrCount; i++ {
r.AddAttributes(logapi.Int(strconv.Itoa(i), i))
}

assert.ErrorIs(t, p.OnEmit(testCtx, r), assert.AnError)

// Assert passthrough of the arguments.
if assert.Len(t, wrapped.OnEmitCalls, 1) {
assert.Equal(t, testCtx, wrapped.OnEmitCalls[0].Ctx)
assert.Equal(t, r, wrapped.OnEmitCalls[0].Record)
}

// Assert that the record is not being affected by subsequent modifications.
r.AddAttributes(logapi.String("foo", "bar"))
assert.Equal(t, testAttrCount, wrapped.OnEmitCalls[0].Record.AttributesLen(), "should be isolated from subsequent modifications")
}

func TestLogProcessorEnabled(t *testing.T) {
wrapped := &processor{}

p := NewLogProcessor(wrapped)

var r log.Record
for i := 0; i < testAttrCount; i++ {
r.AddAttributes(logapi.Int(strconv.Itoa(i), i))
}

assert.True(t, p.Enabled(testCtx, r))

// Assert passthrough of the arguments.
if assert.Len(t, wrapped.EnabledCalls, 1) {
assert.Equal(t, testCtx, wrapped.EnabledCalls[0].Ctx)
assert.Equal(t, r, wrapped.EnabledCalls[0].Record)
}

// Assert that the record is not being affected by subsequent modifications.
r.AddAttributes(logapi.String("foo", "bar"))
assert.Equal(t, testAttrCount, wrapped.EnabledCalls[0].Record.AttributesLen(), "should be isolated from subsequent modifications")
}

type args struct {
Ctx context.Context
Record log.Record
}

type processor struct {
ReturnErr error

OnEmitCalls []args
EnabledCalls []args
ForceFlushCalls []context.Context
ShutdownCalls []context.Context
}

func (p *processor) OnEmit(ctx context.Context, r log.Record) error {
p.OnEmitCalls = append(p.OnEmitCalls, args{ctx, r})
return p.ReturnErr
}

func (p *processor) Enabled(ctx context.Context, r log.Record) bool {
p.EnabledCalls = append(p.EnabledCalls, args{ctx, r})
return true
}

func (p *processor) Shutdown(ctx context.Context) error {
p.ShutdownCalls = append(p.ShutdownCalls, ctx)
return p.ReturnErr
}

func (p *processor) ForceFlush(ctx context.Context) error {
p.ForceFlushCalls = append(p.ForceFlushCalls, ctx)
return p.ReturnErr
}

Unchanged files with check annotations Beta

// processor will not be enabled for nor emit any records.
func NewLogProcessor(downstream log.Processor) *LogProcessor {
if downstream == nil {
downstream = defaultProcessor

Check warning on line 19 in processors/isolate/processor.go

Codecov / codecov/patch

processors/isolate/processor.go#L19

Added line #L19 was not covered by tests
}
return &LogProcessor{Processor: downstream}
}
type noopProcessor struct{}
func (p noopProcessor) OnEmit(context.Context, log.Record) error { return nil }
func (p noopProcessor) Enabled(context.Context, log.Record) bool { return false }
func (p noopProcessor) Shutdown(context.Context) error { return nil }
func (p noopProcessor) ForceFlush(context.Context) error { return nil }

Check warning on line 58 in processors/isolate/processor.go

Codecov / codecov/patch

processors/isolate/processor.go#L55-L58

Added lines #L55 - L58 were not covered by tests