Skip to content

Commit b42f937

Browse files
authored
Merge branch 'main' into allow-no-pollers
2 parents dd6343d + 0880ce4 commit b42f937

File tree

4 files changed

+61
-26
lines changed

4 files changed

+61
-26
lines changed

chasm/test_component_test.go

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@ type (
2020
TestComponent struct {
2121
UnimplementedComponent
2222

23-
ComponentData *protoMessageType
24-
SubComponent1 Field[*TestSubComponent1]
25-
SubComponent2 Field[*TestSubComponent2]
26-
SubData1 Field[*protoMessageType]
27-
SubComponents Map[string, *TestSubComponent1]
28-
PendingActivities Map[int, *TestSubComponent1]
29-
SubComponent11Pointer Field[*TestSubComponent11]
30-
SubComponent11Pointer2 Field[*TestSubComponent11]
23+
ComponentData *protoMessageType
24+
SubComponent1 Field[*TestSubComponent1]
25+
SubComponent2 Field[*TestSubComponent2]
26+
SubData1 Field[*protoMessageType]
27+
SubComponents Map[string, *TestSubComponent1]
28+
PendingActivities Map[int, *TestSubComponent1]
29+
SubComponent11Pointer Field[*TestSubComponent11]
30+
SubComponent11Pointer2 Field[*TestSubComponent11]
31+
SubComponentInterfacePointer Field[Component]
3132

3233
Visibility Field[*Visibility]
3334
}

chasm/tree_test.go

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -452,20 +452,21 @@ func (s *nodeSuite) TestPointerAttributes() {
452452
},
453453
}
454454

