Tests: Get the port for running sample apps dynamically (#131)

This commit is contained in:
Kiran Challa 2019-05-15 06:02:41 -07:00 коммит произвёл GitHub
Родитель 6e307f193f
Коммит fd6baeff09
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
26 изменённых файлов: 1240 добавлений и 1511 удалений

Просмотреть файл

@ -25,10 +25,11 @@ namespace Microsoft.Oryx.BuildImage.Tests
public void BuildScriptGenIsIncludedInBuildImage()
{
// Arrange & Act
var result = _dockerCli.Run(
imageId: Settings.BuildImageName,
commandToExecuteOnRun: "oryx",
commandArguments: null);
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "oryx",
});
// Assert
RunAsserts(() =>

Просмотреть файл

@ -4,6 +4,7 @@
// --------------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Oryx.BuildScriptGenerator.DotNetCore;
@ -39,17 +40,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -74,17 +72,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -110,17 +105,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -145,17 +137,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -181,17 +170,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -217,17 +203,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -254,17 +237,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -316,17 +296,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -383,17 +360,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -448,17 +422,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -489,17 +460,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -552,17 +520,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -613,17 +578,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -649,17 +611,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
buildScript
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", buildScript }
});
// Assert
RunAsserts(
@ -689,17 +648,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
SampleAppsTestBase.CreateAppNameEnvVar(appName),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(

Просмотреть файл

@ -4,6 +4,7 @@
// --------------------------------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.InteropServices;
using Microsoft.Oryx.Common;
@ -17,10 +18,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
{
private static readonly string SampleAppName = "webfrontend";
private DockerVolume CreateWebFrontEndVolume() => DockerVolume.Create(Path.Combine(_hostSamplesDir, "nodejs", SampleAppName));
private DockerVolume CreateWebFrontEndVolume() => DockerVolume.Create(
Path.Combine(_hostSamplesDir, "nodejs", SampleAppName));
public NodeJSSampleAppsTest(ITestOutputHelper output) :
base(output, new DockerCli(new EnvironmentVariable[] { new EnvironmentVariable(LoggingConstants.AppServiceAppNameEnvironmentVariableName, SampleAppName) }))
base(output, new DockerCli(new EnvironmentVariable[]
{
new EnvironmentVariable(LoggingConstants.AppServiceAppNameEnvironmentVariableName, SampleAppName)
}))
{
}
@ -37,16 +42,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -77,16 +79,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -110,16 +109,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -147,17 +143,17 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "xyz"),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable>
{
"-c",
script
});
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "xyz")
},
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -179,7 +175,8 @@ namespace Microsoft.Oryx.BuildImage.Tests
var spcifyNodeVersionCommand = "-l nodejs --language-version=" + version;
var nestedOutputDir = "/tmp/output";
var script = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -o {nestedOutputDir} {spcifyNodeVersionCommand} --log-file {appDir}/1.log")
.AddCommand(
$"oryx build {appDir} -o {nestedOutputDir} {spcifyNodeVersionCommand} --log-file {appDir}/1.log")
.AddDirectoryExistsCheck($"{nestedOutputDir}/node_modules")
.AddFileExistsCheck($"{nestedOutputDir}/oryx-appinsightsloader.js")
.AddFileExistsCheck($"{nestedOutputDir}/oryx-manifest.toml")
@ -187,17 +184,17 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "xyz"),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable>
{
"-c",
script
});
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "xyz")
},
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -211,7 +208,8 @@ namespace Microsoft.Oryx.BuildImage.Tests
[Theory]
[MemberData(nameof(TestValueGenerator.GetNodeVersions_DoesNotSupportDebugging),
MemberType = typeof(TestValueGenerator))]
public void BuildNodeApp_DoesNotConfigureAppInsights_WithWrongNodeVersion_AIEnvironmentVariableSet(string version)
public void BuildNodeApp_DoesNotConfigureAppInsights_WithWrongNodeVersion_AIEnvironmentVariableSet(
string version)
{
// Arrange
var volume = CreateWebFrontEndVolume();
@ -219,24 +217,25 @@ namespace Microsoft.Oryx.BuildImage.Tests
var nestedOutputDir = "/tmp/output";
var spcifyNodeVersionCommand = "-l nodejs --language-version=" + version;
var script = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -o {nestedOutputDir} {spcifyNodeVersionCommand} --log-file {appDir}/1.log")
.AddCommand(
$"oryx build {appDir} -o {nestedOutputDir} {spcifyNodeVersionCommand} --log-file {appDir}/1.log")
.AddDirectoryExistsCheck($"{nestedOutputDir}/node_modules")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-appinsightsloader.js")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-manifest.toml")
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "xyz"),
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable>
{
"-c",
script
});
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "xyz")
},
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -250,7 +249,8 @@ namespace Microsoft.Oryx.BuildImage.Tests
[Theory]
[MemberData(nameof(TestValueGenerator.GetNodeVersions_SupportDebugging),
MemberType = typeof(TestValueGenerator))]
public void BuildNodeApp_DoesNotConfigureAppInsights_WithCorrectNodeVersion_AIEnvironmentVariableNotSet(string version)
public void BuildNodeApp_DoesNotConfigureAppInsights_WithCorrectNodeVersion_AIEnvironmentVariableNotSet(
string version)
{
// Arrange
var volume = CreateWebFrontEndVolume();
@ -258,23 +258,21 @@ namespace Microsoft.Oryx.BuildImage.Tests
var nestedOutputDir = "/tmp/output";
var spcifyNodeVersionCommand = "-l nodejs --language-version=" + version;
var script = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -o {nestedOutputDir} {spcifyNodeVersionCommand} --log-file {appDir}/1.log")
.AddCommand(
$"oryx build {appDir} -o {nestedOutputDir} {spcifyNodeVersionCommand} --log-file {appDir}/1.log")
.AddDirectoryExistsCheck($"{nestedOutputDir}/node_modules")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-appinsightsloader.js")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-manifest.toml")
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -305,16 +303,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -325,10 +320,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
result.GetDebugInfo());
}
private ShellScriptBuilder SetupEnvironment_ErrorDetectingNodeTest(string appDir, string appOutputDir, string logFile)
private ShellScriptBuilder SetupEnvironment_ErrorDetectingNodeTest(
string appDir,
string appOutputDir,
string logFile)
{
var nodeCode =
@"var http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200); res.end('Hi oryx');}); server.listen(8080);";
@"var http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200); " +
"res.end('Hi oryx');}); server.listen(8080);";
//following is the directory structure of the source repo in the test
//tmp
@ -368,15 +367,12 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -403,15 +399,12 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -438,17 +431,12 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
"\"" +
script +
"\""
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", "\"" + script + "\"" }
});
// Assert
RunAsserts(
@ -472,16 +460,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -510,16 +495,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -548,16 +530,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -582,16 +561,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -614,16 +590,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -647,16 +620,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
buildScript
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", buildScript }
});
// Assert
RunAsserts(
@ -708,16 +678,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -750,16 +717,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(
@ -785,20 +749,19 @@ namespace Microsoft.Oryx.BuildImage.Tests
.AddBuildCommand($"{appDir} -i /tmp/int -o {appOutputDir} -p compress_node_modules=zip")
.AddFileExistsCheck($"{appOutputDir}/node_modules.zip")
.AddDirectoryDoesNotExistCheck($"{appOutputDir}/node_modules")
.AddStringExistsInFileCheck("compressedNodeModulesFile=\"node_modules.zip\"", $"{appOutputDir}/oryx-manifest.toml")
.AddStringExistsInFileCheck(
"compressedNodeModulesFile=\"node_modules.zip\"",
$"{appOutputDir}/oryx-manifest.toml")
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
buildScript
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", buildScript }
});
// Assert
RunAsserts(
@ -823,16 +786,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
volume,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(

Просмотреть файл

@ -3,10 +3,10 @@
// Licensed under the MIT license.
// --------------------------------------------------------------------------------------------
using System.Collections.Generic;
using System.IO;
using Microsoft.Oryx.Common;
using Microsoft.Oryx.Tests.Common;
using System;
using System.IO;
using Xunit;
using Xunit.Abstractions;
@ -34,7 +34,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(Settings.BuildImageName, CreateAppNameEnvVar(appName), volume, "/bin/bash", new[] { "-c", script });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(() =>
@ -59,7 +66,14 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(Settings.BuildImageName, CreateAppNameEnvVar(appName), volume, "/bin/bash", new[] { "-c", script });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable> { CreateAppNameEnvVar(appName) },
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(() =>

Разница между файлами не показана из-за своего большого размера Загрузить разницу

Просмотреть файл

@ -3,10 +3,10 @@
// Licensed under the MIT license.
// --------------------------------------------------------------------------------------------
using Microsoft.Oryx.Common;
using Microsoft.Oryx.Tests.Common;
using System;
using System.IO;
using Microsoft.Oryx.Common;
using Microsoft.Oryx.Tests.Common;
using Xunit.Abstractions;
namespace Microsoft.Oryx.BuildImage.Tests

Просмотреть файл

@ -35,14 +35,18 @@ namespace Microsoft.Oryx.BuildImage.Tests
var expectedOryxVersion = string.Concat(Settings.OryxVersion, buildNumber);
// we cant always rely on gitcommitid as env variable in case build context is not correctly passed
// so we should check agent_os environment variable to know if the build is happening in azure devops agent
// so we should check agent_os environment variable to know if the test is happening in azure devops agent
// or locally, locally we need to skip this test
Skip.If(string.IsNullOrEmpty(agentOS));
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "oryx",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "oryx",
CommandArguments = new[] { "--version" }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
RunAsserts(
@ -63,10 +67,12 @@ namespace Microsoft.Oryx.BuildImage.Tests
var expectedOutput = DotNetCoreVersions.DotNetCore21Version;
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "dotnet",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "dotnet",
CommandArguments = new[] { "--version" }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
@ -90,26 +96,21 @@ namespace Microsoft.Oryx.BuildImage.Tests
[InlineData("2.2", DotNetCoreVersions.DotNetCore22Version)]
[InlineData(DotNetCoreVersions.DotNetCore22Version, DotNetCoreVersions.DotNetCore22Version)]
[InlineData("3.0", DotNetCoreVersions.DotNetCore30VersionPreviewName)]
public void DotnetAlias_UsesVersion_SpecifiedAtDockerRun(
string versionSentToDockerRun,
string expectedOutput)
public void DotnetAlias_UsesVersion_SetOnBenv(string specifiedVersion, string expectedOutput)
{
// Arrange
var script = new ShellScriptBuilder()
.AddCommand($"source /usr/local/bin/benv dotnet={versionSentToDockerRun}")
.AddCommand($"source benv dotnet={specifiedVersion}")
.AddCommand("dotnet --version")
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
@ -128,11 +129,13 @@ namespace Microsoft.Oryx.BuildImage.Tests
// Arrange
var expectedOutput = "v10.15.2";
// Arrange & Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "node",
commandArguments: new[] { "--version" });
// Act
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "node",
CommandArguments = new[] { "--version" }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
@ -152,10 +155,12 @@ namespace Microsoft.Oryx.BuildImage.Tests
var expectedOutput = Python27VersionInfo;
// Arrange & Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "python",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "python",
CommandArguments = new[] { "--version" }
});
// Assert
var actualOutput = result.StdErr.ReplaceNewLine();
@ -175,10 +180,12 @@ namespace Microsoft.Oryx.BuildImage.Tests
var expectedOutput = $"Python {Common.PythonVersions.Python37Version}";
// Arrange & Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "python3",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "python3",
CommandArguments = new[] { "--version" }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
@ -216,26 +223,21 @@ namespace Microsoft.Oryx.BuildImage.Tests
[InlineData("10.10.0", "v10.10.0")]
[InlineData("10.14.1", "v10.14.1")]
[InlineData("10.15", "v10.15.2")]
public void NodeAlias_UsesVersion_SpecifiedAtDockerRun(
string versionSentToDockerRun,
string expectedOutput)
public void NodeAlias_UsesVersion_SetOnBenv(string specifiedVersion, string expectedOutput)
{
// Arrange
var script = new ShellScriptBuilder()
.AddCommand($"source /usr/local/bin/benv node={versionSentToDockerRun}")
.AddCommand($"source benv node={specifiedVersion}")
.AddCommand("node --version")
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
@ -260,20 +262,17 @@ namespace Microsoft.Oryx.BuildImage.Tests
{
// Arrange
var script = new ShellScriptBuilder()
.AddCommand($"source /usr/local/bin/benv node={nodeVersion}")
.AddCommand($"source benv node={nodeVersion}")
.AddCommand("npm --version")
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
@ -309,15 +308,12 @@ namespace Microsoft.Oryx.BuildImage.Tests
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
@ -334,26 +330,21 @@ namespace Microsoft.Oryx.BuildImage.Tests
[InlineData("2", Python27VersionInfo)]
[InlineData("2.7", Python27VersionInfo)]
[InlineData(Settings.Python27Version, Python27VersionInfo)]
public void PythonAlias_UsesVersion_SpecifiedAtDockerRun(
string versionSentToDockerRun,
string expectedOutput)
public void PythonAlias_UsesVersion_SetOnBenv(string specifiedVersion, string expectedOutput)
{
// Arrange
var script = new ShellScriptBuilder()
.AddCommand($"source /usr/local/bin/benv python={versionSentToDockerRun}")
.AddCommand($"source benv python={specifiedVersion}")
.AddCommand("python --version")
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
// NOTE: Python2 version writes out information to StdErr unlike Python3 versions
@ -371,26 +362,21 @@ namespace Microsoft.Oryx.BuildImage.Tests
[InlineData("2", Python27VersionInfo)]
[InlineData("2.7", Python27VersionInfo)]
[InlineData(Settings.Python27Version, Python27VersionInfo)]
public void Python2Alias_UsesVersion_SpecifiedAtDockerRun(
string versionSentToDockerRun,
string expectedOutput)
public void Python2Alias_UsesVersion_SetOnBenv(string specifiedVersion, string expectedOutput)
{
// Arrange
var script = new ShellScriptBuilder()
.AddCommand($"source /usr/local/bin/benv python={versionSentToDockerRun}")
.AddCommand($"source benv python={specifiedVersion}")
.AddCommand("python2 --version")
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
var actualOutput = result.StdErr.ReplaceNewLine();
@ -410,26 +396,21 @@ namespace Microsoft.Oryx.BuildImage.Tests
[InlineData(Settings.Python36Version, Python36VersionInfo)]
[InlineData("3.7", Python37VersionInfo)]
[InlineData(Common.PythonVersions.Python37Version, Python37VersionInfo)]
public void Python3_UsesVersion_SpecifiedAtDockerRun(
string versionSentToDockerRun,
string expectedOutput)
public void Python3_UsesVersion_SetOnBenv(string specifiedVersion, string expectedOutput)
{
// Arrange
var script = new ShellScriptBuilder()
.AddCommand($"source /usr/local/bin/benv python={versionSentToDockerRun}")
.AddCommand($"source benv python={specifiedVersion}")
.AddCommand("python --version")
.ToString();
// Act
var result = _dockerCli.Run(
Settings.BuildImageName,
commandToExecuteOnRun: "/bin/bash",
commandArguments:
new[]
{
"-c",
script
});
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();

Просмотреть файл

@ -16,10 +16,5 @@ namespace Microsoft.Oryx.Integration.Tests
public const string DatabaseName = "oryxdb";
public const string DatabaseUserName = "oryxuser";
public static readonly string DatabaseUserPwd = System.Guid.NewGuid().ToString();
internal const int NodeEndToEndTestsPort = 8010;
internal const int PythonEndToEndTestsPort = 7010;
internal const int DotNetCoreEndToEndTestsPort = 9010;
internal const int PhpEndToEndTestsPort = 10010;
}
}

Просмотреть файл

@ -18,26 +18,26 @@ namespace Microsoft.Oryx.Integration.Tests
{
protected readonly ITestOutputHelper _output;
protected readonly Fixtures.DbContainerFixtureBase _dbFixture;
private static readonly Random _rand = new Random();
protected readonly int _hostPort;
protected readonly HttpClient _httpClient = new HttpClient();
protected DatabaseTestsBase(ITestOutputHelper outputHelper, Fixtures.DbContainerFixtureBase dbFixture)
{
_output = outputHelper;
_dbFixture = dbFixture;
_hostPort = 8080 + _rand.Next(100);
HostSamplesDir = Path.Combine(Directory.GetCurrentDirectory(), "SampleApps");
}
protected string HostSamplesDir { get; }
protected async Task RunTestAsync(string language, string languageVersion, string samplePath,
int containerPort = 8000, bool specifyBindPortFlag = true)
protected async Task RunTestAsync(
string language,
string languageVersion,
string samplePath,
int containerPort = 8000,
bool specifyBindPortFlag = true)
{
var volume = DockerVolume.Create(samplePath);
var appDir = volume.ContainerDir;
var portMapping = $"{_hostPort}:{containerPort}";
var entrypointScript = "./run.sh";
var bindPortFlag = specifyBindPortFlag ? $"-bindPort {containerPort}" : string.Empty;
var script = new ShellScriptBuilder()
@ -60,11 +60,12 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx", new[] { "build", appDir, "-l", language, "--language-version", languageVersion },
runtimeImageName,
_dbFixture.GetCredentialsAsEnvVars(),
portMapping, link,
containerPort,
link,
"/bin/sh", new[] { "-c", script },
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{_hostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Equal(
_dbFixture.GetSampleDataAsJson(),
data.Trim(),

Просмотреть файл

@ -16,7 +16,6 @@ namespace Microsoft.Oryx.Integration.Tests
[Trait("category", "dotnetcore")]
public class DotNetCoreEndToEndTests : PlatformEndToEndTestsBase
{
private const int HostPort = Constants.DotNetCoreEndToEndTestsPort;
private const int ContainerPort = 3000;
private const string NetCoreApp11WebApp = "NetCoreApp11WebApp";
private const string NetCoreApp21WebApp = "NetCoreApp21.WebApp";
@ -44,7 +43,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp11WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -l dotnet --language-version {dotnetcoreVersion} -o {appOutputDir}")
@ -66,16 +64,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -89,7 +87,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -l dotnet --language-version {dotnetcoreVersion} -o {appOutputDir}")
@ -111,16 +108,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -133,7 +130,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp21WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/{DotnetCoreConstants.OryxOutputPublishDirectory}";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -l dotnet --language-version {dotnetcoreVersion}")
@ -155,16 +151,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -177,7 +173,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp21WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -o {appOutputDir} -l dotnet --language-version {dotnetcoreVersion}")
@ -203,16 +198,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -225,7 +220,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", "NetCoreApp21WithExplicitAssemblyName");
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -o {appOutputDir} -l dotnet --language-version {dotnetcoreVersion}")
@ -251,16 +245,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
@ -274,7 +268,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp21WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -l dotnet --language-version {dotnetcoreVersion} -o {appOutputDir}")
@ -297,16 +290,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -320,7 +313,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -l dotnet --language-version {dotnetcoreVersion} -o {appOutputDir}")
@ -342,16 +334,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -364,7 +356,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp22WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -l dotnet --language-version {dotnetcoreVersion} -o {appOutputDir}")
@ -386,16 +377,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -408,7 +399,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp22WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -o {appOutputDir} -l dotnet --language-version {dotnetcoreVersion}")
@ -435,16 +425,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -457,7 +447,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp30WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -l dotnet --language-version {dotnetcoreVersion} -o {appOutputDir}")
@ -479,16 +468,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -512,7 +501,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp30WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"source benv dotnet=3")
@ -536,16 +524,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
"oryxdevms/dotnetcore-1.1",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -558,7 +546,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp30WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -o {appOutputDir} -l dotnet --language-version {dotnetcoreVersion}")
@ -580,16 +567,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -603,7 +590,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -l dotnet --language-version {dotnetcoreVersion} -o {appOutputDir}")
@ -625,16 +611,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -647,7 +633,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp22WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -l dotnet --language-version {dotnetcoreVersion} -o {appOutputDir}")
@ -670,16 +655,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -692,7 +677,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp22WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -l dotnet --language-version {dotnetcoreVersion} -o {appOutputDir}")
@ -715,16 +699,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -738,7 +722,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand($"oryx build {appDir} -l dotnet --language-version {dotnetcoreVersion} -o {appOutputDir}")
@ -760,16 +743,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -782,7 +765,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp21WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var startupFilePath = "/tmp/run.sh";
var startupCommand = "\"dotnet foo.dll\"";
var appOutputDir = $"{appDir}/myoutputdir";
@ -813,16 +795,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -836,7 +818,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", appName);
var volume = DockerVolume.Create(hostDir);
var repoDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var setProjectEnvVariable = "export PROJECT=src/WebApp1/WebApp1.csproj";
var appOutputDir = $"{repoDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
@ -861,16 +842,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World! from WebApp1", data);
});
}
@ -884,7 +865,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", appName);
var volume = DockerVolume.Create(hostDir);
var repoDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{repoDir}/myoutputdir";
var setProjectEnvVariable = "export PROJECT=src/WebApp1/WebApp1.csproj";
var buildImageScript = new ShellScriptBuilder()
@ -909,16 +889,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World! from WebApp1", data);
});
}
@ -931,7 +911,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp21WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand(
@ -955,16 +934,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -977,7 +956,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "DotNetCore", NetCoreApp21WebApp);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDir = $"{appDir}/myoutputdir";
var buildImageScript = new ShellScriptBuilder()
.AddCommand(
@ -1001,16 +979,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildImageScript
},
$"oryxdevms/dotnetcore-{dotnetcoreVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runtimeImageScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}

Просмотреть файл

@ -15,21 +15,18 @@ namespace Microsoft.Oryx.Integration.Tests.Fixtures
{
protected override DockerRunCommandResult RunDbServerContainer()
{
var runDbContainerResult = _dockerCli.Run(
Settings.MySqlDbImageName,
environmentVariables: new List<EnvironmentVariable>
var runDbContainerResult = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.MySqlDbImageName,
EnvironmentVariables = new List<EnvironmentVariable>
{
new EnvironmentVariable("MYSQL_RANDOM_ROOT_PASSWORD", "yes"),
new EnvironmentVariable("MYSQL_DATABASE", Constants.DatabaseName),
new EnvironmentVariable("MYSQL_USER", Constants.DatabaseUserName),
new EnvironmentVariable("MYSQL_PASSWORD", Constants.DatabaseUserPwd),
},
volumes: null,
portMapping: null,
link: null,
runContainerInBackground: true,
command: null,
commandArguments: null);
RunContainerInBackground = true,
});
RunAsserts(() => Assert.True(runDbContainerResult.IsSuccess), runDbContainerResult.GetDebugInfo());
return runDbContainerResult;

Просмотреть файл

@ -15,20 +15,17 @@ namespace Microsoft.Oryx.Integration.Tests.Fixtures
{
protected override DockerRunCommandResult RunDbServerContainer()
{
var runDbContainerResult = _dockerCli.Run(
Settings.PostgresDbImageName,
environmentVariables: new List<EnvironmentVariable>
{
new EnvironmentVariable("POSTGRES_DB", Constants.DatabaseName),
new EnvironmentVariable("POSTGRES_USER", Constants.DatabaseUserName),
new EnvironmentVariable("POSTGRES_PASSWORD", Constants.DatabaseUserPwd),
},
volumes: null,
portMapping: null,
link: null,
runContainerInBackground: true,
command: null,
commandArguments: null);
var runDbContainerResult = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.PostgresDbImageName,
EnvironmentVariables = new List<EnvironmentVariable>
{
new EnvironmentVariable("POSTGRES_DB", Constants.DatabaseName),
new EnvironmentVariable("POSTGRES_USER", Constants.DatabaseUserName),
new EnvironmentVariable("POSTGRES_PASSWORD", Constants.DatabaseUserPwd),
},
RunContainerInBackground = true,
});
RunAsserts(() => Assert.True(runDbContainerResult.IsSuccess), runDbContainerResult.GetDebugInfo());
return runDbContainerResult;

Просмотреть файл

@ -28,19 +28,16 @@ namespace Microsoft.Oryx.Integration.Tests.Fixtures
protected override DockerRunCommandResult RunDbServerContainer()
{
var runDbContainerResult = _dockerCli.Run(
Settings.MicrosoftSQLServerImageName,
environmentVariables: new List<EnvironmentVariable>
{
new EnvironmentVariable("ACCEPT_EULA", "Y"),
new EnvironmentVariable("SA_PASSWORD", Constants.DatabaseUserPwd),
},
volumes: null,
portMapping: null,
link: null,
runContainerInBackground: true,
command: null,
commandArguments: null);
var runDbContainerResult = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.MicrosoftSQLServerImageName,
EnvironmentVariables = new List<EnvironmentVariable>
{
new EnvironmentVariable("ACCEPT_EULA", "Y"),
new EnvironmentVariable("SA_PASSWORD", Constants.DatabaseUserPwd),
},
RunContainerInBackground = true,
});
RunAsserts(() => Assert.True(runDbContainerResult.IsSuccess), runDbContainerResult.GetDebugInfo());
return runDbContainerResult;

Просмотреть файл

@ -31,8 +31,6 @@ namespace Microsoft.Oryx.Integration.Tests
public class NodeOtherEndtoEndTests : NodeEndToEndTestsBase
{
private readonly int HostPort = Constants.NodeEndToEndTestsPort;
public NodeOtherEndtoEndTests(ITestOutputHelper output, TestTempDirTestFixture testTempDirTestFixture)
: base(output, testTempDirTestFixture)
{
@ -58,13 +56,11 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var containerPort = "80";
var portMapping = $"{HostPort}:{containerPort}";
var runAppScript = new ShellScriptBuilder()
.AddCommand($"cd {appOutputDir}")
.AddCommand("mkdir -p node_modules")
.AddCommand("tar -xzf node_modules.tar.gz -C node_modules")
.AddCommand($"oryx -bindPort {containerPort} -skipNodeModulesExtraction")
.AddCommand($"oryx -bindPort {ContainerPort} -skipNodeModulesExtraction")
.AddCommand(DefaultStartupFilePath)
.AddDirectoryDoesNotExistCheck("/node_modules")
.ToString();
@ -87,16 +83,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildScript
},
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runAppScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Say It Again", data);
});
}
@ -121,7 +117,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appOutputDir} -bindPort {ContainerPort}")
@ -147,16 +142,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildScript
},
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Say It Again", data);
});
}
@ -181,7 +176,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appOutputDir} -bindPort {ContainerPort}")
@ -207,16 +201,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildScript
},
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Say It Again", data);
});
}
@ -231,7 +225,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -245,20 +238,20 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Say It Again", data);
});
}
[Fact]
public async Task NodeStartupScript_UsesPortEnvironmentVariableValue()
{
@ -268,7 +261,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"export PORT={ContainerPort}")
@ -283,16 +275,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Say It Again", data);
});
}
@ -306,7 +298,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"export PORT=9095")
@ -321,16 +312,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Say It Again", data);
});
}
@ -344,7 +335,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var startupFilePath = "/tmp/startup.sh";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
@ -358,11 +348,11 @@ namespace Microsoft.Oryx.Integration.Tests
volume,
"oryx", new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh", new[] { "-c", script },
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Say It Again", data);
});
}
@ -377,7 +367,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -391,16 +380,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("{\"message\":\"Hello World!\"}", data);
});
}
@ -414,7 +403,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -428,16 +416,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Welcome to Express", data);
});
}
@ -451,7 +439,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -466,22 +453,22 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var response = await _httpClient.GetAsync($"http://localhost:{HostPort}/");
var response = await _httpClient.GetAsync($"http://localhost:{hostPort}/");
Assert.True(response.IsSuccessStatusCode);
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("<title>SoundCloud • Angular2 NgRx</title>", data);
});
}
[Fact]
public async Task Node_CreateReactAppSample()
{
@ -491,7 +478,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -505,16 +491,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("<title>React App</title>", data);
});
}
@ -537,7 +523,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var runAppScript = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appOutputDir} -bindPort {ContainerPort}")
@ -558,12 +543,12 @@ namespace Microsoft.Oryx.Integration.Tests
"/bin/bash",
new[] { "-c", buildScript },
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[] { "-c", runAppScript },
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("<title>React App</title>", data);
});
}
@ -577,7 +562,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var runScript = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand(
@ -593,16 +577,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildCmd: "oryx",
buildArgs: new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
runtimeImageName: $"oryxdevms/build",
portMapping: portMapping,
ContainerPort,
runCmd: "/bin/sh",
runArgs: new[]
{
"-c",
runScript
},
assertAction: async () =>
assertAction: async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("<title>React App</title>", data);
});
}
@ -616,7 +600,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
// Create a custom startup command
const string customStartupScriptName = "customStartup.sh";
@ -640,16 +623,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildCmd: "oryx",
buildArgs: new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
runtimeImageName: $"oryxdevms/build",
portMapping: portMapping,
ContainerPort,
runCmd: "/bin/sh",
runArgs: new[]
{
"-c",
runScript
},
assertAction: async () =>
assertAction: async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Equal("Hello World from express!", data);
});
}
@ -664,7 +647,6 @@ namespace Microsoft.Oryx.Integration.Tests
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
const int localPort = 8080;
var portMapping = $"{HostPort}:{localPort}";
// Create a custom startup command
const string customStartupScriptCommand = "'npm start'";
@ -684,16 +666,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildCmd: "oryx",
buildArgs: new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
runtimeImageName: $"oryxdevms/build",
portMapping: portMapping,
ContainerPort,
runCmd: "/bin/sh",
runArgs: new[]
{
"-c",
runScript
},
assertAction: async () =>
assertAction: async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Equal("Hello World from express!", data);
});
}
@ -702,8 +684,6 @@ namespace Microsoft.Oryx.Integration.Tests
[Trait("category", "node")]
public class NodeSassExampleTest : NodeEndToEndTestsBase
{
public readonly int HostPort = Constants.NodeEndToEndTestsPort + 5;
public NodeSassExampleTest(ITestOutputHelper output, TestTempDirTestFixture fixture)
: base(output, fixture)
{
@ -718,7 +698,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -732,16 +711,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("<title>Node-sass example</title>", data);
});
}
@ -750,8 +729,6 @@ namespace Microsoft.Oryx.Integration.Tests
[Trait("category", "node")]
public class NodeTestUsingZippedNodeModules : NodeEndToEndTestsBase
{
private readonly int HostPort = Constants.NodeEndToEndTestsPort + 10;
public NodeTestUsingZippedNodeModules(ITestOutputHelper output, TestTempDirTestFixture fixture)
: base(output, fixture)
{
@ -778,7 +755,6 @@ namespace Microsoft.Oryx.Integration.Tests
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var containerPort = "80";
var portMapping = $"{HostPort}:{containerPort}";
var runAppScript = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appOutputDir} -bindPort {containerPort}")
@ -803,16 +779,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildScript
},
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runAppScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Equal("Hello World from express!", data);
});
}
@ -821,8 +797,6 @@ namespace Microsoft.Oryx.Integration.Tests
[Trait("category", "node")]
public class NodeTestWithAppInsightsConfigured : NodeEndToEndTestsBase
{
private readonly int HostPort = Constants.NodeEndToEndTestsPort + 15;
public NodeTestWithAppInsightsConfigured(ITestOutputHelper output, TestTempDirTestFixture fixture)
: base(output, fixture)
{
@ -838,7 +812,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var spcifyNodeVersionCommand = "-l nodejs --language-version=" + nodeVersion;
var aIKey = "APPINSIGHTS_INSTRUMENTATIONKEY";
var buildScript = new ShellScriptBuilder()
@ -871,16 +844,16 @@ namespace Microsoft.Oryx.Integration.Tests
},
$"oryxdevms/node-{nodeVersion}",
new List<EnvironmentVariable> { new EnvironmentVariable(aIKey, "asdasda") },
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World from express!", data);
});
}
@ -889,8 +862,6 @@ namespace Microsoft.Oryx.Integration.Tests
[Trait("category", "node")]
public class NodeTestBuildAndRunAppWithDebugger : NodeEndToEndTestsBase
{
private readonly int HostPort = Constants.NodeEndToEndTestsPort + 20;
public NodeTestBuildAndRunAppWithDebugger(ITestOutputHelper output, TestTempDirTestFixture fixture)
: base(output, fixture)
{
@ -911,9 +882,7 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
//const int localPort = 9393;
const int containerDebugPort = 9595;
var portMapping = $"{HostPort}:{containerDebugPort}";
var runAppScript = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appOutputDir} -remoteDebug -debugPort {containerDebugPort}")
@ -938,16 +907,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildScript
},
$"oryxdevms/node-{nodeVersion}",
portMapping,
ContainerPort,
"/bin/sh",
new[]
{
"-c",
runAppScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/json/list");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/json/list");
Assert.Contains("devtoolsFrontendUrl", data);
});
}

Просмотреть файл

@ -3,12 +3,12 @@
// Licensed under the MIT license.
// --------------------------------------------------------------------------------------------
using Microsoft.Oryx.Tests.Common;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Threading.Tasks;
using Microsoft.Oryx.Tests.Common;
using Xunit;
using Xunit.Abstractions;
@ -35,7 +35,6 @@ namespace Microsoft.Oryx.Integration.Tests
[Trait("category", "php")]
public class PhpTwigExampleTest : PhpEndToEndTests
{
private readonly int HostPort = Constants.PhpEndToEndTestsPort;
public PhpTwigExampleTest(ITestOutputHelper output, TestTempDirTestFixture fixture)
: base(output, fixture)
{
@ -64,11 +63,11 @@ namespace Microsoft.Oryx.Integration.Tests
appName, _output, volume,
"oryx", new[] { "build", appDir, "-l", "php", "--language-version", phpVersion },
$"oryxdevms/php-{phpVersion}",
$"{HostPort}:{ContainerPort}",
ContainerPort,
"/bin/sh", new[] { "-c", script },
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("<h1>Hello World!</h1>", data);
});
}
@ -77,8 +76,6 @@ namespace Microsoft.Oryx.Integration.Tests
[Trait("category", "php")]
public class PhpWordPress51Test : PhpEndToEndTests
{
private readonly int HostPort = Constants.PhpEndToEndTestsPort + 5;
public PhpWordPress51Test(ITestOutputHelper output, TestTempDirTestFixture fixture)
: base(output, fixture)
{
@ -118,22 +115,19 @@ namespace Microsoft.Oryx.Integration.Tests
appName, _output, volume,
"oryx", new[] { "build", appDir, "-l", "php", "--language-version", phpVersion },
$"oryxdevms/php-{phpVersion}",
$"{HostPort}:{ContainerPort}",
ContainerPort,
"/bin/sh", new[] { "-c", runScript },
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("<title>WordPress &rsaquo; Setup Configuration File</title>", data);
});
}
}
[Trait("category", "php")]
public class PhpImagickExampleTest : PhpEndToEndTests
{
private readonly int HostPort = Constants.PhpEndToEndTestsPort + 10;
public PhpImagickExampleTest(ITestOutputHelper output, TestTempDirTestFixture fixture)
: base(output, fixture)
{
@ -162,11 +156,11 @@ namespace Microsoft.Oryx.Integration.Tests
appName, _output, volume,
"oryx", new[] { "build", appDir, "-l", "php", "--language-version", phpVersion },
$"oryxdevms/php-{phpVersion}",
$"{HostPort}:{ContainerPort}",
ContainerPort,
"/bin/sh", new[] { "-c", runScript },
async () =>
async (hostPort) =>
{
string imagickOutput = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
string imagickOutput = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Equal("64x64", imagickOutput);
});
}

Просмотреть файл

@ -16,7 +16,6 @@ namespace Microsoft.Oryx.Integration.Tests
[Trait("category", "python")]
public class PythonEndToEndTests : PlatformEndToEndTestsBase
{
private const int HostPort = Constants.PythonEndToEndTestsPort;
private const int ContainerPort = 3000;
private const string DefaultStartupFilePath = "./run.sh";
@ -40,7 +39,6 @@ namespace Microsoft.Oryx.Integration.Tests
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var startupFile = "/tmp/startup.sh";
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -output {startupFile} -bindPort {ContainerPort}")
@ -54,16 +52,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "python", "--language-version", "2.7" },
"oryxdevms/python-2.7",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -77,7 +75,6 @@ namespace Microsoft.Oryx.Integration.Tests
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
const string virtualEnvName = "antenv2.7";
var portMapping = $"{HostPort}:{ContainerPort}";
var buildScript = new ShellScriptBuilder()
.AddBuildCommand($"{appDir} -l python --language-version 2.7 -p virtualenv_name={virtualEnvName}")
.ToString();
@ -101,16 +98,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildScript
},
"oryxdevms/python-2.7",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
runScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -123,7 +120,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -137,16 +133,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir },
"oryxdevms/python-3.7",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -159,7 +155,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -173,16 +168,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "python", "--language-version", "3.6" },
"oryxdevms/python-3.6",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -196,7 +191,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort} -virtualEnvName {virtualEnvName}")
@ -210,16 +204,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-p", $"virtualenv_name={virtualEnvName}" },
"oryxdevms/python-3.7",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -237,7 +231,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var appOutputDirPath = Directory.CreateDirectory(
Path.Combine(_tempRootDir, Guid.NewGuid().ToString("N"))).FullName;
var appOutputDirVolume = DockerVolume.Create(appOutputDirPath);
@ -268,16 +261,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildScript
},
"oryxdevms/python-3.7",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
runScript
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -290,7 +283,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -304,25 +296,25 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir },
"oryxdevms/python-3.7",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await GetResponseDataAsync($"http://localhost:{HostPort}/staticfiles/css/boards.css");
var data = await GetResponseDataAsync($"http://localhost:{hostPort}/staticfiles/css/boards.css");
Assert.Contains("CSS file from Boards app module", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/staticfiles/css/uservoice.css");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/staticfiles/css/uservoice.css");
Assert.Contains("CSS file from UserVoice app module", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/boards/");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/boards/");
Assert.Contains("Hello, World! from Boards app", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/uservoice/");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/uservoice/");
Assert.Contains("Hello, World! from Uservoice app", data);
});
}
@ -339,7 +331,6 @@ namespace Microsoft.Oryx.Integration.Tests
var appOutputDirVolume = DockerVolume.Create(appOutputDirPath);
var appOutputDir = appOutputDirVolume.ContainerDir;
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
const string virtualEnvName = "antenv";
var buildScript = new ShellScriptBuilder()
@ -366,25 +357,25 @@ namespace Microsoft.Oryx.Integration.Tests
buildScript
},
"oryxdevms/python-3.7",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await GetResponseDataAsync($"http://localhost:{HostPort}/staticfiles/css/boards.css");
var data = await GetResponseDataAsync($"http://localhost:{hostPort}/staticfiles/css/boards.css");
Assert.Contains("CSS file from Boards app module", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/staticfiles/css/uservoice.css");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/staticfiles/css/uservoice.css");
Assert.Contains("CSS file from UserVoice app module", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/boards/");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/boards/");
Assert.Contains("Hello, World! from Boards app", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/uservoice/");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/uservoice/");
Assert.Contains("Hello, World! from Uservoice app", data);
});
}
@ -399,7 +390,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
const string virtualEnvName = "antenv";
// Simulate apps that were built using package directory, and then virtual env
@ -424,21 +414,21 @@ namespace Microsoft.Oryx.Integration.Tests
"/bin/bash",
new[] { "-c", buildScript },
$"oryxdevms/python-{pythonVersion}",
portMapping,
ContainerPort,
"/bin/bash",
new[] { "-c", runScript },
async () =>
async (hostPort) =>
{
var data = await GetResponseDataAsync($"http://localhost:{HostPort}/staticfiles/css/boards.css");
var data = await GetResponseDataAsync($"http://localhost:{hostPort}/staticfiles/css/boards.css");
Assert.Contains("CSS file from Boards app module", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/staticfiles/css/uservoice.css");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/staticfiles/css/uservoice.css");
Assert.Contains("CSS file from UserVoice app module", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/boards/");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/boards/");
Assert.Contains("Hello, World! from Boards app", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/uservoice/");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/uservoice/");
Assert.Contains("Hello, World! from Uservoice app", data);
});
}
@ -451,7 +441,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
const string virtualEnvName = "antenv3.6";
var buildScript = new ShellScriptBuilder()
.AddBuildCommand($"{appDir} -l python --language-version 3.6 -p virtualenv_name={virtualEnvName}")
@ -473,25 +462,25 @@ namespace Microsoft.Oryx.Integration.Tests
buildScript
},
"oryxdevms/python-3.6",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
runScript
},
async () =>
async (hostPort) =>
{
var data = await GetResponseDataAsync($"http://localhost:{HostPort}/staticfiles/css/boards.css");
var data = await GetResponseDataAsync($"http://localhost:{hostPort}/staticfiles/css/boards.css");
Assert.Contains("CSS file from Boards app module", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/staticfiles/css/uservoice.css");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/staticfiles/css/uservoice.css");
Assert.Contains("CSS file from UserVoice app module", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/boards/");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/boards/");
Assert.Contains("Hello, World! from Boards app", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/uservoice/");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/uservoice/");
Assert.Contains("Hello, World! from Uservoice app", data);
});
}
@ -504,7 +493,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -518,25 +506,25 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "python", "--language-version", "3.6" },
"oryxdevms/python-3.6",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await GetResponseDataAsync($"http://localhost:{HostPort}/staticfiles/css/boards.css");
var data = await GetResponseDataAsync($"http://localhost:{hostPort}/staticfiles/css/boards.css");
Assert.Contains("CSS file from Boards app module", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/staticfiles/css/uservoice.css");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/staticfiles/css/uservoice.css");
Assert.Contains("CSS file from UserVoice app module", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/boards/");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/boards/");
Assert.Contains("Hello, World! from Boards app", data);
data = await GetResponseDataAsync($"http://localhost:{HostPort}/uservoice/");
data = await GetResponseDataAsync($"http://localhost:{hostPort}/uservoice/");
Assert.Contains("Hello, World! from Uservoice app", data);
});
}
@ -549,7 +537,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -563,16 +550,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir },
"oryxdevms/python-3.7",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("logged in as: bob", data);
});
}
@ -586,7 +573,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
@ -601,16 +587,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "python", "--language-version", pythonVersion },
imageVersion,
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello Shapely, Area is: 314", data);
});
}
@ -625,7 +611,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort} -packagedir {packageDir}")
@ -640,16 +625,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir, "-l", "python", "--language-version", pythonVersion, "-p", $"packagedir={packageDir}" },
imageVersion,
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello Shapely, Area is: 314", data);
});
}
@ -662,7 +647,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"export PORT={ContainerPort}")
@ -677,16 +661,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir },
"oryxdevms/python-3.7",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -699,7 +683,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var script = new ShellScriptBuilder()
.AddCommand($"cd {appDir}")
.AddCommand($"export PORT=9095")
@ -714,16 +697,16 @@ namespace Microsoft.Oryx.Integration.Tests
"oryx",
new[] { "build", appDir },
"oryxdevms/python-3.7",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
script
},
async () =>
async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World!", data);
});
}
@ -736,7 +719,6 @@ namespace Microsoft.Oryx.Integration.Tests
var hostDir = Path.Combine(_hostSamplesDir, "multilanguage", appName);
var volume = DockerVolume.Create(hostDir);
var appDir = volume.ContainerDir;
var portMapping = $"{HostPort}:{ContainerPort}";
var buildScript = new ShellScriptBuilder()
.AddCommand("export ENABLE_MULTIPLATFORM_BUILD=true")
@ -764,16 +746,16 @@ namespace Microsoft.Oryx.Integration.Tests
buildScript
},
"oryxdevms/python-3.7",
portMapping,
ContainerPort,
"/bin/bash",
new[]
{
"-c",
runAppScript
},
async () =>
async (hostPort) =>
{
var data = await GetResponseDataAsync($"http://localhost:{HostPort}/");
var data = await GetResponseDataAsync($"http://localhost:{hostPort}/");
Assert.Contains("<h1>it works! (Django Template)</h1>", data);
// Looks for the link to the webpack-generated file
@ -788,7 +770,7 @@ namespace Microsoft.Oryx.Integration.Tests
int length = linkdEndIx - linkStartIdx - 2;
var link = data.Substring(linkStartIdx + 5, length);
data = await GetResponseDataAsync($"http://localhost:{HostPort}{link}");
data = await GetResponseDataAsync($"http://localhost:{hostPort}{link}");
Assert.Contains("!function(e){var t={};function n(r){if(t[r])return t[r].exports", data);
});
}

