blob: 28b12f0a4fec81ed65e4488ba5be45e66b1b90e2 [file] [log] [blame]
/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
namespace DotPulsar.StressTests.Fixtures
{
using System;
using System.Diagnostics;
using System.Net.Http;
using System.Threading.Tasks;
using Xunit;
public class StandaloneClusterFixture : IAsyncLifetime
{
public async Task InitializeAsync()
{
TakeDownPulsar(); // clean-up if anything was left running from previous run
RunProcess("docker-compose", "-f docker-compose-standalone-tests.yml up -d");
var waitTries = 10;
using var handler = new HttpClientHandler
{
AllowAutoRedirect = true
};
using var client = new HttpClient(handler);
while (waitTries > 0)
{
try
{
await client.GetAsync("http://localhost:54546/metrics/").ConfigureAwait(false);
return;
}
catch
{
waitTries--;
await Task.Delay(5000).ConfigureAwait(false);
}
}
throw new Exception("Unable to confirm Pulsar has initialized");
}
public Task DisposeAsync()
{
TakeDownPulsar();
return Task.CompletedTask;
}
private static void TakeDownPulsar()
=> RunProcess("docker-compose", "-f docker-compose-standalone-tests.yml down");
private static void RunProcess(string name, string arguments)
{
var processStartInfo = new ProcessStartInfo
{
FileName = name,
Arguments = arguments
};
processStartInfo.Environment["TAG"] = "test";
processStartInfo.Environment["CONFIGURATION"] = "Debug";
processStartInfo.Environment["COMPUTERNAME"] = Environment.MachineName;
var process = Process.Start(processStartInfo);
if (process is null)
throw new Exception("Process.Start returned null");
process.WaitForExit();
if (process.ExitCode != 0)
throw new Exception($"Exit code {process.ExitCode} when running process {name} with arguments {arguments}");
}
}
}