TestContainer для MailDev Docker API ответила с помощью CODE = Conflict, response = {"Сообщение": "Контейнер xxxx не рабC#

Место общения программистов C#
Ответить
Anonymous
 TestContainer для MailDev Docker API ответила с помощью CODE = Conflict, response = {"Сообщение": "Контейнер xxxx не раб

Сообщение Anonymous »

Я уже рассмотрел этот вопрос из других вопросов на этом сайте: < /p>

Docker API отвечает конфликтом кода состояния, контейнер xxxxxx не работает - Связано с mssqlbuilder < /li>
testcontainer Чтобы Docker выпустил < /li>
Участие в запуске тестирования Playwright .net внутри контейнера Docker - аналогично моим, но не так же, как я использую REQNROLL < /li>
Тесты XUNIT, используя TestContainers, провальные в Github - попробовал это, не работал для меня < /li>
< /ul> Получение: < /p>

Код: Выделить всё

Failed ForgotPasswordSendsCorrectEmailCheckViaMaildevAPI [22 s]
Error Message:
OneTimeSetUp: Docker.DotNet.DockerApiException :  Docker API responded with status code=Conflict, response={"message":"container xxxx is not running"}

Stack Trace:
at Docker.DotNet.DockerClient.HandleIfErrorResponseAsync(HttpStatusCode statusCode, HttpResponseMessage response, IEnumerable`1 handlers) in /_/src/Docker.DotNet/DockerClient.cs:line 494
at Docker.DotNet.DockerClient.MakeRequestAsync[T](IEnumerable`1 errorHandlers, HttpMethod method, String path, IQueryString queryString, IRequestContent body, IDictionary`2 headers, TimeSpan timeout, CancellationToken token) in /_/src/Docker.DotNet/DockerClient.cs:line 246
at Docker.DotNet.ExecOperations.CreateContainerExecAsync(String id, ContainerExecCreateParameters parameters, CancellationToken cancellationToken) in /_/src/Docker.DotNet/Endpoints/ExecOperations.cs:line 45
at DotNet.Testcontainers.Clients.DockerContainerOperations.ExecAsync(String id, IList`1 command, CancellationToken ct) in /_/src/Testcontainers/Clients/DockerContainerOperations.cs:line 162
at DotNet.Testcontainers.Configurations.UntilUnixCommandIsCompleted.UntilAsync(IContainer container) in /_/src/Testcontainers/Configurations/WaitStrategies/UntilUnixCommandIsCompleted.cs:line 22
at DotNet.Testcontainers.Containers.DockerContainer.CheckReadinessAsync(WaitStrategy waitStrategy, CancellationToken ct) in /_/src/Testcontainers/Containers/DockerContainer.cs:line 646
at DotNet.Testcontainers.Configurations.WaitStrategy.c__DisplayClass24_0.d.MoveNext() in /_/src/Testcontainers/Configurations/WaitStrategies/WaitStrategy.cs:line 184
--- End of stack trace from previous location ---
at DotNet.Testcontainers.Configurations.WaitStrategy.WaitUntilAsync(Func`1 wait, TimeSpan interval, TimeSpan timeout, Int32 retries, CancellationToken ct) in /_/src/Testcontainers/Configurations/WaitStrategies/WaitStrategy.cs:line 213
at DotNet.Testcontainers.Containers.DockerContainer.CheckReadinessAsync(IEnumerable`1 waitStrategies, CancellationToken ct) in /_/src/Testcontainers/Containers/DockerContainer.cs:line 664
at DotNet.Testcontainers.Containers.DockerContainer.UnsafeStartAsync(CancellationToken ct) in /_/src/Testcontainers/Containers/DockerContainer.cs:line 526
at DotNet.Testcontainers.Containers.DockerContainer.StartAsync(CancellationToken ct) in /_/src/Testcontainers/Containers/DockerContainer.cs:line 309
at UI.Tests.Hooks.TestRunHooks.BeforeTestRun(IObjectContainer objectContainer) in /home/runner/actions-runner/_work/Tests/UI.Tests/Hooks/TestRunHooks.cs:line 100
at Reqnroll.Bindings.AsyncMethodHelper.ConvertTaskOfT(Task task, Boolean getValue)
at Reqnroll.Bindings.BindingDelegateInvoker.InvokeDelegateAsync(Delegate bindingDelegate, Object[] invokeArgs, ExecutionContextHolder executionContext)
at Reqnroll.Bindings.BindingInvoker.InvokeBindingAsync(IBinding binding, IContextManager contextManager, Object[] arguments, ITestTracer testTracer, DurationHolder durationHolder)
at Reqnroll.Infrastructure.TestExecutionEngine.InvokeHookAsync(IAsyncBindingInvoker invoker, IHookBinding hookBinding, HookType hookType)
at Reqnroll.Infrastructure.TestExecutionEngine.FireEventsAsync(HookType hookType)
at Reqnroll.Infrastructure.TestExecutionEngine.FireEventsAsync(HookType hookType)
at Reqnroll.Infrastructure.TestExecutionEngine.OnTestRunStartAsync()
at Reqnroll.TestRunner.OnTestRunStartAsync()
at Reqnroll.TestRunnerManager.FireTestRunStartAsync()
at Reqnroll.TestRunnerManager.OnTestRunStartAsync(Assembly testAssembly, IContainerBuilder containerBuilder)
at UI_Tests_NUnitAssemblyHooks.AssemblyInitializeAsync() in /home/runner/actions-runner/_work/Tests/UI.Tests/obj/Release/net9.0/NUnit.AssemblyHooks.cs:line 18
at NUnit.Framework.Internal.TaskAwaitAdapter.GenericAdapter`1.BlockUntilCompleted()
at NUnit.Framework.Internal.MessagePumpStrategy.NoMessagePumpStrategy.WaitForCompletion(AwaitAdapter awaiter)
at NUnit.Framework.Internal.AsyncToSyncAdapter.Await[TResult](TestExecutionContext context, Func`1 invoke)
at NUnit.Framework.Internal.AsyncToSyncAdapter.Await(TestExecutionContext context, Func`1 invoke)
at NUnit.Framework.Internal.Commands.SetUpTearDownItem.RunSetUpOrTearDownMethod(TestExecutionContext context, IMethodInfo method)
at NUnit.Framework.Internal.Commands.SetUpTearDownItem.RunSetUp(TestExecutionContext context)
at NUnit.Framework.Internal.Commands.OneTimeSetUpCommand.c__DisplayClass0_0.b__0(TestExecutionContext context)
at NUnit.Framework.Internal.Commands.BeforeTestCommand.Execute(TestExecutionContext context)
at NUnit.Framework.Internal.Execution.CompositeWorkItem.PerformOneTimeSetUp()
< /code>
Вот моя реализация:  < /p>
namespace UI.Tests.Hooks
{
[Binding]
public class TestRunHooks
{
private static IContainer _mailDevContainer;

[BeforeTestRun]
public static async Task BeforeTestRun(IObjectContainer objectContainer)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(AppDomain.CurrentDomain.BaseDirectory)
.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables() // Load environment variables
.AddUserSecrets()
.Build();
objectContainer?.RegisterInstanceAs(configuration);

var baseLoggingDirectory = environmentConfiguration!.AreTestsExecutedOnRemoteServer!
? LoggingConfiguration.GetFileShareMainDirectory()
: LoggingConfiguration.GetSharedDriveMainDirectory();

var logger = new Logger(baseLoggingDirectory);
objectContainer?.RegisterInstanceAs(logger);

var smtpMailDevConfiguration = configuration.GetSection("SmtpMailDev").Get();
objectContainer?.RegisterInstanceAs(smtpMailDevConfiguration);

var playwrightConfiguration = configuration.GetSection("PlaywrightConfiguration").Get();
playwrightConfiguration.BrowserType = GetEnvironmentVariableOrDefault("PLAYWRIGHT_BROWSER_TYPE", playwrightConfiguration.BrowserType!);

objectContainer?.RegisterInstanceAs(playwrightConfiguration);

var httpClient = new HttpClient(GetTrustingHandler())
{
BaseAddress = new Uri(environmentConfiguration!.BaseUrl!)
};
objectContainer?.RegisterInstanceAs(httpClient, dispose: true);

var loggingConfiguration = configuration.GetSection("LoggingConfiguration").Get();
objectContainer?.RegisterInstanceAs(loggingConfiguration ?? new LoggingConfiguration());

var authorisationService = new AuthorisationService(httpClient, configuration, logger);
objectContainer?.RegisterInstanceAs(authorisationService);

objectContainer?.RegisterInstanceAs(new ApiResourceService(httpClient));

objectContainer?.RegisterInstanceAs(new UserService(httpClient, authorisationService));

objectContainer?.RegisterInstanceAs(new TwoFactorService(objectContainer.Resolve(),configuration));

var mailDevContainerBuilder = new ContainerBuilder()
.WithImage("maildev/maildev:latest")
.WithPortBinding(1080, 1080)
.WithPortBinding(1025, 1025)
.WithWaitStrategy(Wait.ForUnixContainer().UntilPortIsAvailable(1080));

if (smtpMailDevConfiguration.ReuseMailDevTestContainer)
{
mailDevContainerBuilder = mailDevContainerBuilder
.WithReuse(true)
.WithLabel("reuse-id", "maildev_test")
.WithCleanUp(false);
}

_mailDevContainer = mailDevContainerBuilder.Build();
await _mailDevContainer.StartAsync();

objectContainer?.RegisterInstanceAs(_mailDevContainer);
}

[AfterTestRun]
public static async Task AfterTestRun(ObjectContainer objectContainer)
{
var smtpMailDevConfiguration = objectContainer.Resolve();
if (!smtpMailDevConfiguration.ReuseMailDevTestContainer)
{
await _mailDevContainer.StopAsync();
await _mailDevContainer.DisposeAsync();
}
}

private static string GetEnvironmentVariableOrDefault(string variableName, string defaultValue)
{
var value = Environment.GetEnvironmentVariable(variableName);
return !string.IsNullOrEmpty(value) ? value : defaultValue;
}

private static bool GetEnvironmentVariableOrDefault(string variableName, bool defaultValue)
{
var value = Environment.GetEnvironmentVariable(variableName);
return bool.TryParse(value, out var result) ? result :  defaultValue;
}

private static HttpClientHandler GetTrustingHandler()
{
var trustingHandler = new HttpClientHandler();
var proxyServer = Environment.GetEnvironmentVariable("http_proxy");

if (!string.IsNullOrEmpty(proxyServer))
{
var bypassList = Environment.GetEnvironmentVariable("no_proxy")?.Replace("*", ".*").Split(',');
var webProxy = new WebProxy(new Uri(proxyServer), true, bypassList);
trustingHandler.Proxy = webProxy;
trustingHandler.UseProxy = false;
}

trustingHandler.ServerCertificateCustomValidationCallback = CertValidationCallback!;
return trustingHandler;
}

private static bool CertValidationCallback(HttpRequestMessage requestMessage, X509Certificate2 cert, X509Chain chain, SslPolicyErrors policyErrors)
{
return policyErrors == SslPolicyErrors.None
|| (policyErrors == SslPolicyErrors.RemoteCertificateNameMismatch
&& !string.IsNullOrEmpty(cert!.Subject!)
&& (cert!.Subject!.Contains("xxxx.com") || cert!.Subject!.Contains("xxxx.com")));
}
}
}
< /code>
Ошибка, кажется, ссылается на строку кода, связанную с тем, когда я пытаюсь запустить TestContainer (await _mailDevContainer.StartAsync();
) и для целей данного теста он должен быть подвергнут эксплуатации порта 1025/1080, так как это конкретный сервер электронной почты SMTP, который конкретно слушает эти порты, поскольку эти порты белые списки через брандмауэр моей компании (так что я не могу просто не так известно и указать номер порта).>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ict-respon
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»