Skip to content
Open
Show file tree
Hide file tree
Changes from all 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
110 changes: 51 additions & 59 deletions Directory.Packages.props
Original file line number Diff line number Diff line change
Expand Up @@ -9,113 +9,105 @@

<!-- Product dependencies -->
<ItemGroup>
<PackageVersion Include="Azure.Core" Version="1.44.1" />
<PackageVersion Include="Azure.Core" Version="1.61.0" />
<PackageVersion Include="Azure.Data.Tables" Version="12.11.0" />
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.20.1" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.27.0" />
<PackageVersion Include="Azure.Storage.Queues" Version="12.22.0" />
<PackageVersion Include="Azure.Identity" Version="1.21.0" />
<PackageVersion Include="Azure.Messaging.ServiceBus" Version="7.20.2" />
<PackageVersion Include="Azure.Storage.Blobs" Version="12.29.1" />
<PackageVersion Include="Azure.Storage.Queues" Version="12.27.1" />
<PackageVersion Include="Castle.Core" Version="5.2.1" />
<PackageVersion Include="ImpromptuInterface" Version="6.2.2" Condition="'$(TargetFramework)' == 'net48' OR '$(TargetFramework)' == 'net472'" />
<PackageVersion Include="ImpromptuInterface" Version="7.0.1" Condition="'$(TargetFramework)' == 'netstandard2.0'" />
<PackageVersion Include="ImpromptuInterface" Version="8.0.6" />
<!-- Application Insights 3.x removes the telemetry module APIs exposed by DurableTask.ApplicationInsights. -->
<PackageVersion Include="Microsoft.ApplicationInsights" Version="2.23.0" />
<PackageVersion Include="Microsoft.AspNet.WebApi.OwinSelfHost" Version="5.3.0" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="8.0.0" />
<PackageVersion Include="Microsoft.Bcl.AsyncInterfaces" Version="10.0.10" />
<PackageVersion Include="Microsoft.CSharp" Version="4.7.0" />
<PackageVersion Include="Microsoft.Data.Services.Client" Version="5.8.5" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="2.1.1" />
<PackageVersion Include="Microsoft.ServiceFabric" Version="6.4.617" />
<PackageVersion Include="Microsoft.ServiceFabric.Data" Version="3.3.617" />
<PackageVersion Include="Microsoft.ServiceFabric.Services" Version="3.3.617" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="1.0.0" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.1" />
<PackageVersion Include="OpenTelemetry.Api" Version="1.15.3" />
<PackageVersion Include="System.Collections.Immutable" Version="1.2.0" />
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="6.0.1" />
<PackageVersion Include="System.Linq.Async" Version="6.0.1" />
<PackageVersion Include="System.Reactive.Compatibility" Version="4.4.1" />
<PackageVersion Include="System.Reactive.Core" Version="4.4.1" />
<PackageVersion Include="Microsoft.Extensions.DependencyInjection" Version="10.0.10" />
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.10" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.10" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.10" />
<PackageVersion Include="Microsoft.ServiceFabric" Version="11.6.239" />
<PackageVersion Include="Microsoft.ServiceFabric.Data" Version="8.6.239" />
<PackageVersion Include="Microsoft.ServiceFabric.Services" Version="8.6.239" />
<PackageVersion Include="Microsoft.SourceLink.GitHub" Version="10.0.301" />
<PackageVersion Include="Newtonsoft.Json" Version="13.0.4" />
<PackageVersion Include="OpenTelemetry.Api" Version="1.17.0" />
<PackageVersion Include="System.Collections.Immutable" Version="10.0.10" />
<PackageVersion Include="System.Diagnostics.DiagnosticSource" Version="10.0.10" />
<PackageVersion Include="System.Linq.Async" Version="7.0.1" />
<!-- System.Reactive 7.0.0's analyzer requires Roslyn 4.12 and cannot build with the .NET 8 SDK. -->
<PackageVersion Include="System.Reactive" Version="6.1.0" />
</ItemGroup>

