diff --git a/src/main/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/client/PersonalizeClient.java b/src/main/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/client/PersonalizeClient.java index 22c5130..1f298dd 100644 --- a/src/main/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/client/PersonalizeClient.java +++ b/src/main/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/client/PersonalizeClient.java @@ -8,6 +8,7 @@ package org.opensearch.search.relevance.transformer.personalizeintelligentranking.client; import com.amazonaws.AmazonServiceException; +import com.amazonaws.ClientConfiguration; import com.amazonaws.auth.AWSCredentialsProvider; import com.amazonaws.services.personalizeruntime.AmazonPersonalizeRuntime; import com.amazonaws.services.personalizeruntime.AmazonPersonalizeRuntimeClientBuilder; @@ -24,6 +25,7 @@ */ public class PersonalizeClient implements Closeable { private final AmazonPersonalizeRuntime personalizeRuntime; + private static final String USER_AGENT_PREFIX = "PersonalizeOpenSearchPlugin"; /** * Constructor for Amazon Personalize client @@ -31,10 +33,13 @@ public class PersonalizeClient implements Closeable { * @param awsRegion AWS region where Amazon Personalize campaign is hosted */ public PersonalizeClient(AWSCredentialsProvider credentialsProvider, String awsRegion) { + ClientConfiguration clientConfiguration = new ClientConfiguration() + .withUserAgentPrefix(USER_AGENT_PREFIX); personalizeRuntime = AccessController.doPrivileged( (PrivilegedAction) () -> AmazonPersonalizeRuntimeClientBuilder.standard() .withCredentials(credentialsProvider) .withRegion(awsRegion) + .withClientConfiguration(clientConfiguration) .build()); } diff --git a/src/main/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/utils/ValidationUtil.java b/src/main/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/utils/ValidationUtil.java index c298292..afd84b6 100644 --- a/src/main/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/utils/ValidationUtil.java +++ b/src/main/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/utils/ValidationUtil.java @@ -54,7 +54,7 @@ private static boolean isValidCampaignOrRoleArn(String arn, String expectedServi try { Arn arnObj = Arn.fromString(arn); String arnService = arnObj.getService(); - if (arnObj.getResource() == null || !arnService.equals(expectedService)) { + if (!arnService.equals(expectedService)) { return false; } } catch (IllegalArgumentException iae) { diff --git a/src/test/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/utils/ValidationUtilTests.java b/src/test/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/utils/ValidationUtilTests.java index ea16274..537d78f 100644 --- a/src/test/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/utils/ValidationUtilTests.java +++ b/src/test/java/org/opensearch/search/relevance/transformer/personalizeintelligentranking/utils/ValidationUtilTests.java @@ -19,7 +19,7 @@ public class ValidationUtilTests extends OpenSearchTestCase { private static final String TYPE = "personalize_ranking"; private static final String TAG = "test_tag"; private String personalizeCampaign = "arn:aws:personalize:us-west-2:000000000000:campaign/test-campaign"; - private String iamRoleArn = "arn:aws:iam::493477146422:role/PersonalizeOSTest"; + private String iamRoleArn = "arn:aws:iam::000000000000:role/test"; private String itemIdField = "ITEM_ID"; private String region = "us-west-2"; private double weight = 1.0; @@ -37,6 +37,13 @@ public void testInvalidCampaignArn () { ValidationUtil.validatePersonalizeIntelligentRankerConfiguration(rankerConfig, TYPE, TAG)); } + public void testEmptyCampaignArn () { + PersonalizeIntelligentRankerConfiguration rankerConfig = + new PersonalizeIntelligentRankerConfiguration("", iamRoleArn, AMAZON_PERSONALIZED_RANKING_RECIPE_NAME, itemIdField, region, weight); + expectThrows(OpenSearchParseException.class, () -> + ValidationUtil.validatePersonalizeIntelligentRankerConfiguration(rankerConfig, TYPE, TAG)); + } + public void testNonPersonalizeArnAsCampaignArn () { PersonalizeIntelligentRankerConfiguration rankerConfig = new PersonalizeIntelligentRankerConfiguration("arn:aws:es:us-west-2:000000000000:domain/testmovies", iamRoleArn, AMAZON_PERSONALIZED_RANKING_RECIPE_NAME, itemIdField, region, weight); @@ -58,6 +65,12 @@ public void testNonIamArnAsIamRoleArn () { ValidationUtil.validatePersonalizeIntelligentRankerConfiguration(rankerConfig, TYPE, TAG)); } + public void testEmptyIamRoleArnAllowed () { + PersonalizeIntelligentRankerConfiguration rankerConfig = + new PersonalizeIntelligentRankerConfiguration(personalizeCampaign, "", AMAZON_PERSONALIZED_RANKING_RECIPE_NAME, itemIdField, region, weight); + ValidationUtil.validatePersonalizeIntelligentRankerConfiguration(rankerConfig, TYPE, TAG); + } + public void testInvalidWeightValueGreaterThanRange () { PersonalizeIntelligentRankerConfiguration rankerConfig = new PersonalizeIntelligentRankerConfiguration(personalizeCampaign, iamRoleArn, AMAZON_PERSONALIZED_RANKING_RECIPE_NAME, itemIdField, region, 3.0);