455+
sc1 := &TestSubComponent1{
456+
SubComponent1Data: &protoMessageType{
457+
RunId: tv.WithWorkflowIDNumber(1).WorkflowID(),
458+
},
459+
SubComponent11: NewComponentField[*TestSubComponent11](nil, sc11),
460+
}
461+
455462
s.Run("Sync and serialize component with pointer", func() {
456463
var nilSerializedNodes map[string]*persistencespb.ChasmNode
457464
rootNode, err := s.newTestTree(nilSerializedNodes)
458465
s.NoError(err)
459466

460-
sc1 := &TestSubComponent1{
461-
SubComponent1Data: &protoMessageType{
462-
RunId: tv.WithWorkflowIDNumber(1).WorkflowID(),
463-
},
464-
SubComponent11: NewComponentField[*TestSubComponent11](nil, sc11),
465-
}
466-
467467
rootComponent := &TestComponent{
468-
SubComponent1: NewComponentField[*TestSubComponent1](nil, sc1),
468+
SubComponent1: NewComponentField[*TestSubComponent1](nil, sc1),
469+
SubComponentInterfacePointer: NewComponentField[Component](nil, sc1),
469470
}
470471

471472
rootNode.value = rootComponent
@@ -477,7 +478,7 @@ func (s *nodeSuite) TestPointerAttributes() {
477478

478479
mutations, err := rootNode.CloseTransaction()
479480
s.NoError(err)
480-
s.Len(mutations.UpdatedNodes, 4, "root, SubComponent1, SubComponent11, and SubComponent11Pointer must be updated")
481+
s.Len(mutations.UpdatedNodes, 5, "root, SubComponent1, SubComponent11, SubComponent11Pointer, and SubComponentInterfacePointer must be updated")
481482
s.Empty(mutations.DeletedNodes)
482483

483484
s.Equal([]string{"SubComponent1", "SubComponent11"}, rootNode.children["SubComponent11Pointer"].serializedNode.GetMetadata().GetPointerAttributes().GetNodePath())
@@ -502,6 +503,14 @@ func (s *nodeSuite) TestPointerAttributes() {
502503
s.NoError(err)
503504
s.NotNil(sc11Des)
504505
s.Equal(sc11.SubComponent11Data.GetRunId(), sc11Des.SubComponent11Data.GetRunId())
506+
507+
ifacePtr, err := rootComponent.SubComponentInterfacePointer.Get(chasmContext)
508+
s.NoError(err)
509+
s.NotNil(ifacePtr)
510+
511+
sc1ptr, ok := ifacePtr.(*TestSubComponent1)
512+
s.True(ok)
513+
s.ProtoEqual(sc1ptr.SubComponent1Data, sc1.SubComponent1Data)
505514
})
506515

507516
s.Run("Clear pointer by setting it to the empty field", func() {

common/authorization/interceptor.go

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -101,14 +101,15 @@ func NewInterceptor(
101101
exposeAuthorizerErrors dynamicconfig.BoolPropertyFn,
102102
) *Interceptor {
103103
return &Interceptor{
104-
claimMapper: claimMapper,
105-
authorizer: authorizer,
106-
logger: logger,
107-
namespaceChecker: namespaceChecker,
108-
metricsHandler: metricsHandler,
109-
authHeaderName: cmp.Or(authHeaderName, defaultAuthHeaderName),
110-
authExtraHeaderName: cmp.Or(authExtraHeaderName, defaultAuthExtraHeaderName),
111-
audienceGetter: audienceGetter,
104+
claimMapper: claimMapper,
105+
authorizer: authorizer,
106+
logger: logger,
107+
namespaceChecker: namespaceChecker,
108+
metricsHandler: metricsHandler,
109+
authHeaderName: cmp.Or(authHeaderName, defaultAuthHeaderName),
110+
authExtraHeaderName: cmp.Or(authExtraHeaderName, defaultAuthExtraHeaderName),
111+
audienceGetter: audienceGetter,
112+
exposeAuthorizerErrors: exposeAuthorizerErrors,
112113
}
113114
}
114115

@@ -225,7 +226,7 @@ func (a *Interceptor) Authorize(ctx context.Context, claims *Claims, ct *CallTar
225226
if err != nil {
226227
metrics.ServiceErrAuthorizeFailedCounter.With(mh).Record(1)
227228
a.logger.Error("Authorization error", tag.Error(err))
228-
if a.exposeAuthorizerErrors != nil && a.exposeAuthorizerErrors() {
229+
if a.exposeAuthorizerErrors() {
229230
return err
230231
}
231232
return errUnauthorized // return a generic error to the caller without disclosing details

common/authorization/interceptor_test.go

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77

88
"github.com/stretchr/testify/require"
99
"github.com/stretchr/testify/suite"
10+
"go.temporal.io/api/serviceerror"
1011
"go.temporal.io/api/workflowservice/v1"
1112
"go.temporal.io/server/common/dynamicconfig"
1213
"go.temporal.io/server/common/log"
@@ -138,6 +139,29 @@ func (s *authorizerInterceptorSuite) TestAuthorizationFailed() {
138139
s.Error(err)
139140
}
140141

142+
func (s *authorizerInterceptorSuite) TestAuthorizationFailedExposed() {
143+
interceptor := NewInterceptor(
144+
s.mockClaimMapper,
145+
s.mockAuthorizer,
146+
s.mockMetricsHandler,
147+
log.NewNoopLogger(),
148+
mockNamespaceChecker(testNamespace),
149+
nil,
150+
"",
151+
"",
152+
dynamicconfig.GetBoolPropertyFn(true),
153+
)
154+
155+
authErr := serviceerror.NewInternal("intentional test failure")
156+
s.mockAuthorizer.EXPECT().Authorize(ctx, nil, describeNamespaceTarget).
157+
Return(Result{Decision: DecisionDeny}, authErr)
158+
s.mockMetricsHandler.EXPECT().Counter(metrics.ServiceErrAuthorizeFailedCounter.Name()).Return(metrics.NoopCounterMetricFunc)
159+
160+
res, err := interceptor.Intercept(ctx, describeNamespaceRequest, describeNamespaceInfo, s.handler)
161+
s.Nil(res)
162+
s.ErrorIs(err, authErr)
163+
}
164+
141165
func (s *authorizerInterceptorSuite) TestNoopClaimMapperWithoutTLS() {
142166
admin := &Claims{System: RoleAdmin}
143167
s.mockAuthorizer.EXPECT().Authorize(gomock.Any(), admin, describeNamespaceTarget).

0 commit comments

Comments
 (0)