Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test-resources.json and test changes #23117

Merged
merged 20 commits into from
Aug 18, 2021
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ public PersonalizerAdministrationClient(System.Uri endpoint, Azure.Core.TokenCre
public virtual System.Threading.Tasks.Task<Azure.Response> ResetPersonalizerModelAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual Azure.Response<Azure.AI.Personalizer.PersonalizerPolicy> ResetPersonalizerPolicy(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual System.Threading.Tasks.Task<Azure.Response<Azure.AI.Personalizer.PersonalizerPolicy>> ResetPersonalizerPolicyAsync(System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual Azure.Response<Azure.AI.Personalizer.PersonalizerServiceProperties> UpdatePersonalizerConfiguration(Azure.AI.Personalizer.PersonalizerServiceProperties config, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual System.Threading.Tasks.Task<Azure.Response<Azure.AI.Personalizer.PersonalizerServiceProperties>> UpdatePersonalizerConfigurationAsync(Azure.AI.Personalizer.PersonalizerServiceProperties config, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual Azure.Response<Azure.AI.Personalizer.PersonalizerPolicy> UpdatePersonalizerPolicy(Azure.AI.Personalizer.PersonalizerPolicy policy, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual System.Threading.Tasks.Task<Azure.Response<Azure.AI.Personalizer.PersonalizerPolicy>> UpdatePersonalizerPolicyAsync(Azure.AI.Personalizer.PersonalizerPolicy policy, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual Azure.Response<Azure.AI.Personalizer.PersonalizerServiceProperties> UpdatePersonalizerProperties(Azure.AI.Personalizer.PersonalizerServiceProperties config, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
public virtual System.Threading.Tasks.Task<Azure.Response<Azure.AI.Personalizer.PersonalizerServiceProperties>> UpdatePersonalizerPropertiesAsync(Azure.AI.Personalizer.PersonalizerServiceProperties config, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken)) { throw null; }
}
public partial class PersonalizerClient
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -167,9 +167,9 @@ public virtual Response<PersonalizerLogProperties> GetPersonalizerLogProperties(
/// <summary> Update the Personalizer service configuration. </summary>
/// <param name="config"> The personalizer service configuration. </param>
/// <param name="cancellationToken"> The cancellation token to use. </param>
public virtual async Task<Response<PersonalizerServiceProperties >> UpdatePersonalizerConfigurationAsync(PersonalizerServiceProperties config, CancellationToken cancellationToken = default)
public virtual async Task<Response<PersonalizerServiceProperties >> UpdatePersonalizerPropertiesAsync(PersonalizerServiceProperties config, CancellationToken cancellationToken = default)
{
using var scope = _clientDiagnostics.CreateScope("PersonalizerAdministrationClient.UpdatePersonalizerConfiguration");
using var scope = _clientDiagnostics.CreateScope("PersonalizerAdministrationClient.UpdatePersonalizerProperties");
scope.Start();
try
{
Expand All @@ -185,9 +185,9 @@ public virtual async Task<Response<PersonalizerServiceProperties >> UpdatePerson
/// <summary> Update the Personalizer service configuration. </summary>
/// <param name="config"> The personalizer service configuration. </param>
/// <param name="cancellationToken"> The cancellation token to use. </param>
public virtual Response<PersonalizerServiceProperties > UpdatePersonalizerConfiguration(PersonalizerServiceProperties config, CancellationToken cancellationToken = default)
public virtual Response<PersonalizerServiceProperties > UpdatePersonalizerProperties(PersonalizerServiceProperties config, CancellationToken cancellationToken = default)
{
using var scope = _clientDiagnostics.CreateScope("PersonalizerAdministrationClient.UpdatePersonalizerConfiguration");
using var scope = _clientDiagnostics.CreateScope("PersonalizerAdministrationClient.UpdatePersonalizerProperties");
scope.Start();
try
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@

namespace Azure.AI.Personalizer.Tests
{
public class PersonalizerRecordedTestSanitizer: RecordedTestSanitizer
public class PersonalizerRecordedTestSanitizer : RecordedTestSanitizer
{
public PersonalizerRecordedTestSanitizer(): base()
public PersonalizerRecordedTestSanitizer() : base()
{
AddJsonPathSanitizer("$..accessToken");
AddJsonPathSanitizer("$..source");
Expand All @@ -30,7 +30,8 @@ public override string SanitizeVariable(string variableName, string environmentV
{
return variableName switch
{
PersonalizerTestEnvironment.ApiKeyEnvironmentVariableName => SanitizeValue,
PersonalizerTestEnvironment.MultiSlotApiKeyEnvironmentVariableName => SanitizeValue,
PersonalizerTestEnvironment.SingleSlotApiKeyEnvironmentVariableName => SanitizeValue,
_ => base.SanitizeVariable(variableName, environmentVariableValue)
};
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Licensed under the MIT License.

using System;
using System.Threading.Tasks;
using Azure.Core.TestFramework;

namespace Azure.AI.Personalizer.Tests
Expand All @@ -15,22 +16,55 @@ public PersonalizerTestBase(bool isAsync): base(isAsync)
Sanitizer = new PersonalizerRecordedTestSanitizer();
}

protected PersonalizerClient GetPersonalizerClient()
protected async Task<PersonalizerClient> GetPersonalizerClientAsync(bool isSingleSlot = false)
{
var credential = new AzureKeyCredential(TestEnvironment.ApiKey);
string endpoint = isSingleSlot ? TestEnvironment.SingleSlotEndpoint : TestEnvironment.MultiSlotEndpoint;
string apiKey = isSingleSlot ? TestEnvironment.SingleSlotApiKey : TestEnvironment.MultiSlotApiKey;
PersonalizerAdministrationClient adminClient = await GetPersonalizerAdministrationClientAsync(false);
if (! isSingleSlot)
{
await EnableMultiSlot(adminClient);
}
await SetTestInstanceProperties(adminClient);
var credential = new AzureKeyCredential(apiKey);
var options = InstrumentClientOptions(new PersonalizerClientOptions());
PersonalizerClient personalizerClient = new PersonalizerClient(new Uri(TestEnvironment.Endpoint), credential, options);
PersonalizerClient personalizerClient = new PersonalizerClient(new Uri(endpoint), credential, options);
personalizerClient = InstrumentClient(personalizerClient);
return personalizerClient;
}

protected PersonalizerAdministrationClient GetPersonalizerAdministrationClient()
protected async Task<PersonalizerAdministrationClient> GetPersonalizerAdministrationClientAsync(bool isSingleSlot = false, bool shouldSetProperties = true)
{
var credential = new AzureKeyCredential(TestEnvironment.ApiKey);
string endpoint = isSingleSlot ? TestEnvironment.SingleSlotEndpoint : TestEnvironment.MultiSlotEndpoint;
string apiKey = isSingleSlot ? TestEnvironment.SingleSlotApiKey : TestEnvironment.MultiSlotApiKey;
var credential = new AzureKeyCredential(apiKey);
var options = InstrumentClientOptions(new PersonalizerClientOptions());
PersonalizerAdministrationClient PersonalizerAdministrationClient = new PersonalizerAdministrationClient(new Uri(TestEnvironment.Endpoint), credential, options);
PersonalizerAdministrationClient = InstrumentClient(PersonalizerAdministrationClient);
return PersonalizerAdministrationClient;
PersonalizerAdministrationClient personalizerAdministrationClient = new PersonalizerAdministrationClient(new Uri(endpoint), credential, options);
personalizerAdministrationClient = InstrumentClient(personalizerAdministrationClient);
if (shouldSetProperties)
{
await SetTestInstanceProperties(personalizerAdministrationClient);
}
return personalizerAdministrationClient;
}

private async Task EnableMultiSlot(PersonalizerAdministrationClient adminClient)
{
PersonalizerServiceProperties properties = await adminClient.GetPersonalizerPropertiesAsync();
properties.IsAutoOptimizationEnabled = false;
await adminClient.UpdatePersonalizerPropertiesAsync(properties);
await adminClient.UpdatePersonalizerPolicyAsync(new PersonalizerPolicy("multiSlot", "--ccb_explore_adf --epsilon 0.2 --power_t 0 -l 0.001 --cb_type mtr -q ::"));
}

private async Task SetTestInstanceProperties(PersonalizerAdministrationClient adminClient)
{
PersonalizerServiceProperties properties = await adminClient.GetPersonalizerPropertiesAsync();
TimeSpan eud = new TimeSpan(hours: 0, minutes: 0, seconds: 5);
if (properties.RewardWaitTime != eud)
{
properties.RewardWaitTime = eud;
await adminClient.UpdatePersonalizerPropertiesAsync(properties);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,21 @@ namespace Azure.AI.Personalizer.Tests
public class PersonalizerTestEnvironment: TestEnvironment
{
/// <summary>The name of the environment variable from which Personalizer resource's endpoint will be extracted for the live tests.</summary>
internal const string EndpointEnvironmentVariableName = "PERSONALIZER_ENDPOINT";
internal const string MultiSlotEndpointEnvironmentVariableName = "PERSONALIZER_ENDPOINT_MULTI_SLOT";

/// <summary>The name of the environment variable from which the Personalizer resource's API key will be extracted for the live tests.</summary>
internal const string ApiKeyEnvironmentVariableName = "PERSONALIZER_API_KEY";
internal const string MultiSlotApiKeyEnvironmentVariableName = "PERSONALIZER_API_KEY_MULTI_SLOT";

public string ApiKey => GetRecordedVariable(ApiKeyEnvironmentVariableName);
public string Endpoint => GetRecordedVariable(EndpointEnvironmentVariableName);
/// <summary>The name of the environment variable from which Personalizer resource's endpoint will be extracted for the live tests.</summary>
internal const string SingleSlotEndpointEnvironmentVariableName = "PERSONALIZER_ENDPOINT_SINGLE_SLOT";

/// <summary>The name of the environment variable from which the Personalizer resource's API key will be extracted for the live tests.</summary>
internal const string SingleSlotApiKeyEnvironmentVariableName = "PERSONALIZER_API_KEY_SINGLE_SLOT";

public string SingleSlotApiKey => GetRecordedVariable(SingleSlotApiKeyEnvironmentVariableName);
public string SingleSlotEndpoint => GetRecordedVariable(SingleSlotEndpointEnvironmentVariableName);

public string MultiSlotApiKey => GetRecordedVariable(MultiSlotApiKeyEnvironmentVariableName);
public string MultiSlotEndpoint => GetRecordedVariable(MultiSlotEndpointEnvironmentVariableName);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,41 +16,33 @@ public ConfigurationsTests(bool isAsync): base(isAsync)
[Test]
public async Task GetServiceConfiguration()
{
PersonalizerAdministrationClient client = GetPersonalizerAdministrationClient();
PersonalizerAdministrationClient client = await GetPersonalizerAdministrationClientAsync(isSingleSlot: true);
PersonalizerServiceProperties defaultConfig = await client.GetPersonalizerPropertiesAsync();
Assert.AreEqual(TimeSpan.FromMinutes(1), defaultConfig.RewardWaitTime);
Assert.AreEqual(TimeSpan.FromHours(1), defaultConfig.ModelExportFrequency);
Assert.AreEqual(1, defaultConfig.DefaultReward);
Assert.AreEqual(TimeSpan.FromSeconds(5), defaultConfig.RewardWaitTime);
Assert.AreEqual(TimeSpan.FromMinutes(5), defaultConfig.ModelExportFrequency);
Assert.AreEqual(0, defaultConfig.DefaultReward);
Assert.AreEqual(0.2, defaultConfig.ExplorationPercentage, 0.00000001);
Assert.AreEqual(0, defaultConfig.LogRetentionDays);
}

[Test]
public async Task ApplyFromEvaluation()
{
PersonalizerAdministrationClient client = GetPersonalizerAdministrationClient();
PersonalizerPolicyReferenceOptions policyReferenceContract = new PersonalizerPolicyReferenceOptions("628a6299-ce45-4a9d-98a6-017c2c9ff008", "Inter-len1");
await client.ApplyPersonalizerEvaluationAsync(policyReferenceContract);
Assert.AreEqual(90, defaultConfig.LogRetentionDays);
}

[Test]
public async Task UpdateServiceConfiguration()
{
PersonalizerAdministrationClient client = GetPersonalizerAdministrationClient();
PersonalizerAdministrationClient client = await GetPersonalizerAdministrationClientAsync(isSingleSlot: true);
TimeSpan newExperimentalUnitDuration = TimeSpan.FromMinutes(1);
TimeSpan modelExportFrequency = TimeSpan.FromHours(1);
double newDefaultReward = 1.0;
string newRewardFuntion = "average";
double newExplorationPercentage = 0.2f;
float newExplorationPercentage = 0.200000003f;
var config = new PersonalizerServiceProperties (
rewardAggregation: newRewardFuntion,
modelExportFrequency: modelExportFrequency,
defaultReward: (float)newDefaultReward,
rewardWaitTime: newExperimentalUnitDuration,
explorationPercentage: (float)newExplorationPercentage,
explorationPercentage: newExplorationPercentage,
logRetentionDays: int.MaxValue
);
PersonalizerServiceProperties result = await client.UpdatePersonalizerConfigurationAsync(config);
PersonalizerServiceProperties result = await client.UpdatePersonalizerPropertiesAsync(config);
Assert.AreEqual(config.DefaultReward, result.DefaultReward);
Assert.True(Math.Abs(config.ExplorationPercentage - result.ExplorationPercentage) < 1e-3);
Assert.AreEqual(config.ModelExportFrequency, result.ModelExportFrequency);
Expand All @@ -59,34 +51,26 @@ public async Task UpdateServiceConfiguration()
}

[Test]
public async Task GetPolicy()
public async Task UpdateAndGetPolicy()
{
PersonalizerAdministrationClient client = GetPersonalizerAdministrationClient();
PersonalizerPolicy policy = await client.GetPersonalizerPolicyAsync();
Assert.AreEqual("app1", policy.Name);
Assert.AreEqual("--cb_explore_adf --quadratic GT --quadratic MR --quadratic GR --quadratic ME --quadratic OT --quadratic OE --quadratic OR --quadratic MS --quadratic GX --ignore A --cb_type ips --epsilon 0.2",
policy.Arguments);
}

[Test]
public async Task UpdatePolicy()
{
PersonalizerAdministrationClient client = GetPersonalizerAdministrationClient();
var policy = new PersonalizerPolicy(
PersonalizerAdministrationClient client = await GetPersonalizerAdministrationClientAsync(isSingleSlot: true);
var newPolicy = new PersonalizerPolicy(
name: "app1",
arguments: "--cb_explore_adf --quadratic GT --quadratic MR --quadratic GR --quadratic ME --quadratic OT --quadratic OE --quadratic OR --quadratic MS --quadratic GX --ignore A --cb_type ips --epsilon 0.2"
);
PersonalizerPolicy updatedPolicy = await client.UpdatePersonalizerPolicyAsync(policy);
PersonalizerPolicy updatedPolicy = await client.UpdatePersonalizerPolicyAsync(newPolicy);
Assert.NotNull(updatedPolicy);
Assert.AreEqual(policy.Arguments, updatedPolicy.Arguments);
Assert.AreEqual(newPolicy.Arguments, updatedPolicy.Arguments);
PersonalizerPolicy policy = await client.GetPersonalizerPolicyAsync();
Assert.AreEqual(newPolicy.Arguments, policy.Arguments);
}

[Test]
public async Task ResetPolicy()
{
PersonalizerAdministrationClient client = GetPersonalizerAdministrationClient();
PersonalizerAdministrationClient client = await GetPersonalizerAdministrationClientAsync(isSingleSlot: true);
PersonalizerPolicy policy = await client.ResetPersonalizerPolicyAsync();
Assert.AreEqual("--cb_explore_adf --quadratic GT --quadratic MR --quadratic GR --quadratic ME --quadratic OT --quadratic OE --quadratic OR --quadratic MS --quadratic GX --ignore A --cb_type ips --epsilon 0.2",
Assert.AreEqual("--cb_explore_adf --epsilon 0.2 --power_t 0 -l 0.001 --cb_type mtr -q ::",
policy.Arguments);
}
}
Expand Down
Loading