public void GenerateBatchFilesAndBashScriptsWithBundledRuntime(DisposableDir runtimeHomeDir) { // Each runtime home only contains one runtime package, which is the one we are currently testing against var runtimeRoot = Directory.EnumerateDirectories(Path.Combine(runtimeHomeDir, "runtimes"), Constants.RuntimeNamePrefix + "*").First(); var runtimeName = new DirectoryInfo(runtimeRoot).Name; var projectStructure = @"{ '.': ['project.json'], 'packages': {} }"; var expectedOutputStructure = @"{ '.': ['run.cmd', 'run', 'kestrel.cmd', 'kestrel'], 'approot': { 'global.json': '', 'src': { 'PROJECT_NAME': { '.': ['project.json'] } }, 'packages': { 'RUNTIME_PACKAGE_NAME': {} } } }".Replace("PROJECT_NAME", _projectName).Replace("RUNTIME_PACKAGE_NAME", runtimeName); using (var testEnv = new KpmTestEnvironment(runtimeHomeDir, _projectName, _outputDirName)) { DirTree.CreateFromJson(projectStructure) .WithFileContents("project.json", @"{ ""commands"": { ""run"": ""run server.urls=http://localhost:5003"", ""kestrel"": ""Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"" }, ""frameworks"": { ""aspnet50"": { }, ""aspnetcore50"": { } } }") .WriteTo(testEnv.ProjectPath); var environment = new Dictionary <string, string>() { { EnvironmentNames.Packages, Path.Combine(testEnv.ProjectPath, "packages") }, { EnvironmentNames.Home, runtimeHomeDir }, { EnvironmentNames.Trace, "1" } }; var exitCode = KpmTestUtils.ExecKpm( runtimeHomeDir, subcommand: "bundle", arguments: string.Format("--out {0} --runtime {1}", testEnv.BundleOutputDirPath, runtimeName), environment: environment, workingDir: testEnv.ProjectPath); Assert.Equal(0, exitCode); var runtimeSubDir = DirTree.CreateFromDirectory(runtimeRoot) .RemoveFile(Path.Combine("bin", "lib", "Microsoft.Framework.PackageManager", "bin", "profile", "startup.prof")); var batchFileBinPath = string.Format(@"%~dp0approot\packages\{0}\bin\", runtimeName); var bashScriptBinPath = string.Format("$DIR/approot/packages/{0}/bin/", runtimeName); var expectedOutputDir = DirTree.CreateFromJson(expectedOutputStructure) .WithFileContents(Path.Combine("approot", "src", testEnv.ProjectName, "project.json"), @"{ ""commands"": { ""run"": ""run server.urls=http://localhost:5003"", ""kestrel"": ""Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"" }, ""frameworks"": { ""aspnet50"": { }, ""aspnetcore50"": { } } }") .WithFileContents(Path.Combine("approot", "global.json"), @"{ ""dependencies"": {}, ""packages"": ""packages"" }") .WithFileContents("run.cmd", BatchFileTemplate, batchFileBinPath, Constants.BootstrapperExeName, testEnv.ProjectName, "run") .WithFileContents("kestrel.cmd", BatchFileTemplate, batchFileBinPath, Constants.BootstrapperExeName, testEnv.ProjectName, "kestrel") .WithFileContents("run", BashScriptTemplate, EnvironmentNames.AppBase, testEnv.ProjectName, bashScriptBinPath, Constants.BootstrapperExeName, "run") .WithFileContents("kestrel", BashScriptTemplate, EnvironmentNames.AppBase, testEnv.ProjectName, bashScriptBinPath, Constants.BootstrapperExeName, "kestrel") .WithSubDir(Path.Combine("approot", "packages", runtimeName), runtimeSubDir); Assert.True(expectedOutputDir.MatchDirectoryOnDisk(testEnv.BundleOutputDirPath, compareFileContents: true)); } }
public void GenerateBatchFilesAndBashScriptsWithPackedRuntime(DisposableDir kreHomeDir) { // Each KRE home only contains one KRE package, which is the one we are currently testing against var kreRoot = Directory.EnumerateDirectories(Path.Combine(kreHomeDir, "packages"), "KRE-*").First(); var kreName = new DirectoryInfo(kreRoot).Name; var projectStructure = @"{ '.': ['project.json'], 'packages': {} }"; var expectedOutputStructure = @"{ '.': ['run.cmd', 'run', 'kestrel.cmd', 'kestrel'], 'approot': { 'global.json': '', 'src': { 'PROJECT_NAME': { '.': ['project.json'] } }, 'packages': { 'KRE_PACKAGE_NAME': {} } } }".Replace("PROJECT_NAME", _projectName).Replace("KRE_PACKAGE_NAME", kreName); using (var testEnv = new KpmTestEnvironment(kreHomeDir, _projectName, _outputDirName)) { DirTree.CreateFromJson(projectStructure) .WithFileContents("project.json", @"{ ""commands"": { ""run"": ""run server.urls=http://localhost:5003"", ""kestrel"": ""Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"" }, ""frameworks"": { ""aspnet50"": { }, ""aspnetcore50"": { } } }") .WriteTo(testEnv.ProjectPath); var environment = new Dictionary <string, string>() { { "KRE_PACKAGES", Path.Combine(testEnv.ProjectPath, "packages") }, { "KRE_HOME", kreHomeDir }, { "KRE_TRACE", "1" } }; var exitCode = KpmTestUtils.ExecKpm( kreHomeDir, subcommand: "pack", arguments: string.Format("--out {0} --runtime {1}", testEnv.PackOutputDirPath, kreName), environment: environment, workingDir: testEnv.ProjectPath); Assert.Equal(0, exitCode); var kreNupkgSHA = TestUtils.ComputeSHA(Path.Combine(kreRoot, kreName + ".nupkg")); var runtimeSubDir = DirTree.CreateFromDirectory(kreRoot) .WithFileContents(kreName + ".nupkg.sha512", kreNupkgSHA) .RemoveFile("[Content_Types].xml") .RemoveFile(Path.Combine("_rels", ".rels")) .RemoveSubDir("package"); var batchFileBinPath = string.Format(@"%~dp0approot\packages\{0}\bin\", kreName); var bashScriptBinPath = string.Format("$DIR/approot/packages/{0}/bin/", kreName); var expectedOutputDir = DirTree.CreateFromJson(expectedOutputStructure) .WithFileContents(Path.Combine("approot", "src", testEnv.ProjectName, "project.json"), @"{ ""commands"": { ""run"": ""run server.urls=http://localhost:5003"", ""kestrel"": ""Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"" }, ""frameworks"": { ""aspnet50"": { }, ""aspnetcore50"": { } } }") .WithFileContents(Path.Combine("approot", "global.json"), @"{ ""dependencies"": {}, ""packages"": ""packages"" }") .WithFileContents("run.cmd", BatchFileTemplate, batchFileBinPath, testEnv.ProjectName, "run") .WithFileContents("kestrel.cmd", BatchFileTemplate, batchFileBinPath, testEnv.ProjectName, "kestrel") .WithFileContents("run", BashScriptTemplate, testEnv.ProjectName, bashScriptBinPath, "run") .WithFileContents("kestrel", BashScriptTemplate, testEnv.ProjectName, bashScriptBinPath, "kestrel") .WithSubDir(Path.Combine("approot", "packages", kreName), runtimeSubDir); Assert.True(expectedOutputDir.MatchDirectoryOnDisk(testEnv.PackOutputDirPath, compareFileContents: true)); } }