Wires in codex-deployment json.
This commit is contained in:
parent
8bceba0182
commit
091eae36cc
|
@ -1,20 +1,17 @@
|
|||
using DistTestCore;
|
||||
using DistTestCore.Codex;
|
||||
using KubernetesWorkflow;
|
||||
using Logging;
|
||||
using Utils;
|
||||
|
||||
namespace ContinuousTests
|
||||
{
|
||||
public class CodexNodeFactory
|
||||
{
|
||||
public CodexNode[] Create(string[] urls, BaseLog log, ITimeSet timeSet)
|
||||
public CodexNode[] Create(RunningContainer[] containers, BaseLog log, ITimeSet timeSet)
|
||||
{
|
||||
return urls.Select(url =>
|
||||
return containers.Select(container =>
|
||||
{
|
||||
var cutIndex = url.LastIndexOf(':');
|
||||
var host = url.Substring(0, cutIndex);
|
||||
var port = url.Substring(cutIndex + 1);
|
||||
var address = new Address(host, Convert.ToInt32(port));
|
||||
var address = container.ClusterInternalAddress;
|
||||
return new CodexNode(log, timeSet, address);
|
||||
}).ToArray();
|
||||
}
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
using Newtonsoft.Json;
|
||||
using DistTestCore.Codex;
|
||||
using Newtonsoft.Json;
|
||||
|
||||
namespace ContinuousTests
|
||||
{
|
||||
public class Configuration
|
||||
{
|
||||
public string LogPath { get; set; } = string.Empty;
|
||||
public string[] CodexUrls { get; set; } = Array.Empty<string>();
|
||||
public CodexDeployment CodexDeployment { get; set; } = null!;
|
||||
public int SleepSecondsPerSingleTest { get; set; }
|
||||
public int SleepSecondsPerAllTests { get; set; }
|
||||
public bool KeepPassedTestLogs { get; set; }
|
||||
|
@ -37,32 +38,30 @@ namespace ContinuousTests
|
|||
}
|
||||
|
||||
var logPath = Environment.GetEnvironmentVariable("LOGPATH");
|
||||
var codexUrls = Environment.GetEnvironmentVariable("CODEXURLS");
|
||||
var codexDeploymentJson = Environment.GetEnvironmentVariable("CODEXDEPLOYMENT");
|
||||
var sleepPerSingle = Environment.GetEnvironmentVariable("SLEEPSECONDSPERSINGLETEST");
|
||||
var sleepPerAll = Environment.GetEnvironmentVariable("SLEEPSECONDSPERALLTESTS");
|
||||
var keep = Environment.GetEnvironmentVariable("KEEPPASSEDTESTLOGS");
|
||||
|
||||
if (!string.IsNullOrEmpty(logPath) &&
|
||||
!string.IsNullOrEmpty(codexUrls) &&
|
||||
!string.IsNullOrEmpty(codexDeploymentJson) &&
|
||||
!string.IsNullOrEmpty(sleepPerSingle) &&
|
||||
!string.IsNullOrEmpty(sleepPerAll))
|
||||
{
|
||||
var urls = codexUrls.Split(';', StringSplitOptions.RemoveEmptyEntries);
|
||||
int secondsSingle;
|
||||
int secondsAll;
|
||||
if (int.TryParse(sleepPerSingle, out secondsSingle) && int.TryParse(sleepPerAll, out secondsAll))
|
||||
{
|
||||
if (urls.Length > 0)
|
||||
try
|
||||
{
|
||||
return new Configuration
|
||||
{
|
||||
LogPath = logPath,
|
||||
CodexUrls = urls,
|
||||
SleepSecondsPerSingleTest = secondsSingle,
|
||||
SleepSecondsPerAllTests = secondsAll,
|
||||
CodexDeployment = ParseCodexDeploymentJson(codexDeploymentJson),
|
||||
SleepSecondsPerSingleTest = Convert.ToInt32(sleepPerSingle),
|
||||
SleepSecondsPerAllTests = Convert.ToInt32(sleepPerAll),
|
||||
KeepPassedTestLogs = keep == "1"
|
||||
};
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Console.WriteLine("Exception: " + ex);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -70,7 +69,7 @@ namespace ContinuousTests
|
|||
throw new Exception($"Unable to load configuration from '{filename}', and " +
|
||||
"unable to load configuration from environment variables. " + nl +
|
||||
"'LOGPATH' = Path where log files will be saved." + nl +
|
||||
"'CODEXURLS' = Semi-colon separated URLs to codex APIs. e.g. 'https://hostaddr_one:port;https://hostaddr_two:port'" + nl +
|
||||
"'CODEXDEPLOYMENT' = Path to codex-deployment JSON file." + nl +
|
||||
"'SLEEPSECONDSPERSINGLETEST' = Seconds to sleep after each individual test." + nl +
|
||||
"'SLEEPSECONDSPERALLTESTS' = Seconds to sleep after all tests, before starting again." + nl +
|
||||
"'KEEPPASSEDTESTLOGS' = (Optional, default: 0) Set to '1' to keep log files of tests that passed." + nl +
|
||||
|
@ -95,10 +94,17 @@ namespace ContinuousTests
|
|||
throw new Exception($"Unvalid logpath set: '{configuration.LogPath}'");
|
||||
}
|
||||
|
||||
if (!configuration.CodexUrls.Any())
|
||||
if (configuration.CodexDeployment != null && configuration.CodexDeployment.CodexContainers.Any())
|
||||
{
|
||||
throw new Exception("No Codex URLs found.");
|
||||
}
|
||||
throw new Exception("No Codex deployment found.");
|
||||
}
|
||||
}
|
||||
|
||||
private CodexDeployment ParseCodexDeploymentJson(string filename)
|
||||
{
|
||||
var d = JsonConvert.DeserializeObject<CodexDeployment>(File.ReadAllText(filename))!;
|
||||
if (d == null) throw new Exception("Unable to parse " + filename);
|
||||
return d;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,15 +12,7 @@ namespace ContinuousTests
|
|||
|
||||
public void Run()
|
||||
{
|
||||
var config = //configLoader.Load();
|
||||
new Configuration
|
||||
{
|
||||
CodexUrls =new[] { "http://localhost:8080", "http://localhost:8081" },
|
||||
LogPath = "logs",
|
||||
KeepPassedTestLogs = false,
|
||||
SleepSecondsPerAllTests = 1,
|
||||
SleepSecondsPerSingleTest = 1,
|
||||
};
|
||||
var config = configLoader.Load();
|
||||
StartupChecks(config);
|
||||
|
||||
while (true)
|
||||
|
@ -73,9 +65,9 @@ namespace ContinuousTests
|
|||
var errors = new List<string>();
|
||||
foreach (var test in tests)
|
||||
{
|
||||
if (test.RequiredNumberOfNodes > config.CodexUrls.Length)
|
||||
if (test.RequiredNumberOfNodes > config.CodexDeployment.CodexContainers.Length)
|
||||
{
|
||||
errors.Add($"Test '{test.Name}' requires {test.RequiredNumberOfNodes} nodes. Configuration only has {config.CodexUrls.Length}");
|
||||
errors.Add($"Test '{test.Name}' requires {test.RequiredNumberOfNodes} nodes. Deployment only has {config.CodexDeployment.CodexContainers.Length}");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -92,7 +84,7 @@ namespace ContinuousTests
|
|||
|
||||
private void CheckCodexNodes(BaseLog log, Configuration config)
|
||||
{
|
||||
var nodes = codexNodeFactory.Create(config.CodexUrls, log, new DefaultTimeSet());
|
||||
var nodes = codexNodeFactory.Create(config.CodexDeployment.CodexContainers, log, new DefaultTimeSet());
|
||||
var pass = true;
|
||||
foreach (var n in nodes)
|
||||
{
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
using DistTestCore;
|
||||
using Logging;
|
||||
using Utils;
|
||||
using KubernetesWorkflow;
|
||||
|
||||
namespace ContinuousTests
|
||||
{
|
||||
|
@ -37,18 +38,18 @@ namespace ContinuousTests
|
|||
|
||||
private CodexNode[] CreateRandomNodes(int number, BaseLog testLog)
|
||||
{
|
||||
var urls = SelectRandomUrls(number);
|
||||
testLog.Log("Selected nodes: " + string.Join(",", urls));
|
||||
return codexNodeFactory.Create(urls, testLog, test.TimeSet);
|
||||
var containers = SelectRandomContainers(number);
|
||||
testLog.Log("Selected nodes: " + string.Join(",", containers.Select(c => c.Name)));
|
||||
return codexNodeFactory.Create(containers, testLog, test.TimeSet);
|
||||
}
|
||||
|
||||
private string[] SelectRandomUrls(int number)
|
||||
private RunningContainer[] SelectRandomContainers(int number)
|
||||
{
|
||||
var urls = config.CodexUrls.ToList();
|
||||
var result = new string[number];
|
||||
var containers = config.CodexDeployment.CodexContainers.ToList();
|
||||
var result = new RunningContainer[number];
|
||||
for (var i = 0; i < number; i++)
|
||||
{
|
||||
result[i] = urls.PickOneRandom();
|
||||
result[i] = containers.PickOneRandom();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue