在依赖注入中多次调用令牌创建导致 Github Runner 在并行测试期间超时

问题描述 投票:0回答:1

我正在使用 tokenProviderFunction 在依赖注入中注入 Microsoft.PowerPlatform.Dataverse.Client

sc.AddSingleton<IOrganizationServiceAsync2, ServiceClient>(provider =>
{
    var config ...
    var factory ...
    var client = new ServiceClient(
        new Uri(config....),
        factory.GetTokenAsync, true, provider.GetService<ILogger<ServiceClient>>())
    {
        MaxRetryCount = 5
    };
    return client;
});

令牌工厂使用多个 ConfidentialClientApplications,每个“用户”一个,因此 ServiceClient 有一个连接池

return (await _generator
                .AcquireTokenForClient(new[] { $"{resource}/.default" })
                .ExecuteAsync(cancellationToken)).AccessToken;

这适用于我的本地虚拟机、本地测试以及部署在开发环境中。问题是当集成测试 (xunit) 在 Github Runner 上运行时。测试并行运行,当创建多个固定装置或测试类时,测试将挂在 _generator.AcquireTokenForClient(...).ExecuteAsync 步骤。

  • 按顺序运行时,测试可以在 GitHub 运行器上运行
  • 使用类固定装置或在测试类构造函数中旋转 di 服务时会出现此问题
  • 我使用了大量的日志记录,但生成器执行后没有任何反应
  • 当我添加 .ConfigureAwait(false) 时,它会进入下一步,但仍然挂起(即它到达下一行代码以记录“完成”,但然后什么也没有)
  • 我创建了一个新的测试项目并复制了上面的内容,它在单个测试类中工作正常,在多个测试类时失败,但如果令牌工作在每个测试用例中,而不是测试类或类的构造函数中,它就可以工作夹具
  • 我在ubuntu-latest和windows-latest上尝试了github操作但是效果是一样的
  • 在 github 操作工作流程文件上设置超时
dependency-injection github-actions xunit azure-ad-msal dataverse
1个回答
0
投票

对于那些遇到类似问题的人,为了使其正常工作,github 工作流作业运行程序设置为 ubuntu-latest-8-cores

我们尝试使用 4 核,但发现它间歇性超时。我们可能会拆分集成测试,以便我们可以在并行作业中使用 4 核运行器

© www.soinside.com 2019 - 2024. All rights reserved.