コード例 #1
0
ファイル: PhpEndToEndTests.cs プロジェクト: pombredanne/Oryx
        public async Task WordPress51(string phpVersion)
        {
            // Arrange
            string hostDir = Path.Combine(_hostTempDir, "wordpress");

            if (!Directory.Exists(hostDir))
            {
                using (var webClient = new WebClient())
                {
                    var wpZipPath = Path.Combine(_hostTempDir, "wp.zip");
                    webClient.DownloadFile("https://wordpress.org/wordpress-5.1.zip", wpZipPath);
                    // The ZIP already contains a `wordpress` folder
                    ZipFile.ExtractToDirectory(wpZipPath, _hostTempDir);
                }
            }

            var appName     = "wordpress";
            var volume      = DockerVolume.CreateMirror(hostDir);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} -l php --language-version {phpVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx -appPath {appDir} -output {RunScriptPath}")
                            .AddCommand(RunScriptPath)
                            .ToString();

            // Act & Assert
            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName, _output, volume,
                "/bin/sh", new[] { "-c", buildScript },
                $"oryxdevms/php-{phpVersion}",
                ContainerPort,
                "/bin/sh", new[] { "-c", runScript },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("<title>WordPress &rsaquo; Setup Configuration File</title>", data);
            });
        }
コード例 #2
0
        // pdo_sqlsrv only supports PHP >= 7.1
        public async Task PhpApp_UsingPdo(string phpVersion)
        {
            // Arrange
            var appName = "sqlsrv-example";
            var hostDir = Path.Combine(_hostSamplesDir, "php", appName);
            var volume  = DockerVolume.CreateMirror(hostDir);
            var appDir  = volume.ContainerDir;
            var script  = new ShellScriptBuilder()
                          .AddCommand($"oryx create-script -appPath {appDir} -bindPort {ContainerPort}")
                          .AddCommand(DefaultStartupFilePath)
                          .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                new List <DockerVolume> {
                volume
            },
                Settings.BuildImageName,
                "oryx",
                new[] { "build", appDir, "-l", "php", "--language-version", phpVersion },
                _imageHelper.GetRuntimeImage("php", phpVersion),
                GetEnvironmentVariables(),
                ContainerPort,
                "/bin/bash",
                new[]
            {
                "-c",
                script
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Equal(
                    DbContainerFixtureBase.GetSampleDataAsJson(),
                    data.Trim(),
                    ignoreLineEndingDifferences: true,
                    ignoreWhiteSpaceDifferences: true);
            });
        }
コード例 #3
0
        public async Task CanBuildAndRunPythonApp(string pythonVersion)
        {
            // Arrange
            var appName     = "flask-app";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand(GetSnippetToCleanUpExistingInstallation())
                              .SetEnvironmentVariable(SettingsKeys.EnableDynamicInstall, true.ToString())
                              .SetEnvironmentVariable(
                SdkStorageConstants.SdkStorageBaseUrlKeyName,
                SdkStorageConstants.DevSdkStorageBaseUrl)
                              .AddCommand(
                $"oryx build {appDir} --platform {PythonConstants.PlatformName} --platform-version {pythonVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .SetEnvironmentVariable(
                SdkStorageConstants.SdkStorageBaseUrlKeyName,
                SdkStorageConstants.DevSdkStorageBaseUrl)
                            .AddCommand($"oryx setupEnv -appPath {appDir}")
                            .AddCommand($"oryx create-script -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                new[] { volume },
                _imageHelper.GetLtsVersionsBuildImage(),
                "/bin/bash", new[] { "-c", buildScript },
                _imageHelper.GetRuntimeImage("python", "dynamic"),
                ContainerPort,
                "/bin/bash",
                new[] { "-c", runScript },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Hello World!", data);
            });
        }