Просмотреть файл

@ -22,6 +22,7 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
[InlineData("2.0")]
[InlineData("2.1")]
[InlineData("2.2")]
[InlineData("3.0")]
public void DotnetCoreRuntimeImage_Contains_VersionAndCommit_Information(string version)
{
var agentOS = Environment.GetEnvironmentVariable("AGENT_OS");
@ -33,11 +34,15 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
// so we should check agent_os environment variable to know if the build is happening in azure devops agent
// or locally, locally we need to skip this test
Skip.If(string.IsNullOrEmpty(agentOS));
// Act
var result = _dockerCli.Run(
"oryxdevms/dotnetcore-" + version + ":latest",
commandToExecuteOnRun: "oryx",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = $"oryxdevms/dotnetcore-{version}:latest",
CommandToExecuteOnRun = "oryx",
CommandArguments = new[] { "--version" }
});
// Assert
RunAsserts(
() =>
@ -47,7 +52,7 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
Assert.DoesNotContain(".unspecified, Commit: unspecified", result.StdErr);
Assert.Contains(gitCommitID, result.StdErr);
Assert.Contains(expectedOryxVersion, result.StdErr);
},
result.GetDebugInfo());
}
@ -55,13 +60,15 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
[Theory]
[InlineData("1.0", "Version : 1.0.1")]
[InlineData("1.1", "Version : 1.1.12")]
public void DotnetVersionMatchesImageName_NetCoreApp1Versions(string version, string expectedOutput)
public void RuntimeImage_HasExecptedDotnetVersion_NetCoreApp10Versions(string version, string expectedOutput)
{
// Arrange & Act
var result = _dockerCli.Run(
"oryxdevms/dotnetcore-" + version + ":latest",
commandToExecuteOnRun: "dotnet",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = $"oryxdevms/dotnetcore-{version}:latest",
CommandToExecuteOnRun = "dotnet",
CommandArguments = new[] { "--version" }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
@ -77,13 +84,16 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
[InlineData("2.0", "Version : 2.0.9")]
[InlineData("2.1", "Version: 2.1.10")]
[InlineData("2.2", "Version: 2.2.4")]
public void DotnetVersionMatchesImageName(string version, string expectedOutput)
[InlineData("3.0", "Version: 3.0.0-preview5-27626-15")]
public void RuntimeImage_HasExecptedDotnetVersion(string version, string expectedOutput)
{
// Arrange & Act
var result = _dockerCli.Run(
"oryxdevms/dotnetcore-" + version + ":latest",
commandToExecuteOnRun: "dotnet",
commandArguments: new[] { "--info" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = $"oryxdevms/dotnetcore-{version}:latest",
CommandToExecuteOnRun = "dotnet",
CommandArguments = new[] { "--info" }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();

Просмотреть файл

@ -39,11 +39,15 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
// so we should check agent_os environment variable to know if the build is happening in azure devops agent
// or locally, locally we need to skip this test
Skip.If(string.IsNullOrEmpty(agentOS));
// Act
var result = _dockerCli.Run(
"oryxdevms/node-" + version + ":latest",
commandToExecuteOnRun: "oryx",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = $"oryxdevms/node-{version}:latest",
CommandToExecuteOnRun = "oryx",
CommandArguments = new[] { "--version" }
});
// Assert
RunAsserts(
() =>
@ -82,10 +86,12 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
{
// Arrange & Act
var expectedNodeVersion = "v" + nodeVersion;
var result = _dockerCli.Run(
"oryxdevms/node-" + nodeTag + ":latest",
commandToExecuteOnRun: "node",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = $"oryxdevms/node-{nodeTag}:latest",
CommandToExecuteOnRun = "node",
CommandArguments = new[] { "--version" }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
@ -108,10 +114,12 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
public void HasExpectedNpmVersion(string nodeTag, string expectedNpmVersion)
{
// Arrange & Act
var result = _dockerCli.Run(
"oryxdevms/node-" + nodeTag + ":latest",
commandToExecuteOnRun: "npm",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = $"oryxdevms/node-{nodeTag}:latest",
CommandToExecuteOnRun = "npm",
CommandArguments = new[] { "--version" }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
@ -129,9 +137,16 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
public void NodeImage_Contains_RequiredPrograms(string nodeTag)
{
// Arrange & Act
var result = _dockerCli.Run(
$"oryxdevms/node-{nodeTag}:latest",
"sh", new[] { "-c", "which tar && which unzip && which pm2 && /opt/node-wrapper/node --version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = $"oryxdevms/node-{nodeTag}:latest",
CommandToExecuteOnRun = "/bin/sh",
CommandArguments = new[]
{
"-c",
"which tar && which unzip && which pm2 && /opt/node-wrapper/node --version"
}
});
// Assert
RunAsserts(() => Assert.True(result.IsSuccess), result.GetDebugInfo());
@ -151,10 +166,15 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
.ToString();
// Act
var res = _dockerCli.Run("oryxdevms/node-10.14", "/bin/sh", new[] { "-c", script });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = "oryxdevms/node-10.14",
CommandToExecuteOnRun = "/bin/sh",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(() => Assert.Equal(res.ExitCode, exitCodeSentinel), res.GetDebugInfo());
RunAsserts(() => Assert.Equal(result.ExitCode, exitCodeSentinel), result.GetDebugInfo());
}
[Fact]
@ -186,13 +206,19 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
.ToString();
// Act
var res = _dockerCli.Run("oryxdevms/node-10.14",
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "asdas"), "/bin/sh", new[] { "-c", script });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = "oryxdevms/node-10.14",
EnvironmentVariables = new List<EnvironmentVariable>
{
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "asdas")
},
CommandToExecuteOnRun = "/bin/sh",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(() =>
Assert.Equal(res.ExitCode, exitCodeSentinel),
res.GetDebugInfo());
RunAsserts(() => Assert.Equal(result.ExitCode, exitCodeSentinel), result.GetDebugInfo());
}
[Theory]
@ -204,7 +230,6 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var dir = volume.ContainerDir;
int hostPort = 8585;
int containerPort = 80;
var runAppScript = new ShellScriptBuilder()
@ -218,19 +243,19 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
await EndToEndTestHelper.RunAndAssertAppAsync(
imageName: $"oryxdevms/node-{nodeVersion}",
output: _output,
volumes: new List<DockerVolume> { volume },
volumes: new List<DockerVolume> { volume },
environmentVariables: null,
portMapping: $"{hostPort}:{containerPort}",
containerPort,
link: null,
runCmd: "/bin/sh",
runArgs: new[] { "-c", runAppScript },
assertAction: async () =>
assertAction: async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Equal("Hello World from express!", data);
},
dockerCli: _dockerCli);
}
[Theory]
@ -242,7 +267,6 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var dir = volume.ContainerDir;
int hostPort = 8585;
int containerPort = 80;
var runAppScript = new ShellScriptBuilder()
@ -258,11 +282,11 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
output: _output,
volumes: new List<DockerVolume> { volume },
environmentVariables: null,
portMapping: $"{hostPort}:{containerPort}",
containerPort,
link: null,
runCmd: "/bin/sh",
runArgs: new[] { "-c", runAppScript },
assertAction: async () =>
assertAction: async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Equal("Hello World from express!", data);
@ -280,7 +304,6 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var dir = volume.ContainerDir;
int hostPort = 8585;
int containerPort = 80;
var runAppScript = new ShellScriptBuilder()
@ -296,11 +319,11 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
output: _output,
volumes: new List<DockerVolume> { volume },
environmentVariables: null,
portMapping: $"{hostPort}:{containerPort}",
containerPort,
link: null,
runCmd: "/bin/sh",
runArgs: new[] { "-c", runAppScript },
assertAction: async () =>
assertAction: async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Equal("Hello World from express!", data);
@ -309,15 +332,16 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
}
[Theory(Skip="Investigating debugging using pm2")]
[MemberData(nameof(TestValueGenerator.GetNodeVersions_SupportDebugging), MemberType = typeof(TestValueGenerator))]
[Theory(Skip = "Investigating debugging using pm2")]
[MemberData(
nameof(TestValueGenerator.GetNodeVersions_SupportDebugging),
MemberType = typeof(TestValueGenerator))]
public async Task RunNodeAppUsingProcessJson_withDebugging(string nodeVersion)
{
var appName = "express-process-json";
var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
var volume = DockerVolume.Create(hostDir);
var dir = volume.ContainerDir;
int hostPort = 8585;
int containerDebugPort = 8080;
var runAppScript = new ShellScriptBuilder()
@ -333,11 +357,11 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
output: _output,
volumes: new List<DockerVolume> { volume },
environmentVariables: null,
portMapping: $"{hostPort}:{containerDebugPort}",
port: containerDebugPort,
link: null,
runCmd: "/bin/sh",
runArgs: new[] { "-c", runAppScript },
assertAction: async () =>
assertAction: async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Say It Again", data);
@ -347,7 +371,9 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
}
[Theory]
[MemberData(nameof(TestValueGenerator.GetNodeVersions_SupportDebugging), MemberType = typeof(TestValueGenerator))]
[MemberData(
nameof(TestValueGenerator.GetNodeVersions_SupportDebugging),
MemberType = typeof(TestValueGenerator))]
public async Task GeneratesScript_CanRun_AppInsightsModule_NotFound(string nodeVersion)
{
// This test is for the following scenario:
@ -355,7 +381,7 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
// has been injected and it's installed during build (npm install). But for some reason if we
// don't see the appinsights node_module we shouldn't break the app. We should run the app
// and additionally print the exception message
// Arrange
var imageName = string.Concat("oryxdevms/node-", nodeVersion);
var hostSamplesDir = Path.Combine(Directory.GetCurrentDirectory(), "SampleApps");
@ -372,7 +398,6 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
console.log(e);
} ";
int hostPort = 8585;
int containerDebugPort = 8080;
var script = new ShellScriptBuilder()
@ -391,11 +416,11 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
output: _output,
volumes: new List<DockerVolume> { volume },
environmentVariables: null,
portMapping: $"{hostPort}:{containerDebugPort}",
port: containerDebugPort,
link: null,
runCmd: "/bin/sh",
runArgs: new[] { "-c", script },
assertAction: async () =>
assertAction: async (hostPort) =>
{
var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
Assert.Contains("Hello World from express!", data);

Просмотреть файл

@ -7,7 +7,6 @@ using Microsoft.Oryx.Common;
using Microsoft.Oryx.Tests.Common;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using Xunit;
using Xunit.Abstractions;
@ -27,7 +26,12 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
public void VersionMatchesImageName(string imageTag, string expectedPhpVersion)
{
// Arrange & Act
var result = _dockerCli.Run("oryxdevms/php-" + imageTag + ":latest", "php", new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = $"oryxdevms/php-{imageTag}:latest",
CommandToExecuteOnRun = "php",
CommandArguments = new[] { "--version" }
});
// Assert
RunAsserts(() =>
@ -46,9 +50,12 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
public void GraphicsExtension_Gd_IsInstalled(string imageTag)
{
// Arrange & Act
var result = _dockerCli.Run(
"oryxdevms/php-" + imageTag + ":latest",
"php", new[] { "-r", "echo json_encode(gd_info());" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = $"oryxdevms/php-{imageTag}:latest",
CommandToExecuteOnRun = "php",
CommandArguments = new[] { "-r", "echo json_encode(gd_info());" }
});
// Assert
JObject gdInfo = JsonConvert.DeserializeObject<JObject>(result.StdOut);

Просмотреть файл

@ -2,6 +2,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
// --------------------------------------------------------------------------------------------
using System;
using Microsoft.Oryx.Tests.Common;
using Xunit;
@ -30,11 +31,15 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
// so we should check agent_os environment variable to know if the build is happening in azure devops agent
// or locally, locally we need to skip this test
Skip.If(string.IsNullOrEmpty(agentOS));
// Act
var result = _dockerCli.Run(
"oryxdevms/python-" + version + ":latest",
commandToExecuteOnRun: "oryx",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = "oryxdevms/python-" + version + ":latest",
CommandToExecuteOnRun = "oryx",
CommandArguments = new[] { "--version" }
});
// Assert
RunAsserts(
() =>
@ -54,10 +59,12 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
public void PythonVersionMatchesImageName(string pythonVersion, string expectedOutput)
{
// Arrange & Act
var result = _dockerCli.Run(
"oryxdevms/python-" + pythonVersion + ":latest",
commandToExecuteOnRun: "python",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = "oryxdevms/python-" + pythonVersion + ":latest",
CommandToExecuteOnRun = "python",
CommandArguments = new[] { "--version" }
});
// Assert
var actualOutput = result.StdOut.ReplaceNewLine();
@ -77,10 +84,12 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
string expectedOutput = "Python " + Common.PythonVersions.Python27Version;
// Arrange & Act
var result = _dockerCli.Run(
"oryxdevms/python-" + pythonVersion + ":latest",
commandToExecuteOnRun: "python",
commandArguments: new[] { "--version" });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = "oryxdevms/python-" + pythonVersion + ":latest",
CommandToExecuteOnRun = "python",
CommandArguments = new[] { "--version" }
});
// Assert
var actualOutput = result.StdErr.ReplaceNewLine();
@ -109,10 +118,15 @@ namespace Microsoft.Oryx.RuntimeImage.Tests
.ToString();
// Act
var res = _dockerCli.Run("oryxdevms/python-3.7", "/bin/sh", new[] { "-c", script });
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = "oryxdevms/python-3.7",
CommandToExecuteOnRun = "/bin/sh",
CommandArguments = new[] { "-c", script }
});
// Assert
RunAsserts(() => Assert.Equal(res.ExitCode, exitCodeSentinel), res.GetDebugInfo());
RunAsserts(() => Assert.Equal(result.ExitCode, exitCodeSentinel), result.GetDebugInfo());
}
}
}

