Skip to content

Commit

Permalink
Add net6 support (#16)
Browse files Browse the repository at this point in the history
* Added support for net6.-

- Updated the projects and added support for net6.0.
- Updated nuspec file and readme.
- Updated test project to run on net462 and net6.0.
- Updated readme file and added version.

Co-authored-by: Amir Hesami <[email protected]>
  • Loading branch information
ahesami and ahesami authored Feb 22, 2022
1 parent 9f74029 commit c1c3950
Show file tree
Hide file tree
Showing 7 changed files with 289 additions and 21 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,9 @@ For example:


## Release Notes

* 4.1.x
* No logic change
* Added support for .Net 6
* 3.2.x
* No logic change
* Preparation for version 4 based on .Net 6
Expand Down
194 changes: 194 additions & 0 deletions azure-documentdb-odata-sql-samples/DefaultHttpRequest.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,194 @@
// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
// https://github.com/aspnet/HttpAbstractions/blob/master/src/Microsoft.AspNetCore.Http/Internal/DefaultHttpRequest.cs

using System;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Features;
using Microsoft.Net.Http.Headers;

/// <summary>
/// Class DefaultHttpRequest.
/// Implements the <see cref="Microsoft.AspNetCore.Http.HttpRequest" />
/// </summary>
/// <seealso cref="Microsoft.AspNetCore.Http.HttpRequest" />
public class DefaultHttpRequest : HttpRequest
{
private static readonly Func<IFeatureCollection, IHttpRequestFeature> _nullRequestFeature = f => null;
private static readonly Func<IFeatureCollection, IQueryFeature> _newQueryFeature = f => new QueryFeature(f);
private static readonly Func<HttpRequest, IFormFeature> _newFormFeature = r => new FormFeature(r);
private static readonly Func<IFeatureCollection, IRequestCookiesFeature> _newRequestCookiesFeature = f => new RequestCookiesFeature(f);

private HttpContext _context;
private FeatureReferences<FeatureInterfaces> _features;

/// <summary>
/// Initializes a new instance of the <see cref="DefaultHttpRequest"/> class.
/// </summary>
/// <param name="context">The context.</param>
public DefaultHttpRequest(HttpContext context)
{
Initialize(context);
}

/// <inheritdoc />
public override Stream Body
{
get { return HttpRequestFeature.Body; }
set { HttpRequestFeature.Body = value; }
}

/// <inheritdoc />
public override long? ContentLength
{
get { return Headers.ContentLength; }
set { Headers.ContentLength = value; }
}

/// <inheritdoc />
public override string ContentType
{
get { return Headers[HeaderNames.ContentType]; }
set { Headers[HeaderNames.ContentType] = value; }
}

/// <inheritdoc />
public override IRequestCookieCollection Cookies
{
get { return RequestCookiesFeature.Cookies; }
set { RequestCookiesFeature.Cookies = value; }
}

/// <inheritdoc />
public override IFormCollection Form
{
get { return FormFeature.ReadForm(); }
set { FormFeature.Form = value; }
}

/// <inheritdoc />
public override bool HasFormContentType
{
get { return FormFeature.HasFormContentType; }
}

/// <inheritdoc />
public override IHeaderDictionary Headers
{
get { return HttpRequestFeature.Headers; }
}

/// <inheritdoc />
public override HostString Host
{
get { return HostString.FromUriComponent(Headers["Host"]); }
set { Headers["Host"] = value.ToUriComponent(); }
}

/// <inheritdoc />
public override HttpContext HttpContext => _context;

/// <inheritdoc />
public override bool IsHttps
{
get { return string.Equals("https", Scheme, StringComparison.OrdinalIgnoreCase); }
set { Scheme = value ? "https" : "http"; }
}

/// <inheritdoc />
public override string Method
{
get { return HttpRequestFeature.Method; }
set { HttpRequestFeature.Method = value; }
}

/// <inheritdoc />
public override PathString Path
{
get { return new PathString(HttpRequestFeature.Path); }
set { HttpRequestFeature.Path = value.Value; }
}

/// <inheritdoc />
public override PathString PathBase
{
get { return new PathString(HttpRequestFeature.PathBase); }
set { HttpRequestFeature.PathBase = value.Value; }
}

/// <inheritdoc />
public override string Protocol
{
get { return HttpRequestFeature.Protocol; }
set { HttpRequestFeature.Protocol = value; }
}

/// <inheritdoc />
public override IQueryCollection Query
{
get { return QueryFeature.Query; }
set { QueryFeature.Query = value; }
}

/// <inheritdoc />
public override QueryString QueryString
{
get { return new QueryString(HttpRequestFeature.QueryString); }
set { HttpRequestFeature.QueryString = value.Value; }
}

/// <inheritdoc />
public override string Scheme
{
get { return HttpRequestFeature.Scheme; }
set { HttpRequestFeature.Scheme = value; }
}

private IHttpRequestFeature HttpRequestFeature =>
_features.Fetch(ref _features.Cache.Request, _nullRequestFeature);

private IQueryFeature QueryFeature =>
_features.Fetch(ref _features.Cache.Query, _newQueryFeature);

private IFormFeature FormFeature =>
_features.Fetch(ref _features.Cache.Form, this, _newFormFeature);

private IRequestCookiesFeature RequestCookiesFeature =>
_features.Fetch(ref _features.Cache.Cookies, _newRequestCookiesFeature);

/// <inheritdoc />
public override Task<IFormCollection> ReadFormAsync(CancellationToken cancellationToken = default)
{
return FormFeature.ReadFormAsync(cancellationToken);
}

/// <summary>
/// Initializes the specified context.
/// </summary>
/// <param name="context">The context.</param>
public virtual void Initialize(HttpContext context)
{
_context = context;
_features = new FeatureReferences<FeatureInterfaces>(context.Features);
}

/// <summary>
/// Uninitializes this instance.
/// </summary>
public virtual void Uninitialize()
{
_context = null;
_features = default(FeatureReferences<FeatureInterfaces>);
}

private struct FeatureInterfaces
{
public IHttpRequestFeature Request;
public IQueryFeature Query;
public IFormFeature Form;
public IRequestCookiesFeature Cookies;
}
}
63 changes: 53 additions & 10 deletions azure-documentdb-odata-sql-samples/ODataToSqlSamples.cs
Original file line number Diff line number Diff line change
@@ -1,20 +1,29 @@
using System;
using Microsoft.OData.UriParser;
using Microsoft.Azure.Documents.OData.Sql;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using NSubstitute;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Builder;

#if NET6_0
using Microsoft.AspNetCore.OData;
using Microsoft.AspNetCore.OData.Query.Validator;
using Microsoft.OData.ModelBuilder;
using Microsoft.Extensions.Logging;
using Microsoft.AspNetCore.OData.Query;
#else
using System.Net.Http;
using Microsoft.AspNet.OData;
using Microsoft.AspNet.OData.Builder;
using Microsoft.AspNet.OData.Extensions;
using Microsoft.AspNet.OData.Query;
using Microsoft.AspNet.OData.Query.Validators;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Http.Internal;
using Microsoft.AspNetCore.Routing;
using Microsoft.Azure.Documents.OData.Sql;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.OData.UriParser;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using NSubstitute;
using ODataPath = Microsoft.AspNet.OData.Routing.ODataPath;
#endif

namespace azure_documentdb_odata_sql_tests
{
Expand All @@ -28,7 +37,7 @@ public class ODataToSqlSamples

private static HttpRequest HttpRequest { get; set; }

private static ServiceProvider Provider { get; set; }
private static IServiceProvider Provider { get; set; }

// Use ClassInitialize to run code before running the first test in the class
[ClassInitialize()]
Expand All @@ -47,7 +56,14 @@ public static void ClassInitialize(TestContext testContext)

var collection = new ServiceCollection();

#if NET6_0
collection
.AddControllers()
.AddOData();
#else
collection.AddOData();
#endif

collection.AddODataQueryFilter();
collection.AddTransient<ODataUriResolver>();
collection.AddTransient<ODataQueryValidator>();
Expand All @@ -56,12 +72,19 @@ public static void ClassInitialize(TestContext testContext)
collection.AddTransient<SkipQueryValidator>();
collection.AddTransient<OrderByQueryValidator>();

#if NET6_0
collection.AddTransient<ILoggerFactory, TestLoggingFactory>();
#endif

Provider = collection.BuildServiceProvider();

var applicationBuilder = Substitute.For<IApplicationBuilder>();
applicationBuilder.ApplicationServices.Returns(Provider);

#if !NET6_0
var routeBuilder = new RouteBuilder(applicationBuilder);
routeBuilder.EnableDependencyInjection();
#endif
}

// Use TestInitialize to run code before running each test
Expand Down Expand Up @@ -832,7 +855,7 @@ public void Translate_ReturnsCaseSensitiveStringFunction_WhenODataQueryDoesNotCo
Assert.AreEqual(expectedSqlQuery, actualSqlQuery);
}

