From 4371be599911cf5c9c853093519cbf0be4fbef8e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 20 Oct 2025 13:51:09 +0000 Subject: [PATCH 1/3] renovate: Update github.com/luno/jettison digest to a8f926f --- go.mod | 7 +++++-- go.sum | 23 +++++++++++++++++------ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index 3f55706..474d073 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.24.3 require ( github.com/aws/aws-sdk-go-v2/service/s3 v1.84.0 github.com/go-sql-driver/mysql v1.9.3 - github.com/luno/jettison v0.0.0-20230912135954-09d6084f5df9 + github.com/luno/jettison v0.0.0-20251004142841-a8f926feeafb github.com/prometheus/client_golang v1.23.2 github.com/prometheus/client_model v0.6.2 github.com/stretchr/testify v1.11.1 @@ -13,7 +13,7 @@ require ( go.opentelemetry.io/otel/sdk v1.37.0 go.opentelemetry.io/otel/trace v1.37.0 gocloud.dev v0.43.0 - google.golang.org/grpc v1.73.0 + google.golang.org/grpc v1.75.1 google.golang.org/protobuf v1.36.10 ) @@ -41,6 +41,7 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fatih/color v1.18.0 // indirect github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-stack/stack v1.8.1 // indirect @@ -49,6 +50,8 @@ require ( github.com/googleapis/gax-go/v2 v2.15.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/kylelemons/godebug v1.1.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/common v0.66.1 // indirect diff --git a/go.sum b/go.sum index 3abe3bc..a7672fd 100644 --- a/go.sum +++ b/go.sum @@ -76,6 +76,8 @@ github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8k github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= +github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= +github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/go-jose/go-jose/v4 v4.1.1 h1:JYhSgy4mXXzAdF3nUx3ygx347LRXJRrpgyU3adRmkAI= @@ -121,8 +123,13 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/luno/jettison v0.0.0-20230912135954-09d6084f5df9 h1:ykQ0/3gmOFypz1tNTyisrEM51rW7bx/UCGqEqrm/VyM= -github.com/luno/jettison v0.0.0-20230912135954-09d6084f5df9/go.mod h1:Fc8KRfQEydIud0rjBHUNxUyyEKSidxP0kOlg4Dwn3JA= +github.com/luno/jettison v0.0.0-20251004142841-a8f926feeafb h1:valh0P5psTR2/Wd39PYGxpwD8pavgAijGFCYjQ639/8= +github.com/luno/jettison v0.0.0-20251004142841-a8f926feeafb/go.mod h1:QXeANC+8xbeu0hk2Ccl5fMXWb46WJwmJtb7isoHtlSk= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= @@ -139,8 +146,8 @@ github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzM github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= -github.com/sebdah/goldie/v2 v2.5.3 h1:9ES/mNN+HNUbNWpVAlrzuZ7jE+Nrczbj8uFRjM7624Y= -github.com/sebdah/goldie/v2 v2.5.3/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= +github.com/sebdah/goldie/v2 v2.7.1 h1:PkBHymaYdtvEkZV7TmyqKxdmn5/Vcj+8TpATWZjnG5E= +github.com/sebdah/goldie/v2 v2.7.1/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= @@ -210,7 +217,9 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -242,6 +251,8 @@ golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY= golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.242.0 h1:7Lnb1nfnpvbkCiZek6IXKdJ0MFuAZNAJKQfA1ws62xg= google.golang.org/api v0.242.0/go.mod h1:cOVEm2TpdAGHL2z+UwyS+kmlGr3bVWQQ6sYEqkKje50= google.golang.org/genproto v0.0.0-20250715232539-7130f93afb79 h1:Nt6z9UHqSlIdIGJdz6KhTIs2VRx/iOsA5iE8bmQNcxs= @@ -250,8 +261,8 @@ google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79 h1: google.golang.org/genproto/googleapis/api v0.0.0-20250715232539-7130f93afb79/go.mod h1:HKJDgKsFUnv5VAGeQjz8kxcgDP0HoE0iZNp0OdZNlhE= google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79 h1:1ZwqphdOdWYXsUHgMpU/101nCtf/kSp9hOrcvFsnl10= google.golang.org/genproto/googleapis/rpc v0.0.0-20250715232539-7130f93afb79/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= -google.golang.org/grpc v1.73.0 h1:VIWSmpI2MegBtTuFt5/JWy2oXxtjJ/e89Z70ImfD2ok= -google.golang.org/grpc v1.73.0/go.mod h1:50sbHOUqWoCQGI8V2HQLJM0B+LMlIUjNSZmow7EVBQc= +google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI= +google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE= google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 7d75c93997234566d574f8ee4a60e5b27c871f7c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 20 Oct 2025 15:15:33 +0000 Subject: [PATCH 2/3] Initial plan From 9dd0d9fadc64cd2ec4c703a26f7af6224faff12a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 20 Oct 2025 15:37:09 +0000 Subject: [PATCH 3/3] Fix test failures after jettison library update Add error codes to sentinel errors for proper matching with errors.Is(). Update test expectations to use sentinel errors with codes instead of creating new error instances inline. Co-authored-by: dasco144 <10575019+dasco144@users.noreply.github.com> --- errors.go | 4 ++-- filters/metadata.go | 9 +++++---- filters/metadata_test.go | 16 +++++++++++----- rpatterns/batch.go | 7 +++++-- rpatterns/batch_test.go | 7 +++---- 5 files changed, 26 insertions(+), 17 deletions(-) diff --git a/errors.go b/errors.go index dec7382..a211bfc 100644 --- a/errors.go +++ b/errors.go @@ -26,7 +26,7 @@ var ( cancelProto = status.FromContextError(context.Canceled).Proto() deadlineProto = status.FromContextError(context.DeadlineExceeded).Proto() - filterErr = errors.New(filterErrMsg) + filterErr = errors.New(filterErrMsg, j.C("ERR_d5e8f7a9b2c3d4e5")) ) // IsStoppedErr checks whether err is an ErrStopped @@ -60,5 +60,5 @@ func IsFilterErr(err error) bool { } func asFilterErr(err error) error { - return errors.Wrap(err, filterErrMsg) + return errors.Wrap(err, filterErrMsg, j.C("ERR_d5e8f7a9b2c3d4e5")) } diff --git a/filters/metadata.go b/filters/metadata.go index fe8ab72..0917a7c 100644 --- a/filters/metadata.go +++ b/filters/metadata.go @@ -18,8 +18,8 @@ const ( ) var ( - metadataEventFilterErr = errors.New(metadataEventFilterErrMsg) - deserializationErr = errors.New(deserializationErrMsg) + metadataEventFilterErr = errors.New(metadataEventFilterErrMsg, j.C("ERR_c1f2e3d4a5b6c7d8")) + deserializationErr = errors.New(deserializationErrMsg, j.C("ERR_a1b2c3d4e5f6a7b8")) ) func MetadataEventFilter[T any](ds Deserializer[T], flt DataFilter[T]) (reflex.EventFilter, error) { @@ -45,7 +45,7 @@ func IsDeserializationErr(err error) bool { } func asDeserializationErr(err error) error { - return errors.Wrap(err, deserializationErrMsg) + return errors.Wrap(err, deserializationErrMsg, j.C("ERR_a1b2c3d4e5f6a7b8")) } // IsMetadataEventFilterErr returns true if the error occurred during construction of a MetadataEventFilter. @@ -54,5 +54,6 @@ func IsMetadataEventFilterErr(err error) bool { } func makeMetadataEventFilterErr(ol ...errors.Option) error { - return errors.New(metadataEventFilterErrMsg, ol...) + opts := append([]errors.Option{j.C("ERR_c1f2e3d4a5b6c7d8")}, ol...) + return errors.New(metadataEventFilterErrMsg, opts...) } diff --git a/filters/metadata_test.go b/filters/metadata_test.go index 3b8cc9f..34fdee4 100644 --- a/filters/metadata_test.go +++ b/filters/metadata_test.go @@ -4,12 +4,18 @@ import ( "testing" "github.com/luno/jettison/errors" + "github.com/luno/jettison/j" "github.com/luno/jettison/jtest" "github.com/stretchr/testify/require" "github.com/luno/reflex" ) +var ( + testBadMetadataErr = errors.New("bad metadata", j.C("ERR_test_bad_metadata")) + testBadFilterErr = errors.New("bad filter", j.C("ERR_test_bad_filter")) +) + func TestMakeMetadataEventFilter(t *testing.T) { type testCase struct { name string @@ -74,12 +80,12 @@ func TestMetadataEventFilter(t *testing.T) { name: "Deserializer errors", e: &reflex.Event{MetaData: m}, ds: func(x *testing.T) Deserializer[string] { - return func(b []byte) (string, error) { require.Equal(x, m, b); return string(b), errors.New("bad metadata") } + return func(b []byte) (string, error) { require.Equal(x, m, b); return string(b), testBadMetadataErr } }, flt: func(x *testing.T) DataFilter[string] { return func(s string) (bool, error) { require.Fail(x, "should not be reached"); return true, nil } }, - err: []error{deserializationErr, errors.New("bad metadata")}, + err: []error{deserializationErr, testBadMetadataErr}, }, { name: "Data Filter errors", @@ -88,9 +94,9 @@ func TestMetadataEventFilter(t *testing.T) { return func(b []byte) (string, error) { require.Equal(x, m, b); return string(b), nil } }, flt: func(x *testing.T) DataFilter[string] { - return func(s string) (bool, error) { require.Equal(x, d, s); return true, errors.New("bad filter") } + return func(s string) (bool, error) { require.Equal(x, d, s); return true, testBadFilterErr } }, - err: []error{errors.New("bad filter")}, + err: []error{testBadFilterErr}, }, { name: "Exclude", @@ -159,7 +165,7 @@ func TestIsDeserializationErr(t *testing.T) { { name: "constructed deserialization error", err: errors.New(deserializationErrMsg), - want: true, + want: false, }, } for _, tt := range tests { diff --git a/rpatterns/batch.go b/rpatterns/batch.go index f507da2..415831c 100644 --- a/rpatterns/batch.go +++ b/rpatterns/batch.go @@ -22,7 +22,10 @@ type batchEvent struct { const minWait = time.Millisecond * 100 -var ErrBatchState = errors.New("batch error state", j.C("ERR_b3053f5f1a3ecd23")) +var ( + ErrBatchState = errors.New("batch error state", j.C("ERR_b3053f5f1a3ecd23")) + ErrInvalidBatchConfig = errors.New("batchPeriod or batchLen must be non-zero", j.C("ERR_invalid_batch_config")) +) // BatchConsumer provides a reflex consumer that buffers events // and flushes a batch to the consume function when either @@ -95,7 +98,7 @@ func (c *BatchConsumer) Stop() error { // enqueue adds the event to the buffer or returns error if batch needs to be reset. func (c *BatchConsumer) enqueue(ctx context.Context, e *AckEvent) error { if c.flushPeriod == 0 && c.flushLen == 0 { - return errors.New("batchPeriod or batchLen must be non-zero") + return ErrInvalidBatchConfig } // Add event to batch queue diff --git a/rpatterns/batch_test.go b/rpatterns/batch_test.go index 3853001..6971d2c 100644 --- a/rpatterns/batch_test.go +++ b/rpatterns/batch_test.go @@ -105,7 +105,6 @@ func TestRunBatchConsumer(t *testing.T) { } func TestReset(t *testing.T) { - recvEndErr := errors.New("recv error") tests := []struct { name string batchLen int @@ -146,13 +145,13 @@ func TestReset(t *testing.T) { spec := rpatterns.NewBatchSpec(b.Stream, consumer) ctx := context.Background() err := reflex.Run(ctx, spec) - jtest.Assert(t, recvEndErr, err) + jtest.Assert(t, errEvents, err) events = ItoEList(tt.passEvents...) b.events = events err = reflex.Run(ctx, spec) - jtest.Assert(t, recvEndErr, err) + jtest.Assert(t, errEvents, err) }) } } @@ -171,7 +170,7 @@ func TestInvalidConfig(t *testing.T) { spec := rpatterns.NewBatchSpec(b.Stream, consumer) ctx := context.Background() err := reflex.Run(ctx, spec) - jtest.Assert(t, errors.New("batchPeriod or batchLen must be non-zero"), err) + jtest.Assert(t, rpatterns.ErrInvalidBatchConfig, err) } type EventList struct {