コード例 #4
0
        public async Task CanBuildAndRunPythonApp_UsingPython37_AndVirtualEnv()
        {
            // Arrange
            var appName        = "flask-app";
            var virtualEnvName = "antenv";
            var volume         = CreateAppVolume(appName);
            var appDir         = volume.ContainerDir;
            var buildScript    = new ShellScriptBuilder()
                                 .AddCommand(
                $"oryx build {appDir} -p virtualenv_name={virtualEnvName} --platform {PythonConstants.PlatformName} --platform-version 3.7")
                                 .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx create-script -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/bash",
                new[]
            {
                "-c",
                buildScript
            },
                _imageHelper.GetRuntimeImage("python", "3.7"),
                ContainerPort,
                "/bin/bash",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Hello World!", data);
            });
        }
コード例 #5
0
        public async Task CanRunApp_UsingPreRunCommand_FromBuildEnvFile()
        {
            // Arrange
            var phpVersion = "7.3";
            var appName    = "twig-example";
            var hostDir    = Path.Combine(_hostSamplesDir, "php", appName);
            var volume     = DockerVolume.CreateMirror(hostDir);
            var appDir     = volume.ContainerDir;
            var expectedFileInOutputDir = Guid.NewGuid().ToString("N");
            var buildScript             = new ShellScriptBuilder()
                                          .AddCommand($"oryx build {appDir} --platform {PhpConstants.PlatformName} --platform-version {phpVersion}")
                                          // Create a 'build.env' file
                                          .AddCommand(
                $"echo '{FilePaths.PreRunCommandEnvVarName}=\"echo > {expectedFileInOutputDir}\"' > " +
                $"{appDir}/{BuildScriptGeneratorCli.Constants.BuildEnvironmentFileName}")
                                          .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx create-script -appPath {appDir} -output {RunScriptPath}")
                            .AddCommand(RunScriptPath)
                            .ToString();

            // Act & Assert
            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/sh", new[] { "-c", buildScript },
                _imageHelper.GetRuntimeImage("php", phpVersion),
                ContainerPort,
                "/bin/sh", new[] { "-c", runScript },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("<h1>Hello World!</h1>", data);

                // Verify that the file created using the pre-run command is
                // in fact present in the output directory.
                Assert.True(File.Exists(Path.Combine(volume.MountedHostDir, expectedFileInOutputDir)));
            });
        }
コード例 #6
0
        public async Task CanBuildAndRun_NodeExpressApp_UsingSingleImage_AndCustomStartupCommandOnly()
        {
            // Arrange
            var appName     = "linxnodeexpress";
            var nodeVersion = "10";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;

            // Create a custom startup command
            const string customRunCommand = "'npm start'";
            var          buildScript      = new ShellScriptBuilder()
                                            .AddCommand($"oryx build {appDir} --platform {NodeConstants.PlatformName} --platform-version {nodeVersion}")
                                            .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx run-script {appDir} --debug --platform {NodeConstants.PlatformName} --platform-version {nodeVersion} " +
                                        $"--output {DefaultStartupFilePath} -- -bindPort {ContainerPort} " +
                                        $"-userStartupCommand {customRunCommand}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName : appName,
                output : _output,
                volume : volume,
                buildCmd : "/bin/sh",
                buildArgs : new[] { "-c", buildScript },
                runtimeImageName : _imageHelper.GetBuildImage(),
                ContainerPort,
                runCmd : "/bin/sh",
                runArgs : new[]
            {
                "-c",
                runScript
            },
                assertAction : async(hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Equal("Hello World from express!", data);
            });
        }
コード例 #7
0
        public async Task Python37App_MicrosoftSqlServerDB(string imageTag)
        {
            // Arrange
            var appName = "mssqlserver-sample";
            var hostDir = Path.Combine(_hostSamplesDir, "python", appName);
            var volume  = DockerVolume.CreateMirror(hostDir);
            var appDir  = volume.ContainerDir;
            var script  = new ShellScriptBuilder()
                          .AddCommand($"oryx create-script -appPath {appDir} -bindPort {ContainerPort}")
                          .AddCommand(DefaultStartupFilePath)
                          .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                new List <DockerVolume> {
                volume
            },
                _imageHelper.GetBuildImage(imageTag),
                "oryx",
                new[] { "build", appDir, "--platform", "python", "--platform-version", "3.7" },
                _imageHelper.GetRuntimeImage("python", "3.7"),
                SqlServerDbTestHelper.GetEnvironmentVariables(),
                ContainerPort,
                "/bin/bash",
                new[]
            {
                "-c",
                script
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Equal(
                    DbContainerFixtureBase.GetSampleDataAsJson(),
                    data.Trim(),
                    ignoreLineEndingDifferences: true,
                    ignoreWhiteSpaceDifferences: true);
            });
        }
