Skip to content

Commit

Permalink
add test
Browse files Browse the repository at this point in the history
  • Loading branch information
orouz committed Mar 31, 2024
1 parent f1efd59 commit 0307158
Showing 1 changed file with 66 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.

package inventory

import (
"context"
"fmt"
"testing"
"time"

"github.com/elastic/elastic-agent-libs/logp"
"github.com/stretchr/testify/suite"
"golang.org/x/time/rate"
)

type RateLimiterTestSuite struct {
suite.Suite
logger *logp.Logger
rateLimiter *AssetsInventoryRateLimiter
}

func TestInventoryRateLimiterTestSuite(t *testing.T) {
suite.Run(t, new(RateLimiterTestSuite))
}

func (s *RateLimiterTestSuite) SetupTest() {
s.logger = logp.NewLogger("test")
s.rateLimiter = NewAssetsInventoryRateLimiter(s.logger)
}

func (s *RateLimiterTestSuite) TestRateLimiterWait() {
ctx := context.Background()
s.rateLimiter.methods = map[string]*rate.Limiter{
"foo": rate.NewLimiter(rate.Every(time.Second/1), 1), // 1 request per second
}

totalRequests := 5
startTime := time.Now()

for i := 0; i < totalRequests; i++ {
s.rateLimiter.Wait(ctx, "foo")
}

endTime := time.Now()
duration := endTime.Sub(startTime)

// expected duration is (totalRequests-1) seconds
// 1st request goes instantly, 2nd and above wait 1 second each
expectedDuration := time.Second * time.Duration((totalRequests - 1))
s.Assert().True(duration >= expectedDuration, fmt.Sprintf("expected %v, actual %v", expectedDuration, duration))
}

0 comments on commit 0307158

Please sign in to comment.