Skip to content

Commit

Permalink
Optimizing build and runtime image tests
Browse files Browse the repository at this point in the history
* initial operation on runtime tests

* update

* update node build image tests

* optimizing build image python tests
  • Loading branch information
arroyc authored May 15, 2019
1 parent bce9d13 commit 05bc1ce
Show file tree
Hide file tree
Showing 7 changed files with 523 additions and 372 deletions.
274 changes: 151 additions & 123 deletions tests/Oryx.BuildImage.Tests/NodeJSSampleAppsTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,20 +14,27 @@

namespace Microsoft.Oryx.BuildImage.Tests
{
public class NodeJSSampleAppsTest : SampleAppsTestBase
public class NodeJSSampleAppsTestBase : SampleAppsTestBase
{
private static readonly string SampleAppName = "webfrontend";
public static readonly string SampleAppName = "webfrontend";

private DockerVolume CreateWebFrontEndVolume() => DockerVolume.Create(
public DockerVolume CreateWebFrontEndVolume() => DockerVolume.Create(
Path.Combine(_hostSamplesDir, "nodejs", SampleAppName));

public NodeJSSampleAppsTest(ITestOutputHelper output) :
public NodeJSSampleAppsTestBase(ITestOutputHelper output) :
base(output, new DockerCli(new EnvironmentVariable[]
{
new EnvironmentVariable(LoggingConstants.AppServiceAppNameEnvironmentVariableName, SampleAppName)
}))
{
}
}

public class NodeJsSampleAppsOtherTests : NodeJSSampleAppsTestBase
{
public NodeJsSampleAppsOtherTests(ITestOutputHelper output) : base(output)
{
}

[Fact]
public void GeneratesScript_AndBuilds()
Expand Down Expand Up @@ -164,125 +171,6 @@ public void BuildNodeApp_ConfigureAppInsights__WithDefaultNodeVersion_AIEnvironm
result.GetDebugInfo());
}

[Theory]
[MemberData(nameof(TestValueGenerator.GetNodeVersions_SupportDebugging),
MemberType = typeof(TestValueGenerator))]
public void BuildNodeApp_ConfigureAppInsights_WithCorrectNodeVersion_AIEnvironmentVariableSet(string version)
{
// Arrange
var volume = CreateWebFrontEndVolume();
var appDir = volume.ContainerDir;
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")
.AddDirectoryExistsCheck($"{nestedOutputDir}/node_modules")
.AddFileExistsCheck($"{nestedOutputDir}/oryx-appinsightsloader.js")
.AddFileExistsCheck($"{nestedOutputDir}/oryx-manifest.toml")
.AddStringExistsInFileCheck("injectedAppInsights=\"True\"", $"{nestedOutputDir}/oryx-manifest.toml")
.ToString();

// Act
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable>
{
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "xyz")
},
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});

// Assert
RunAsserts(
() =>
{
Assert.True(result.IsSuccess);
},
result.GetDebugInfo());
}

[Theory]
[MemberData(nameof(TestValueGenerator.GetNodeVersions_DoesNotSupportDebugging),
MemberType = typeof(TestValueGenerator))]
public void BuildNodeApp_DoesNotConfigureAppInsights_WithWrongNodeVersion_AIEnvironmentVariableSet(
string version)
{
// Arrange
var volume = CreateWebFrontEndVolume();
var appDir = volume.ContainerDir;
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")
.AddDirectoryExistsCheck($"{nestedOutputDir}/node_modules")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-appinsightsloader.js")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-manifest.toml")
.ToString();

// Act
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable>
{
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "xyz")
},
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});

// Assert
RunAsserts(
() =>
{
Assert.True(result.IsSuccess);
},
result.GetDebugInfo());
}

[Theory]
[MemberData(nameof(TestValueGenerator.GetNodeVersions_SupportDebugging),
MemberType = typeof(TestValueGenerator))]
public void BuildNodeApp_DoesNotConfigureAppInsights_WithCorrectNodeVersion_AIEnvironmentVariableNotSet(
string version)
{
// Arrange
var volume = CreateWebFrontEndVolume();
var appDir = volume.ContainerDir;
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")
.AddDirectoryExistsCheck($"{nestedOutputDir}/node_modules")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-appinsightsloader.js")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-manifest.toml")
.ToString();

