diff --git a/.travis.yml b/.travis.yml index 7e1c3b1..d9068fc 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,4 +1,5 @@ language: java +dist: trusty jdk: - oraclejdk8 diff --git a/gradle.properties b/gradle.properties index 81cff18..cfff317 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ version=1.0.0 group = com.ibm.watson.developer_cloud -watsonVersion = 7.0.0 +watsonVersion = 8.0.0 springVersion = 4.3.12.RELEASE springBootVersion = 1.5.9.RELEASE diff --git a/src/main/java/com/ibm/watson/developer_cloud/spring/boot/WatsonApiKeyAuthenticator.java b/src/main/java/com/ibm/watson/developer_cloud/spring/boot/WatsonApiKeyAuthenticator.java new file mode 100644 index 0000000..fc6a590 --- /dev/null +++ b/src/main/java/com/ibm/watson/developer_cloud/spring/boot/WatsonApiKeyAuthenticator.java @@ -0,0 +1,44 @@ +package com.ibm.watson.developer_cloud.spring.boot; + +import com.ibm.cloud.sdk.core.http.HttpHeaders; +import com.ibm.cloud.sdk.core.security.Authenticator; +import okhttp3.Request; +import org.apache.commons.lang3.StringUtils; + +import static com.ibm.cloud.sdk.core.security.AuthenticatorBase.ERRORMSG_PROP_MISSING; + +/** + * {@link Authenticator} implementation to allow for authentication using the old API key method in Visual Recognition. + */ +public class WatsonApiKeyAuthenticator implements Authenticator { + private String apiKey; + + public WatsonApiKeyAuthenticator(String apiKey) { + this.apiKey = apiKey; + this.validate(); + } + + @Override + public void validate() { + if (StringUtils.isEmpty(apiKey)) { + throw new IllegalArgumentException(String.format(ERRORMSG_PROP_MISSING, "apiKey")); + } + } + + @Override + public String authenticationType() { + return "apiKey"; + } + + @Override + public void authenticate(Request.Builder builder) { + builder.addHeader(HttpHeaders.AUTHORIZATION, "Basic " + this.apiKey); + } + + /** + * @return the API key configured on this Authenticator + */ + public String getApiKey() { + return this.apiKey; + } +} diff --git a/src/main/java/com/ibm/watson/developer_cloud/spring/boot/WatsonAutoConfiguration.java b/src/main/java/com/ibm/watson/developer_cloud/spring/boot/WatsonAutoConfiguration.java index b53f6e9..bac1902 100644 --- a/src/main/java/com/ibm/watson/developer_cloud/spring/boot/WatsonAutoConfiguration.java +++ b/src/main/java/com/ibm/watson/developer_cloud/spring/boot/WatsonAutoConfiguration.java @@ -14,8 +14,11 @@ package com.ibm.watson.developer_cloud.spring.boot; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; +import com.ibm.cloud.sdk.core.security.ConfigBasedAuthenticatorFactory; +import com.ibm.cloud.sdk.core.security.IamAuthenticator; import com.ibm.cloud.sdk.core.service.BaseService; -import com.ibm.cloud.sdk.core.service.security.IamOptions; import com.ibm.watson.assistant.v1.Assistant; import com.ibm.watson.compare_comply.v1.CompareComply; import com.ibm.watson.discovery.v1.Discovery; @@ -27,7 +30,6 @@ import com.ibm.watson.text_to_speech.v1.TextToSpeech; import com.ibm.watson.tone_analyzer.v3.ToneAnalyzer; import com.ibm.watson.visual_recognition.v3.VisualRecognition; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.context.properties.EnableConfigurationProperties; @@ -47,28 +49,28 @@ public class WatsonAutoConfiguration { private void configUrl(BaseService service, WatsonConfigurationProperties config) { String url = config.getUrl(); if (url != null) { - service.setEndPoint(url); + service.setServiceUrl(url); } } - private void configAuth(BaseService service, WatsonConfigurationProperties config) { + private Authenticator configAuth(WatsonConfigurationProperties config, String serviceName) { String iamApiKey = config.getIamApiKey(); if (iamApiKey != null) { - IamOptions options = new IamOptions.Builder().apiKey(iamApiKey).build(); - service.setIamCredentials(options); - return; + return new IamAuthenticator(iamApiKey); } String username = config.getUsername(); String password = config.getPassword(); if (username != null && password != null) { - service.setUsernameAndPassword(username, password); - return; + return new BasicAuthenticator(username, password); } String apiKey = config.getApiKey(); if (apiKey != null) { - service.setApiKey(apiKey); - return; + return new WatsonApiKeyAuthenticator(apiKey); } + + // If we can't find the right properties, we'll return what we get from the auth config factory, which will + // pull from things like VCAP_SERVICES. + return ConfigBasedAuthenticatorFactory.getAuthenticator(serviceName); } // Watson Assistant service @@ -80,9 +82,9 @@ private void configAuth(BaseService service, WatsonConfigurationProperties confi @ConditionalOnMissingBean @ConditionalOnWatsonServiceProperties(prefix = WatsonAssistantConfigurationProperties.PREFIX) public Assistant assistant() { - Assistant service = new Assistant(assistantConfig.getVersionDate()); + Authenticator authConfig = configAuth(assistantConfig, "assistant"); + Assistant service = new Assistant(assistantConfig.getVersionDate(), authConfig); configUrl(service, assistantConfig); - configAuth(service, assistantConfig); return service; } @@ -95,9 +97,9 @@ public Assistant assistant() { @ConditionalOnMissingBean @ConditionalOnWatsonServiceProperties(prefix = WatsonCompareComplyConfigurationProperties.PREFIX) public CompareComply compareComply() { - CompareComply service = new CompareComply(compareComplyConfig.getVersionDate()); + Authenticator authConfig = configAuth(compareComplyConfig, "compare_comply"); + CompareComply service = new CompareComply(compareComplyConfig.getVersionDate(), authConfig); configUrl(service, compareComplyConfig); - configAuth(service, compareComplyConfig); return service; } @@ -110,9 +112,9 @@ public CompareComply compareComply() { @ConditionalOnMissingBean @ConditionalOnWatsonServiceProperties(prefix = WatsonDiscoveryConfigurationProperties.PREFIX) public Discovery discovery() { - Discovery service = new Discovery(discoveryConfig.getVersionDate()); + Authenticator authConfig = configAuth(discoveryConfig, "discovery"); + Discovery service = new Discovery(discoveryConfig.getVersionDate(), authConfig); configUrl(service, discoveryConfig); - configAuth(service, discoveryConfig); return service; } @@ -125,9 +127,9 @@ public Discovery discovery() { @ConditionalOnMissingBean @ConditionalOnWatsonServiceProperties(prefix = WatsonLanguageTranslatorConfigurationProperties.PREFIX) public LanguageTranslator languageTranslator() { - LanguageTranslator service = new LanguageTranslator(ltConfig.getVersionDate()); + Authenticator authConfig = configAuth(ltConfig, "language_translator"); + LanguageTranslator service = new LanguageTranslator(ltConfig.getVersionDate(), authConfig); configUrl(service, ltConfig); - configAuth(service, ltConfig); return service; } @@ -140,9 +142,9 @@ public LanguageTranslator languageTranslator() { @ConditionalOnMissingBean @ConditionalOnWatsonServiceProperties(prefix = WatsonNaturalLanguageClassifierConfigurationProperties.PREFIX) public NaturalLanguageClassifier naturalLanguageClassifier() { - NaturalLanguageClassifier service = new NaturalLanguageClassifier(); + Authenticator authConfig = configAuth(nlcConfig, "natural_language_classifier"); + NaturalLanguageClassifier service = new NaturalLanguageClassifier(authConfig); configUrl(service, nlcConfig); - configAuth(service, nlcConfig); return service; } @@ -155,9 +157,9 @@ public NaturalLanguageClassifier naturalLanguageClassifier() { @ConditionalOnMissingBean @ConditionalOnWatsonServiceProperties(prefix = WatsonNaturalLanguageUnderstandingConfigurationProperties.PREFIX) public NaturalLanguageUnderstanding naturalLanguageUnderstanding() { - NaturalLanguageUnderstanding service = new NaturalLanguageUnderstanding(nluConfig.getVersionDate()); + Authenticator authConfig = configAuth(nluConfig, "natural_language_understanding"); + NaturalLanguageUnderstanding service = new NaturalLanguageUnderstanding(nluConfig.getVersionDate(), authConfig); configUrl(service, nluConfig); - configAuth(service, nluConfig); return service; } @@ -170,9 +172,9 @@ public NaturalLanguageUnderstanding naturalLanguageUnderstanding() { @ConditionalOnMissingBean @ConditionalOnWatsonServiceProperties(prefix = WatsonPersonalityInsightsConfigurationProperties.PREFIX) public PersonalityInsights personalityInsights() { - PersonalityInsights service = new PersonalityInsights(piConfig.getVersionDate()); + Authenticator authConfig = configAuth(piConfig, "personality_insights"); + PersonalityInsights service = new PersonalityInsights(piConfig.getVersionDate(), authConfig); configUrl(service, piConfig); - configAuth(service, piConfig); return service; } @@ -185,9 +187,9 @@ public PersonalityInsights personalityInsights() { @ConditionalOnMissingBean @ConditionalOnWatsonServiceProperties(prefix = WatsonSpeechToTextConfigurationProperties.PREFIX) public SpeechToText speechToText() { - SpeechToText service = new SpeechToText(); + Authenticator authConfig = configAuth(sttConfig, "speech_to_text"); + SpeechToText service = new SpeechToText(authConfig); configUrl(service, sttConfig); - configAuth(service, sttConfig); return service; } @@ -200,9 +202,9 @@ public SpeechToText speechToText() { @ConditionalOnMissingBean @ConditionalOnWatsonServiceProperties(prefix = WatsonTextToSpeechConfigurationProperties.PREFIX) public TextToSpeech textToSpeech() { - TextToSpeech service = new TextToSpeech(); + Authenticator authConfig = configAuth(ttsConfig, "text_to_speech"); + TextToSpeech service = new TextToSpeech(authConfig); configUrl(service, ttsConfig); - configAuth(service, ttsConfig); return service; } @@ -215,9 +217,9 @@ public TextToSpeech textToSpeech() { @ConditionalOnMissingBean @ConditionalOnWatsonServiceProperties(prefix = WatsonToneAnalyzerConfigurationProperties.PREFIX) public ToneAnalyzer toneAnalyzer() { - ToneAnalyzer service = new ToneAnalyzer(taConfig.getVersionDate()); + Authenticator authConfig = configAuth(taConfig, "tone_analyzer"); + ToneAnalyzer service = new ToneAnalyzer(taConfig.getVersionDate(), authConfig); configUrl(service, taConfig); - configAuth(service, taConfig); return service; } @@ -230,9 +232,9 @@ public ToneAnalyzer toneAnalyzer() { @ConditionalOnMissingBean @ConditionalOnWatsonServiceProperties(prefix = WatsonVisualRecognitionConfigurationProperties.PREFIX) public VisualRecognition visualRecognition() { - VisualRecognition service = new VisualRecognition(vrConfig.getVersionDate()); + Authenticator authConfig = configAuth(vrConfig, "visual_recognition"); + VisualRecognition service = new VisualRecognition(vrConfig.getVersionDate(), authConfig); configUrl(service, vrConfig); - configAuth(service, vrConfig); return service; } diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/AssistantAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/AssistantAutoConfigTest.java index f3910b0..a3addc1 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/AssistantAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/AssistantAutoConfigTest.java @@ -14,10 +14,10 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import com.ibm.cloud.sdk.core.service.BaseService; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; import com.ibm.watson.assistant.v1.Assistant; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; -import okhttp3.Credentials; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -53,14 +53,14 @@ public void assistantBeanConfig() { Assistant assistant = (Assistant) applicationContext.getBean("assistant"); assertNotNull(assistant); - assertEquals(url, assistant.getEndPoint()); + assertEquals(url, assistant.getServiceUrl()); - // Verify the credentials and versionDate -- which are stored in private member - // variables + // Verify the credentials and versionDate -- the latter of which is stored in a private member variable try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(Credentials.basic(username, password), apiKeyField.get(assistant)); + assertEquals(Authenticator.AUTHTYPE_BASIC, assistant.getAuthenticator().authenticationType()); + BasicAuthenticator authenticator = (BasicAuthenticator) assistant.getAuthenticator(); + assertEquals(username, authenticator.getUsername()); + assertEquals(password, authenticator.getPassword()); Field versionField = Assistant.class.getDeclaredField("versionDate"); versionField.setAccessible(true); diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/AssistantIamAuthTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/AssistantIamAuthTest.java index 3099e36..1d1af79 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/AssistantIamAuthTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/AssistantIamAuthTest.java @@ -14,9 +14,9 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import com.ibm.cloud.sdk.core.service.BaseService; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.IamAuthenticator; import com.ibm.watson.assistant.v1.Assistant; -import com.ibm.cloud.sdk.core.service.security.IamTokenManager; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; import org.junit.Test; import org.junit.runner.RunWith; @@ -35,40 +35,36 @@ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { WatsonAutoConfiguration.class }, loader = AnnotationConfigContextLoader.class) @TestPropertySource(properties = { "watson.assistant.url=" + AssistantIamAuthTest.url, - "watson.assistant.iamApiKey=" + AssistantIamAuthTest.iamApiKey, - "watson.assistant.versionDate=" + AssistantIamAuthTest.versionDate }) + "watson.assistant.iamApiKey=" + AssistantIamAuthTest.iamApiKey, + "watson.assistant.versionDate=" + AssistantIamAuthTest.versionDate }) public class AssistantIamAuthTest { - static final String url = "http://watson.com/assistant"; - static final String iamApiKey = "super-secret-apikey"; - static final String versionDate = "2017-12-15"; + static final String url = "http://watson.com/assistant"; + static final String iamApiKey = "super-secret-apikey"; + static final String versionDate = "2017-12-15"; - @Autowired - private ApplicationContext applicationContext; + @Autowired + private ApplicationContext applicationContext; - @Test - public void assistantBeanConfig() { - Assistant assistant = (Assistant) applicationContext.getBean("assistant"); + @Test + public void assistantBeanConfig() { + Assistant assistant = (Assistant) applicationContext.getBean("assistant"); - assertNotNull(assistant); - assertEquals(url, assistant.getEndPoint()); + assertNotNull(assistant); + assertEquals(url, assistant.getServiceUrl()); - // Verify the credentials and versionDate -- which are stored in private member - // variables - try { - Field iamTokenManagerField = BaseService.class.getDeclaredField("tokenManager"); - iamTokenManagerField.setAccessible(true); - IamTokenManager tokenManager = (IamTokenManager) iamTokenManagerField.get(assistant); - Field iamApiKeyField = IamTokenManager.class.getDeclaredField("apiKey"); - iamApiKeyField.setAccessible(true); - assertEquals(iamApiKey, iamApiKeyField.get(tokenManager)); + // Verify the credentials and versionDate -- the latter of which is stored in a private member variable + try { + assertEquals(Authenticator.AUTHTYPE_IAM, assistant.getAuthenticator().authenticationType()); + IamAuthenticator authenticator = (IamAuthenticator) assistant.getAuthenticator(); + assertEquals(iamApiKey, authenticator.getApiKey()); - Field versionField = Assistant.class.getDeclaredField("versionDate"); - versionField.setAccessible(true); - assertEquals(versionDate, versionField.get(assistant)); - } catch (NoSuchFieldException | IllegalAccessException ex) { - // This shouldn't happen - assert false; - } + Field versionField = Assistant.class.getDeclaredField("versionDate"); + versionField.setAccessible(true); + assertEquals(versionDate, versionField.get(assistant)); + } catch (NoSuchFieldException | IllegalAccessException ex) { + // This shouldn't happen + assert false; } + } } diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/CompareComplyAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/CompareComplyAutoConfigTest.java index 4978c88..63ada3f 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/CompareComplyAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/CompareComplyAutoConfigTest.java @@ -14,10 +14,10 @@ package com.ibm.watson.developer_cloud.spring.boot.test; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; import com.ibm.watson.compare_comply.v1.CompareComply; -import com.ibm.cloud.sdk.core.service.BaseService; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; -import okhttp3.Credentials; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -35,39 +35,39 @@ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { WatsonAutoConfiguration.class }, loader = AnnotationConfigContextLoader.class) @TestPropertySource(properties = { "watson.compare-comply.url=" + CompareComplyAutoConfigTest.url, - "watson.compare-comply.username=" + CompareComplyAutoConfigTest.username, - "watson.compare-comply.password=" + CompareComplyAutoConfigTest.password, - "watson.compare-comply.versionDate=" + CompareComplyAutoConfigTest.versionDate }) + "watson.compare-comply.username=" + CompareComplyAutoConfigTest.username, + "watson.compare-comply.password=" + CompareComplyAutoConfigTest.password, + "watson.compare-comply.versionDate=" + CompareComplyAutoConfigTest.versionDate }) public class CompareComplyAutoConfigTest { - static final String url = "http://watson.com/compare-comply"; - static final String username = "sam"; - static final String password = "secret"; - static final String versionDate = "2017-12-15"; + static final String url = "http://watson.com/compare-comply"; + static final String username = "sam"; + static final String password = "secret"; + static final String versionDate = "2017-12-15"; - @Autowired - private ApplicationContext applicationContext; + @Autowired + private ApplicationContext applicationContext; - @Test - public void compareComplyBeanConfig() { - CompareComply compareComply = (CompareComply) applicationContext.getBean("compareComply"); + @Test + public void compareComplyBeanConfig() { + CompareComply compareComply = (CompareComply) applicationContext.getBean("compareComply"); - assertNotNull(compareComply); - assertEquals(url, compareComply.getEndPoint()); + assertNotNull(compareComply); + assertEquals(url, compareComply.getServiceUrl()); - // Verify the credentials and versionDate -- which are stored in private member - // variables - try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(Credentials.basic(username, password), apiKeyField.get(compareComply)); + // Verify the credentials and versionDate -- the latter of which is stored in a private member variable + try { + assertEquals(Authenticator.AUTHTYPE_BASIC, compareComply.getAuthenticator().authenticationType()); + BasicAuthenticator authenticator = (BasicAuthenticator) compareComply.getAuthenticator(); + assertEquals(username, authenticator.getUsername()); + assertEquals(password, authenticator.getPassword()); - Field versionField = CompareComply.class.getDeclaredField("versionDate"); - versionField.setAccessible(true); - assertEquals(versionDate, versionField.get(compareComply)); - } catch (NoSuchFieldException | IllegalAccessException ex) { - // This shouldn't happen - assert false; - } + Field versionField = CompareComply.class.getDeclaredField("versionDate"); + versionField.setAccessible(true); + assertEquals(versionDate, versionField.get(compareComply)); + } catch (NoSuchFieldException | IllegalAccessException ex) { + // This shouldn't happen + assert false; } + } } diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/DiscoveryAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/DiscoveryAutoConfigTest.java index 98fb4e7..80b869b 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/DiscoveryAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/DiscoveryAutoConfigTest.java @@ -14,10 +14,10 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import com.ibm.watson.discovery.v1.Discovery; -import com.ibm.cloud.sdk.core.service.BaseService; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; -import okhttp3.Credentials; +import com.ibm.watson.discovery.v1.Discovery; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -53,14 +53,14 @@ public void discoveryBeanConfig() { Discovery discovery = (Discovery) applicationContext.getBean("discovery"); assertNotNull(discovery); - assertEquals(url, discovery.getEndPoint()); + assertEquals(url, discovery.getServiceUrl()); - // Verify the credentials and versionDate -- which are stored in private member - // variables + // Verify the credentials and versionDate -- the latter of which is stored in a private member variable try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(Credentials.basic(username, password), apiKeyField.get(discovery)); + assertEquals(Authenticator.AUTHTYPE_BASIC, discovery.getAuthenticator().authenticationType()); + BasicAuthenticator authenticator = (BasicAuthenticator) discovery.getAuthenticator(); + assertEquals(username, authenticator.getUsername()); + assertEquals(password, authenticator.getPassword()); Field versionField = Discovery.class.getDeclaredField("versionDate"); versionField.setAccessible(true); diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/LanguageTranslatorAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/LanguageTranslatorAutoConfigTest.java index 802851d..0c3eeb1 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/LanguageTranslatorAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/LanguageTranslatorAutoConfigTest.java @@ -14,10 +14,10 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import com.ibm.cloud.sdk.core.service.BaseService; -import com.ibm.watson.language_translator.v3.LanguageTranslator; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; -import okhttp3.Credentials; +import com.ibm.watson.language_translator.v3.LanguageTranslator; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -27,8 +27,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; -import java.lang.reflect.Field; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -53,16 +51,12 @@ public void languageTranslatorBeanConfig() { LanguageTranslator languageTranslator = (LanguageTranslator) applicationContext.getBean("languageTranslator"); assertNotNull(languageTranslator); - assertEquals(url, languageTranslator.getEndPoint()); + assertEquals(url, languageTranslator.getServiceUrl()); - // Verify the credentials -- which are stored in a private member variables - try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(Credentials.basic(username, password), apiKeyField.get(languageTranslator)); - } catch (NoSuchFieldException | IllegalAccessException ex) { - // This shouldn't happen - assert false; - } + // Verify the credentials + assertEquals(Authenticator.AUTHTYPE_BASIC, languageTranslator.getAuthenticator().authenticationType()); + BasicAuthenticator authenticator = (BasicAuthenticator) languageTranslator.getAuthenticator(); + assertEquals(username, authenticator.getUsername()); + assertEquals(password, authenticator.getPassword()); } } diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/NaturalLanguageClassifierAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/NaturalLanguageClassifierAutoConfigTest.java index 09501bd..ca445d9 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/NaturalLanguageClassifierAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/NaturalLanguageClassifierAutoConfigTest.java @@ -14,10 +14,10 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import com.ibm.watson.natural_language_classifier.v1.NaturalLanguageClassifier; -import com.ibm.cloud.sdk.core.service.BaseService; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; -import okhttp3.Credentials; +import com.ibm.watson.natural_language_classifier.v1.NaturalLanguageClassifier; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -27,8 +27,6 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; -import java.lang.reflect.Field; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -53,16 +51,12 @@ public void naturalLanguageClassifierBeanConfig() { .getBean("naturalLanguageClassifier"); assertNotNull(naturalLanguageClassifier); - assertEquals(url, naturalLanguageClassifier.getEndPoint()); + assertEquals(url, naturalLanguageClassifier.getServiceUrl()); - // Verify the credentials -- which are stored in a private member variable - try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(Credentials.basic(username, password), apiKeyField.get(naturalLanguageClassifier)); - } catch (NoSuchFieldException | IllegalAccessException ex) { - // This shouldn't happen - assert false; - } + // Verify the credentials + assertEquals(Authenticator.AUTHTYPE_BASIC, naturalLanguageClassifier.getAuthenticator().authenticationType()); + BasicAuthenticator authenticator = (BasicAuthenticator) naturalLanguageClassifier.getAuthenticator(); + assertEquals(username, authenticator.getUsername()); + assertEquals(password, authenticator.getPassword()); } } diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/NaturalLanguageUnderstandingAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/NaturalLanguageUnderstandingAutoConfigTest.java index 5d5d0f9..ddb1312 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/NaturalLanguageUnderstandingAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/NaturalLanguageUnderstandingAutoConfigTest.java @@ -14,10 +14,10 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import com.ibm.watson.natural_language_understanding.v1.NaturalLanguageUnderstanding; -import com.ibm.cloud.sdk.core.service.BaseService; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; -import okhttp3.Credentials; +import com.ibm.watson.natural_language_understanding.v1.NaturalLanguageUnderstanding; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -55,14 +55,14 @@ public void naturalLanguageUnderstandingBeanConfig() { .getBean("naturalLanguageUnderstanding"); assertNotNull(naturalLanguageUnderstanding); - assertEquals(url, naturalLanguageUnderstanding.getEndPoint()); + assertEquals(url, naturalLanguageUnderstanding.getServiceUrl()); - // Verify the credentials and versionDate -- which are stored in private member - // variables + // Verify the credentials and versionDate -- the latter of which is stored in a private member variable try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(Credentials.basic(username, password), apiKeyField.get(naturalLanguageUnderstanding)); + assertEquals(Authenticator.AUTHTYPE_BASIC, naturalLanguageUnderstanding.getAuthenticator().authenticationType()); + BasicAuthenticator authenticator = (BasicAuthenticator) naturalLanguageUnderstanding.getAuthenticator(); + assertEquals(username, authenticator.getUsername()); + assertEquals(password, authenticator.getPassword()); Field versionField = NaturalLanguageUnderstanding.class.getDeclaredField("versionDate"); versionField.setAccessible(true); diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/PersonalityInsightsAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/PersonalityInsightsAutoConfigTest.java index 64ea752..a656c62 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/PersonalityInsightsAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/PersonalityInsightsAutoConfigTest.java @@ -14,15 +14,10 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.lang.reflect.Field; - -import com.ibm.cloud.sdk.core.service.BaseService; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; import com.ibm.watson.personality_insights.v3.PersonalityInsights; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -32,7 +27,10 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; -import okhttp3.Credentials; +import java.lang.reflect.Field; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { WatsonAutoConfiguration.class }, loader = AnnotationConfigContextLoader.class) @@ -55,14 +53,14 @@ public void personalityInsightsBeanConfig() { PersonalityInsights personalityInsights = (PersonalityInsights) applicationContext.getBean("personalityInsights"); assertNotNull(personalityInsights); - assertEquals(url, personalityInsights.getEndPoint()); + assertEquals(url, personalityInsights.getServiceUrl()); - // Verify the credentials and versionDate -- which are stored in private member - // variables + // Verify the credentials and versionDate -- the latter of which is stored in a private member variable try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(Credentials.basic(username, password), apiKeyField.get(personalityInsights)); + assertEquals(Authenticator.AUTHTYPE_BASIC, personalityInsights.getAuthenticator().authenticationType()); + BasicAuthenticator authenticator = (BasicAuthenticator) personalityInsights.getAuthenticator(); + assertEquals(username, authenticator.getUsername()); + assertEquals(password, authenticator.getPassword()); Field versionField = PersonalityInsights.class.getDeclaredField("versionDate"); versionField.setAccessible(true); diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/SpeechToTextAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/SpeechToTextAutoConfigTest.java index 069b0e4..5636080 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/SpeechToTextAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/SpeechToTextAutoConfigTest.java @@ -14,15 +14,10 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.lang.reflect.Field; - -import com.ibm.cloud.sdk.core.service.BaseService; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; import com.ibm.watson.speech_to_text.v1.SpeechToText; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -32,7 +27,8 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; -import okhttp3.Credentials; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { WatsonAutoConfiguration.class }, loader = AnnotationConfigContextLoader.class) @@ -53,16 +49,12 @@ public void speechToTextBeanConfig() { SpeechToText speechToText = (SpeechToText) applicationContext.getBean("speechToText"); assertNotNull(speechToText); - assertEquals(url, speechToText.getEndPoint()); + assertEquals(url, speechToText.getServiceUrl()); - // Verify the credentials -- which are stored in private member variable - try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(Credentials.basic(username, password), apiKeyField.get(speechToText)); - } catch (NoSuchFieldException | IllegalAccessException ex) { - // This shouldn't happen - assert false; - } + // Verify the credentials + assertEquals(Authenticator.AUTHTYPE_BASIC, speechToText.getAuthenticator().authenticationType()); + BasicAuthenticator authenticator = (BasicAuthenticator) speechToText.getAuthenticator(); + assertEquals(username, authenticator.getUsername()); + assertEquals(password, authenticator.getPassword()); } } diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/TextToSpeechAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/TextToSpeechAutoConfigTest.java index 92ecc5a..da79d75 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/TextToSpeechAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/TextToSpeechAutoConfigTest.java @@ -14,15 +14,10 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.lang.reflect.Field; - -import com.ibm.cloud.sdk.core.service.BaseService; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; import com.ibm.watson.text_to_speech.v1.TextToSpeech; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -32,7 +27,8 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; -import okhttp3.Credentials; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { WatsonAutoConfiguration.class }, loader = AnnotationConfigContextLoader.class) @@ -53,16 +49,12 @@ public void textToSpeechBeanConfig() { TextToSpeech textToSpeech = (TextToSpeech) applicationContext.getBean("textToSpeech"); assertNotNull(textToSpeech); - assertEquals(url, textToSpeech.getEndPoint()); + assertEquals(url, textToSpeech.getServiceUrl()); - // Verify the credentials -- which are stored in private member variable - try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(Credentials.basic(username, password), apiKeyField.get(textToSpeech)); - } catch (NoSuchFieldException | IllegalAccessException ex) { - // This shouldn't happen - assert false; - } + // Verify the credentials + assertEquals(Authenticator.AUTHTYPE_BASIC, textToSpeech.getAuthenticator().authenticationType()); + BasicAuthenticator authenticator = (BasicAuthenticator) textToSpeech.getAuthenticator(); + assertEquals(username, authenticator.getUsername()); + assertEquals(password, authenticator.getPassword()); } } diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/ToneAnalyzerAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/ToneAnalyzerAutoConfigTest.java index 35359aa..254646d 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/ToneAnalyzerAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/ToneAnalyzerAutoConfigTest.java @@ -14,15 +14,10 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.lang.reflect.Field; - -import com.ibm.cloud.sdk.core.service.BaseService; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; import com.ibm.watson.tone_analyzer.v3.ToneAnalyzer; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -32,7 +27,10 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; -import okhttp3.Credentials; +import java.lang.reflect.Field; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { WatsonAutoConfiguration.class }, loader = AnnotationConfigContextLoader.class) @@ -55,14 +53,14 @@ public void toneAnalyzerBeanConfig() { ToneAnalyzer toneAnalyzer = (ToneAnalyzer) applicationContext.getBean("toneAnalyzer"); assertNotNull(toneAnalyzer); - assertEquals(url, toneAnalyzer.getEndPoint()); + assertEquals(url, toneAnalyzer.getServiceUrl()); - // Verify the credentials and versionDate -- which are stored in private member - // variables + // Verify the credentials and versionDate -- the latter of which is stored in a private member variable try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(Credentials.basic(username, password), apiKeyField.get(toneAnalyzer)); + assertEquals(Authenticator.AUTHTYPE_BASIC, toneAnalyzer.getAuthenticator().authenticationType()); + BasicAuthenticator authenticator = (BasicAuthenticator) toneAnalyzer.getAuthenticator(); + assertEquals(username, authenticator.getUsername()); + assertEquals(password, authenticator.getPassword()); Field versionField = ToneAnalyzer.class.getDeclaredField("versionDate"); versionField.setAccessible(true); diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/VisualRecognitionAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/VisualRecognitionAutoConfigTest.java index bb99236..f2dbc99 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/VisualRecognitionAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/VisualRecognitionAutoConfigTest.java @@ -14,15 +14,9 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.lang.reflect.Field; - -import com.ibm.cloud.sdk.core.service.BaseService; +import com.ibm.watson.developer_cloud.spring.boot.WatsonApiKeyAuthenticator; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; import com.ibm.watson.visual_recognition.v3.VisualRecognition; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -32,6 +26,11 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; +import java.lang.reflect.Field; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { WatsonAutoConfiguration.class }, loader = AnnotationConfigContextLoader.class) @TestPropertySource(properties = { "watson.visual-recognition.url=" + VisualRecognitionAutoConfigTest.url, @@ -51,14 +50,13 @@ public void visualRecognitionBeanConfig() { VisualRecognition visualRecognition = (VisualRecognition) applicationContext.getBean("visualRecognition"); assertNotNull(visualRecognition); - assertEquals(url, visualRecognition.getEndPoint()); + assertEquals(url, visualRecognition.getServiceUrl()); - // Verify the credentials and versionDate -- which are stored in private member - // variables + // Verify the credentials and versionDate -- the latter of which is stored in a private member variable try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(apiKey, apiKeyField.get(visualRecognition)); + assertEquals("apiKey", visualRecognition.getAuthenticator().authenticationType()); + WatsonApiKeyAuthenticator authenticator = (WatsonApiKeyAuthenticator) visualRecognition.getAuthenticator(); + assertEquals(apiKey, authenticator.getApiKey()); Field versionField = VisualRecognition.class.getDeclaredField("versionDate"); versionField.setAccessible(true); diff --git a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/WatsonAutoConfigTest.java b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/WatsonAutoConfigTest.java index 75f403c..3d62c29 100644 --- a/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/WatsonAutoConfigTest.java +++ b/src/test/java/com/ibm/watson/developer_cloud/spring/boot/test/WatsonAutoConfigTest.java @@ -14,15 +14,10 @@ package com.ibm.watson.developer_cloud.spring.boot.test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; - -import java.lang.reflect.Field; - -import com.ibm.cloud.sdk.core.service.BaseService; +import com.ibm.cloud.sdk.core.security.Authenticator; +import com.ibm.cloud.sdk.core.security.BasicAuthenticator; import com.ibm.watson.developer_cloud.spring.boot.WatsonAutoConfiguration; import com.ibm.watson.speech_to_text.v1.SpeechToText; - import org.junit.ClassRule; import org.junit.Test; import org.junit.contrib.java.lang.system.EnvironmentVariables; @@ -34,45 +29,41 @@ import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.support.AnnotationConfigContextLoader; -import okhttp3.Credentials; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(classes = { WatsonAutoConfiguration.class }, loader = AnnotationConfigContextLoader.class) @TestPropertySource(properties = { "watson.speech-to-text.enabled=true" }) public class WatsonAutoConfigTest { - private static final String url = "http://watson.com/speech-to-text"; - private static final String username = "sam"; - private static final String password = "secret"; + private static final String url = "http://watson.com/speech-to-text"; + private static final String username = "sam"; + private static final String password = "secret"; - @ClassRule - public static final EnvironmentVariables environmentVariables = new EnvironmentVariables(); + @ClassRule + public static final EnvironmentVariables environmentVariables = new EnvironmentVariables(); - static { - String vcapServices = "{\"speech_to_text\":[{" + "\"credentials\": {" + "\"url\":\"" + url + "\"," - + "\"username\":\"" + username + "\"," + "\"password\":\"" + password + "\"" + "}," - + "\"plan\": \"free\"" + "}]}"; - environmentVariables.set("VCAP_SERVICES", vcapServices); - } + static { + String vcapServices = "{\"speech_to_text\":[{" + "\"credentials\": {" + "\"url\":\"" + url + "\"," + + "\"username\":\"" + username + "\"," + "\"password\":\"" + password + "\"" + "}," + + "\"plan\": \"free\"" + "}]}"; + environmentVariables.set("VCAP_SERVICES", vcapServices); + } - @Autowired - private ApplicationContext applicationContext; + @Autowired + private ApplicationContext applicationContext; - @Test - public void watsonBeanConfigFromEnvironment() { - SpeechToText speechToText = (SpeechToText) applicationContext.getBean("speechToText"); + @Test + public void watsonBeanConfigFromEnvironment() { + SpeechToText speechToText = (SpeechToText) applicationContext.getBean("speechToText"); - assertNotNull(speechToText); - assertEquals(url, speechToText.getEndPoint()); + assertNotNull(speechToText); + assertEquals(url, speechToText.getServiceUrl()); - // Verify the credentials -- which are stored in a private member variable - try { - Field apiKeyField = BaseService.class.getDeclaredField("apiKey"); - apiKeyField.setAccessible(true); - assertEquals(Credentials.basic(username, password), apiKeyField.get(speechToText)); - } catch (NoSuchFieldException | IllegalAccessException ex) { - // This shouldn't happen - assert false; - } - } + assertEquals(Authenticator.AUTHTYPE_BASIC, speechToText.getAuthenticator().authenticationType()); + BasicAuthenticator authenticator = (BasicAuthenticator) speechToText.getAuthenticator(); + assertEquals(username, authenticator.getUsername()); + assertEquals(password, authenticator.getPassword()); + } }