コード例 #8
0
        public async Task NodeStartupScript_UsesSuppliedBindingPort_EvenIfPortEnvironmentVariableValue_IsPresent()
        {
            // Arrange
            var nodeVersion = NodeVersion;
            var appName     = "webfrontend";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} --platform {NodeConstants.PlatformName} --platform-version {nodeVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"export PORT=9095")
                            .AddCommand($"oryx create-script -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/sh",
                new[]
            {
                "-c",
                buildScript
            },
                _imageHelper.GetRuntimeImage("node", nodeVersion),
                ContainerPort,
                "/bin/sh",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Say It Again", data);
            });
        }
コード例 #9
0
        public async Task CanBuildAndRun_NodeWebFrontEndApp_WhenPruneDevDependenciesIsTrue(string appName)
        {
            // Arrange
            var nodeVersion = "10";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand(
                $"oryx build {appDir} --platform {NodeConstants.PlatformName} --platform-version {nodeVersion} " +
                $"-p {NodePlatform.PruneDevDependenciesPropertyKey}=true")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx create-script -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/sh",
                new[]
            {
                "-c",
                buildScript
            },
                _imageHelper.GetRuntimeImage("node", nodeVersion),
                ContainerPort,
                "/bin/sh",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Say It Again", data);
            });
        }
コード例 #10
0
        public async Task Node_CreateReactAppSample_zippedNodeModules(string nodeVersion)
        {
            // Arrange
            // Use a separate volume for output due to rsync errors
            var appOutputDirPath = Directory.CreateDirectory(Path.Combine(_tempRootDir, Guid.NewGuid().ToString("N")))
                                   .FullName;
            var appOutputDirVolume = DockerVolume.CreateMirror(appOutputDirPath);
            var appOutputDir       = appOutputDirVolume.ContainerDir;
            var appName            = "create-react-app-sample";
            var volume             = CreateAppVolume(appName);
            var appDir             = volume.ContainerDir;
            var runAppScript       = new ShellScriptBuilder()
                                     .AddCommand($"oryx -appPath {appOutputDir} -bindPort {ContainerPort}")
                                     .AddCommand(DefaultStartupFilePath)
                                     .ToString();
            var buildScript = new ShellScriptBuilder()
                              .AddCommand(
                $"oryx build {appDir} -i /tmp/int -o /tmp/out --platform nodejs " +
                $"--platform-version {nodeVersion} -p compress_node_modules=zip")
                              .AddCommand($"cp -rf /tmp/out/* {appOutputDir}")
                              .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                new List <DockerVolume> {
                appOutputDirVolume, volume
            },
                "/bin/bash",
                new[] { "-c", buildScript },
                $"oryxdevmcr.azurecr.io/public/oryx/node-{nodeVersion}",
                ContainerPort,
                "/bin/sh",
                new[] { "-c", runAppScript },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("<title>React App</title>", data);
            });
        }
コード例 #11
0
        public async Task CanBuildAndRun_NodeExpressApp_UsingSingleImage_AndCustomStartupCommandOnly()
        {
            // Arrange
            var       appName     = "linxnodeexpress";
            var       nodeVersion = "10";
            var       hostDir     = Path.Combine(_hostSamplesDir, "nodejs", appName);
            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'";

            var runScript = new ShellScriptBuilder()
                            .AddCommand($"cd {appDir}")
                            .AddCommand($"oryx run-script --appPath {appDir} --platform nodejs --platform-version {nodeVersion} --userStartupCommand {customStartupScriptCommand} --debug")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName : appName,
                output : _output,
                volume : volume,
                buildCmd : "oryx",
                buildArgs : new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
                runtimeImageName : $"oryxdevms/build",
                portMapping : portMapping,
                runCmd : "/bin/sh",
                runArgs : new[]
            {
                "-c",
                runScript
            },
                assertAction : async() =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
                Assert.Equal("Hello World from express!", data);
            });
        }
