Skip to content

Commit

Permalink
Add user agent prefix to Personalize client to understand plugin adop…
Browse files Browse the repository at this point in the history
…tion

Description:
============
This change adds following:
* User agent configuration for Personalize client to understand plugin adoption
* Add validation related unit tests

Signed-off-by: Ketan Kulkarni <[email protected]>
  • Loading branch information
kulket committed Jul 6, 2023
1 parent eb62fd1 commit 9f3f660
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -24,17 +25,21 @@
*/
public class PersonalizeClient implements Closeable {
private final AmazonPersonalizeRuntime personalizeRuntime;
private static final String USER_AGENT_PREFIX = "PersonalizeOpenSearchPlugin";

/**
* Constructor for Amazon Personalize client
* @param credentialsProvider Credentials to be used for accessing Amazon Personalize
* @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<AmazonPersonalizeRuntime>) () -> AmazonPersonalizeRuntimeClientBuilder.standard()
.withCredentials(credentialsProvider)
.withRegion(awsRegion)
.withClientConfiguration(clientConfiguration)
.build());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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);
Expand All @@ -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);
Expand Down

0 comments on commit 9f3f660

Please sign in to comment.