mirror of
https://github.com/open-telemetry/opentelemetry-go.git
synced 2025-03-17 20:57:51 +02:00
Introduce logtest.AssertRecordEqual (#5499)
This is a follow-up to the comments in https://github.com/open-telemetry/opentelemetry-go/pull/5468#discussion_r1624173196, introducing `logtest.AssertRecordEqual` so bridges can compare log records more easily. --------- Co-authored-by: Tyler Yahn <MrAlias@users.noreply.github.com>
This commit is contained in:
parent
722fbae332
commit
5331939a74
@ -16,6 +16,7 @@ This project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.htm
|
||||
This method is used to check if an `Instrument` instance is a zero-value. (#5431)
|
||||
- Store and provide the emitted `context.Context` in `ScopeRecords` of `go.opentelemetry.io/otel/sdk/log/logtest`. (#5468)
|
||||
- `SimpleProcessor.OnEmit` in `go.opentelemetry.io/otel/sdk/log` no longer allocates a slice which makes it possible to have a zero-allocation log processing using `SimpleProcessor`. (#5493)
|
||||
- The `AssertRecordEqual` method to `go.opentelemetry.io/otel/log/logtest` to allow comparison of two log records in tests. (#5499)
|
||||
|
||||
### Changed
|
||||
|
||||
|
70
log/logtest/assertions.go
Normal file
70
log/logtest/assertions.go
Normal file
@ -0,0 +1,70 @@
|
||||
// Copyright The OpenTelemetry Authors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package logtest // import "go.opentelemetry.io/otel/log/logtest"
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"testing"
|
||||
|
||||
"go.opentelemetry.io/otel/log"
|
||||
)
|
||||
|
||||
// AssertRecordEqual compares two log records, and fails the test if they are
|
||||
// not equal.
|
||||
func AssertRecordEqual(t testing.TB, want, got log.Record) bool {
|
||||
t.Helper()
|
||||
|
||||
if !want.Timestamp().Equal(got.Timestamp()) {
|
||||
t.Errorf("Timestamp value is not equal:\nwant: %v\ngot: %v", want.Timestamp(), got.Timestamp())
|
||||
return false
|
||||
}
|
||||
if !want.ObservedTimestamp().Equal(got.ObservedTimestamp()) {
|
||||
t.Errorf("ObservedTimestamp value is not equal:\nwant: %v\ngot: %v", want.ObservedTimestamp(), got.ObservedTimestamp())
|
||||
return false
|
||||
}
|
||||
if want.Severity() != got.Severity() {
|
||||
t.Errorf("Severity value is not equal:\nwant: %v\ngot: %v", want.Severity(), got.Severity())
|
||||
return false
|
||||
}
|
||||
if want.SeverityText() != got.SeverityText() {
|
||||
t.Errorf("SeverityText value is not equal:\nwant: %v\ngot: %v", want.SeverityText(), got.SeverityText())
|
||||
return false
|
||||
}
|
||||
if !assertBody(t, want.Body(), got) {
|
||||
return false
|
||||
}
|
||||
|
||||
var attrs []log.KeyValue
|
||||
want.WalkAttributes(func(kv log.KeyValue) bool {
|
||||
attrs = append(attrs, kv)
|
||||
return true
|
||||
})
|
||||
return assertAttributes(t, attrs, got)
|
||||
}
|
||||
|
||||
func assertBody(t testing.TB, want log.Value, r log.Record) bool {
|
||||
t.Helper()
|
||||
got := r.Body()
|
||||
if !got.Equal(want) {
|
||||
t.Errorf("Body value is not equal:\nwant: %v\ngot: %v", want, got)
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func assertAttributes(t testing.TB, want []log.KeyValue, r log.Record) bool {
|
||||
t.Helper()
|
||||
var got []log.KeyValue
|
||||
r.WalkAttributes(func(kv log.KeyValue) bool {
|
||||
got = append(got, kv)
|
||||
return true
|
||||
})
|
||||
if !slices.EqualFunc(want, got, log.KeyValue.Equal) {
|
||||
t.Errorf("Attributes are not equal:\nwant: %v\ngot: %v", want, got)
|
||||
return false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
33
log/logtest/assertions_test.go
Normal file
33
log/logtest/assertions_test.go
Normal file
@ -0,0 +1,33 @@
|
||||
// Copyright The OpenTelemetry Authors
|
||||
// SPDX-License-Identifier: Apache-2.0
|
||||
|
||||
package logtest
|
||||
|
||||
import (
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"go.opentelemetry.io/otel/log"
|
||||
)
|
||||
|
||||
func TestAssertRecord(t *testing.T) {
|
||||
r1 := log.Record{}
|
||||
r2 := log.Record{}
|
||||
now := time.Now()
|
||||
|
||||
AssertRecordEqual(t, r1, r2)
|
||||
|
||||
r1.SetTimestamp(now)
|
||||
r2.SetTimestamp(now)
|
||||
r1.SetObservedTimestamp(now)
|
||||
r2.SetObservedTimestamp(now)
|
||||
r1.SetSeverity(log.SeverityTrace1)
|
||||
r2.SetSeverity(log.SeverityTrace1)
|
||||
r1.SetSeverityText("trace")
|
||||
r2.SetSeverityText("trace")
|
||||
r1.SetBody(log.StringValue("log body"))
|
||||
r2.SetBody(log.StringValue("log body"))
|
||||
r1.AddAttributes(log.Bool("attr", true))
|
||||
r2.AddAttributes(log.Bool("attr", true))
|
||||
AssertRecordEqual(t, r1, r2)
|
||||
}
|
@ -4,7 +4,6 @@
|
||||
package logtest
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@ -66,48 +65,3 @@ func TestRecordFactoryMultiple(t *testing.T) {
|
||||
assert.Equal(t, now, record1.Timestamp())
|
||||
assertAttributes(t, attrs, record1)
|
||||
}
|
||||
|
||||
func assertRecord(t *testing.T, want log.Record, got log.Record) {
|
||||
t.Helper()
|
||||
|
||||
if !want.Timestamp().Equal(got.Timestamp()) {
|
||||
t.Errorf("Timestamp value is not equal:\nwant: %v\ngot: %v", want.Timestamp(), got.Timestamp())
|
||||
}
|
||||
if !want.ObservedTimestamp().Equal(got.ObservedTimestamp()) {
|
||||
t.Errorf("ObservedTimestamp value is not equal:\nwant: %v\ngot: %v", want.ObservedTimestamp(), got.ObservedTimestamp())
|
||||
}
|
||||
if want.Severity() != got.Severity() {
|
||||
t.Errorf("Severity value is not equal:\nwant: %v\ngot: %v", want.Severity(), got.Severity())
|
||||
}
|
||||
if want.SeverityText() != got.SeverityText() {
|
||||
t.Errorf("SeverityText value is not equal:\nwant: %v\ngot: %v", want.SeverityText(), got.SeverityText())
|
||||
}
|
||||
assertBody(t, want.Body(), got)
|
||||
|
||||
var attrs []log.KeyValue
|
||||
want.WalkAttributes(func(kv log.KeyValue) bool {
|
||||
attrs = append(attrs, kv)
|
||||
return true
|
||||
})
|
||||
assertAttributes(t, attrs, got)
|
||||
}
|
||||
|
||||
func assertBody(t *testing.T, want log.Value, r log.Record) {
|
||||
t.Helper()
|
||||
got := r.Body()
|
||||
if !got.Equal(want) {
|
||||
t.Errorf("Body value is not equal:\nwant: %v\ngot: %v", want, got)
|
||||
}
|
||||
}
|
||||
|
||||
func assertAttributes(t *testing.T, want []log.KeyValue, r log.Record) {
|
||||
t.Helper()
|
||||
var got []log.KeyValue
|
||||
r.WalkAttributes(func(kv log.KeyValue) bool {
|
||||
got = append(got, kv)
|
||||
return true
|
||||
})
|
||||
if !slices.EqualFunc(want, got, log.KeyValue.Equal) {
|
||||
t.Errorf("Attributes are not equal:\nwant: %v\ngot: %v", want, got)
|
||||
}
|
||||
}
|
||||
|
@ -133,11 +133,11 @@ func TestRecorderEmitAndReset(t *testing.T) {
|
||||
|
||||
nl.Emit(ctx2, r2)
|
||||
assert.Len(t, r.Result()[0].Records, 1)
|
||||
assertRecord(t, r.Result()[0].Records[0].Record, r1)
|
||||
AssertRecordEqual(t, r.Result()[0].Records[0].Record, r1)
|
||||
assert.Equal(t, r.Result()[0].Records[0].Context(), ctx)
|
||||
|
||||
assert.Len(t, r.Result()[1].Records, 1)
|
||||
assertRecord(t, r.Result()[1].Records[0].Record, r2)
|
||||
AssertRecordEqual(t, r.Result()[1].Records[0].Record, r2)
|
||||
assert.Equal(t, r.Result()[1].Records[0].Context(), ctx2)
|
||||
|
||||
r.Reset()
|
||||
|
Loading…
x
Reference in New Issue
Block a user