Просмотреть файл

@ -30,19 +30,17 @@ namespace Microsoft.Oryx.Tests.Common
_globalEnvVars = globalEnvVars;
}
public DockerRunCommandResult Run(
string imageId,
List<EnvironmentVariable> environmentVariables,
List<DockerVolume> volumes,
string portMapping,
string link,
bool runContainerInBackground,
string command,
string[] commandArguments)
public DockerRunCommandResult Run(DockerRunArguments dockerRunArguments)
{
if (string.IsNullOrEmpty(imageId))
if (dockerRunArguments == null)
{
throw new ArgumentException($"'{nameof(imageId)}' cannot be null or empty.");
throw new ArgumentNullException(nameof(dockerRunArguments));
}
if (string.IsNullOrEmpty(dockerRunArguments.ImageId))
{
throw new ArgumentException(
$"'{nameof(dockerRunArguments)}.{nameof(dockerRunArguments.ImageId)}' cannot be null or empty.");
}
var output = string.Empty;
@ -55,16 +53,7 @@ namespace Microsoft.Oryx.Tests.Common
var containerName = $"{CreatedContainerPrefix}{Guid.NewGuid().ToString("N")}";
var fileName = "docker";
var arguments = PrepareDockerRunArguments(
containerName,
runContainerInBackground,
environmentVariables,
volumes,
portMapping,
link,
imageId,
command,
commandArguments);
var arguments = PrepareDockerRunArguments(containerName, dockerRunArguments);
try
{
@ -85,22 +74,21 @@ namespace Microsoft.Oryx.Tests.Common
exception,
output,
error,
volumes,
dockerRunArguments.Volumes,
$"{fileName} {string.Join(" ", arguments)}");
}
public DockerRunCommandProcessResult RunAndDoNotWaitForProcessExit(
string imageId,
List<EnvironmentVariable> environmentVariables,
List<DockerVolume> volumes,
string portMapping,
string link,
string command,
string[] commandArguments)
public DockerRunCommandProcessResult RunAndDoNotWaitForProcessExit(DockerRunArguments dockerRunArguments)
{
if (string.IsNullOrEmpty(imageId))
if (dockerRunArguments == null)
{
throw new ArgumentException($"'{nameof(imageId)}' cannot be null or empty.");
throw new ArgumentNullException(nameof(dockerRunArguments));
}
if (string.IsNullOrEmpty(dockerRunArguments.ImageId))
{
throw new ArgumentException(
$"'{nameof(dockerRunArguments)}.{nameof(dockerRunArguments.ImageId)}' cannot be null or empty.");
}
Process process = null;
@ -112,17 +100,11 @@ namespace Microsoft.Oryx.Tests.Common
// Provide a prefix so that one can delete the containers using regex, if needed
var containerName = $"{CreatedContainerPrefix}{Guid.NewGuid().ToString("N")}";
// Make sure not to run the container in background
dockerRunArguments.RunContainerInBackground = false;
var fileName = "docker";
var arguments = PrepareDockerRunArguments(
containerName,
runContainerInBackground: false,
environmentVariables,
volumes,
portMapping,
link,
imageId,
command,
commandArguments);
var arguments = PrepareDockerRunArguments(containerName, dockerRunArguments);
try
{
@ -238,6 +220,26 @@ namespace Microsoft.Oryx.Tests.Common
}
}
public DockerCommandResult GetPortMapping(string containerName, int portInContainer)
{
if (string.IsNullOrEmpty(containerName))
{
throw new ArgumentException($"'{nameof(containerName)}' cannot be null or empty.");
}
var arguments = PrepareArguments();
return ExecuteCommand(arguments);
IEnumerable<string> PrepareArguments()
{
var args = new List<string>();
args.Add("port");
args.Add(containerName);
args.Add(portInContainer.ToString());
return args;
}
}
private DockerCommandResult ExecuteCommand(IEnumerable<string> arguments)
{
var fileName = "docker";
@ -290,14 +292,7 @@ namespace Microsoft.Oryx.Tests.Common
private IEnumerable<string> PrepareDockerRunArguments(
string containerName,
bool runContainerInBackground,
List<EnvironmentVariable> environmentVariables,
List<DockerVolume> volumes,
string portMapping,
string link,
string imageId,
string command,
string[] commandArguments)
DockerRunArguments dockerRunArguments)
{
var args = new List<string>();
args.Add("run");
@ -313,13 +308,13 @@ namespace Microsoft.Oryx.Tests.Common
args.Add("--rm");
}
if (runContainerInBackground)
if (dockerRunArguments.RunContainerInBackground)
{
args.Add("-d");
}
AddEnvVarArgs(args, _globalEnvVars);
AddEnvVarArgs(args, environmentVariables);
AddEnvVarArgs(args, dockerRunArguments.EnvironmentVariables);
var aiKeyOverride = Environment.GetEnvironmentVariable(
"TEST_OVERRIDE_" + LoggingConstants.ApplicationInsightsInstrumentationKeyEnvironmentVariableName);
@ -343,37 +338,37 @@ namespace Microsoft.Oryx.Tests.Common
appServiceAppName));
}
if (volumes?.Count > 0)
if (dockerRunArguments.Volumes?.Count > 0)
{
foreach (var volume in volumes)
foreach (var volume in dockerRunArguments.Volumes)
{
args.Add("-v");
args.Add($"{volume.MountedHostDir}:{volume.ContainerDir}");
}
}
if (!string.IsNullOrEmpty(link))
if (!string.IsNullOrEmpty(dockerRunArguments.Link))
{
args.Add("--link");
args.Add(link);
args.Add(dockerRunArguments.Link);
}
if (!string.IsNullOrEmpty(portMapping))
if (dockerRunArguments.PortInContainer.HasValue)
{
args.Add("-p");
args.Add(portMapping);
args.Add(dockerRunArguments.PortInContainer.ToString());
}
args.Add(imageId);
args.Add(dockerRunArguments.ImageId);
if (!string.IsNullOrEmpty(command))
if (!string.IsNullOrEmpty(dockerRunArguments.CommandToExecuteOnRun))
{
args.Add(command);
args.Add(dockerRunArguments.CommandToExecuteOnRun);
}
if (commandArguments?.Length > 0)
if (dockerRunArguments.CommandArguments?.Length > 0)
{
args.AddRange(commandArguments);
args.AddRange(dockerRunArguments.CommandArguments);
}
return args;