コード例 #12
0
        public async Task CanBuildAndRun_FSharpNetCoreApp21WebApp_WithoutSpecifyingPlatformExplicitly()
        {
            // Arrange
            var hostDir          = Path.Combine(_hostSamplesDir, "DotNetCore", "FSharpNetCoreApp21.WebApp");
            var volume           = DockerVolume.CreateMirror(hostDir);
            var appDir           = volume.ContainerDir;
            var appOutputDir     = $"{appDir}/myoutputdir";
            var buildImageScript = new ShellScriptBuilder()
                                   .AddCommand($"oryx build {appDir} -o {appOutputDir}")
                                   .ToString();
            var runtimeImageScript = new ShellScriptBuilder()
                                     .AddCommand(
                $"oryx create-script -appPath {appOutputDir} -bindPort {ContainerPort}")
                                     .AddCommand(DefaultStartupFilePath)
                                     .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                NetCoreApp22WebApp,
                _output,
                volume,
                "/bin/sh",
                new[]
            {
                "-c",
                buildImageScript
            },
                _imageHelper.GetRuntimeImage("dotnetcore", "2.1"),
                ContainerPort,
                "/bin/sh",
                new[]
            {
                "-c",
                runtimeImageScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Hello World!", data);
            });
        }
コード例 #13
0
        public async Task NodeApp_MicrosoftSqlServerDB()
        {
            // Arrange
            var appName = "node-mssql";
            var hostDir = Path.Combine(_hostSamplesDir, "nodejs", appName);
            var volume  = DockerVolume.CreateMirror(hostDir);
            var appDir  = volume.ContainerDir;
            var script  = new ShellScriptBuilder()
                          .AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
                          .AddCommand(DefaultStartupFilePath)
                          .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                new List <DockerVolume> {
                volume
            },
                Settings.BuildImageName,
                "oryx",
                new[] { "build", appDir, "-l", "nodejs", "--language-version", "10.14" },
                "oryxdevms/node-10.14",
                GetEnvironmentVariables(),
                ContainerPort,
                "/bin/bash",
                new[]
            {
                "-c",
                script
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Equal(
                    DbContainerFixtureBase.GetSampleDataAsJson(),
                    data.Trim(),
                    ignoreLineEndingDifferences: true,
                    ignoreWhiteSpaceDifferences: true);
            });
        }
コード例 #14
0
ファイル: NodeEndToEndTests.cs プロジェクト: pombredanne/Oryx
        public async Task NodeStartupScript_UsesPortEnvironmentVariableValue()
        {
            // Arrange
            var nodeVersion = "10.14";
            var appName     = "webfrontend";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} -l nodejs --language-version {nodeVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"export PORT={ContainerPort}")
                            .AddCommand($"oryx -appPath {appDir}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/sh",
                new[]
            {
                "-c",
                buildScript
            },
                $"oryxdevms/node-{nodeVersion}",
                ContainerPort,
                "/bin/sh",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Say It Again", data);
            });
        }
コード例 #15
0
        public async Task CanBuildNodeAppUsingScriptsNodeInPackageJson()
        {
            // Arrange
            var appName     = "NodeAndTypeScriptHelloWorld";
            var nodeVersion = NodeVersion;
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} --platform {NodeConstants.PlatformName} --platform-version {nodeVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx create-script -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/sh",
                new[]
            {
                "-c",
                buildScript
            },
                _imageHelper.GetRuntimeImage("node", nodeVersion),
                ContainerPort,
                "/bin/sh",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("{\"message\":\"Hello World!\"}", data);
            });
        }
コード例 #16
0
        public async Task CanBuildAndRunPythonApp_UsingPython27_AndExplicitOutputStartupFile()
        {
            // Arrange
            var appName     = "python2-flask-app";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var startupFile = "/tmp/startup.sh";
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} --platform python --language-version 2.7")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx -appPath {appDir} -output {startupFile} -bindPort {ContainerPort}")
                            .AddCommand(startupFile)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/bash",
                new[]
            {
                "-c",
                buildScript
            },
                _imageHelper.GetTestRuntimeImage("python", "2.7"),
                ContainerPort,
                "/bin/bash",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Hello World!", data);
            });
        }