#region Helpers
#region Helpers
private static ODataQueryOptions GetODataQueryOptions(string oData)
{
const string baseUrl = "http://localhost/User?";
Expand All @@ -843,6 +866,26 @@ private static ODataQueryOptions GetODataQueryOptions(string oData)
}

private static ODataToSqlTranslator Translator => new ODataToSqlTranslator(new SQLQueryFormatter());
#endregion
#endregion
}

#if NET6_0
public class TestLoggingFactory : Microsoft.Extensions.Logging.ILoggerFactory
{
private readonly ILogger logger = Substitute.For<ILogger>();
public void Dispose()
{
}

public void AddProvider(ILoggerProvider provider)
{
}

public ILogger CreateLogger(string categoryName)
{
return logger;
}
}

#endif
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net462</TargetFramework>
<TargetFrameworks>net462;net6.0</TargetFrameworks>
<debugType>full</debugType>
</PropertyGroup>

Expand All @@ -11,13 +11,25 @@

<ItemGroup>
<PackageReference Include="NSubstitute" Version="4.2.1" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net462' ">
<PackageReference Include="System.ComponentModel.Annotations" Version="4.1.0" />
<PackageReference Include="System.ValueTuple" Version="4.5.0" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.3.0" />
<PackageReference Include="MSTest.TestAdapter" Version="1.1.18" />
<PackageReference Include="MSTest.TestFramework" Version="1.1.18" />
</ItemGroup>

<ItemGroup Condition=" '$(TargetFramework)' == 'net6.0' ">
<FrameworkReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageReference Include="Microsoft.Net.Http.Headers" Version="2.2.8" />
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.0.0" />
<PackageReference Include="MSTest.TestAdapter" Version="2.2.8" />
<PackageReference Include="MSTest.TestFramework" Version="2.2.8" />
</ItemGroup>


<ItemGroup>
<ProjectReference Include="..\azure-documentdb-odata-sql\Azure-Documentdb-OData-Sql.csproj" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,10 @@
using Microsoft.AspNet.OData.Query;
#endif

#if NET6_0
using Microsoft.AspNetCore.OData.Query;
#endif

namespace Microsoft.Azure.Documents.OData.Sql
{
/// <summary>
Expand Down
Loading

0 comments on commit c1c3950

Please sign in to comment.