11package auth_test
22
33import (
4+ "context"
45 "database/sql"
56 "encoding/json"
67 "errors"
@@ -12,6 +13,7 @@ import (
1213 "strings"
1314 "testing"
1415
16+ appMiddleware "github.com/CMSgov/bcda-app/middleware"
1517 "github.com/go-chi/chi/v5"
1618 "github.com/golang-jwt/jwt/v5"
1719 "github.com/pborman/uuid"
@@ -21,6 +23,7 @@ import (
2123 customErrors "github.com/CMSgov/bcda-app/bcda/errors"
2224 "github.com/CMSgov/bcda-app/bcda/models/postgres"
2325 "github.com/CMSgov/bcda-app/bcda/testUtils"
26+ "github.com/CMSgov/bcda-app/bcda/web"
2427 bcdaLog "github.com/CMSgov/bcda-app/log"
2528
2629 "github.com/stretchr/testify/assert"
@@ -212,3 +215,51 @@ func (s *AuthAPITestSuite) TestWelcome() {
212215func TestAuthAPITestSuite (t * testing.T ) {
213216 suite .Run (t , new (AuthAPITestSuite ))
214217}
218+
219+ // benchmark tests below
220+
221+ func BenchmarkAuthToken (b * testing.B ) {
222+ // set up generic background needs
223+ db := database .Connect ()
224+ repository := postgres .NewRepository (db )
225+ provider := auth .NewProvider (db )
226+ baseApi := auth .NewBaseApi (provider )
227+ router := web .NewAuthRouter (provider )
228+ server := httptest .NewServer (router )
229+ ctx := context .Background ()
230+
231+ // set up db records
232+ aco , err := repository .GetACOByCMSID (ctx , "A9994" )
233+ if err != nil {
234+ b .Log ("failed to get aco" )
235+ b .FailNow ()
236+ }
237+ err = repository .UpdateACO (ctx , aco .UUID , map [string ]interface {}{"system_id" : "2" })
238+ if err != nil {
239+ b .Logf ("failed to update aco: %+v" , err )
240+ b .FailNow ()
241+ }
242+ creds , err := provider .ResetSecret (aco .ClientID )
243+ if err != nil {
244+ b .Logf ("failed to reset secrets: %+v" , err )
245+ b .FailNow ()
246+ }
247+
248+ // set up request
249+ rr := httptest .NewRecorder ()
250+ req , err := http .NewRequestWithContext (ctx , "POST" , fmt .Sprintf ("%s/auth/token" , server .URL ), nil )
251+ if err != nil {
252+ b .Log ("failed to create request" )
253+ b .FailNow ()
254+ }
255+ req .Header .Add ("Accept" , constants .JsonContentType )
256+ req = req .WithContext (context .WithValue (req .Context (), appMiddleware .CtxTransactionKey , uuid .New ()))
257+ req .SetBasicAuth (creds .ClientID , creds .ClientSecret )
258+ handler := http .HandlerFunc (baseApi .GetAuthToken )
259+
260+ b .ResetTimer ()
261+
262+ for b .Loop () {
263+ handler .ServeHTTP (rr , req )
264+ }
265+ }
0 commit comments