<!-- Product dependencies with net48 only-->
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
<PackageVersion Include="Microsoft.Azure.KeyVault.Core" Version="1.0.0" />
<PackageVersion Include="Microsoft.Azure.KeyVault.Core" Version="3.0.5" />
<PackageVersion Include="Microsoft.Data.Edm" Version="5.8.5" />
<PackageVersion Include="Microsoft.Data.OData" Version="5.8.5" />
<PackageVersion Include="Microsoft.WindowsAzure.ConfigurationManager" Version="3.2.1" />
<PackageVersion Include="Microsoft.Rest.ClientRuntime" Version="2.3.24" />
<PackageVersion Include="Microsoft.Rest.ClientRuntime.Azure" Version="3.3.19" />
<PackageVersion Include="Microsoft.WindowsAzure.ConfigurationManager" Version="3.2.3" />
<PackageVersion Include="System.Spatial" Version="5.8.5" />
<PackageVersion Include="WindowsAzure.ServiceBus" Version="4.1.3" />
<PackageVersion Include="System.IdentityModel.Tokens.Jwt" Version="6.36.0" />
<PackageVersion Include="WindowsAzure.ServiceBus" Version="7.0.1" />
</ItemGroup>

<!-- Test dependencies -->
<ItemGroup>
<PackageVersion Include="Azure.Monitor.OpenTelemetry.Exporter" Version="1.8.1" />
<PackageVersion Include="CommandLineParser" Version="2.9.1" Condition="'$(TargetFramework)' == 'net8.0'" />
<PackageVersion Include="CommandLineParser" Version="1.9.71" Condition="'$(TargetFramework)' == 'net48'" />
<PackageVersion Include="Azure.Monitor.OpenTelemetry.Exporter" Version="1.8.3" />
<PackageVersion Include="CommandLineParser" Version="2.9.1" />
<PackageVersion Include="EnterpriseLibrary.SemanticLogging.EventSourceAnalyzer.NetCore" Version="2.0.1406.4" />
<PackageVersion Include="Microsoft.AspNet.WebApi.Core" Version="5.3.0" />
<PackageVersion Include="Microsoft.Diagnostics.EventFlow.Core" Version="1.5.6" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="17.10.0" />
<PackageVersion Include="Moq" Version="4.10.0" />
<PackageVersion Include="MSTest.TestAdapter" Version="3.5.0" />
<PackageVersion Include="MSTest.TestFramework" Version="3.5.0" />
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="4.5.0" />
<PackageVersion Include="System.Data.SqlClient" Version="4.8.6" />
<PackageVersion Include="Microsoft.Diagnostics.EventFlow.Core" Version="1.13.1" />
<PackageVersion Include="Microsoft.NET.Test.Sdk" Version="18.8.1" />
<PackageVersion Include="Moq" Version="4.20.72" />
<PackageVersion Include="MSTest.TestAdapter" Version="4.3.3" />
<PackageVersion Include="MSTest.TestFramework" Version="4.3.3" />
<PackageVersion Include="System.Configuration.ConfigurationManager" Version="10.0.10" />
<PackageVersion Include="System.Data.SqlClient" Version="4.9.1" />
<PackageVersion Include="System.Net.Http" Version="4.3.4" />
<PackageVersion Include="System.Text.RegularExpressions" Version="4.3.1" />
<PackageVersion Include="System.Text.Json" Version="10.0.8" />
<PackageVersion Include="WindowsAzure.Storage" Version="9.3.3" Condition="'$(TargetFramework)' == 'net8.0'" />
<PackageVersion Include="WindowsAzure.Storage" Version="8.7.0" Condition="'$(TargetFramework)' == 'net48'" />
<PackageVersion Include="System.Text.Json" Version="10.0.10" />
<PackageVersion Include="WindowsAzure.Storage" Version="9.3.3" />
</ItemGroup>

<!-- Test dependencies with net8.0-->
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
<PackageVersion Include="EnterpriseLibrary.SemanticLogging.NetCore" Version="2.0.1406.4" />
<PackageVersion Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" />
<PackageVersion Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.2" />
</ItemGroup>

<!-- Test dependencies with net472-->
<ItemGroup Condition="'$(TargetFramework)' == 'net472'">
<PackageVersion Include="Microsoft.AspNet.WebApi.Client" Version="6.0.0" />
<PackageVersion Include="Microsoft.AspNet.WebApi.Owin" Version="5.3.0" />
<PackageVersion Include="Microsoft.Owin.Hosting" Version="4.2.2" />
<PackageVersion Include="Microsoft.Owin.Hosting" Version="4.2.3" />
</ItemGroup>

