From 9d3b8428bdc78fcb579ac3a102e279d78257c34e Mon Sep 17 00:00:00 2001 From: nutcas3 Date: Sat, 25 Apr 2026 01:06:30 +0300 Subject: [PATCH] feat: Remove unused imports across charging engine modules - Remove unused IntoResponse/warn/error/ChargingError/validate_* imports from api - Remove unused AsyncCommands/error/ChargingSession/ErrorContext imports from credit_management - Remove unused ErrorContext/ChargingError imports from engine - Remove unused ErrorContext import from rating_billing and prefix unused variables with underscore - Remove unused ErrorContext import from rating_plans_repo - Remove unused log_error/validate_amount/validate_im --- .../middleware/redis_ratelimit_test.go | 14 ++++++++------ apps/api-server/internal/services/chaos.go | 19 +++++++++++++++++-- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/apps/api-server/internal/middleware/redis_ratelimit_test.go b/apps/api-server/internal/middleware/redis_ratelimit_test.go index 7b20efe..62aa25d 100644 --- a/apps/api-server/internal/middleware/redis_ratelimit_test.go +++ b/apps/api-server/internal/middleware/redis_ratelimit_test.go @@ -19,12 +19,13 @@ type MockRedisClient struct { } func (m *MockRedisClient) Eval(ctx context.Context, script string, keys []string, args ...interface{}) *redis.Cmd { - callArgs := []any{script} + argsList := make([]interface{}, 0, len(keys)+len(args)+1) + argsList = append(argsList, script) for _, key := range keys { - callArgs = append(callArgs, key) + argsList = append(argsList, key) } - callArgs = append(callArgs, args...) - return m.Called(callArgs...).Get(0).(*redis.Cmd) + argsList = append(argsList, args...) + return m.Called(argsList...).Get(0).(*redis.Cmd) } func (m *MockRedisClient) Del(ctx context.Context, keys ...string) *redis.IntCmd { @@ -63,7 +64,8 @@ func TestRedisRateLimiter_Allow(t *testing.T) { cmd := redis.NewCmd(context.Background()) cmd.SetVal(mockResult) - mockClient.On("Eval", mock.AnythingOfType("[]interface {}")).Return(cmd) + // Match the actual call signature: script, key, now, window, limit + mockClient.On("Eval", mock.AnythingOfType("string"), mock.AnythingOfType("string"), mock.AnythingOfType("int64"), mock.AnythingOfType("int64"), mock.AnythingOfType("int64")).Return(cmd) // Create rate limiter with mock client limiter := NewRedisRateLimiter(mockClient, "test", tt.limit, tt.window) @@ -114,7 +116,7 @@ func TestRedisRateLimitMiddleware(t *testing.T) { // Mock successful rate limit check cmd := redis.NewCmd(context.Background()) cmd.SetVal([]interface{}{int64(1), int64(4), int64(time.Now().Unix() + 60)}) - mockClient.On("Eval", mock.AnythingOfType("[]interface {}")).Return(cmd) + mockClient.On("Eval", mock.AnythingOfType("string"), mock.AnythingOfType("string"), mock.AnythingOfType("int64"), mock.AnythingOfType("int64"), mock.AnythingOfType("int64")).Return(cmd) // Create rate limiter with mock client limiter := NewRedisRateLimiter(mockClient, "test", 5, time.Minute) diff --git a/apps/api-server/internal/services/chaos.go b/apps/api-server/internal/services/chaos.go index 3afac2e..977248b 100644 --- a/apps/api-server/internal/services/chaos.go +++ b/apps/api-server/internal/services/chaos.go @@ -202,7 +202,13 @@ func (cs *ChaosService) GetActiveExperiments() []*Experiment { experiments := make([]*Experiment, 0, len(cs.active)) for _, exp := range cs.active { - experiments = append(experiments, exp) + // Create a copy to avoid race conditions + copy := *exp + if exp.Finished != nil { + finished := *exp.Finished + copy.Finished = &finished + } + experiments = append(experiments, ©) } return experiments } @@ -213,7 +219,16 @@ func (cs *ChaosService) GetExperimentStatus(id string) (*Experiment, bool) { defer cs.mu.RUnlock() exp, exists := cs.active[id] - return exp, exists + if !exists { + return nil, false + } + // Create a copy to avoid race conditions + copy := *exp + if exp.Finished != nil { + finished := *exp.Finished + copy.Finished = &finished + } + return ©, true } // Middleware function to inject chaos into HTTP requests