Просмотреть файл

@ -1,164 +0,0 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
// --------------------------------------------------------------------------------------------
using System.Collections.Generic;
namespace Microsoft.Oryx.Tests.Common
{
public static class DockerCliExtensions
{
public static DockerRunCommandResult Run(
this DockerCli dockerCli,
string imageId,
string commandToExecuteOnRun,
string[] commandArguments)
{
return Run(
dockerCli,
imageId,
environmentVariable: null,
volume: null,
portMapping: null,
link: null,
runContainerInBackground: false,
commandToExecuteOnRun,
commandArguments);
}
public static DockerRunCommandResult Run(
this DockerCli dockerCli,
string imageId,
DockerVolume volume,
string commandToExecuteOnRun,
string[] commandArguments)
{
return Run(
dockerCli,
imageId,
environmentVariable: null,
volume,
portMapping: null,
link: null,
runContainerInBackground: false,
commandToExecuteOnRun,
commandArguments);
}
public static DockerRunCommandResult Run(
this DockerCli dockerCli,
string imageId,
DockerVolume volume,
string portMapping,
string commandToExecuteOnRun,
string[] commandArguments)
{
return Run(
dockerCli,
imageId,
environmentVariable: null,
volume,
portMapping,
link: null,
runContainerInBackground: false,
commandToExecuteOnRun,
commandArguments);
}
public static DockerRunCommandResult Run(
this DockerCli dockerCli,
string imageId,
EnvironmentVariable environmentVariable,
string commandToExecuteOnRun,
string[] commandArguments)
{
return Run(
dockerCli,
imageId,
environmentVariable,
volume: null,
portMapping: null,
link: null,
runContainerInBackground: false,
commandToExecuteOnRun,
commandArguments);
}
public static DockerRunCommandResult Run(
this DockerCli dockerCli,
string imageId,
EnvironmentVariable environmentVariable,
DockerVolume volume,
string commandToExecuteOnRun,
string[] commandArguments)
{
return Run(
dockerCli,
imageId,
environmentVariable,
volume,
portMapping: null,
link: null,
runContainerInBackground: false,
commandToExecuteOnRun,
commandArguments);
}
public static DockerRunCommandResult Run(
this DockerCli dockerCli,
string imageId,
EnvironmentVariable environmentVariable,
DockerVolume volume,
string portMapping,
string link,
bool runContainerInBackground,
string commandToExecuteOnRun,
string[] commandArguments)
{
var environmentVariables = new List<EnvironmentVariable>();
if (environmentVariable != null)
{
environmentVariables.Add(environmentVariable);
}
var volumes = new List<DockerVolume>();
if (volume != null)
{
volumes.Add(volume);
}
return dockerCli.Run(
imageId,
environmentVariables,
volumes,
portMapping,
link,
runContainerInBackground,
commandToExecuteOnRun,
commandArguments);
}
public static DockerRunCommandResult Run(
this DockerCli dockerCli,
string imageId,
List<EnvironmentVariable> environmentVariables,
List<DockerVolume> volumes,
string portMapping,
string link,
bool runContainerInBackground,
string commandToExecuteOnRun,
string[] commandArguments)
{
return dockerCli.Run(
imageId,
environmentVariables,
volumes,
portMapping,
link,
runContainerInBackground,
commandToExecuteOnRun,
commandArguments);
}
}
}

Просмотреть файл

@ -9,7 +9,12 @@ namespace Microsoft.Oryx.Tests.Common
{
public class DockerCommandResult : DockerResultBase
{
public DockerCommandResult(int exitCode, Exception exception, string output, string error, string executedCommand)
public DockerCommandResult(
int exitCode,
Exception exception,
string output,
string error,
string executedCommand)
: base(exception, executedCommand)
{
ExitCode = exitCode;

Просмотреть файл

@ -0,0 +1,21 @@
// --------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT license.
// --------------------------------------------------------------------------------------------
using System.Collections.Generic;
namespace Microsoft.Oryx.Tests.Common
{
public class DockerRunArguments
{
public string ImageId { get; set; }
public List<EnvironmentVariable> EnvironmentVariables { get; set; }
public List<DockerVolume> Volumes { get; set; }
public int? PortInContainer { get; set; }
public string Link { get; set; }
public bool RunContainerInBackground { get; set; }
public string CommandToExecuteOnRun { get; set; }
public string[] CommandArguments { get; set; }
}
}

Просмотреть файл

@ -18,7 +18,7 @@ namespace Microsoft.Oryx.Tests.Common
public static class EndToEndTestHelper
{
private const int MaxRetryCount = 10;
private const int DelayBetweenRetriesInSeconds = 6;
private static readonly TimeSpan DelayBetweenRetriesInSeconds = TimeSpan.FromSeconds(6);
public static Task BuildRunAndAssertAppAsync(
string appName,
@ -27,10 +27,10 @@ namespace Microsoft.Oryx.Tests.Common
string buildCmd,
string[] buildArgs,
string runtimeImageName,
string portMapping,
int port,
string runCmd,
string[] runArgs,
Func<Task> assertAction)
Func<int, Task> assertAction)
{
return BuildRunAndAssertAppAsync(
appName,
@ -39,7 +39,7 @@ namespace Microsoft.Oryx.Tests.Common
buildCmd,
buildArgs,
runtimeImageName,
portMapping,
port,
runCmd,
runArgs,
assertAction);
@ -53,10 +53,10 @@ namespace Microsoft.Oryx.Tests.Common
string[] buildArgs,
string runtimeImageName,
List<EnvironmentVariable> environmentVariables,
string portMapping,
int port,
string runCmd,
string[] runArgs,
Func<Task> assertAction)
Func<int, Task> assertAction)
{
var AppNameEnvVariable = new EnvironmentVariable(
LoggingConstants.AppServiceAppNameEnvironmentVariableName,
@ -69,7 +69,7 @@ namespace Microsoft.Oryx.Tests.Common
buildArgs,
runtimeImageName,
environmentVariables,
portMapping,
port,
link: null,
runCmd,
runArgs,
@ -83,10 +83,10 @@ namespace Microsoft.Oryx.Tests.Common
string buildCmd,
string[] buildArgs,
string runtimeImageName,
string portMapping,
int port,
string runCmd,
string[] runArgs,
Func<Task> assertAction)
Func<int, Task> assertAction)
{
return BuildRunAndAssertAppAsync(
output,
@ -98,7 +98,7 @@ namespace Microsoft.Oryx.Tests.Common
{
new EnvironmentVariable(LoggingConstants.AppServiceAppNameEnvironmentVariableName, appName)
},
portMapping,
port,
link: null,
runCmd,
runArgs,
@ -119,24 +119,24 @@ namespace Microsoft.Oryx.Tests.Common
string[] buildArgs,
string runtimeImageName,
List<EnvironmentVariable> environmentVariables,
string portMapping,
int port,
string link,
string runCmd,
string[] runArgs,
Func<Task> assertAction)
Func<int, Task> assertAction)
{
var dockerCli = new DockerCli();
// Build
var buildAppResult = dockerCli.Run(
Settings.BuildImageName,
environmentVariables: environmentVariables,
volumes: volumes,
portMapping: null,
link: null,
runContainerInBackground: false,
commandToExecuteOnRun: buildCmd,
commandArguments: buildArgs);
var buildAppResult = dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = environmentVariables,
Volumes = volumes,
RunContainerInBackground = false,
CommandToExecuteOnRun = buildCmd,
CommandArguments = buildArgs,
});
await RunAssertsAsync(
() =>
@ -153,7 +153,7 @@ namespace Microsoft.Oryx.Tests.Common
output,
volumes,
environmentVariables,
portMapping,
port,
link,
runCmd,
runArgs,
@ -166,11 +166,11 @@ namespace Microsoft.Oryx.Tests.Common
ITestOutputHelper output,
List<DockerVolume> volumes,
List<EnvironmentVariable> environmentVariables,
string portMapping,
int port,
string link,
string runCmd,
string[] runArgs,
Func<Task> assertAction,
Func<int, Task> assertAction,
DockerCli dockerCli)
{
DockerRunCommandProcessResult runResult = null;
@ -179,28 +179,30 @@ namespace Microsoft.Oryx.Tests.Common
{
// Docker run the runtime container as a foreground process. This way we can catch any errors
// that might occur when the application is being started.
runResult = dockerCli.RunAndDoNotWaitForProcessExit(
imageName,
environmentVariables,
volumes: volumes,
portMapping,
link,
runCmd,
runArgs);
runResult = dockerCli.RunAndDoNotWaitForProcessExit(new DockerRunArguments
{
ImageId = imageName,
EnvironmentVariables = environmentVariables,
Volumes = volumes,
PortInContainer = port,
Link = link,
CommandToExecuteOnRun = runCmd,
CommandArguments = runArgs,
});
// An exception could have occurred when a Docker process failed to start.
Assert.Null(runResult.Exception);
Assert.False(runResult.Process.HasExited);
var hostPort = await GetHostPortAsync(dockerCli, runResult.ContainerName, portInContainer: port);
for (var i = 0; i < MaxRetryCount; i++)
{
await Task.Delay(TimeSpan.FromSeconds(DelayBetweenRetriesInSeconds));
try
{
// Make sure the process is still alive and fail fast if not.
Assert.False(runResult.Process.HasExited);
await assertAction();
await assertAction(hostPort);
showDebugInfo = false;
break;
@ -212,6 +214,8 @@ namespace Microsoft.Oryx.Tests.Common
{
throw;
}
await Task.Delay(DelayBetweenRetriesInSeconds);
}
}
}
@ -231,6 +235,37 @@ namespace Microsoft.Oryx.Tests.Common
}
}
private static async Task<int> GetHostPortAsync(DockerCli dockerCli, string containerName, int portInContainer)
{
// We are depending on Docker to open ports in the host dynamically in order for our tests to be able to
// run in parallel without worrying about port collision and flaky tests. However it appears that Docker
// opens up a port in the host only after an attempt was made to open up a port in the container. Since a
// port in the container could open up late because of the way a web application works (like it might be
// initializing something which could take time), we are introducing delay for the application to be up
// before trying to invoke the 'docker port' command.
for (var i = 0; i < MaxRetryCount; i++)
{
await Task.Delay(DelayBetweenRetriesInSeconds);
// Example output that is ouput when "docker port <container-name> <container-port>" is run:
// 0.0.0.0:32774
var getPortMappingResult = dockerCli.GetPortMapping(containerName, portInContainer);
if (getPortMappingResult.ExitCode == 0)
{
var stdOut = getPortMappingResult.StdOut?.Trim().ReplaceNewLine();
var portMapping = stdOut?.Split(":");
Assert.NotNull(portMapping);
Assert.True(
(portMapping.Length == 2),
"Did not get the port mapping in expected format. StdOut: " + getPortMappingResult.StdOut);
var hostPort = Convert.ToInt32(portMapping[1]);
return hostPort;
}
}
throw new InvalidOperationException("Could not retreive the host port of the container.");
}
private static async Task RunAssertsAsync(Func<Task> action, DockerResultBase res, ITestOutputHelper output)
{
try

Просмотреть файл

@ -3,6 +3,8 @@
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<LangVersion>7.3</LangVersion>
<RootNamespace>Microsoft.Oryx.Tests.Common</RootNamespace>
<AssemblyName>Microsoft.Oryx.Tests.Common</AssemblyName>
</PropertyGroup>
<ItemGroup>