<!-- Test dependencies with net48-->
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
<!-- NuGet reports 6.0.1302 as newer, but it predates the 2.0.1406 release line. -->
<PackageVersion Include="EnterpriseLibrary.SemanticLogging" version="2.0.1406.1" />
<PackageVersion Include="EnterpriseLibrary.SemanticLogging.TextFile" version="2.0.1406.1" />
<PackageVersion Include="Microsoft.Owin.Hosting" Version="4.2.2" />
<PackageVersion Include="Microsoft.Tpl.Dataflow" version="4.5.24" />
<PackageVersion Include="Microsoft.Owin.Hosting" Version="4.2.3" />
<PackageVersion Include="Microsoft.Tpl.Dataflow" Version="4.5.24" />
</ItemGroup>

<!-- Samples dependencies -->
<ItemGroup>
<PackageVersion Include="Azure.Identity" Version="1.21.0" />
<PackageVersion Include="Microsoft.ApplicationInsights.DependencyCollector" Version="2.23.0" />
<PackageVersion Include="Microsoft.ApplicationInsights.WorkerService" Version="2.23.0" />
<PackageVersion Include="Microsoft.Azure.DurableTask.AzureStorage" Version="1.17.3" />
<PackageVersion Include="Microsoft.Azure.DurableTask.AzureStorage" Version="1.17.5" />
<PackageVersion Include="Microsoft.Extensions.Azure" Version="1.14.0" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.8" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.8" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.8" />
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.15.3" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.15.3" />
<PackageVersion Include="Microsoft.Extensions.Configuration" Version="10.0.10" />
<PackageVersion Include="Microsoft.Extensions.Configuration.Json" Version="10.0.10" />
<PackageVersion Include="Microsoft.Extensions.Hosting" Version="10.0.10" />
<PackageVersion Include="OpenTelemetry.Exporter.Console" Version="1.17.0" />
<PackageVersion Include="OpenTelemetry.Exporter.OpenTelemetryProtocol" Version="1.17.0" />
<PackageVersion Include="Vio.DurableTask.Hosting" Version="2.2.17" />
</ItemGroup>

<!-- Dependencies specific to net8.0-->
<ItemGroup Condition="'$(TargetFramework)' == 'net8.0'">
<PackageVersion Include="Microsoft.Extensions.Logging" Version="10.0.3" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.3" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="10.0.3" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)' != 'net8.0'">
<PackageVersion Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageVersion Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.1" />
<PackageVersion Include="Microsoft.Extensions.Logging.Console" Version="6.0.0" />
</ItemGroup>


