Skip to content

Commit

Permalink
Upgrade Orleans to version 8.0.0 (#150)
Browse files Browse the repository at this point in the history
Co-authored-by: Jakub Konecki <jakub.konecki@halny.tech>
Co-authored-by: Kyle Dodson <kyledodson@gmail.com>
  • Loading branch information
3 people committed Jan 7, 2024
1 parent 4e94eff commit ee3095b
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 21 deletions.
2 changes: 1 addition & 1 deletion Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<ImplicitUsings>enable</ImplicitUsings>
<LangVersion>latest</LangVersion>
<Nullable>enable</Nullable>
<TargetFramework>net7.0</TargetFramework>
<TargetFramework>net8.0</TargetFramework>
<AnalysisLevel>latest-Recommended</AnalysisLevel>
</PropertyGroup>

Expand Down
2 changes: 1 addition & 1 deletion global.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,6 @@
"sdk": {
"allowPrerelease": false,
"rollForward": "latestFeature",
"version": "7.0.404"
"version": "8.0.100"
}
}
10 changes: 5 additions & 5 deletions src/OrleansTestKit/OrleansTestKit.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
Expand All @@ -12,7 +12,7 @@
<PackageTags>Orleans Cloud-Computing Actor-Model Actors Distributed-Systems C# .NET Test Testing</PackageTags>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
<Version>4.0.0</Version>
<Version>8.0.0</Version>
</PropertyGroup>

<PropertyGroup>
Expand All @@ -24,9 +24,9 @@
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Orleans.Reminders" Version="7.2.4" />
<PackageReference Include="Microsoft.Orleans.Streaming" Version="7.2.4" />
<PackageReference Include="Microsoft.Orleans.Runtime" Version="7.2.4" />
<PackageReference Include="Microsoft.Orleans.Reminders" Version="8.0.0" />
<PackageReference Include="Microsoft.Orleans.Streaming" Version="8.0.0" />
<PackageReference Include="Microsoft.Orleans.Runtime" Version="8.0.0" />
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.1.1">
<IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
Expand Down
74 changes: 72 additions & 2 deletions src/OrleansTestKit/Services/TestServiceProvider.cs
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
using Moq;
using Microsoft.Extensions.DependencyInjection;
using Moq;
using Orleans.Streams;
using Orleans.TestKit.Streams;

namespace Orleans.TestKit.Services;

/// <summary>
/// The test service provider
/// </summary>
public sealed class TestServiceProvider : IServiceProvider
public sealed class TestServiceProvider : IServiceProvider, IKeyedServiceProvider
{
private readonly TestKitOptions _options;
private readonly Dictionary<Type, object> _services = new();
private readonly Dictionary<(object?, Type), object> _keyedServices = new();

/// <summary>
/// Initializes a new instance of the <see cref="TestServiceProvider"/> class.
Expand All @@ -35,6 +39,22 @@ public T AddService<T>(T instance)
return instance;
}

/// <summary>
/// Adds or updates a keyed service to the provider
/// </summary>
/// <typeparam name="T">The service type</typeparam>
/// <param name="name">The service key</param>
/// <param name="instance">The instance to add</param>
/// <returns>The instance</returns>
/// <exception cref="ArgumentNullException">Instance must be not null</exception>
public T AddKeyedService<T>(string name, T instance)
{
ArgumentNullException.ThrowIfNull(instance);

_keyedServices[(name, typeof(T))] = instance;
return instance;
}

/// <summary>
/// Adds a mock to the service provider
/// </summary>
Expand Down Expand Up @@ -85,4 +105,54 @@ public object GetService(Type serviceType)
return service;
}
}

public object? GetKeyedService(Type serviceType, object? serviceKey)
{
ArgumentNullException.ThrowIfNull(serviceType);

if (_keyedServices.TryGetValue((serviceKey, serviceType), out var service))
{
return service;
}

// If using strict service probes, throw the exception
if (_options.StrictServiceProbes)
{
throw new Exception($"Service probe does not exist for type {serviceType.Name} and key {serviceKey}. Ensure that it is added before the grain is tested.");
}
else
{
if (serviceType == typeof(IStreamProvider))
{
service = new TestStreamProvider(_options);
}
else
{
// Create a new mock
if (Activator.CreateInstance(typeof(Mock<>).MakeGenericType(serviceType)) is not IMock<object> mock)
{
throw new Exception($"Failed to instantiate {serviceType.Name}.");
}

service = mock.Object;
}

// Save the newly created grain for the next call
_keyedServices.Add((serviceKey, serviceType), service);

return service;
}
}

