If you're creating a bug/problem report, please include followings:
- ABP Framework version: 5.2.1 / 5.2.0 (commercial)
- UI type: Blazor
- DB provider: EF Core
- Tiered (MVC) or Identity Server Separated (Angular): no
- Exception message and stack trace: test host crashes
- Steps to reproduce the issue:try to run language management unit tests after modifying downloaded source
Hi the problem I am encountering sounds like the same one Jesse (I am working on the same code as Jesse but he is no longer with the project) had in this post: https://support.abp.io/QA/Questions/1985/Volo-Modules-Unit-Tests-are-not-executing
I followed the link in that post to the duplicate, but the source that was posted with a fix/explanation is no longer available.
I downloaded the source for the Language Management module and am able to run the tests in that state, unfortunately, i am unable to get the unit tests to run in our modified version. I can confirm that the crash happens when getting the IDataSeeder service from the container. I have also tried to get each of the dependencies in the data seeder's ctor and the test host will crash when trying to fetch this service: DbContextOptions<LanguageManagementDbContext>>
I tested this by adding the following just before the call to the data seeder in the LanguageManagementTestBase
var dbo = context.ServiceProvider.GetService<DbContextOptions<LanguageManagementDbContext>>(); //crashes test host
I am unable to catch the exception that is being thrown, but assume it has something to do with constructing the above object.
We are using the in memory sqlite provider for the database.
I am using the xunit visual studio test runner (not jet-brains resharper). I can reproduce the same problem running on the command line (dotnet test ...
). I can provide the logs, but they are not very interesting.
Do you have any advice on how to find the problem?
thanks,
andre
Full text of the test base class
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.Threading;
namespace Volo.Abp.LanguageManagement
{
[DependsOn(
typeof(AbpAutofacModule),
typeof(AbpTestBaseModule),
typeof(AbpAuthorizationModule),
typeof(LanguageManagementDomainModule)
)]
public class LanguageManagementTestBaseModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAlwaysAllowAuthorization();
Configure<AbpLocalizationOptions>(options =>
{
options.Languages.Add(new LanguageInfo("en-US", "en", "English", "flag-icon flag-icon-gb"));
options.Languages.Add(new LanguageInfo("tr", "tr", "Türkçe", "flag-icon flag-icon-tr"));
});
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
SeedTestData(context);
}
private static void SeedTestData(ApplicationInitializationContext context)
{
var dbo = context.ServiceProvider.GetService<DbContextOptions<LanguageManagementDbContext>>(); // test host crashes
AsyncHelper.RunSync(async () =>
{
using (var scope = context.ServiceProvider.CreateScope())
{
await scope.ServiceProvider
.GetRequiredService<IDataSeeder>() // this is the original crash
.SeedAsync();
}
});
}
}
}
14 Answer(s)
-
0
Hi,
Can you share a simple project? shiwei.liang@volosoft.com
-
0
Hi,
Can you share a simple project? shiwei.liang@volosoft.com
Not easy to create a simple project since it is based on the Language Management source. Do you have any other ideas?
-
0
Hi,
Ok, can you provide steps to reproduce the problem?
-
0
To reproduce, just need to run any test in the project that calls the code above, the problem happens when the line marked with the comment is run. All the tests call this code, so running any test will cause the problem. I am not sure how you can reproduce since you do not have our code and as I explained in the original, it does not crash in the code we started with (using abp cli). I will see if I am allowed to give you our source. What I was really looking for is suggestion of how to diagnose the problem with instantiating
var dbo = context.ServiceProvider.GetService<DbContextOptions<LanguageManagementDbContext>>(); // test host crashes
I assume it is a configuration we have changed but cannot find it. When I run the line above in the code produced byabp get-source LanguageManagement
it goes into the configure method here:public class LanguageManagementEntityFrameworkCoreTestModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { var sqliteConnection = CreateDatabaseAndGetConnection(); Configure<AbpDbContextOptions>(options => { options.Configure(abpDbContextConfigurationContext => { **// this line gets called in original code abpDbContextConfigurationContext.DbContextOptions.UseSqlite(sqliteConnection);** }); }); } private static SqliteConnection CreateDatabaseAndGetConnection() { var connection = new SqliteConnection("Data Source=:memory:"); connection.Open(); new LanguageManagementDbContext( new DbContextOptionsBuilder<LanguageManagementDbContext>().UseSqlite(connection).Options ).GetService<IRelationalDatabaseCreator>().CreateTables(); new SettingManagementDbContext( new DbContextOptionsBuilder<SettingManagementDbContext>().UseSqlite(connection).Options ).GetService<IRelationalDatabaseCreator>().CreateTables(); return connection; } }
When I run the line above to fetch the options from the container (via any LM test), the test crashes before it runs the Configure method above. Note that our code for the class above is the same as this, we did not change it.
-
0
any logs retrieved from filesystem or console output?
-
0
Here is the command line I ran limited it to 1 test to reduce the log size:
dotnet test '.\modules\Volo.LanguageManagement\test\Volo.Abp.LanguageManagement.Application.Tests\Volo.Abp.LanguageManagement.Application.Tests.csproj' --diag:testcrashx.log --filter "FullyQualifiedName=Volo.Abp.LanguageManagement.LanguageAppService_Tests.GetAsync" --blame-crash
Nothing very interesting, here is the exception:TpTrace Information: 0 : 15220, 8, 2022/04/21, 08:24:25.341, 4876539929101, datacollector.dll, DataCollectionTestCaseEventHandler: Test case 'Volo.Abp.LanguageManagement.LanguageAppService_Tests.GetAsync - c5219fb8-f8c4-fcd9-ca4c-02f7b5f369c6' started. TpTrace Error: 0 : 15220, 8, 2022/04/21, 08:24:26.061, 4876547134238, datacollector.dll, DataCollectionRequestHandler.HandleBeforeTestRunStart : Error occurred during initialization of TestHost : System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.. ---> System.Net.Sockets.SocketException (10054): An existing connection was forcibly closed by the remote host. at System.Net.Sockets.NetworkStream.Read(Span
1 buffer) --- End of inner exception stack trace --- at System.Net.Sockets.NetworkStream.Read(Span1 buffer) at System.Net.Sockets.NetworkStream.ReadByte() at System.IO.BinaryReader.Read7BitEncodedInt() at System.IO.BinaryReader.ReadString() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.SocketCommunicationManager.ReceiveRawMessage() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.SocketCommunicationManager.ReceiveMessage() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.DataCollection.DataCollectionTestCaseEventHandler.ProcessRequests() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.DataCollection.DataCollectionRequestHandler.<HandleBeforeTestRunStart>b__24_0() TpTrace Information: 0 : 15220, 1, 2022/04/21, 08:24:26.078, 4876547305013, datacollector.dll, DataCollectionRequestHandler.ProcessRequests : Datacoll
I can send the complete logs if you have a place to send them. andre
-
0
there must be an exit code. something like this .
The thread 0xaacc has exited with code -42
-
0
That is the exit code: -42. I can post the whole log here, but it will be messy - if you give me a place to send it, I can. here is more context including the exit code:
TpTrace Verbose: 0 : 36120, 7, 2022/04/21, 08:24:25.331, 4876539827956, vstest.console.dll, TcpClientExtensions.MessageLoopAsync: NotifyDataAvailable remoteEndPoint: 127.0.0.1:55474 localEndPoint: 127.0.0.1:55473 TpTrace Verbose: 0 : 36120, 7, 2022/04/21, 08:24:25.331, 4876539829022, vstest.console.dll, TestRequestSender.OnExecutionMessageReceived: Received message: {"Version":5,"MessageType":"TestExecution.StatsChange","Payload":{"NewTestResults":[],"TestRunStatistics":{"ExecutedTests":0,"Stats":{}},"ActiveTests":[{"Id":"c5219fb8-f8c4-fcd9-ca4c-02f7b5f369c6","FullyQualifiedName":"Volo.Abp.LanguageManagement.LanguageAppService_Tests.GetAsync","DisplayName":"Volo.Abp.LanguageManagement.LanguageAppService_Tests.GetAsync","ExecutorUri":"executor://xunit/VsTestRunner2/netcoreapp","Source":"C:\\dev\\CAO\\CAT-OS-Project\\modules\\Volo.LanguageManagement\\test\\Volo.Abp.LanguageManagement.Application.Tests\\bin\\Debug\\net6.0\\Volo.Abp.LanguageManagement.Application.Tests.dll","CodeFilePath":null,"LineNumber":0,"Properties":[]}]}} TpTrace Verbose: 0 : 36120, 7, 2022/04/21, 08:24:25.337, 4876539891163, vstest.console.dll, TestRunRequest:SendTestRunStatsChange: Starting. TpTrace Verbose: 0 : 36120, 7, 2022/04/21, 08:24:25.337, 4876539891813, vstest.console.dll, InProgress is Volo.Abp.LanguageManagement.LanguageAppService_Tests.GetAsync TpTrace Information: 0 : 36120, 7, 2022/04/21, 08:24:25.337, 4876539892230, vstest.console.dll, TestRunRequest:SendTestRunStatsChange: Completed. TpTrace Verbose: 0 : 36120, 7, 2022/04/21, 08:24:25.337, 4876539892436, vstest.console.dll, TcpClientExtensions.MessageLoopAsync: Polling on remoteEndPoint: 127.0.0.1:55474 localEndPoint: 127.0.0.1:55473 TpTrace Verbose: 0 : 36120, 7, 2022/04/21, 08:24:26.053, 4876547052981, vstest.console.dll, TcpClientExtensions.MessageLoopAsync: NotifyDataAvailable remoteEndPoint: 127.0.0.1:55474 localEndPoint: 127.0.0.1:55473 TpTrace Warning: 0 : 36120, 13, 2022/04/21, 08:24:26.054, 4876547062078, vstest.console.dll, TestHostManagerCallbacks.ErrorReceivedCallback Test host standard error line: TpTrace Error: 0 : 36120, 7, 2022/04/21, 08:24:26.056, 4876547079447, vstest.console.dll, Socket: Message loop: failed to receive message due to socket error System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.. ---> System.Net.Sockets.SocketException (10054): An existing connection was forcibly closed by the remote host. at System.Net.Sockets.NetworkStream.Read(Span
1 buffer) --- End of inner exception stack trace --- at System.Net.Sockets.NetworkStream.Read(Span1 buffer) at System.Net.Sockets.NetworkStream.ReadByte() at System.IO.BinaryReader.Read7BitEncodedInt() at System.IO.BinaryReader.ReadString() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.LengthPrefixCommunicationChannel.NotifyDataAvailable() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.TcpClientExtensions.MessageLoopAsync(TcpClient client, ICommunicationChannel channel, Action
1 errorHandler, CancellationToken cancellationToken), remoteEndPoint: 127.0.0.1:55474 localEndPoint: 127.0.0.1:55473 TpTrace Information: 0 : 36120, 7, 2022/04/21, 08:24:26.056, 4876547080622, vstest.console.dll, SocketServer.PrivateStop: Stopping server endPoint: 127.0.0.1:55473 error: System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.. ---> System.Net.Sockets.SocketException (10054): An existing connection was forcibly closed by the remote host. at System.Net.Sockets.NetworkStream.Read(Span1 buffer) --- End of inner exception stack trace --- at System.Net.Sockets.NetworkStream.Read(Span
1 buffer) at System.Net.Sockets.NetworkStream.ReadByte() at System.IO.BinaryReader.Read7BitEncodedInt() at System.IO.BinaryReader.ReadString() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.LengthPrefixCommunicationChannel.NotifyDataAvailable() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.TcpClientExtensions.MessageLoopAsync(TcpClient client, ICommunicationChannel channel, Action1 errorHandler, CancellationToken cancellationToken) TpTrace Verbose: 0 : 36120, 7, 2022/04/21, 08:24:26.056, 4876547084194, vstest.console.dll, LengthPrefixCommunicationChannel.Dispose: Dispose reader and writer. TpTrace Information: 0 : 36120, 7, 2022/04/21, 08:24:26.056, 4876547085122, vstest.console.dll, SocketServer.Stop: Raise disconnected event endPoint: 127.0.0.1:55473 error: System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.. ---> System.Net.Sockets.SocketException (10054): An existing connection was forcibly closed by the remote host. at System.Net.Sockets.NetworkStream.Read(Span
1 buffer) --- End of inner exception stack trace --- at System.Net.Sockets.NetworkStream.Read(Span1 buffer) at System.Net.Sockets.NetworkStream.ReadByte() at System.IO.BinaryReader.Read7BitEncodedInt() at System.IO.BinaryReader.ReadString() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.LengthPrefixCommunicationChannel.NotifyDataAvailable() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.TcpClientExtensions.MessageLoopAsync(TcpClient client, ICommunicationChannel channel, Action
1 errorHandler, CancellationToken cancellationToken) TpTrace Verbose: 0 : 36120, 7, 2022/04/21, 08:24:26.056, 4876547085663, vstest.console.dll, TestRequestSender: OnTestRunAbort: Set operation complete. TpTrace Verbose: 0 : 36120, 7, 2022/04/21, 08:24:26.056, 4876547085832, vstest.console.dll, TestRequestSender.SetOperationComplete: Setting operation complete. TpTrace Information: 0 : 36120, 7, 2022/04/21, 08:24:26.056, 4876547085994, vstest.console.dll, SocketServer.Stop: Stop server endPoint: 127.0.0.1:55473 TpTrace Verbose: 0 : 36120, 7, 2022/04/21, 08:24:26.056, 4876547086445, vstest.console.dll, TestRequestSender: GetAbortErrorMessage: Exception: System.IO.IOException: Unable to read data from the transport connection: An existing connection was forcibly closed by the remote host.. ---> System.Net.Sockets.SocketException (10054): An existing connection was forcibly closed by the remote host. at System.Net.Sockets.NetworkStream.Read(Span1 buffer) --- End of inner exception stack trace --- at System.Net.Sockets.NetworkStream.Read(Span
1 buffer) at System.Net.Sockets.NetworkStream.ReadByte() at System.IO.BinaryReader.Read7BitEncodedInt() at System.IO.BinaryReader.ReadString() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.LengthPrefixCommunicationChannel.NotifyDataAvailable() at Microsoft.VisualStudio.TestPlatform.CommunicationUtilities.TcpClientExtensions.MessageLoopAsync(TcpClient client, ICommunicationChannel channel, Action1 errorHandler, CancellationToken cancellationToken) TpTrace Verbose: 0 : 36120, 7, 2022/04/21, 08:24:26.056, 4876547086674, vstest.console.dll, TestRequestSender: GetAbortErrorMessage: Client has disconnected. Wait for standard error. TpTrace Verbose: 0 : 36120, 8, 2022/04/21, 08:24:26.070, 4876547219227, vstest.console.dll, TestHostProvider.ExitCallBack: Host exited starting callback. TpTrace Error: 0 : 36120, 8, 2022/04/21, 08:24:26.070, 4876547222958, vstest.console.dll, TestHostManagerCallbacks.ExitCallBack: Testhost processId: 31832 exited with exitcode: -42 error: '' TpTrace Verbose: 0 : 36120, 8, 2022/04/21, 08:24:26.070, 4876547223376, vstest.console.dll, DotnetTestHostManager.OnHostExited: invoking OnHostExited callback TpTrace Verbose: 0 : 36120, 8, 2022/04/21, 08:24:26.070, 4876547223635, vstest.console.dll, CrossPlatEngine.TestHostManagerHostExited: calling on client process exit callback. TpTrace Information: 0 : 36120, 8, 2022/04/21, 08:24:26.070, 4876547223875, vstest.console.dll, TestRequestSender.OnClientProcessExit: Test host process exited. Standard error: TpTrace Information: 0 : 36120, 8, 2022/04/21, 08:24:26.070, 4876547224098, vstest.console.dll, SocketServer.Stop: Stop server endPoint: 127.0.0.1:55473 TpTrace Information: 0 : 36120, 7, 2022/04/21, 08:24:26.070, 4876547224462, vstest.console.dll, TestRequestSender: GetAbortErrorMessage: Received test host error message. TpTrace Error: 0 : 36120, 7, 2022/04/21, 08:24:26.070, 4876547226675, vstest.console.dll, TestRequestSender: Aborting test run because Test host process crashed
-
0
did you solve it? I see this ticket is closed
-
0
No, sorry I must have hit the wrong 'add answer button'
-
0
@maliming it looks like a license validation problem. And I guess @andreking is using v5.2.1 was that fixed in v5.2.1?
-
0
We may not have released this patch yet.
https://github.com/volosoft/volo/pull/9916
-
0
@andreking I guess you somehow made the tests dependent on another commercial package. That is the reason you are getting -42 exit code.
Here is the solution:
- Create
appsettings.json
&appsettings.secrets.json
files undertest\Volo.Abp.LanguageManagement.TestBase\Volo\Abp\LanguageManagement
folder.
appsettings.json
content:{ }
appsettings.secrets.json
content:{ "AbpLicenseCode": "Your Abp License Code" }
(You can find your license code in the main solution. Just copy from there.)
- Add the following configuration to
test\Volo.Abp.LanguageManagement.TestBase\Volo.Abp.LanguageManagement.TestBase.csproj
file:
<ItemGroup> <None Remove="Volo/Abp/LanguageManagement/appsettings.json" /> <Content Include="Volo/Abp/LanguageManagement/appsettings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> <ExcludeFromSingleFile>true</ExcludeFromSingleFile> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> </Content> <None Remove="Volo/Abp/LanguageManagement/appsettings.secrets.json" /> <Content Include="Volo/Abp/LanguageManagement/appsettings.secrets.json"> <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup>
- Add the following configuration to
ConfigureServices
method intest\Volo.Abp.LanguageManagement.TestBase\Volo\Abp\LanguageManagement\LanguageManagementTestBaseModule.cs
file:
var builder = new ConfigurationBuilder(); builder.AddJsonFile("Volo/Abp/LanguageManagement/appsettings.json", false); builder.AddJsonFile("Volo/Abp/LanguageManagement/appsettings.secrets.json", true); context.Services.ReplaceConfiguration(builder.Build());
(you may need to add
Microsoft.Extensions.Configuration
namespace) - Create
-
0
Thanks for your help, the tests run now.