// Act
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});

// Assert
RunAsserts(
() =>
{
Assert.True(result.IsSuccess);
},
result.GetDebugInfo());
}

[Fact]
public void Build_ReplacesContentInDestinationDir_WhenDestinationDirIsNotEmpty()
{
Expand Down Expand Up @@ -803,4 +691,144 @@ public void BuildsNodeApp_AndDoesNotZipNodeModules_IfZipNodeModulesIsFalse()
result.GetDebugInfo());
}
}

public class NodeJSSampleAppsTestConfigureAppInsights : NodeJSSampleAppsTestBase
{
public NodeJSSampleAppsTestConfigureAppInsights(ITestOutputHelper output) : base(output)
{
}

[Theory]
[MemberData(nameof(TestValueGenerator.GetNodeVersions_SupportDebugging),
MemberType = typeof(TestValueGenerator))]
public void BuildNodeApp_ConfigureAppInsights_WithCorrectNodeVersion_AIEnvironmentVariableSet(string version)
{
// Arrange
var volume = CreateWebFrontEndVolume();
var appDir = volume.ContainerDir;
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")
.AddDirectoryExistsCheck($"{nestedOutputDir}/node_modules")
.AddFileExistsCheck($"{nestedOutputDir}/oryx-appinsightsloader.js")
.AddFileExistsCheck($"{nestedOutputDir}/oryx-manifest.toml")
.AddStringExistsInFileCheck("injectedAppInsights=\"True\"", $"{nestedOutputDir}/oryx-manifest.toml")
.ToString();

// Act
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable>
{
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "xyz")
},
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});

// Assert
RunAsserts(
() =>
{
Assert.True(result.IsSuccess);
},
result.GetDebugInfo());
}
}

public class NodeJSSampleAppsTestWithAppInsightsEnvVariableSet : NodeJSSampleAppsTestBase
{
public NodeJSSampleAppsTestWithAppInsightsEnvVariableSet(ITestOutputHelper output) : base(output)
{
}

[Theory]
[MemberData(nameof(TestValueGenerator.GetNodeVersions_DoesNotSupportDebugging),
MemberType = typeof(TestValueGenerator))]
public void BuildNodeApp_DoesNotConfigureAppInsights_WithWrongNodeVersion_AIEnvironmentVariableSet(
string version)
{
// Arrange
var volume = CreateWebFrontEndVolume();
var appDir = volume.ContainerDir;
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")
.AddDirectoryExistsCheck($"{nestedOutputDir}/node_modules")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-appinsightsloader.js")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-manifest.toml")
.ToString();

// Act
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
EnvironmentVariables = new List<EnvironmentVariable>
{
new EnvironmentVariable("APPINSIGHTS_INSTRUMENTATIONKEY", "xyz")
},
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});

// Assert
RunAsserts(
() =>
{
Assert.True(result.IsSuccess);
},
result.GetDebugInfo());
}
}

public class NodeJSSampleAppsTestWithAppInsightsEnvVariableNotSet : NodeJSSampleAppsTestBase
{
public NodeJSSampleAppsTestWithAppInsightsEnvVariableNotSet(ITestOutputHelper output) : base(output)
{
}

[Theory]
[MemberData(nameof(TestValueGenerator.GetNodeVersions_SupportDebugging),
MemberType = typeof(TestValueGenerator))]
public void BuildNodeApp_DoesNotConfigureAppInsights_WithCorrectNodeVersion_AIEnvironmentVariableNotSet(
string version)
{
// Arrange
var volume = CreateWebFrontEndVolume();
var appDir = volume.ContainerDir;
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")
.AddDirectoryExistsCheck($"{nestedOutputDir}/node_modules")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-appinsightsloader.js")
.AddFileDoesNotExistCheck($"{nestedOutputDir}/oryx-manifest.toml")
.ToString();

// Act
var result = _dockerCli.Run(new DockerRunArguments
{
ImageId = Settings.BuildImageName,
Volumes = new List<DockerVolume> { volume },
CommandToExecuteOnRun = "/bin/bash",
CommandArguments = new[] { "-c", script }
});

// Assert
RunAsserts(
() =>
{
Assert.True(result.IsSuccess);
},
result.GetDebugInfo());
}
}
}
Loading

0 comments on commit 05bc1ce

Please sign in to comment.