public object GetRequiredKeyedService(Type serviceType, object? serviceKey)
{
var service = GetKeyedService(serviceType, serviceKey);

if (service is not object)
{
throw new Exception($"Service probe does not exist for type {serviceType.Name} and key {serviceKey}. Ensure that it is added before the grain is tested.");
}

return service;
}
}
16 changes: 8 additions & 8 deletions src/OrleansTestKit/Streams/TestStreamProviderManager.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,21 @@
using Orleans.Runtime;
using Orleans.Streams;
using Orleans.TestKit.Services;

namespace Orleans.TestKit.Streams;

public sealed class TestStreamProviderManager : IKeyedServiceCollection<string, IStreamProvider>
public sealed class TestStreamProviderManager
{
private readonly TestKitOptions _options;
private readonly TestServiceProvider _serviceProvider;

private readonly Dictionary<string, TestStreamProvider> _streamProviders = new();

public TestStreamProviderManager(TestKitOptions options) =>
public TestStreamProviderManager(TestServiceProvider serviceProvider, TestKitOptions options)
{
_serviceProvider = serviceProvider ?? throw new ArgumentNullException(nameof(serviceProvider));
_options = options ?? throw new ArgumentNullException(nameof(options));
}

public TestStream<T> AddStreamProbe<T>(Guid streamId, string ns, string providerName) =>
AddStreamProbe<T>(StreamId.Create(ns, streamId), providerName);
Expand Down Expand Up @@ -44,17 +49,12 @@ public IStreamProvider GetProvider(string name)
return Add(name);
}

IStreamProvider IKeyedServiceCollection<string, IStreamProvider>.GetService(IServiceProvider services, string key) =>
GetProvider(key);

IEnumerable<IKeyedService<string, IStreamProvider>> IKeyedServiceCollection<string, IStreamProvider>.GetServices(IServiceProvider services) =>
(IEnumerable<IKeyedService<string, IStreamProvider>>)_streamProviders;

private TestStreamProvider Add(string name)
{
var provider = new TestStreamProvider(_options);
provider.Init(name).Wait();
_streamProviders.Add(name, provider);
_serviceProvider.AddKeyedService<IStreamProvider>(name, provider);
return provider;
}

Expand Down
3 changes: 1 addition & 2 deletions src/OrleansTestKit/TestKitSilo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,7 @@ public TestKitSilo()
StorageManager = new StorageManager(Options);
TimerRegistry = new TestTimerRegistry();
ReminderRegistry = new TestReminderRegistry();
StreamProviderManager = new TestStreamProviderManager(Options);
ServiceProvider.AddService<IKeyedServiceCollection<string, IStreamProvider>>(StreamProviderManager);
StreamProviderManager = new TestStreamProviderManager(ServiceProvider, Options);
ServiceProvider.AddService<IReminderRegistry>(ReminderRegistry);
GrainRuntime = new TestGrainRuntime(GrainFactory, TimerRegistry, ReminderRegistry, ServiceProvider, StorageManager);
ServiceProvider.AddService<IGrainRuntime>(GrainRuntime);
Expand Down
4 changes: 2 additions & 2 deletions test/OrleansTestKit.Tests/OrleansTestKit.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<?xml version="1.0" encoding="utf-8"?>
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
Expand All @@ -14,7 +14,7 @@
<PackageReference Include="FluentAssertions" Version="6.12.0" />
<PackageReference Include="Microsoft.CodeCoverage" Version="17.8.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
<PackageReference Include="Microsoft.Orleans.Sdk" Version="7.2.4" />
<PackageReference Include="Microsoft.Orleans.Sdk" Version="8.0.0" />
<PackageReference Include="NSubstitute" Version="5.1.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="7.0.0" />
<PackageReference Include="xunit" Version="2.6.5" />
Expand Down

0 comments on commit ee3095b

Please sign in to comment.