Skip to content

Commit f2d6817

Browse files
committed
fix sonarcloud code analysis
Signed-off-by: Parth Suthar <parth.suthar@dynatrace.com>
1 parent 4115185 commit f2d6817

2 files changed

Lines changed: 71 additions & 34 deletions

File tree

core/pkg/evaluator/json_test.go

Lines changed: 28 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -803,6 +803,33 @@ func BenchmarkResolveIntValue(b *testing.B) {
803803
}
804804
}
805805

806+
func assertObjectResolveResult(
807+
t *testing.T,
808+
flagKey, expectedJSON, expectedReason, errorCode string,
809+
val map[string]any,
810+
reason string,
811+
err error,
812+
) {
813+
t.Helper()
814+
if errorCode != "" {
815+
assert.Equal(t, model.ErrorReason, reason)
816+
assert.EqualError(t, err, errorCode)
817+
return
818+
}
819+
if !assert.NoError(t, err) {
820+
return
821+
}
822+
if flagKey == DisabledFlag {
823+
assert.Nil(t, val)
824+
} else {
825+
marshalled, marshalErr := json.Marshal(val)
826+
if assert.NoError(t, marshalErr) {
827+
assert.JSONEq(t, expectedJSON, string(marshalled))
828+
}
829+
}
830+
assert.Equal(t, expectedReason, reason)
831+
}
832+
806833
func TestResolveObjectValue(t *testing.T) {
807834
tests := []struct {
808835
flagKey string
@@ -826,23 +853,7 @@ func TestResolveObjectValue(t *testing.T) {
826853

827854
for _, test := range tests {
828855
val, _, reason, _, err := evaluator.ResolveObjectValue(context.TODO(), reqID, test.flagKey, test.context)
829-
830-
if test.errorCode == "" {
831-
if assert.NoError(t, err) {
832-
if test.flagKey == DisabledFlag {
833-
assert.Nil(t, val)
834-
} else {
835-
marshalled, err := json.Marshal(val)
836-
if assert.NoError(t, err) {
837-
assert.JSONEq(t, test.val, string(marshalled))
838-
}
839-
}
840-
assert.Equal(t, test.reason, reason)
841-
}
842-
} else {
843-
assert.Equal(t, model.ErrorReason, reason)
844-
assert.EqualError(t, err, test.errorCode)
845-
}
856+
assertObjectResolveResult(t, test.flagKey, test.val, test.reason, test.errorCode, val, reason, err)
846857
}
847858
}
848859

flagd/pkg/service/flag-evaluation/flag_evaluator_v2.go

Lines changed: 43 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ import (
2424
"google.golang.org/protobuf/types/known/structpb"
2525
)
2626

27+
const errSettingResponseResult = "error setting response result: %w"
28+
2729
type FlagEvaluationServiceV2 struct {
2830
logger *logger.Logger
2931
eval evaluator.IEvaluator
@@ -244,28 +246,52 @@ func resolveV2[T constraints](ctx context.Context, logger *logger.Logger, resolv
244246
spanFromContext := trace.SpanFromContext(ctx)
245247
spanFromContext.SetAttributes(telemetry.SemConvFeatureFlagAttributes(flagKey, variant)...)
246248

247-
if reason == model.FallbackReason {
248-
if respV2, ok := resp.(responseV2[T]); ok {
249-
if err := respV2.SetReasonOnly(model.DefaultReason, metadata); err != nil {
250-
logger.ErrorWithID(reqID, err.Error())
251-
return fmt.Errorf("error setting response result: %w", err)
252-
}
253-
}
254-
} else if reason == model.DisabledReason {
255-
if respV2, ok := resp.(responseV2[T]); ok {
256-
if err := respV2.SetReasonOnly(model.DisabledReason, metadata); err != nil {
257-
logger.ErrorWithID(reqID, err.Error())
258-
return fmt.Errorf("error setting response result: %w", err)
259-
}
260-
}
261-
} else {
249+
if err := applyResolveV2Response(logger, reqID, resp, result, variant, reason, metadata, evalErr); err != nil {
250+
return err
251+
}
252+
253+
return evalErrFormatted
254+
}
255+
256+
func applyResolveV2Response[T constraints](
257+
logger *logger.Logger,
258+
reqID string,
259+
resp response[T],
260+
result T,
261+
variant, reason string,
262+
metadata map[string]interface{},
263+
evalErr error,
264+
) error {
265+
switch reason {
266+
case model.FallbackReason:
267+
return setResolveV2ReasonOnly(logger, reqID, resp, model.DefaultReason, metadata)
268+
case model.DisabledReason:
269+
return setResolveV2ReasonOnly(logger, reqID, resp, model.DisabledReason, metadata)
270+
default:
262271
if err := resp.SetResult(result, variant, reason, metadata); err != nil && evalErr == nil {
263272
logger.ErrorWithID(reqID, err.Error())
264-
return fmt.Errorf("error setting response result: %w", err)
273+
return fmt.Errorf(errSettingResponseResult, err)
265274
}
266275
}
276+
return nil
277+
}
267278

268-
return evalErrFormatted
279+
func setResolveV2ReasonOnly[T constraints](
280+
logger *logger.Logger,
281+
reqID string,
282+
resp response[T],
283+
reason string,
284+
metadata map[string]interface{},
285+
) error {
286+
respV2, ok := resp.(responseV2[T])
287+
if !ok {
288+
return nil
289+
}
290+
if err := respV2.SetReasonOnly(reason, metadata); err != nil {
291+
logger.ErrorWithID(reqID, err.Error())
292+
return fmt.Errorf(errSettingResponseResult, err)
293+
}
294+
return nil
269295
}
270296

271297
// startResolveV2 initialises tracing and selector context common to every Resolve* method.

0 commit comments

Comments
 (0)