コード例 #17
0
        public async Task CanBuildAndRun_Angular6NodeApp_WithoutZippingNodeModules(string nodeVersion)
        {
            // Arrange
            var appName     = "angular6app";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} --platform nodejs --platform-version {nodeVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"export PORT=4200")
                            .AddCommand($"oryx -appPath {appDir}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/sh",
                new[]
            {
                "-c",
                buildScript
            },
                $"oryxdevmcr.azurecr.io/public/oryx/node-{nodeVersion}",
                4200,
                "/bin/sh",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Angular6app", data);
            });
        }
コード例 #18
0
        public async Task PythonStartupScript_UsesPortEnvironmentVariableValue()
        {
            // Arrange
            var appName     = "flask-app";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"export PORT={ContainerPort}")
                            .AddCommand($"oryx -appPath {appDir}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/bash",
                new[]
            {
                "-c",
                buildScript
            },
                "oryxdevmcr.azurecr.io/public/oryx/python-3.7",
                ContainerPort,
                "/bin/bash",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Hello World!", data);
            });
        }
コード例 #19
0
ファイル: NodeEndToEndTests.cs プロジェクト: pombredanne/Oryx
        public async Task Node_CreateReactAppSample()
        {
            // Arrange
            var appName     = "create-react-app-sample";
            var nodeVersion = "10.14";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} -l nodejs --language-version {nodeVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/sh",
                new[]
            {
                "-c",
                buildScript
            },
                $"oryxdevms/node-{nodeVersion}",
                ContainerPort,
                "/bin/sh",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("<title>React App</title>", data);
            });
        }
コード例 #20
0
        public async Task PythonStartupScript_UsesSuppliedBindingPort_EvenIfPortEnvironmentVariableValue_IsPresent()
        {
            // Arrange
            var appName     = "flask-app";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"export PORT=9095")
                            .AddCommand($"oryx create-script -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/bash",
                new[]
            {
                "-c",
                buildScript
            },
                _imageHelper.GetTestRuntimeImage("python", "3.7"),
                ContainerPort,
                "/bin/bash",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Hello World!", data);
            });
        }
コード例 #21
0
        public async Task Node_CreateReactAppSample()
        {
            // Arrange
            var appName     = "create-react-app-sample";
            var nodeVersion = NodeVersion;
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} --platform {NodeConstants.PlatformName} --platform-version {nodeVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx create-script -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/sh",
                new[]
            {
                "-c",
                buildScript
            },
                _imageHelper.GetRuntimeImage("node", nodeVersion),
                ContainerPort,
                "/bin/sh",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("<title>React App</title>", data);
            });
        }
コード例 #22
0
        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      = $"{_appPort}:{containerPort}";
            var entrypointScript = "./run.sh";
            var bindPortFlag     = specifyBindPortFlag ? $"-bindPort {containerPort}" : string.Empty;
            var script           = new ShellScriptBuilder()
                                   .AddCommand($"cd {appDir}")
                                   .AddCommand($"oryx -appPath {appDir} {bindPortFlag}")
                                   .AddCommand(entrypointScript)
                                   .ToString();

            var runtimeImageName = $"oryxdevms/{language}-{languageVersion}";

            if (string.Equals(language, "nodejs", StringComparison.OrdinalIgnoreCase))
            {
                runtimeImageName = $"oryxdevms/node-{languageVersion}";
            }

            string link = $"{_dbFixture.DbServerContainerName}:{Constants.InternalDbLinkName}";

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                _output,
                new List <DockerVolume> {
                volume
            },
                "oryx", new[] { "build", appDir, "-l", language, "--language-version", languageVersion },
                runtimeImageName,
                _dbFixture.GetCredentialsAsEnvVars(),
                portMapping, link,
                "/bin/sh", new[] { "-c", script },
                async() =>
            {
                var data = await HttpClient.GetStringAsync($"http://localhost:{_appPort}/");
                Assert.Equal(_dbFixture.GetSampleDataAsJson(), data.Trim(), ignoreLineEndingDifferences: true, ignoreWhiteSpaceDifferences: true);
            });
        }
