From d6a165e8f76b595c7e364160a6d9baa68aae3a7e Mon Sep 17 00:00:00 2001
From: halprin <halprin@users.noreply.github.com>
Date: Tue, 24 Oct 2023 15:39:25 -0600
Subject: [PATCH 1/9] Create a class field to ID our private key

---
 .../reportstream/ReportStreamOrderSender.java         | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
index bc6e5d1a2..5cfec33ef 100644
--- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
+++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
@@ -37,6 +37,9 @@ public class ReportStreamOrderSender implements OrderSender {
                     .map(urlPrefix -> urlPrefix.replace("https://", "").replace("http://", ""))
                     .orElse("");
 
+    private static final String OUR_PRIVATE_KEY_ID =
+            "trusted-intermediary-private-key-" + ApplicationContext.getEnvironment();
+
     private static final String CLIENT_NAME = "flexion.etor-service-sender";
 
     private String rsTokenCache;
@@ -155,15 +158,13 @@ protected String requestToken() throws UnableToSendOrderException {
     }
 
     protected String retrievePrivateKey() throws SecretRetrievalException {
-        var senderPrivateKey =
-                "trusted-intermediary-private-key-" + ApplicationContext.getEnvironment();
-        String key = this.keyCache.get(senderPrivateKey);
+        String key = this.keyCache.get(OUR_PRIVATE_KEY_ID);
         if (key != null) {
             return key;
         }
 
-        key = secrets.getKey(senderPrivateKey);
-        this.keyCache.put(senderPrivateKey, key);
+        key = secrets.getKey(OUR_PRIVATE_KEY_ID);
+        this.keyCache.put(OUR_PRIVATE_KEY_ID, key);
         return key;
     }
 

From 98a3a822e0097d41d2c13ad7eed55c7622046047 Mon Sep 17 00:00:00 2001
From: halprin <halprin@users.noreply.github.com>
Date: Tue, 24 Oct 2023 15:42:36 -0600
Subject: [PATCH 2/9] Put our private key into a variable

---
 .../external/reportstream/ReportStreamOrderSender.java         | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
index 5cfec33ef..56da1b23e 100644
--- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
+++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
@@ -139,6 +139,7 @@ protected String requestToken() throws UnableToSendOrderException {
         String body;
         Map<String, String> headers = Map.of("Content-Type", "application/x-www-form-urlencoded");
         try {
+            var ourPrivateKey = retrievePrivateKey();
             senderToken =
                     jwt.generateToken(
                             CLIENT_NAME,
@@ -146,7 +147,7 @@ protected String requestToken() throws UnableToSendOrderException {
                             CLIENT_NAME,
                             RS_DOMAIN_NAME,
                             300,
-                            retrievePrivateKey());
+                            ourPrivateKey);
             body = composeRequestBody(senderToken);
             String rsResponse = client.post(RS_AUTH_API_URL, headers, body);
             token = extractToken(rsResponse);

From 0d73ec8d904d019a8cd1f5e27cba0873ea42a489 Mon Sep 17 00:00:00 2001
From: halprin <halprin@users.noreply.github.com>
Date: Tue, 24 Oct 2023 15:52:37 -0600
Subject: [PATCH 3/9] 600: Clean-up requestToken

---
 .../reportstream/ReportStreamOrderSender.java | 21 ++++++++++---------
 1 file changed, 11 insertions(+), 10 deletions(-)

diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
index 56da1b23e..64eec3099 100644
--- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
+++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
@@ -41,6 +41,8 @@ public class ReportStreamOrderSender implements OrderSender {
             "trusted-intermediary-private-key-" + ApplicationContext.getEnvironment();
 
     private static final String CLIENT_NAME = "flexion.etor-service-sender";
+    private static final Map<String, String> RS_AUTH_API_HEADERS =
+            Map.of("Content-Type", "application/x-www-form-urlencoded");
 
     private String rsTokenCache;
 
@@ -134,13 +136,11 @@ protected String sendRequestBody(@Nonnull String json, @Nonnull String bearerTok
     protected String requestToken() throws UnableToSendOrderException {
         logger.logInfo("Requesting token from ReportStream");
 
-        String senderToken = null;
-        String token = "";
-        String body;
-        Map<String, String> headers = Map.of("Content-Type", "application/x-www-form-urlencoded");
+        String token;
+
         try {
-            var ourPrivateKey = retrievePrivateKey();
-            senderToken =
+            String ourPrivateKey = retrievePrivateKey();
+            String senderToken =
                     jwt.generateToken(
                             CLIENT_NAME,
                             CLIENT_NAME,
@@ -148,24 +148,25 @@ protected String requestToken() throws UnableToSendOrderException {
                             RS_DOMAIN_NAME,
                             300,
                             ourPrivateKey);
-            body = composeRequestBody(senderToken);
-            String rsResponse = client.post(RS_AUTH_API_URL, headers, body);
+            String body = composeRequestBody(senderToken);
+            String rsResponse = client.post(RS_AUTH_API_URL, RS_AUTH_API_HEADERS, body);
             token = extractToken(rsResponse);
         } catch (Exception e) {
             throw new UnableToSendOrderException(
                     "Error getting the API token from ReportStream", e);
         }
+
         return token;
     }
 
     protected String retrievePrivateKey() throws SecretRetrievalException {
-        String key = this.keyCache.get(OUR_PRIVATE_KEY_ID);
+        String key = keyCache.get(OUR_PRIVATE_KEY_ID);
         if (key != null) {
             return key;
         }
 
         key = secrets.getKey(OUR_PRIVATE_KEY_ID);
-        this.keyCache.put(OUR_PRIVATE_KEY_ID, key);
+        keyCache.put(OUR_PRIVATE_KEY_ID, key);
         return key;
     }
 

From 4e98e5113d348b3d2809e3643218c4173cdf417b Mon Sep 17 00:00:00 2001
From: halprin <halprin@users.noreply.github.com>
Date: Tue, 24 Oct 2023 15:58:35 -0600
Subject: [PATCH 4/9] 600: fix tests since we are now saving our private key
 only on success

---
 .../external/reportstream/ReportStreamOrderSender.java    | 8 ++++++--
 .../reportstream/ReportStreamOrderSenderTest.groovy       | 5 +----
 2 files changed, 7 insertions(+), 6 deletions(-)

diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
index 64eec3099..6873fae02 100644
--- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
+++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
@@ -136,10 +136,11 @@ protected String sendRequestBody(@Nonnull String json, @Nonnull String bearerTok
     protected String requestToken() throws UnableToSendOrderException {
         logger.logInfo("Requesting token from ReportStream");
 
+        String ourPrivateKey;
         String token;
 
         try {
-            String ourPrivateKey = retrievePrivateKey();
+            ourPrivateKey = retrievePrivateKey();
             String senderToken =
                     jwt.generateToken(
                             CLIENT_NAME,
@@ -156,6 +157,9 @@ protected String requestToken() throws UnableToSendOrderException {
                     "Error getting the API token from ReportStream", e);
         }
 
+        // only cache our private key if we successfully authenticate to RS
+        keyCache.put(OUR_PRIVATE_KEY_ID, ourPrivateKey);
+
         return token;
     }
 
@@ -166,7 +170,7 @@ protected String retrievePrivateKey() throws SecretRetrievalException {
         }
 
         key = secrets.getKey(OUR_PRIVATE_KEY_ID);
-        keyCache.put(OUR_PRIVATE_KEY_ID, key);
+
         return key;
     }
 
diff --git a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
index d5ccfc9d7..72f037ebe 100644
--- a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
+++ b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
@@ -193,11 +193,9 @@ class ReportStreamOrderSenderTest extends Specification {
         given:
         def mockSecret = Mock(Secrets)
         def expected = "New Fake Azure Key"
-        def keyCache = KeyCache.getInstance()
-        def key = "trusted-intermediary-private-key-local"
         mockSecret.getKey(_ as String) >> expected
         TestApplicationContext.register(Secrets, mockSecret)
-        TestApplicationContext.register(Cache, keyCache)
+        TestApplicationContext.register(Cache, KeyCache.getInstance())
         TestApplicationContext.injectRegisteredImplementations()
         def rsOrderSender = ReportStreamOrderSender.getInstance()
         when:
@@ -205,7 +203,6 @@ class ReportStreamOrderSenderTest extends Specification {
 
         then:
         actual == expected
-        keyCache.get(key) == expected
     }
 
     def "retrievePrivateKey works when cache is not empty" () {

From f12b8a95c8e9ab8404e2046333a855d963098433 Mon Sep 17 00:00:00 2001
From: halprin <halprin@users.noreply.github.com>
Date: Tue, 24 Oct 2023 16:19:42 -0600
Subject: [PATCH 5/9] 600: write a test for us only caching the private key
 when we successfully call RS

---
 .../ReportStreamOrderSenderTest.groovy        | 29 +++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
index 72f037ebe..7ca9c35d6 100644
--- a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
+++ b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
@@ -73,15 +73,44 @@ class ReportStreamOrderSenderTest extends Specification {
         TestApplicationContext.register(Secrets, mockSecrets)
         TestApplicationContext.register(Cache, mockCache)
         TestApplicationContext.injectRegisteredImplementations()
+
         when:
         mockSecrets.getKey(_ as String) >> "Fake Azure Key"
         def actual = ReportStreamOrderSender.getInstance().requestToken()
+
         then:
         1 * mockAuthEngine.generateToken(_ as String, _ as String, _ as String, _ as String, 300, _ as String) >> "sender fake token"
         1 * mockClient.post(_ as String, _ as Map<String, String>, _ as String) >> """{"access_token":"${expected}", "token_type":"bearer"}"""
         actual == expected
     }
 
+    def "requestToken saves our private key only after successful call to RS"() {
+        given:
+        def mockAuthEngine = Mock(AuthEngine)
+        def mockClient = Mock(HttpClient)
+        def mockSecrets = Mock(Secrets)
+        def mockCache = Mock(Cache)
+        def mockFormatter = Mock(Formatter)
+
+        def fakeOurPrivateKey = "DogCow" // pragma: allowlist secret
+        mockSecrets.getKey(_ as String) >> fakeOurPrivateKey
+        mockFormatter.convertJsonToObject(_ , _) >> [access_token: "Moof!"]
+
+        TestApplicationContext.register(AuthEngine, mockAuthEngine)
+        TestApplicationContext.register(HttpClient, mockClient)
+        TestApplicationContext.register(Formatter, mockFormatter)
+        TestApplicationContext.register(Secrets, mockSecrets)
+        TestApplicationContext.register(Cache, mockCache)
+
+        TestApplicationContext.injectRegisteredImplementations()
+
+        when:
+        ReportStreamOrderSender.getInstance().requestToken()
+
+        then:
+        1 * mockCache.put(_ as String, fakeOurPrivateKey)
+    }
+
     def "extractToken works"() {
         given:
         TestApplicationContext.register(Formatter, Jackson.getInstance())

From 00a674d9d62e87a6d98817d2dded75c88ac5ca18 Mon Sep 17 00:00:00 2001
From: halprin <halprin@users.noreply.github.com>
Date: Tue, 24 Oct 2023 16:23:41 -0600
Subject: [PATCH 6/9] 600: test that we do not cache our private key if we fail
 to auth to RS

---
 .../ReportStreamOrderSenderTest.groovy        | 30 +++++++++++++++++++
 1 file changed, 30 insertions(+)

diff --git a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
index 7ca9c35d6..b9bda1a54 100644
--- a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
+++ b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
@@ -111,6 +111,36 @@ class ReportStreamOrderSenderTest extends Specification {
         1 * mockCache.put(_ as String, fakeOurPrivateKey)
     }
 
+    def "requestToken doesn't cache our private key if RS auth call fails"() {
+        given:
+        def mockAuthEngine = Mock(AuthEngine)
+        def mockClient = Mock(HttpClient)
+        def mockSecrets = Mock(Secrets)
+        def mockCache = Mock(Cache)
+        def mockFormatter = Mock(Formatter)
+
+        //        def fakeOurPrivateKey = "DogCow" // pragma: allowlist secret
+        //        mockSecrets.getKey(_ as String) >> fakeOurPrivateKey
+        mockClient.post(_, _, _) >> { throw new HttpClientException("Fake failure", new NullPointerException()) }
+
+        mockFormatter.convertJsonToObject(_ , _) >> [access_token: "Moof!"]
+
+        TestApplicationContext.register(AuthEngine, mockAuthEngine)
+        TestApplicationContext.register(HttpClient, mockClient)
+        TestApplicationContext.register(Formatter, mockFormatter)
+        TestApplicationContext.register(Secrets, mockSecrets)
+        TestApplicationContext.register(Cache, mockCache)
+
+        TestApplicationContext.injectRegisteredImplementations()
+
+        when:
+        ReportStreamOrderSender.getInstance().requestToken()
+
+        then:
+        thrown(UnableToSendOrderException)
+        0 * mockCache.put(_ , _)
+    }
+
     def "extractToken works"() {
         given:
         TestApplicationContext.register(Formatter, Jackson.getInstance())

From 88b0d9d647868a0b9ac9bfe27357574911bd356d Mon Sep 17 00:00:00 2001
From: halprin <halprin@users.noreply.github.com>
Date: Tue, 24 Oct 2023 16:43:55 -0600
Subject: [PATCH 7/9] 600: only cache our private key if it was not already
 cached

---
 .../reportstream/ReportStreamOrderSender.java | 11 +++++-
 .../ReportStreamOrderSenderTest.groovy        | 34 +++++++++++++++++--
 2 files changed, 42 insertions(+), 3 deletions(-)

diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
index 6873fae02..5f99f82f9 100644
--- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
+++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
@@ -158,7 +158,7 @@ protected String requestToken() throws UnableToSendOrderException {
         }
 
         // only cache our private key if we successfully authenticate to RS
-        keyCache.put(OUR_PRIVATE_KEY_ID, ourPrivateKey);
+        cachePrivateKeyIfNotCachedAlready(ourPrivateKey);
 
         return token;
     }
@@ -174,6 +174,15 @@ protected String retrievePrivateKey() throws SecretRetrievalException {
         return key;
     }
 
+    protected void cachePrivateKeyIfNotCachedAlready(String privateKey) {
+        String key = keyCache.get(OUR_PRIVATE_KEY_ID);
+        if (key != null) {
+            return;
+        }
+
+        keyCache.put(OUR_PRIVATE_KEY_ID, privateKey);
+    }
+
     protected String extractToken(String responseBody) throws FormatterProcessingException {
         var value =
                 formatter.convertJsonToObject(
diff --git a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
index b9bda1a54..39092da74 100644
--- a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
+++ b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
@@ -119,8 +119,6 @@ class ReportStreamOrderSenderTest extends Specification {
         def mockCache = Mock(Cache)
         def mockFormatter = Mock(Formatter)
 
-        //        def fakeOurPrivateKey = "DogCow" // pragma: allowlist secret
-        //        mockSecrets.getKey(_ as String) >> fakeOurPrivateKey
         mockClient.post(_, _, _) >> { throw new HttpClientException("Fake failure", new NullPointerException()) }
 
         mockFormatter.convertJsonToObject(_ , _) >> [access_token: "Moof!"]
@@ -141,6 +139,38 @@ class ReportStreamOrderSenderTest extends Specification {
         0 * mockCache.put(_ , _)
     }
 
+    def "cachePrivateKeyIfNotCachedAlready doesn't cache when the key is already is cached"() {
+        given:
+        def mockCache = Mock(Cache)
+        mockCache.get(_ as String) >> "DogCow private key"
+
+        TestApplicationContext.register(Cache, mockCache)
+
+        TestApplicationContext.injectRegisteredImplementations()
+
+        when:
+        ReportStreamOrderSender.getInstance().cachePrivateKeyIfNotCachedAlready("Moof!")
+
+        then:
+        0 * mockCache.put(_, _)
+    }
+
+    def "cachePrivateKeyIfNotCachedAlready caches when the key isn't cached"() {
+        given:
+        def mockCache = Mock(Cache)
+        mockCache.get(_ as String) >> null
+
+        TestApplicationContext.register(Cache, mockCache)
+
+        TestApplicationContext.injectRegisteredImplementations()
+
+        when:
+        ReportStreamOrderSender.getInstance().cachePrivateKeyIfNotCachedAlready("Moof!")
+
+        then:
+        1 * mockCache.put(_, _)
+    }
+
     def "extractToken works"() {
         given:
         TestApplicationContext.register(Formatter, Jackson.getInstance())

From 26e9dc59edfec1c4c3ddc4a48ba08f4bfefd47d1 Mon Sep 17 00:00:00 2001
From: halprin <halprin@users.noreply.github.com>
Date: Tue, 24 Oct 2023 16:58:13 -0600
Subject: [PATCH 8/9] 600: Clean-up the new tests

---
 .../reportstream/ReportStreamOrderSenderTest.groovy  | 12 ++++--------
 1 file changed, 4 insertions(+), 8 deletions(-)

diff --git a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
index 39092da74..02da4aa36 100644
--- a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
+++ b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
@@ -86,8 +86,6 @@ class ReportStreamOrderSenderTest extends Specification {
 
     def "requestToken saves our private key only after successful call to RS"() {
         given:
-        def mockAuthEngine = Mock(AuthEngine)
-        def mockClient = Mock(HttpClient)
         def mockSecrets = Mock(Secrets)
         def mockCache = Mock(Cache)
         def mockFormatter = Mock(Formatter)
@@ -96,8 +94,8 @@ class ReportStreamOrderSenderTest extends Specification {
         mockSecrets.getKey(_ as String) >> fakeOurPrivateKey
         mockFormatter.convertJsonToObject(_ , _) >> [access_token: "Moof!"]
 
-        TestApplicationContext.register(AuthEngine, mockAuthEngine)
-        TestApplicationContext.register(HttpClient, mockClient)
+        TestApplicationContext.register(AuthEngine, Mock(AuthEngine))
+        TestApplicationContext.register(HttpClient, Mock(HttpClient))
         TestApplicationContext.register(Formatter, mockFormatter)
         TestApplicationContext.register(Secrets, mockSecrets)
         TestApplicationContext.register(Cache, mockCache)
@@ -113,9 +111,7 @@ class ReportStreamOrderSenderTest extends Specification {
 
     def "requestToken doesn't cache our private key if RS auth call fails"() {
         given:
-        def mockAuthEngine = Mock(AuthEngine)
         def mockClient = Mock(HttpClient)
-        def mockSecrets = Mock(Secrets)
         def mockCache = Mock(Cache)
         def mockFormatter = Mock(Formatter)
 
@@ -123,10 +119,10 @@ class ReportStreamOrderSenderTest extends Specification {
 
         mockFormatter.convertJsonToObject(_ , _) >> [access_token: "Moof!"]
 
-        TestApplicationContext.register(AuthEngine, mockAuthEngine)
+        TestApplicationContext.register(AuthEngine, Mock(AuthEngine))
         TestApplicationContext.register(HttpClient, mockClient)
         TestApplicationContext.register(Formatter, mockFormatter)
-        TestApplicationContext.register(Secrets, mockSecrets)
+        TestApplicationContext.register(Secrets, Mock(Secrets))
         TestApplicationContext.register(Cache, mockCache)
 
         TestApplicationContext.injectRegisteredImplementations()

From 5f4c5982653ab5447994076150c4c4dddb2b2de8 Mon Sep 17 00:00:00 2001
From: halprin <halprin@users.noreply.github.com>
Date: Wed, 25 Oct 2023 14:14:08 -0600
Subject: [PATCH 9/9] 600: rename method that caches our private key to mention
 Our

---
 .../external/reportstream/ReportStreamOrderSender.java    | 4 ++--
 .../reportstream/ReportStreamOrderSenderTest.groovy       | 8 ++++----
 2 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
index 5f99f82f9..b0461fbdf 100644
--- a/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
+++ b/etor/src/main/java/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSender.java
@@ -158,7 +158,7 @@ protected String requestToken() throws UnableToSendOrderException {
         }
 
         // only cache our private key if we successfully authenticate to RS
-        cachePrivateKeyIfNotCachedAlready(ourPrivateKey);
+        cacheOurPrivateKeyIfNotCachedAlready(ourPrivateKey);
 
         return token;
     }
@@ -174,7 +174,7 @@ protected String retrievePrivateKey() throws SecretRetrievalException {
         return key;
     }
 
-    protected void cachePrivateKeyIfNotCachedAlready(String privateKey) {
+    void cacheOurPrivateKeyIfNotCachedAlready(String privateKey) {
         String key = keyCache.get(OUR_PRIVATE_KEY_ID);
         if (key != null) {
             return;
diff --git a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
index 02da4aa36..38e6c47cd 100644
--- a/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
+++ b/etor/src/test/groovy/gov/hhs/cdc/trustedintermediary/external/reportstream/ReportStreamOrderSenderTest.groovy
@@ -135,7 +135,7 @@ class ReportStreamOrderSenderTest extends Specification {
         0 * mockCache.put(_ , _)
     }
 
-    def "cachePrivateKeyIfNotCachedAlready doesn't cache when the key is already is cached"() {
+    def "cacheOurPrivateKeyIfNotCachedAlready doesn't cache when the key is already is cached"() {
         given:
         def mockCache = Mock(Cache)
         mockCache.get(_ as String) >> "DogCow private key"
@@ -145,13 +145,13 @@ class ReportStreamOrderSenderTest extends Specification {
         TestApplicationContext.injectRegisteredImplementations()
 
         when:
-        ReportStreamOrderSender.getInstance().cachePrivateKeyIfNotCachedAlready("Moof!")
+        ReportStreamOrderSender.getInstance().cacheOurPrivateKeyIfNotCachedAlready("Moof!")
 
         then:
         0 * mockCache.put(_, _)
     }
 
-    def "cachePrivateKeyIfNotCachedAlready caches when the key isn't cached"() {
+    def "cacheOurPrivateKeyIfNotCachedAlready caches when the key isn't cached"() {
         given:
         def mockCache = Mock(Cache)
         mockCache.get(_ as String) >> null
@@ -161,7 +161,7 @@ class ReportStreamOrderSenderTest extends Specification {
         TestApplicationContext.injectRegisteredImplementations()
 
         when:
-        ReportStreamOrderSender.getInstance().cachePrivateKeyIfNotCachedAlready("Moof!")
+        ReportStreamOrderSender.getInstance().cacheOurPrivateKeyIfNotCachedAlready("Moof!")
 
         then:
         1 * mockCache.put(_, _)