<!-- Samples dependencies with net48-->
<ItemGroup Condition="'$(TargetFramework)' == 'net48'">
<PackageVersion Include="ncrontab" Version="3.4.0" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,14 +81,14 @@ public void BindToType_AllowsNullAssemblyName()
[TestMethod]
public void BindToType_RejectsArbitraryAssembly()
{
Assert.ThrowsException<InvalidOperationException>(() =>
Assert.ThrowsExactly<InvalidOperationException>(() =>
this.binder.BindToType("Evil.Assembly", "Evil.PwnedDescriptor"));
}

[TestMethod]
public void BindToType_RejectsQualifiedArbitraryAssembly()
{
Assert.ThrowsException<InvalidOperationException>(() =>
Assert.ThrowsExactly<InvalidOperationException>(() =>
this.binder.BindToType("Evil.Assembly, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null", "Evil.PwnedDescriptor"));
}

Expand All @@ -97,23 +97,23 @@ public void BindToType_RejectsSystemDiagnosticsProcess()
{
// A common gadget type — must be rejected
var type = typeof(System.Diagnostics.Process);
Assert.ThrowsException<InvalidOperationException>(() =>
Assert.ThrowsExactly<InvalidOperationException>(() =>
this.binder.BindToType(type.Assembly.GetName().Name, type.FullName));
}

[TestMethod]
public void BindToType_RejectsNonAllowlistedMscorlibType()
{
// System.Type is from mscorlib but not in the type allowlist
Assert.ThrowsException<InvalidOperationException>(() =>
Assert.ThrowsExactly<InvalidOperationException>(() =>
this.binder.BindToType("mscorlib", typeof(Type).FullName));
}

[TestMethod]
public void BindToType_RejectsUnresolvableType()
{
// A type name that cannot be resolved should throw a controlled exception, not NullReferenceException
var ex = Assert.ThrowsException<JsonSerializationException>(() =>
var ex = Assert.ThrowsExactly<JsonSerializationException>(() =>
this.binder.BindToType("DurableTask.Core", "DurableTask.Core.NonExistentType"));
StringAssert.Contains(ex.Message, "NonExistentType");
}
Expand All @@ -123,7 +123,7 @@ public void BindToType_RejectsNonAllowlistedDurableTaskCoreType()
{
// TaskOrchestration is a DurableTask.Core type but not in the proxy endpoint allowlist
var type = typeof(TaskOrchestration);
Assert.ThrowsException<InvalidOperationException>(() =>
Assert.ThrowsExactly<InvalidOperationException>(() =>
this.binder.BindToType(type.Assembly.GetName().Name, type.FullName));
}

Expand Down Expand Up @@ -208,7 +208,7 @@ public void Deserialize_MaliciousPayload_IsRejected()
};

// Newtonsoft wraps the binder's InvalidOperationException in a JsonSerializationException
var ex = Assert.ThrowsException<JsonSerializationException>(() =>
var ex = Assert.ThrowsExactly<JsonSerializationException>(() =>
JsonConvert.DeserializeObject<object>(maliciousJson, settings));
Assert.IsInstanceOfType(ex.InnerException, typeof(InvalidOperationException));
StringAssert.Contains(ex.InnerException.Message, "is not allowed");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public void MissingRequestFailedException()
Assert.IsFalse(exception.LeaseLost);
}

[DataTestMethod]
[TestMethod]
[DataRow(true, HttpStatusCode.Conflict, nameof(BlobErrorCode.LeaseLost))]
[DataRow(false, HttpStatusCode.Conflict, nameof(BlobErrorCode.LeaseNotPresentWithBlobOperation))]
[DataRow(false, HttpStatusCode.NotFound, nameof(BlobErrorCode.BlobNotFound))]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This sample demonstrates direct integration with Azure Application Insights for

## Prerequisites

- .NET 6.0 SDK or later
- .NET 8.0 SDK or later
- Azure Storage Emulator (Azurite) or Azure Storage account
- Azure Application Insights resource

Expand Down
2 changes: 1 addition & 1 deletion samples/DistributedTraceSample/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ services.TryAddEnumerable(

## Prerequisites

- .NET 6.0 SDK or later
- .NET 8.0 SDK or later
- Azure Storage Emulator (Azurite) or Azure Storage account
- (Optional) Application Insights resource
- (Optional) Zipkin instance for OpenTelemetry sample
Expand Down
16 changes: 8 additions & 8 deletions samples/DurableTask.Samples/Options.cs
Original file line number Diff line number Diff line change
Expand Up @@ -13,37 +13,37 @@

namespace DurableTask.Samples
{
using System.Collections.Generic;
using CommandLine;
using CommandLine.Text;

internal class Options
{
[Option('c', "create-hub", DefaultValue = false,
[Option('c', "create-hub", Default = false,
HelpText = "Create Orchestration Hub.")]
public bool CreateHub { get; set; }

[Option('s', "start-instance", DefaultValue = null,
[Option('s', "start-instance", Default = null,
HelpText = "Start new instance. Supported Orchestrations: 'Greetings, Cron, Average, ErrorHandling Signal'.")]
public string StartInstance { get; set; }

[Option('i', "instance-id",
HelpText = "Instance id for new orchestration instance.")]
public string InstanceId { get; set; }

[OptionArray('p', "params",
[Option('p', "params",
HelpText = "Parameters for new instance.")]
public string[] Parameters { get; set; }
public IEnumerable<string> Parameters { get; set; }

[Option('n', "signal-name",
HelpText = "Instance id to send signal")]
public string Signal { get; set; }

[Option('w', "skip-worker", DefaultValue = false,
[Option('w', "skip-worker", Default = false,
HelpText = "Don't start worker")]
public bool SkipWorker { get; set; }

[HelpOption]
public string GetUsage()
public static string GetUsage(ParserResult<Options> options)
{
// this without using CommandLine.Text
// or using HelpText.AutoBuild
Expand All @@ -63,7 +63,7 @@ public string GetUsage()
help.AddPreOptionsLine("Usage: DurableTaskSamples.exe -c -s SumOfSquares");
help.AddPreOptionsLine("Usage: DurableTaskSamples.exe -c -s Signal -i 1");
help.AddPreOptionsLine("Usage: DurableTaskSamples.exe -w -n User -i 1 -p MyName");
help.AddOptions(this);
help.AddOptions(options);
return help;
}
}
Expand Down
Loading
Loading