コード例 #23
0
        public async Task BuildsAndRunsNodeApp_WhenPruneDevDependenciesIsTrue_AndNodeModulesAreCompressed()
        {
            // Arrange
            // Use a separate volume for output due to rsync errors
            var nodeVersion        = "10";
            var appOutputDirVolume = CreateAppOutputDirVolume();
            var appOutputDir       = appOutputDirVolume.ContainerDir;
            var appName            = "webfrontend";
            var volume             = CreateAppVolume(appName);
            var appDir             = volume.ContainerDir;
            var runAppScript       = new ShellScriptBuilder()
                                     .AddCommand($"oryx create-script -appPath {appOutputDir} -bindPort {ContainerPort}")
                                     .AddCommand(DefaultStartupFilePath)
                                     .ToString();
            var buildScript = new ShellScriptBuilder()
                              .AddCommand(
                $"oryx build {appDir} -i /tmp/int -o {appOutputDir} --platform {NodeConstants.PlatformName} " +
                $"--platform-version {nodeVersion} -p {NodePlatform.CompressNodeModulesPropertyKey}=zip" +
                $" -p {NodePlatform.PruneDevDependenciesPropertyKey}=true")
                              .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                new List <DockerVolume> {
                appOutputDirVolume, volume
            }, Settings.LtsVersionsBuildImageName,
                "/bin/bash",
                new[] { "-c", buildScript },
                _imageHelper.GetRuntimeImage("node", nodeVersion),
                ContainerPort,
                "/bin/sh",
                new[] { "-c", runAppScript },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Say It Again", data);
            });
        }
コード例 #24
0
        public async Task CanBuildAndRun_ShapelyFlaskApp_UsingVirtualEnv(string pythonVersion)
        {
            // Arrange
            var appName     = "shapely-flask-app";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} --platform python --language-version {pythonVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();
            var imageVersion = "oryxdevmcr.azurecr.io/public/oryx/python-" + pythonVersion;

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/bash",
                new[]
            {
                "-c",
                buildScript
            },
                imageVersion,
                ContainerPort,
                "/bin/bash",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Hello Shapely, Area is: 314", data);
            });
        }
コード例 #25
0
        public async Task CanBuildAndRun_Tweeter3App()
        {
            // Arrange
            var appName     = "tweeter3";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .SetEnvironmentVariable(EnvironmentSettingsKeys.PostBuildCommand, "scripts/postbuild.sh")
                              .AddCommand($"oryx build {appDir} --platform python --platform-version 3.7")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx create-script -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/bash",
                new[]
            {
                "-c",
                buildScript
            },
                _imageHelper.GetTestRuntimeImage("python", "3.7"),
                ContainerPort,
                "/bin/bash",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("logged in as: bob", data);
            });
        }
コード例 #26
0
        public async Task Node_Lab2AppServiceApp()
        {
            // Arrange
            var appName     = "lab2-appservice";
            var nodeVersion = "10.14";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} --platform nodejs --language-version {nodeVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/sh",
                new[]
            {
                "-c",
                buildScript
            },
                _imageHelper.GetTestRuntimeImage("node", nodeVersion),
                ContainerPort,
                "/bin/sh",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Welcome to Express", data);
            });
        }
