Remove metrics race condition in sqs test

To test that the broker responds with a proxy answer if available, have
only one valid client offer to ensure metrics will always be in the
first multiple of 8.
This commit is contained in:
Cecylia Bocovich 2025-02-22 17:30:48 -05:00
parent 80374c6d93
commit 9e619a3654
No known key found for this signature in database
GPG key ID: 009DE379FD9B7B90

View file

@ -136,30 +136,33 @@ func TestSQS(t *testing.T) {
Convey("and responds with a proxy answer if available.", func(c C) { Convey("and responds with a proxy answer if available.", func(c C) {
sqsHandlerContext, sqsCancelFunc := context.WithCancel(context.Background()) sqsHandlerContext, sqsCancelFunc := context.WithCancel(context.Background())
var numTimes atomic.Uint32
mockSQSClient.EXPECT().ReceiveMessage(sqsHandlerContext, &sqsReceiveMessageInput).AnyTimes().DoAndReturn( mockSQSClient.EXPECT().ReceiveMessage(sqsHandlerContext, &sqsReceiveMessageInput).AnyTimes().DoAndReturn(
func(ctx context.Context, input *sqs.ReceiveMessageInput, optFns ...func(*sqs.Options)) (*sqs.ReceiveMessageOutput, error) { func(ctx context.Context, input *sqs.ReceiveMessageInput, optFns ...func(*sqs.Options)) (*sqs.ReceiveMessageOutput, error) {
snowflake := ipcCtx.AddSnowflake("fake", "", NATUnrestricted, 0) n := numTimes.Add(1)
go func(c C) { if n == 1 {
<-snowflake.offerChannel snowflake := ipcCtx.AddSnowflake("fake", "", NATUnrestricted, 0)
snowflake.answerChannel <- "fake answer" go func(c C) {
}(c) <-snowflake.offerChannel
return validMessage, nil snowflake.answerChannel <- "fake answer"
}(c)
return validMessage, nil
}
return nil, errors.New("error")
}) })
mockSQSClient.EXPECT().CreateQueue(sqsHandlerContext, &sqsCreateQueueInput).Return(&sqs.CreateQueueOutput{ mockSQSClient.EXPECT().CreateQueue(sqsHandlerContext, &sqsCreateQueueInput).Return(&sqs.CreateQueueOutput{
QueueUrl: responseQueueURL, QueueUrl: responseQueueURL,
}, nil).AnyTimes() }, nil).AnyTimes()
mockSQSClient.EXPECT().DeleteMessage(gomock.Any(), gomock.Any()).AnyTimes() mockSQSClient.EXPECT().DeleteMessage(gomock.Any(), gomock.Any()).AnyTimes()
var numTimes atomic.Uint32 mockSQSClient.EXPECT().SendMessage(sqsHandlerContext, gomock.Any()).Times(1).DoAndReturn(
mockSQSClient.EXPECT().SendMessage(sqsHandlerContext, gomock.Any()).MinTimes(1).DoAndReturn(
func(ctx context.Context, input *sqs.SendMessageInput, optFns ...func(*sqs.Options)) (*sqs.SendMessageOutput, error) { func(ctx context.Context, input *sqs.SendMessageInput, optFns ...func(*sqs.Options)) (*sqs.SendMessageOutput, error) {
n := numTimes.Add(1) c.So(input.MessageBody, ShouldEqual, aws.String("{\"answer\":\"fake answer\"}"))
if n == 1 { // Ensure that match is correctly recorded in metrics
c.So(input.MessageBody, ShouldEqual, aws.String("{\"answer\":\"fake answer\"}")) ipcCtx.metrics.printMetrics()
// Ensure that match is correctly recorded in metrics c.So(buf.String(), ShouldContainSubstring, `client-denied-count 0
ipcCtx.metrics.printMetrics()
c.So(buf.String(), ShouldContainSubstring, `client-denied-count 0
client-restricted-denied-count 0 client-restricted-denied-count 0
client-unrestricted-denied-count 0 client-unrestricted-denied-count 0
client-snowflake-match-count 8 client-snowflake-match-count 8
@ -170,8 +173,7 @@ client-ampcache-ips
client-sqs-count 8 client-sqs-count 8
client-sqs-ips ??=8 client-sqs-ips ??=8
`) `)
sqsCancelFunc() sqsCancelFunc()
}
return &sqs.SendMessageOutput{}, nil return &sqs.SendMessageOutput{}, nil
}, },
) )