From d6a165e8f76b595c7e364160a6d9baa68aae3a7e Mon Sep 17 00:00:00 2001 From: halprin 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 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 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 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 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 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 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 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, _ 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 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 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 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 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(_, _)