コード例 #27
0
        public async Task Node_SoundCloudNgrxApp()
        {
            // Arrange
            var appName     = "soundcloud-ngrx";
            var nodeVersion = "8.11";
            var hostDir     = Path.Combine(_hostSamplesDir, "nodejs", appName);
            var volume      = DockerVolume.Create(hostDir);
            var appDir      = volume.ContainerDir;
            var portMapping = $"{HostPort}:3000";
            var startupFile = "./run.sh";
            var script      = new ShellScriptBuilder()
                              .AddCommand($"cd {appDir}")
                              .AddCommand($"oryx -appPath {appDir}")
                              .AddCommand($"npm rebuild node-sass") //remove this once workitem 762584 is done
                              .AddCommand(startupFile)
                              .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "oryx",
                new[] { "build", appDir, "-l", "nodejs", "--language-version", nodeVersion },
                $"oryxdevms/node-{nodeVersion}",
                portMapping,
                "/bin/sh",
                new[]
            {
                "-c",
                script
            },
                async() =>
            {
                var response = await _httpClient.GetAsync($"http://localhost:{HostPort}/");
                Assert.True(response.IsSuccessStatusCode);
                var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
                Assert.Contains("<title>SoundCloud • Angular2 NgRx</title>", data);
            });
        }
コード例 #28
0
        public async Task CanBuildNodeAppUsingScriptsNodeInPackageJson()
        {
            // Arrange
            var appName     = "NodeAndTypeScriptHelloWorld";
            var nodeVersion = "10.14";
            var volume      = CreateAppVolume(appName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} --platform nodejs --language-version {nodeVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"oryx -appPath {appDir} -bindPort {ContainerPort}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "/bin/sh",
                new[]
            {
                "-c",
                buildScript
            },
                $"oryxdevmcr.azurecr.io/public/oryx/node-{nodeVersion}",
                ContainerPort,
                "/bin/sh",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("{\"message\":\"Hello World!\"}", data);
            });
        }
コード例 #29
0
ファイル: NodeNextJsAppTest.cs プロジェクト: kedsouza/Oryx
        public async Task CanBuildAndRun_BlogStarterNextJsApp_WithoutZippingNodeModules()
        {
            // Arrange
            var nodeVersion = "10";
            var volume      = CreateAppVolume(AppName);
            var appDir      = volume.ContainerDir;
            var buildScript = new ShellScriptBuilder()
                              .AddCommand($"oryx build {appDir} --platform nodejs --platform-version {nodeVersion}")
                              .ToString();
            var runScript = new ShellScriptBuilder()
                            .AddCommand($"export PORT={ContainerAppPort}")
                            .AddCommand($"oryx -appPath {appDir}")
                            .AddCommand(DefaultStartupFilePath)
                            .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                AppName,
                _output,
                volume,
                "/bin/sh",
                new[]
            {
                "-c",
                buildScript
            },
                $"oryxdevmcr.azurecr.io/public/oryx/node-{nodeVersion}",
                ContainerAppPort,
                "/bin/sh",
                new[]
            {
                "-c",
                runScript
            },
                async (hostPort) =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{hostPort}/");
                Assert.Contains("Welcome to your new blog built with Next.js", data);
            });
        }
コード例 #30
0
        public async Task Python27App_virtualEnv()
        {
            // Arrange
            var          appName        = "python2-flask-app";
            var          hostDir        = Path.Combine(_hostSamplesDir, "python", appName);
            var          volume         = DockerVolume.Create(hostDir);
            var          appDir         = volume.ContainerDir;
            const string virtualEnvName = "antenv2.7";
            var          startupFile    = "/tmp/startup.sh";
            var          portMapping    = $"{HostPort}:5000";
            var          script         = new ShellScriptBuilder()
                                          // Mimic the commands ran by app service in their derived image.
                                          .AddCommand("pip install gunicorn")
                                          .AddCommand("pip install flask")
                                          .AddCommand($"cd {appDir}")
                                          .AddCommand($"oryx -appPath {appDir} -output {startupFile} -hostBind=\":5000\" -virtualEnvName={virtualEnvName}")
                                          .AddCommand(startupFile)
                                          .ToString();

            await EndToEndTestHelper.BuildRunAndAssertAppAsync(
                appName,
                _output,
                volume,
                "oryx",
                new[] { "build", appDir, "-l", "python", "--language-version", "2.7", "-p", $"virtualenv_name={virtualEnvName}" },
                "oryxdevms/python-2.7",
                portMapping,
                "/bin/bash",
                new[]
            {
                "-c",
                script
            },
                async() =>
            {
                var data = await _httpClient.GetStringAsync($"http://localhost:{HostPort}/");
                Assert.Contains("Hello World!", data);
            });
        }