From 9b5f2e15825836959003e3cab8d9e468a1544af2 Mon Sep 17 00:00:00 2001 From: cmurialdo Date: Fri, 7 Oct 2022 07:09:40 -0300 Subject: [PATCH 1/3] Change Startup code to support overriding appsettings.json with the native mechanism of aspnet core: https://learn.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-6.0#default-application-configuration-sources Do not call Preferences before Startup is created to avoid loading appsettings.json manually. --- .../dotnetcore/GxNetCoreStartup/Startup.cs | 16 +++- .../GxClasses/Core/gxconfig.cs | 2 +- .../DotNetCoreUnitTest.csproj | 6 ++ .../AspNetCoreTestConfigurationOverride.cs | 47 +++++++++++ .../DotNetCoreUnitTest/Middleware/CorsTest.cs | 8 -- .../Middleware/MiddlewareTest.cs | 16 ++++ .../DotNetCoreUnitTest/apps/configsettings.cs | 81 +++++++++++++++++++ .../apps/configsettings.svc | 1 + .../appsettings.Development.json | 5 ++ .../test/DotNetCoreUnitTest/appsettings.json | 3 +- 10 files changed, 172 insertions(+), 13 deletions(-) create mode 100644 dotnet/test/DotNetCoreUnitTest/Middleware/AspNetCoreTestConfigurationOverride.cs create mode 100644 dotnet/test/DotNetCoreUnitTest/apps/configsettings.cs create mode 100644 dotnet/test/DotNetCoreUnitTest/apps/configsettings.svc create mode 100644 dotnet/test/DotNetCoreUnitTest/appsettings.Development.json diff --git a/dotnet/src/dotnetcore/GxNetCoreStartup/Startup.cs b/dotnet/src/dotnetcore/GxNetCoreStartup/Startup.cs index 10a8138a9..01fff17b2 100644 --- a/dotnet/src/dotnetcore/GxNetCoreStartup/Startup.cs +++ b/dotnet/src/dotnetcore/GxNetCoreStartup/Startup.cs @@ -22,6 +22,7 @@ using Microsoft.AspNetCore.Routing; using Microsoft.AspNetCore.Server.Kestrel.Core; using Microsoft.AspNetCore.StaticFiles; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.FileProviders; using Microsoft.Extensions.Logging; @@ -32,16 +33,20 @@ namespace GeneXus.Application public class Program { const string DEFAULT_PORT = "80"; + static string DEFAULT_SCHEMA = Uri.UriSchemeHttp; public static void Main(string[] args) { try { string port = DEFAULT_PORT; + string schema = DEFAULT_SCHEMA; if (args.Length > 2) { Startup.VirtualPath = args[0]; Startup.LocalPath = args[1]; port = args[2]; + if (args.Length > 3 && Uri.UriSchemeHttps.Equals(args[3], StringComparison.OrdinalIgnoreCase)) + schema = Uri.UriSchemeHttps; } if (port == DEFAULT_PORT) { @@ -49,7 +54,7 @@ public static void Main(string[] args) } else { - BuildWebHostPort(null, port).Run(); + BuildWebHostPort(null, port, schema).Run(); } } catch (Exception e) @@ -66,10 +71,14 @@ public static IWebHost BuildWebHost(string[] args) => .Build(); public static IWebHost BuildWebHostPort(string[] args, string port) + { + return BuildWebHostPort(args, port, DEFAULT_SCHEMA); + } + static IWebHost BuildWebHostPort(string[] args, string port, string schema) { return WebHost.CreateDefaultBuilder(args) .ConfigureLogging(logging => logging.AddConsole()) - .UseUrls(Preferences.HttpProtocolSecure() ? $"{Uri.UriSchemeHttps}://*:{port}" : $"{Uri.UriSchemeHttp}://*:{port}") + .UseUrls($"{schema}://*:{port}") .UseStartup() .Build(); } @@ -116,8 +125,9 @@ public class Startup private GXRouting gxRouting; - public Startup(Microsoft.AspNetCore.Hosting.IHostingEnvironment env) + public Startup(IConfiguration configuration, IHostingEnvironment env) { + Config.ConfigRoot = configuration; GXRouting.ContentRootPath = env.ContentRootPath; GXRouting.UrlTemplateControllerWithParms = "controllerWithParms"; GxContext.IsHttpContext = true; diff --git a/dotnet/src/dotnetframework/GxClasses/Core/gxconfig.cs b/dotnet/src/dotnetframework/GxClasses/Core/gxconfig.cs index 8eb2c769b..27b1e02a3 100644 --- a/dotnet/src/dotnetframework/GxClasses/Core/gxconfig.cs +++ b/dotnet/src/dotnetframework/GxClasses/Core/gxconfig.cs @@ -412,7 +412,7 @@ public static CultureInfo GetCultureForLang(string lang) } #if NETCORE - public static IConfigurationRoot ConfigRoot { get; set; } + public static IConfiguration ConfigRoot { get; set; } const string Log4NetShortName = "log4net"; static Version Log4NetVersion = new Version(2, 0, 11); diff --git a/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj b/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj index b07c5649f..d0d234f92 100644 --- a/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj +++ b/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj @@ -89,9 +89,15 @@ + + PreserveNewest + PreserveNewest + + PreserveNewest + PreserveNewest diff --git a/dotnet/test/DotNetCoreUnitTest/Middleware/AspNetCoreTestConfigurationOverride.cs b/dotnet/test/DotNetCoreUnitTest/Middleware/AspNetCoreTestConfigurationOverride.cs new file mode 100644 index 000000000..226a675f1 --- /dev/null +++ b/dotnet/test/DotNetCoreUnitTest/Middleware/AspNetCoreTestConfigurationOverride.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Net.Http.Headers; +using System.Reflection; +using System.Threading.Tasks; +using GeneXus.Configuration; +using GeneXus.Metadata; +using Microsoft.AspNetCore.Http; +using Microsoft.Net.Http.Headers; +using Xunit; +using xUnitTesting; + +namespace DotNetCoreUnitTest.Middleware +{ + public class AspNetCoreTestConfigurationOverride : MiddlewareTest + { + const string ConfigSettingsProgramName = "configsettings"; + const string ConfigSettingsProgramModule = "apps"; + const string DEVELOPMENT_VALUE = "DEVELOPMENT_VALUE"; + const string MY_CUSTOM_PTY = "MY_CUSTOM_PTY"; + const string DOTNET_ENVIRONMENT = "Development"; + public AspNetCoreTestConfigurationOverride():base(DOTNET_ENVIRONMENT) + { + ClassLoader.FindType($"{ConfigSettingsProgramModule}.{ConfigSettingsProgramName}", $"GeneXus.Programs.{ConfigSettingsProgramModule}", ConfigSettingsProgramName, Assembly.GetExecutingAssembly(), true);//Force loading assembly + } + [Fact] + public async Task TestConfigurationSettingOverridenInDevelopment() + { + server.AllowSynchronousIO = true; + HttpClient client = server.CreateClient(); + + client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); + client.DefaultRequestHeaders.Add("ConfigurationSetting", MY_CUSTOM_PTY); + + HttpResponseMessage response = await client.PostAsync($"rest/{ConfigSettingsProgramModule}/{ConfigSettingsProgramName}", null); + response.EnsureSuccessStatusCode(); + Assert.Equal(System.Net.HttpStatusCode.OK, response.StatusCode); + + string originHeader = GetHeader(response, "ConfigurationSettingValue"); + Assert.Equal(DEVELOPMENT_VALUE, originHeader); + } + + + } +} diff --git a/dotnet/test/DotNetCoreUnitTest/Middleware/CorsTest.cs b/dotnet/test/DotNetCoreUnitTest/Middleware/CorsTest.cs index c7a4094fd..7196d6bca 100644 --- a/dotnet/test/DotNetCoreUnitTest/Middleware/CorsTest.cs +++ b/dotnet/test/DotNetCoreUnitTest/Middleware/CorsTest.cs @@ -76,14 +76,6 @@ public async Task TestCorsOnPreflightRequest() Assert.Contains(header, headersHeader, StringComparison.OrdinalIgnoreCase); } } - private string GetHeader(HttpResponseMessage response, string headerName) - { - if (response.Headers.TryGetValues(headerName, out IEnumerable value)) - return value.First(); - else - return string.Empty; - - } } } diff --git a/dotnet/test/DotNetCoreUnitTest/Middleware/MiddlewareTest.cs b/dotnet/test/DotNetCoreUnitTest/Middleware/MiddlewareTest.cs index f95f4010f..afb80bd8e 100644 --- a/dotnet/test/DotNetCoreUnitTest/Middleware/MiddlewareTest.cs +++ b/dotnet/test/DotNetCoreUnitTest/Middleware/MiddlewareTest.cs @@ -1,4 +1,7 @@ +using System.Collections.Generic; using System.IO; +using System.Linq; +using System.Net.Http; using GeneXus.Application; using GxClasses.Web.Middleware; using Microsoft.AspNetCore; @@ -15,6 +18,19 @@ public MiddlewareTest() GXRouting.ContentRootPath = Directory.GetCurrentDirectory(); server = new TestServer(WebHost.CreateDefaultBuilder().UseStartup()); } + public MiddlewareTest(string environment) + { + GXRouting.ContentRootPath = Directory.GetCurrentDirectory(); + server = new TestServer(WebHost.CreateDefaultBuilder().UseStartup().UseEnvironment(environment)); + } + protected string GetHeader(HttpResponseMessage response, string headerName) + { + if (response.Headers.TryGetValues(headerName, out IEnumerable value)) + return value.First(); + else + return string.Empty; + + } } } diff --git a/dotnet/test/DotNetCoreUnitTest/apps/configsettings.cs b/dotnet/test/DotNetCoreUnitTest/apps/configsettings.cs new file mode 100644 index 000000000..d20a71c04 --- /dev/null +++ b/dotnet/test/DotNetCoreUnitTest/apps/configsettings.cs @@ -0,0 +1,81 @@ +using System; +using System.Collections; +using GeneXus.Utils; +using GeneXus.Resources; +using GeneXus.Application; +using GeneXus.Metadata; +using GeneXus.Cryptography; +using com.genexus; +using GeneXus.Data.ADO; +using GeneXus.Data.NTier; +using GeneXus.Data.NTier.ADO; +using GeneXus.WebControls; +using GeneXus.Http; +using GeneXus.Procedure; +using GeneXus.XML; +using GeneXus.Search; +using GeneXus.Encryption; +using GeneXus.Http.Client; +using GeneXus.Http.Server; +using System.Threading; +using System.Xml.Serialization; +using System.Runtime.Serialization; +using GeneXus.Configuration; + +namespace GeneXus.Programs.apps +{ + public class configsettings : GXWebProcedure + { + + public configsettings() + { + context = new GxContext(); + DataStoreUtil.LoadDataStores(context); + IsMain = true; + context.SetDefaultTheme("Carmine"); + } + + public configsettings(IGxContext context) + { + this.context = context; + IsMain = false; + } + + public void execute() + { + initialize(); + executePrivate(); + } + + void executePrivate() + { + GxHttpRequest AV24httpRequest = new GxHttpRequest(context); + GxHttpResponse AV25httpResponse = new GxHttpResponse(context); + string AV26character = AV24httpRequest.GetHeader("ConfigurationSetting"); + string confValue = ConfigurationManager.GetValue(AV26character); + AV25httpResponse.AppendHeader("ConfigurationSettingValue", confValue); + + this.cleanup(); + } + + public override void cleanup() + { + CloseOpenCursors(); + base.cleanup(); + if (IsMain) + { + context.CloseConnections(); + } + ExitApp(); + } + + protected void CloseOpenCursors() + { + } + + public override void initialize() + { + } + } + +} diff --git a/dotnet/test/DotNetCoreUnitTest/apps/configsettings.svc b/dotnet/test/DotNetCoreUnitTest/apps/configsettings.svc new file mode 100644 index 000000000..f06749676 --- /dev/null +++ b/dotnet/test/DotNetCoreUnitTest/apps/configsettings.svc @@ -0,0 +1 @@ +<%@ServiceHost Service= "GeneXus.Programs.apps.configsettings,apps.configsettings" %> diff --git a/dotnet/test/DotNetCoreUnitTest/appsettings.Development.json b/dotnet/test/DotNetCoreUnitTest/appsettings.Development.json new file mode 100644 index 000000000..8ec4df171 --- /dev/null +++ b/dotnet/test/DotNetCoreUnitTest/appsettings.Development.json @@ -0,0 +1,5 @@ +{ + "appSettings": { + "MY_CUSTOM_PTY": "DEVELOPMENT_VALUE" + } +} \ No newline at end of file diff --git a/dotnet/test/DotNetCoreUnitTest/appsettings.json b/dotnet/test/DotNetCoreUnitTest/appsettings.json index f95299aff..31bce50e5 100644 --- a/dotnet/test/DotNetCoreUnitTest/appsettings.json +++ b/dotnet/test/DotNetCoreUnitTest/appsettings.json @@ -48,7 +48,8 @@ "HTTP_PROTOCOL": "Unsecure", "SAMESITE_COOKIE": "Lax", "CACHE_INVALIDATION_TOKEN": "20216211291931", - "CORS_ALLOW_ORIGIN": "https://normal-website.com" + "CORS_ALLOW_ORIGIN": "https://normal-website.com", + "MY_CUSTOM_PTY": "DEFAULT_VALUE" }, "languages": { "English": { From 272efe83dfc37e44f8eb2039ac3391e2ca1e0e95 Mon Sep 17 00:00:00 2001 From: cmurialdo Date: Fri, 7 Oct 2022 07:12:57 -0300 Subject: [PATCH 2/3] Remove unused usings. --- .../DotNetCoreUnitTest/apps/configsettings.cs | 22 ++----------------- .../test/DotNetCoreUnitTest/apps/httpcors.cs | 20 +---------------- 2 files changed, 3 insertions(+), 39 deletions(-) diff --git a/dotnet/test/DotNetCoreUnitTest/apps/configsettings.cs b/dotnet/test/DotNetCoreUnitTest/apps/configsettings.cs index d20a71c04..2320b3a36 100644 --- a/dotnet/test/DotNetCoreUnitTest/apps/configsettings.cs +++ b/dotnet/test/DotNetCoreUnitTest/apps/configsettings.cs @@ -1,26 +1,8 @@ -using System; -using System.Collections; -using GeneXus.Utils; -using GeneXus.Resources; using GeneXus.Application; -using GeneXus.Metadata; -using GeneXus.Cryptography; -using com.genexus; -using GeneXus.Data.ADO; +using GeneXus.Configuration; using GeneXus.Data.NTier; -using GeneXus.Data.NTier.ADO; -using GeneXus.WebControls; -using GeneXus.Http; -using GeneXus.Procedure; -using GeneXus.XML; -using GeneXus.Search; -using GeneXus.Encryption; -using GeneXus.Http.Client; using GeneXus.Http.Server; -using System.Threading; -using System.Xml.Serialization; -using System.Runtime.Serialization; -using GeneXus.Configuration; +using GeneXus.Procedure; namespace GeneXus.Programs.apps { diff --git a/dotnet/test/DotNetCoreUnitTest/apps/httpcors.cs b/dotnet/test/DotNetCoreUnitTest/apps/httpcors.cs index ec095594f..1d940478c 100644 --- a/dotnet/test/DotNetCoreUnitTest/apps/httpcors.cs +++ b/dotnet/test/DotNetCoreUnitTest/apps/httpcors.cs @@ -1,25 +1,7 @@ -using System; -using System.Collections; -using GeneXus.Utils; -using GeneXus.Resources; using GeneXus.Application; -using GeneXus.Metadata; -using GeneXus.Cryptography; -using com.genexus; -using GeneXus.Data.ADO; using GeneXus.Data.NTier; -using GeneXus.Data.NTier.ADO; -using GeneXus.WebControls; -using GeneXus.Http; -using GeneXus.Procedure; -using GeneXus.XML; -using GeneXus.Search; -using GeneXus.Encryption; -using GeneXus.Http.Client; using GeneXus.Http.Server; -using System.Threading; -using System.Xml.Serialization; -using System.Runtime.Serialization; +using GeneXus.Procedure; namespace GeneXus.Programs.apps { From 06a03375657063316aa19e5e6ee3aa9b98c19538 Mon Sep 17 00:00:00 2001 From: cmurialdo Date: Fri, 7 Oct 2022 08:12:15 -0300 Subject: [PATCH 3/3] Split project for unit tests in .NET core to avoid Config settings begin overriden when running in the same process. --- dotnet/DotNetStandardClasses.sln | 15 +++- .../GxClasses.Web/Properties/AssemblyInfo.cs | 1 + .../GxClasses/Properties/AssemblyInfo.cs | 1 + .../DotNetCoreUnitTest.csproj | 19 ----- .../DotNetCoreWebUnitTest.csproj | 71 ++++++++++++++++++ .../AspNetCoreTestConfigurationOverride.cs | 3 +- .../Middleware/CorsTest.cs | 3 +- .../Middleware/MiddlewareTest.cs | 10 +-- .../Middleware/RestServiceTest.cs | 0 .../Middleware/WebPanelTest.cs | 0 .../Middleware/webhook.cs | 0 .../apps/append.cs | 0 .../apps/append.svc | 0 .../apps/configsettings.cs | 0 .../apps/configsettings.svc | 0 .../apps/httpcors.cs | 0 .../apps/httpcors.svc | 0 .../apps/saveimage.cs | 0 .../apps/saveimage.svc | 0 .../apps/type_Sdtrappo00b.cs | 0 .../appsettings.Development.json | 0 .../DotNetCoreWebUnitTest/appsettings.json | 64 ++++++++++++++++ .../uruguay.flag.png | Bin 23 files changed, 156 insertions(+), 31 deletions(-) create mode 100644 dotnet/test/DotNetCoreWebUnitTest/DotNetCoreWebUnitTest.csproj rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/Middleware/AspNetCoreTestConfigurationOverride.cs (92%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/Middleware/CorsTest.cs (98%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/Middleware/MiddlewareTest.cs (75%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/Middleware/RestServiceTest.cs (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/Middleware/WebPanelTest.cs (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/Middleware/webhook.cs (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/apps/append.cs (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/apps/append.svc (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/apps/configsettings.cs (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/apps/configsettings.svc (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/apps/httpcors.cs (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/apps/httpcors.svc (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/apps/saveimage.cs (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/apps/saveimage.svc (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/apps/type_Sdtrappo00b.cs (100%) rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/appsettings.Development.json (100%) create mode 100644 dotnet/test/DotNetCoreWebUnitTest/appsettings.json rename dotnet/test/{DotNetCoreUnitTest => DotNetCoreWebUnitTest}/uruguay.flag.png (100%) diff --git a/dotnet/DotNetStandardClasses.sln b/dotnet/DotNetStandardClasses.sln index a2a2c74f3..635476adf 100644 --- a/dotnet/DotNetStandardClasses.sln +++ b/dotnet/DotNetStandardClasses.sln @@ -208,11 +208,15 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestMockDBAccess", "src\ext EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GeneXus.Programs.Common", "src\extensions\Azure\test\GeneXus.Programs.Common\GeneXus.Programs.Common.csproj", "{DCEC0B38-93B6-4003-81E6-9FBC2BB4F163}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GXAmazonSQS", "src\dotnetcore\Providers\Messaging\GXAmazonSQS\GXAmazonSQS.csproj", "{F8BA0D65-267D-491F-BFAB-33F5E5B61AD7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GXAmazonSQS", "src\dotnetcore\Providers\Messaging\GXAmazonSQS\GXAmazonSQS.csproj", "{F8BA0D65-267D-491F-BFAB-33F5E5B61AD7}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "apiattractions", "src\extensions\Azure\test\apiattractions\apiattractions.csproj", "{E85FDB0F-FA81-4CDD-8BF3-865269CE2DB3}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectHealthTest", "test\ProjectHealthTest\ProjectHealthTest.csproj", "{65048104-212A-4819-AECF-89CA9C08C83F}" -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DotNetRedisTest", "test\DotNetRedisTest\DotNetRedisTest.csproj", "{48430E50-043A-47A2-8278-B86A4420758A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ProjectHealthTest", "test\ProjectHealthTest\ProjectHealthTest.csproj", "{65048104-212A-4819-AECF-89CA9C08C83F}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetRedisTest", "test\DotNetRedisTest\DotNetRedisTest.csproj", "{48430E50-043A-47A2-8278-B86A4420758A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DotNetCoreWebUnitTest", "test\DotNetCoreWebUnitTest\DotNetCoreWebUnitTest.csproj", "{531863CA-93A0-42AA-AB5C-FA0E672C03B8}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -520,6 +524,10 @@ Global {48430E50-043A-47A2-8278-B86A4420758A}.Debug|Any CPU.Build.0 = Debug|Any CPU {48430E50-043A-47A2-8278-B86A4420758A}.Release|Any CPU.ActiveCfg = Release|Any CPU {48430E50-043A-47A2-8278-B86A4420758A}.Release|Any CPU.Build.0 = Release|Any CPU + {531863CA-93A0-42AA-AB5C-FA0E672C03B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {531863CA-93A0-42AA-AB5C-FA0E672C03B8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {531863CA-93A0-42AA-AB5C-FA0E672C03B8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {531863CA-93A0-42AA-AB5C-FA0E672C03B8}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -624,6 +632,7 @@ Global {E85FDB0F-FA81-4CDD-8BF3-865269CE2DB3} = {7BA5A2CE-7992-4F87-9D84-91AE4D046F5A} {65048104-212A-4819-AECF-89CA9C08C83F} = {1D6F1776-FF4B-46C2-9B3D-BC46CCF049DC} {48430E50-043A-47A2-8278-B86A4420758A} = {1D6F1776-FF4B-46C2-9B3D-BC46CCF049DC} + {531863CA-93A0-42AA-AB5C-FA0E672C03B8} = {1D6F1776-FF4B-46C2-9B3D-BC46CCF049DC} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {E18684C9-7D76-45CD-BF24-E3944B7F174C} diff --git a/dotnet/src/dotnetcore/GxClasses.Web/Properties/AssemblyInfo.cs b/dotnet/src/dotnetcore/GxClasses.Web/Properties/AssemblyInfo.cs index d4b839475..7138fabec 100644 --- a/dotnet/src/dotnetcore/GxClasses.Web/Properties/AssemblyInfo.cs +++ b/dotnet/src/dotnetcore/GxClasses.Web/Properties/AssemblyInfo.cs @@ -2,6 +2,7 @@ [assembly: InternalsVisibleTo("DotNetCoreUnitTest")] +[assembly: InternalsVisibleTo("DotNetCoreWebUnitTest")] [assembly: InternalsVisibleTo("GxNetCoreStartup")] [assembly: InternalsVisibleTo("GeneXus.Deploy.AzureFunctions.Handlers")] [assembly: InternalsVisibleTo("AzureFunctionsTest")] \ No newline at end of file diff --git a/dotnet/src/dotnetcore/GxClasses/Properties/AssemblyInfo.cs b/dotnet/src/dotnetcore/GxClasses/Properties/AssemblyInfo.cs index cb96c93e4..ba48bbac5 100644 --- a/dotnet/src/dotnetcore/GxClasses/Properties/AssemblyInfo.cs +++ b/dotnet/src/dotnetcore/GxClasses/Properties/AssemblyInfo.cs @@ -7,6 +7,7 @@ [assembly: InternalsVisibleTo("AzureFunctionsTest")] [assembly: InternalsVisibleTo("GXQueue")] [assembly: InternalsVisibleTo("DotNetCoreUnitTest")] +[assembly: InternalsVisibleTo("DotNetCoreWebUnitTest")] [assembly: InternalsVisibleTo("GeneXus.Deploy.AzureFunctions.Handlers")] [assembly: InternalsVisibleTo("AzureFunctionsTest")] [assembly: InternalsVisibleTo("GXMessageBroker")] diff --git a/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj b/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj index d0d234f92..eda7292df 100644 --- a/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj +++ b/dotnet/test/DotNetCoreUnitTest/DotNetCoreUnitTest.csproj @@ -71,7 +71,6 @@ - @@ -89,21 +88,6 @@ - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - - - PreserveNewest - PreserveNewest @@ -161,9 +145,6 @@ Always - - PreserveNewest - diff --git a/dotnet/test/DotNetCoreWebUnitTest/DotNetCoreWebUnitTest.csproj b/dotnet/test/DotNetCoreWebUnitTest/DotNetCoreWebUnitTest.csproj new file mode 100644 index 000000000..a5c8f940b --- /dev/null +++ b/dotnet/test/DotNetCoreWebUnitTest/DotNetCoreWebUnitTest.csproj @@ -0,0 +1,71 @@ + + + net6.0 + CS8032;1701;1702;NU1701 + Major + + + TRACE;NETCORE + + + DEBUG;TRACE;NETCORE + + + + + + + + + + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + runtime; build; native; contentfiles; analyzers; buildtransitive + all + + + + + + + + + + + + + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + diff --git a/dotnet/test/DotNetCoreUnitTest/Middleware/AspNetCoreTestConfigurationOverride.cs b/dotnet/test/DotNetCoreWebUnitTest/Middleware/AspNetCoreTestConfigurationOverride.cs similarity index 92% rename from dotnet/test/DotNetCoreUnitTest/Middleware/AspNetCoreTestConfigurationOverride.cs rename to dotnet/test/DotNetCoreWebUnitTest/Middleware/AspNetCoreTestConfigurationOverride.cs index 226a675f1..2ee10f064 100644 --- a/dotnet/test/DotNetCoreUnitTest/Middleware/AspNetCoreTestConfigurationOverride.cs +++ b/dotnet/test/DotNetCoreWebUnitTest/Middleware/AspNetCoreTestConfigurationOverride.cs @@ -20,8 +20,7 @@ public class AspNetCoreTestConfigurationOverride : MiddlewareTest const string ConfigSettingsProgramModule = "apps"; const string DEVELOPMENT_VALUE = "DEVELOPMENT_VALUE"; const string MY_CUSTOM_PTY = "MY_CUSTOM_PTY"; - const string DOTNET_ENVIRONMENT = "Development"; - public AspNetCoreTestConfigurationOverride():base(DOTNET_ENVIRONMENT) + public AspNetCoreTestConfigurationOverride() { ClassLoader.FindType($"{ConfigSettingsProgramModule}.{ConfigSettingsProgramName}", $"GeneXus.Programs.{ConfigSettingsProgramModule}", ConfigSettingsProgramName, Assembly.GetExecutingAssembly(), true);//Force loading assembly } diff --git a/dotnet/test/DotNetCoreUnitTest/Middleware/CorsTest.cs b/dotnet/test/DotNetCoreWebUnitTest/Middleware/CorsTest.cs similarity index 98% rename from dotnet/test/DotNetCoreUnitTest/Middleware/CorsTest.cs rename to dotnet/test/DotNetCoreWebUnitTest/Middleware/CorsTest.cs index 7196d6bca..e148aa828 100644 --- a/dotnet/test/DotNetCoreUnitTest/Middleware/CorsTest.cs +++ b/dotnet/test/DotNetCoreWebUnitTest/Middleware/CorsTest.cs @@ -17,11 +17,12 @@ public class CorsTest : MiddlewareTest { const string HttpCorsProgramName = "httpcors"; const string HttpCorsProgramModule = "apps"; - string Origin = Preferences.CorsAllowedOrigins(); + string Origin; string[] Headers = { "authorization","cache-control", "deviceid", "devicetype", "genexus-agent", "gxtzoffset" }; public CorsTest() { ClassLoader.FindType($"{HttpCorsProgramModule}.{HttpCorsProgramName}", $"GeneXus.Programs.{HttpCorsProgramModule}", HttpCorsProgramName, Assembly.GetExecutingAssembly(), true);//Force loading assembly + Origin = Preferences.CorsAllowedOrigins(); Assert.NotEmpty(Origin); } [Fact] diff --git a/dotnet/test/DotNetCoreUnitTest/Middleware/MiddlewareTest.cs b/dotnet/test/DotNetCoreWebUnitTest/Middleware/MiddlewareTest.cs similarity index 75% rename from dotnet/test/DotNetCoreUnitTest/Middleware/MiddlewareTest.cs rename to dotnet/test/DotNetCoreWebUnitTest/Middleware/MiddlewareTest.cs index afb80bd8e..d8e026de0 100644 --- a/dotnet/test/DotNetCoreUnitTest/Middleware/MiddlewareTest.cs +++ b/dotnet/test/DotNetCoreWebUnitTest/Middleware/MiddlewareTest.cs @@ -12,16 +12,14 @@ namespace xUnitTesting { public class MiddlewareTest { + const string DOTNET_ENVIRONMENT = "Development"; + protected TestServer server; public MiddlewareTest() { GXRouting.ContentRootPath = Directory.GetCurrentDirectory(); - server = new TestServer(WebHost.CreateDefaultBuilder().UseStartup()); - } - public MiddlewareTest(string environment) - { - GXRouting.ContentRootPath = Directory.GetCurrentDirectory(); - server = new TestServer(WebHost.CreateDefaultBuilder().UseStartup().UseEnvironment(environment)); + server = new TestServer(WebHost.CreateDefaultBuilder().UseStartup().UseEnvironment(DOTNET_ENVIRONMENT)); + server.CreateClient(); } protected string GetHeader(HttpResponseMessage response, string headerName) { diff --git a/dotnet/test/DotNetCoreUnitTest/Middleware/RestServiceTest.cs b/dotnet/test/DotNetCoreWebUnitTest/Middleware/RestServiceTest.cs similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/Middleware/RestServiceTest.cs rename to dotnet/test/DotNetCoreWebUnitTest/Middleware/RestServiceTest.cs diff --git a/dotnet/test/DotNetCoreUnitTest/Middleware/WebPanelTest.cs b/dotnet/test/DotNetCoreWebUnitTest/Middleware/WebPanelTest.cs similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/Middleware/WebPanelTest.cs rename to dotnet/test/DotNetCoreWebUnitTest/Middleware/WebPanelTest.cs diff --git a/dotnet/test/DotNetCoreUnitTest/Middleware/webhook.cs b/dotnet/test/DotNetCoreWebUnitTest/Middleware/webhook.cs similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/Middleware/webhook.cs rename to dotnet/test/DotNetCoreWebUnitTest/Middleware/webhook.cs diff --git a/dotnet/test/DotNetCoreUnitTest/apps/append.cs b/dotnet/test/DotNetCoreWebUnitTest/apps/append.cs similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/apps/append.cs rename to dotnet/test/DotNetCoreWebUnitTest/apps/append.cs diff --git a/dotnet/test/DotNetCoreUnitTest/apps/append.svc b/dotnet/test/DotNetCoreWebUnitTest/apps/append.svc similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/apps/append.svc rename to dotnet/test/DotNetCoreWebUnitTest/apps/append.svc diff --git a/dotnet/test/DotNetCoreUnitTest/apps/configsettings.cs b/dotnet/test/DotNetCoreWebUnitTest/apps/configsettings.cs similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/apps/configsettings.cs rename to dotnet/test/DotNetCoreWebUnitTest/apps/configsettings.cs diff --git a/dotnet/test/DotNetCoreUnitTest/apps/configsettings.svc b/dotnet/test/DotNetCoreWebUnitTest/apps/configsettings.svc similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/apps/configsettings.svc rename to dotnet/test/DotNetCoreWebUnitTest/apps/configsettings.svc diff --git a/dotnet/test/DotNetCoreUnitTest/apps/httpcors.cs b/dotnet/test/DotNetCoreWebUnitTest/apps/httpcors.cs similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/apps/httpcors.cs rename to dotnet/test/DotNetCoreWebUnitTest/apps/httpcors.cs diff --git a/dotnet/test/DotNetCoreUnitTest/apps/httpcors.svc b/dotnet/test/DotNetCoreWebUnitTest/apps/httpcors.svc similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/apps/httpcors.svc rename to dotnet/test/DotNetCoreWebUnitTest/apps/httpcors.svc diff --git a/dotnet/test/DotNetCoreUnitTest/apps/saveimage.cs b/dotnet/test/DotNetCoreWebUnitTest/apps/saveimage.cs similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/apps/saveimage.cs rename to dotnet/test/DotNetCoreWebUnitTest/apps/saveimage.cs diff --git a/dotnet/test/DotNetCoreUnitTest/apps/saveimage.svc b/dotnet/test/DotNetCoreWebUnitTest/apps/saveimage.svc similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/apps/saveimage.svc rename to dotnet/test/DotNetCoreWebUnitTest/apps/saveimage.svc diff --git a/dotnet/test/DotNetCoreUnitTest/apps/type_Sdtrappo00b.cs b/dotnet/test/DotNetCoreWebUnitTest/apps/type_Sdtrappo00b.cs similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/apps/type_Sdtrappo00b.cs rename to dotnet/test/DotNetCoreWebUnitTest/apps/type_Sdtrappo00b.cs diff --git a/dotnet/test/DotNetCoreUnitTest/appsettings.Development.json b/dotnet/test/DotNetCoreWebUnitTest/appsettings.Development.json similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/appsettings.Development.json rename to dotnet/test/DotNetCoreWebUnitTest/appsettings.Development.json diff --git a/dotnet/test/DotNetCoreWebUnitTest/appsettings.json b/dotnet/test/DotNetCoreWebUnitTest/appsettings.json new file mode 100644 index 000000000..31bce50e5 --- /dev/null +++ b/dotnet/test/DotNetCoreWebUnitTest/appsettings.json @@ -0,0 +1,64 @@ +{ + "appSettings": { + "AppMainNamespace": "GeneXus.Programs", + "DataStore1": "Default", + "DataStore-Count": "1", + "DataStore-Default": "Default", + "Connection-Default-DBMS": "sqlserver", + "Connection-Default-Port": "", + "Connection-Default-LockTimeout": "0", + "Connection-Default-LockRetryCount": "10", + "Connection-Default-IsolationLevel": "CR", + "Connection-Default-Datasource": "", + "Connection-Default-User": "", + "Connection-Default-Password": "", + "Connection-Default-DB": "", + "Connection-Default-Schema": "", + "Connection-Default-Opts": "", + "Connection-Default-TrnInt": "1", + "DateFormat": "MDY", + "YearLimit": "1940", + "TimeAmPmFormat": "12", + "VER_STAMP": "20210602.093942", + "CS_BLOB_PATH": "PublicTempStorage", + "TMPMEDIA_DIR": "PrivateTempStorage", + "PRINT_LAYOUT_METADATA_DIR": "LayoutMetadata", + "StorageTimeZone": "1", + "LOGIN_AS_USERID": "0", + "LANGUAGE": "eng", + "LANG_NAME": "English", + "DECIMAL_POINT": ".", + "DATE_FMT": "MDY", + "CTOD_DATE_FMT": "L", + "Culture": "en-US", + "Theme": "Carmine", + "UseNamedParameters": "1", + "EnableIntegratedSecurity": "0", + "MAX_CURSOR": "100", + "STATIC_CONTENT": "", + "GX_BUILD_NUMBER": "11103481", + "CACHE_CONTENT_EXPIRATION": "36", + "ENABLE_MANAGEMENT": "0", + "COMPRESS_HTML": "1", + "IE_COMPATIBILITY_VIEW": "EmulateIE7", + "DocumentType": "HTML5", + "EXPOSE_METADATA": "0", + "SMART_CACHING": "0", + "wcf:serviceHostingEnvironment:useClassicReadEntityBodyMode": "true", + "HTTP_PROTOCOL": "Unsecure", + "SAMESITE_COOKIE": "Lax", + "CACHE_INVALIDATION_TOKEN": "20216211291931", + "CORS_ALLOW_ORIGIN": "https://normal-website.com", + "MY_CUSTOM_PTY": "DEFAULT_VALUE" + }, + "languages": { + "English": { + "code": "eng", + "culture": "en-US", + "date_fmt": "MDY", + "decimal_point": ".", + "thousand_sep": ",", + "time_fmt": "12" + } + } +} \ No newline at end of file diff --git a/dotnet/test/DotNetCoreUnitTest/uruguay.flag.png b/dotnet/test/DotNetCoreWebUnitTest/uruguay.flag.png similarity index 100% rename from dotnet/test/DotNetCoreUnitTest/uruguay.flag.png rename to dotnet/test/DotNetCoreWebUnitTest/uruguay.flag.png