Skip to content

Commit

Permalink
BCDA-6109: Remove jobId/clientId headers for non-bulk requests (#812)
Browse files Browse the repository at this point in the history
  • Loading branch information
ian-sawyer authored Dec 5, 2022
1 parent d097314 commit c3428e3
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 11 deletions.
30 changes: 21 additions & 9 deletions bcda/client/bluebutton.go
Original file line number Diff line number Diff line change
Expand Up @@ -295,7 +295,7 @@ func (bbc *BlueButtonClient) tryBundleRequest(u *url.URL, jobID, cmsID string, h
}

queryID := uuid.NewRandom()
addRequestHeaders(req, queryID, jobID, cmsID)
addBulkRequestHeaders(req, queryID, jobID, cmsID)

result, nextURL, err = bbc.client.DoBundleRequest(req)
if err != nil {
Expand Down Expand Up @@ -333,7 +333,7 @@ func (bbc *BlueButtonClient) getRawData(u *url.URL) (string, error) {
logger.Error(err)
return err
}
addRequestHeaders(req, uuid.NewRandom(), "", "")
addNonBulkRequestHeaders(req, uuid.NewRandom())

result, err = bbc.client.DoRaw(req)
if err != nil {
Expand Down Expand Up @@ -364,16 +364,14 @@ func (bbc *BlueButtonClient) getURL(path string, params url.Values) (*url.URL, e
return u, nil
}

func addRequestHeaders(req *http.Request, reqID uuid.UUID, jobID, cmsID string) {
func addDefaultRequestHeaders(req *http.Request, reqID uuid.UUID) {
// Info for BB backend: https://jira.cms.gov/browse/BLUEBUTTON-483
req.Header.Add("keep-alive", "")
req.Header.Add(constants.BBHeaderTS, time.Now().String())
req.Header.Add(constants.BBHeaderOriginQID, reqID.String())
req.Header.Add("BlueButton-OriginalQueryCounter", "1")
req.Header.Add("keep-alive", "")
req.Header.Add("BlueButton-OriginalUrl", req.URL.String())
req.Header.Add("BlueButton-OriginalQuery", req.URL.RawQuery)
req.Header.Add(jobIDHeader, jobID)
req.Header.Add(clientIDHeader, cmsID)
req.Header.Add(constants.BBHeaderOriginQC, "1")
req.Header.Add(constants.BBHeaderOriginURL, req.URL.String())
req.Header.Add(constants.BBHeaderOriginQ, req.URL.RawQuery)
req.Header.Add("IncludeIdentifiers", "mbi")

// We SHOULD NOT be specifying "Accept-Encoding: gzip" on the request header.
Expand All @@ -387,7 +385,21 @@ func addRequestHeaders(req *http.Request, reqID uuid.UUID, jobID, cmsID string)
//req.Header.Add("BlueButton-BeneficiaryId", "")
//req.Header.Add("BlueButton-OriginatingIpAddress", "")
//req.Header.Add("BlueButton-BackendCall", "")
}

// function to add headers for bulk requests
func addBulkRequestHeaders(req *http.Request, reqID uuid.UUID, jobID, cmsID string) {
// Info: https://github.com/CMSgov/beneficiary-fhir-data/blob/master/docs/request-audit-headers.md
addDefaultRequestHeaders(req, reqID)

req.Header.Add(jobIDHeader, jobID)
req.Header.Add(clientIDHeader, cmsID)
}

// function to add headers for non-bulk requests
func addNonBulkRequestHeaders(req *http.Request, reqID uuid.UUID) {
// Info: https://github.com/CMSgov/beneficiary-fhir-data/blob/master/docs/request-audit-headers.md
addDefaultRequestHeaders(req, reqID)
}

func GetDefaultParams() (params url.Values) {
Expand Down
59 changes: 57 additions & 2 deletions bcda/client/bluebutton_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -349,6 +349,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
noServiceDateChecker,
noIncludeAddressFieldsChecker,
includeTaxNumbersChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -368,6 +370,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
noServiceDateChecker,
noIncludeAddressFieldsChecker,
includeTaxNumbersChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -388,6 +392,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
noServiceDateLowerBoundChecker,
noIncludeAddressFieldsChecker,
includeTaxNumbersChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -408,6 +414,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
noServiceDateUpperBoundChecker,
noIncludeAddressFieldsChecker,
includeTaxNumbersChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -428,6 +436,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
serviceDateUpperBoundChecker,
noIncludeAddressFieldsChecker,
includeTaxNumbersChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -446,6 +456,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
noExcludeSAMHSAChecker,
includeAddressFieldsChecker,
noIncludeTaxNumbersChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -464,6 +476,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
noExcludeSAMHSAChecker,
includeAddressFieldsChecker,
noIncludeTaxNumbersChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -482,6 +496,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
noExcludeSAMHSAChecker,
noIncludeAddressFieldsChecker,
noIncludeTaxNumbersChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -500,6 +516,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
noExcludeSAMHSAChecker,
noIncludeAddressFieldsChecker,
noIncludeTaxNumbersChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -516,6 +534,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
noExcludeSAMHSAChecker,
noIncludeAddressFieldsChecker,
noIncludeTaxNumbersChecker,
noBulkRequestHeaders,
hasDefaultRequestHeaders,
},
},
{
Expand All @@ -535,6 +555,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
excludeSAMHSAChecker,
includeTaxNumbersChecker,
noIncludeAddressFieldsChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -554,6 +576,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
excludeSAMHSAChecker,
includeTaxNumbersChecker,
noIncludeAddressFieldsChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -574,6 +598,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
excludeSAMHSAChecker,
includeTaxNumbersChecker,
noIncludeAddressFieldsChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -594,6 +620,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
excludeSAMHSAChecker,
includeTaxNumbersChecker,
noIncludeAddressFieldsChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -614,6 +642,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
excludeSAMHSAChecker,
includeTaxNumbersChecker,
noIncludeAddressFieldsChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -633,6 +663,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
excludeSAMHSAChecker,
includeTaxNumbersChecker,
noIncludeAddressFieldsChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -652,6 +684,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
excludeSAMHSAChecker,
includeTaxNumbersChecker,
noIncludeAddressFieldsChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -672,6 +706,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
excludeSAMHSAChecker,
includeTaxNumbersChecker,
noIncludeAddressFieldsChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -692,6 +728,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
excludeSAMHSAChecker,
includeTaxNumbersChecker,
noIncludeAddressFieldsChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
{
Expand All @@ -712,6 +750,8 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
excludeSAMHSAChecker,
includeTaxNumbersChecker,
noIncludeAddressFieldsChecker,
hasDefaultRequestHeaders,
hasBulkRequestHeaders,
},
},
}
Expand Down Expand Up @@ -740,8 +780,6 @@ func (s *BBRequestTestSuite) TestValidateRequest() {
"%s does not end with %s", req.Header.Get("BlueButton-OriginalUrl"), req.URL.String())
assert.Equal(t, req.URL.RawQuery, req.Header.Get("BlueButton-OriginalQuery"))

assert.Equal(t, jobID, req.Header.Get(jobIDHeader))
assert.Equal(t, cmsID, req.Header.Get(clientIDHeader))
assert.Empty(t, req.Header.Get(oldJobIDHeader))
assert.Empty(t, req.Header.Get(oldClientIDHeader))

Expand Down Expand Up @@ -870,6 +908,23 @@ func noIncludeTaxNumbersChecker(t *testing.T, req *http.Request) {
func includeTaxNumbersChecker(t *testing.T, req *http.Request) {
assert.Equal(t, "true", req.Header.Get("IncludeTaxNumbers"))
}
func hasDefaultRequestHeaders(t *testing.T, req *http.Request) {
assert.NotEmpty(t, req.Header.Get(constants.BBHeaderTS))
assert.NotEmpty(t, req.Header.Get(constants.BBHeaderOriginURL))
assert.NotEmpty(t, req.Header.Get(constants.BBHeaderOriginQID))
assert.NotEmpty(t, req.Header.Get(constants.BBHeaderOriginQ))
assert.NotEmpty(t, req.Header.Get(constants.BBHeaderOriginQC))
}
func hasBulkRequestHeaders(t *testing.T, req *http.Request) {
assert.NotEmpty(t, req.Header.Get(jobIDHeader))
assert.NotEmpty(t, req.Header.Get(clientIDHeader))
}
func noBulkRequestHeaders(t *testing.T, req *http.Request) {
for k := range req.Header {
assert.NotEqual(t, k, jobIDHeader)
assert.NotEqual(t, k, clientIDHeader)
}
}

func TestBBTestSuite(t *testing.T) {
suite.Run(t, new(BBTestSuite))
Expand Down
3 changes: 3 additions & 0 deletions bcda/constants/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ const ContentType = "Content-Type"
const JsonContentType = "application/json"

const BBHeaderTS = "BlueButton-OriginalQueryTimestamp"
const BBHeaderOriginURL = "BlueButton-OriginalUrl"
const BBHeaderOriginQID = "BlueButton-OriginalQueryId"
const BBHeaderOriginQ = "BlueButton-OriginalQuery"
const BBHeaderOriginQC = "BlueButton-OriginalQueryCounter"

const CCLFFileRetID = "%s RETURNING id"
const JobKeyCreateErr = "failed to create job key: %w"
Expand Down

0 comments on commit c3428e3

Please sign in to comment.