2016-08-22 19:24:10 +00:00
|
|
|
// Copyright (c) .NET Foundation and contributors. All rights reserved.
|
|
|
|
// Licensed under the MIT license. See LICENSE file in the project root for full license information.
|
|
|
|
|
|
|
|
using System.Linq;
|
|
|
|
using FluentAssertions;
|
|
|
|
using Microsoft.DotNet.Tools.Test.Utilities;
|
|
|
|
using Xunit;
|
|
|
|
using Microsoft.DotNet.ProjectJsonMigration;
|
|
|
|
using System;
|
|
|
|
using System.IO;
|
|
|
|
using Microsoft.Build.Construction;
|
2016-10-28 01:46:43 +00:00
|
|
|
using Microsoft.DotNet.Internal.ProjectModel;
|
2016-08-22 19:24:10 +00:00
|
|
|
using NuGet.Frameworks;
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
using System.Collections.Generic;
|
2016-08-23 20:50:05 +00:00
|
|
|
using Microsoft.DotNet.ProjectJsonMigration.Rules;
|
2016-08-22 19:24:10 +00:00
|
|
|
|
|
|
|
namespace Microsoft.DotNet.ProjectJsonMigration.Tests
|
|
|
|
{
|
|
|
|
public class GivenThatIWantToMigrateRuntimeOptions : TestBase
|
|
|
|
{
|
|
|
|
private static readonly string s_runtimeConfigFileName = "runtimeconfig.template.json";
|
|
|
|
|
|
|
|
[Fact]
|
2017-02-01 22:05:53 +00:00
|
|
|
public void RuntimeOptionsAreCopiedFromProjectJsonToRuntimeConfigTemplateJsonFile()
|
2016-08-22 19:24:10 +00:00
|
|
|
{
|
2016-09-22 04:23:50 +00:00
|
|
|
var testInstance = TestAssetsManager.CreateTestInstance("TestAppWithRuntimeOptions");
|
2016-08-22 19:24:10 +00:00
|
|
|
var projectDir = testInstance.Path;
|
|
|
|
var projectPath = Path.Combine(testInstance.Path, "project.json");
|
|
|
|
|
|
|
|
var project = JObject.Parse(File.ReadAllText(projectPath));
|
|
|
|
var rawRuntimeOptions = (JObject)project.GetValue("runtimeOptions");
|
|
|
|
|
|
|
|
var projectContext = ProjectContext.Create(projectDir, FrameworkConstants.CommonFrameworks.NetCoreApp10);
|
|
|
|
|
2016-12-07 21:49:15 +00:00
|
|
|
var testSettings = MigrationSettings.CreateMigrationSettingsTestHook(projectDir, projectDir, default(ProjectRootElement));
|
2016-08-22 19:24:10 +00:00
|
|
|
var testInputs = new MigrationRuleInputs(new[] { projectContext }, null, null, null);
|
|
|
|
new MigrateRuntimeOptionsRule().Apply(testSettings, testInputs);
|
|
|
|
|
|
|
|
var migratedRuntimeOptionsPath = Path.Combine(projectDir, s_runtimeConfigFileName);
|
|
|
|
|
|
|
|
File.Exists(migratedRuntimeOptionsPath).Should().BeTrue();
|
|
|
|
|
|
|
|
var migratedRuntimeOptionsContent = JObject.Parse(File.ReadAllText(migratedRuntimeOptionsPath));
|
|
|
|
JToken.DeepEquals(rawRuntimeOptions, migratedRuntimeOptionsContent).Should().BeTrue();
|
|
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
2017-02-01 22:05:53 +00:00
|
|
|
public void MigratingProjectJsonWithNoRuntimeOptionsProducesNoRuntimeConfigTemplateJsonFile()
|
2016-08-22 19:24:10 +00:00
|
|
|
{
|
2016-10-28 01:46:43 +00:00
|
|
|
var testInstance = TestAssetsManager.CreateTestInstance("PJTestAppSimple");
|
2016-08-22 19:24:10 +00:00
|
|
|
var projectDir = testInstance.Path;
|
|
|
|
|
|
|
|
var projectContext = ProjectContext.Create(projectDir, FrameworkConstants.CommonFrameworks.NetCoreApp10);
|
|
|
|
|
2016-12-07 21:49:15 +00:00
|
|
|
var testSettings = MigrationSettings.CreateMigrationSettingsTestHook(projectDir, projectDir, default(ProjectRootElement));
|
2016-08-22 19:24:10 +00:00
|
|
|
var testInputs = new MigrationRuleInputs(new[] { projectContext }, null, null, null);
|
|
|
|
new MigrateRuntimeOptionsRule().Apply(testSettings, testInputs);
|
|
|
|
|
|
|
|
var migratedRuntimeOptionsPath = Path.Combine(projectDir, s_runtimeConfigFileName);
|
|
|
|
|
|
|
|
File.Exists(migratedRuntimeOptionsPath).Should().BeFalse();
|
|
|
|
}
|
2017-02-01 22:05:53 +00:00
|
|
|
|
|
|
|
[Fact]
|
|
|
|
public void MigratingProjectJsonWithOnlyServerGCRuntimeOptionsProducesNoRuntimeConfigTemplateJsonFile()
|
|
|
|
{
|
|
|
|
var testDirectory = Temp.CreateDirectory().Path;
|
|
|
|
|
|
|
|
var pj = @"
|
|
|
|
{
|
|
|
|
""runtimeOptions"": {
|
|
|
|
""configProperties"": {
|
|
|
|
""System.GC.Server"": true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}";
|
|
|
|
|
|
|
|
RunMigrateRuntimeOptionsRulePj(pj, testDirectory);
|
|
|
|
var migratedRuntimeOptionsPath = Path.Combine(testDirectory, s_runtimeConfigFileName);
|
|
|
|
File.Exists(migratedRuntimeOptionsPath).Should().BeFalse();
|
|
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
public void MigratingProjectJsonWithServerGCAndOtherConfigPropertiesProducesRuntimeConfigTemplateJsonFile()
|
|
|
|
{
|
|
|
|
var testDirectory = Temp.CreateDirectory().Path;
|
|
|
|
|
|
|
|
var pj = @"
|
|
|
|
{
|
|
|
|
""runtimeOptions"": {
|
|
|
|
""configProperties"": {
|
|
|
|
""System.GC.Server"": false,
|
|
|
|
""Other"": false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}";
|
|
|
|
|
|
|
|
RunMigrateRuntimeOptionsRulePj(pj, testDirectory);
|
|
|
|
var migratedRuntimeOptionsPath = Path.Combine(testDirectory, s_runtimeConfigFileName);
|
|
|
|
File.Exists(migratedRuntimeOptionsPath).Should().BeTrue();
|
|
|
|
|
|
|
|
var root = JObject.Parse(File.ReadAllText(migratedRuntimeOptionsPath));
|
|
|
|
var configProperties = root.Value<JObject>("configProperties");
|
|
|
|
configProperties.Should().NotBeNull();
|
|
|
|
configProperties["System.GC.Server"].Should().BeNull();
|
|
|
|
configProperties["Other"].Should().NotBeNull();
|
|
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
public void MigratingProjectJsonWithServerGCAndOtherRuntimeOptionsProducesRuntimeConfigTemplateJsonFile()
|
|
|
|
{
|
|
|
|
var testDirectory = Temp.CreateDirectory().Path;
|
|
|
|
|
|
|
|
var pj = @"
|
|
|
|
{
|
|
|
|
""runtimeOptions"": {
|
|
|
|
""configProperties"": {
|
|
|
|
""System.GC.Server"": false
|
|
|
|
},
|
|
|
|
""Other"": false
|
|
|
|
}
|
|
|
|
}";
|
|
|
|
|
|
|
|
RunMigrateRuntimeOptionsRulePj(pj, testDirectory);
|
|
|
|
var migratedRuntimeOptionsPath = Path.Combine(testDirectory, s_runtimeConfigFileName);
|
|
|
|
File.Exists(migratedRuntimeOptionsPath).Should().BeTrue();
|
|
|
|
|
|
|
|
var root = JObject.Parse(File.ReadAllText(migratedRuntimeOptionsPath));
|
|
|
|
root.Value<JObject>("configProperties").Should().BeNull();
|
|
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
public void MigratingProjectJsonWithServerGCTrueProducesServerGarbageCollectionProperty()
|
|
|
|
{
|
|
|
|
var testDirectory = Temp.CreateDirectory().Path;
|
|
|
|
|
|
|
|
var pj = @"
|
|
|
|
{
|
|
|
|
""runtimeOptions"": {
|
|
|
|
""configProperties"": {
|
|
|
|
""System.GC.Server"": true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}";
|
|
|
|
|
|
|
|
var mockProj = RunMigrateRuntimeOptionsRulePj(pj, testDirectory);
|
|
|
|
var props = mockProj.Properties.Where(p => p.Name.Equals("ServerGarbageCollection", StringComparison.Ordinal));
|
|
|
|
props.Count().Should().Be(1);
|
|
|
|
props.First().Value.Should().Be("true");
|
|
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
public void MigratingProjectJsonWithServerGCFalseProducesServerGarbageCollectionProperty()
|
|
|
|
{
|
|
|
|
var testDirectory = Temp.CreateDirectory().Path;
|
|
|
|
|
|
|
|
var pj = @"
|
|
|
|
{
|
|
|
|
""runtimeOptions"": {
|
|
|
|
""configProperties"": {
|
|
|
|
""System.GC.Server"": false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}";
|
|
|
|
|
|
|
|
var mockProj = RunMigrateRuntimeOptionsRulePj(pj, testDirectory);
|
|
|
|
var props = mockProj.Properties.Where(p => p.Name.Equals("ServerGarbageCollection", StringComparison.Ordinal));
|
|
|
|
props.Count().Should().Be(1);
|
|
|
|
props.First().Value.Should().Be("false");
|
|
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
public void MigratingWebProjectJsonWithServerGCTrueDoesNotProduceServerGarbageCollectionProperty()
|
|
|
|
{
|
|
|
|
var testDirectory = Temp.CreateDirectory().Path;
|
|
|
|
|
|
|
|
var pj = @"
|
|
|
|
{
|
|
|
|
""buildOptions"": {
|
|
|
|
""emitEntryPoint"": true
|
|
|
|
},
|
|
|
|
""dependencies"": {
|
|
|
|
""Microsoft.AspNetCore.Mvc"": ""1.0.0""
|
|
|
|
},
|
|
|
|
""runtimeOptions"": {
|
|
|
|
""configProperties"": {
|
|
|
|
""System.GC.Server"": true
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}";
|
|
|
|
|
|
|
|
var mockProj = RunMigrateRuntimeOptionsRulePj(pj, testDirectory);
|
|
|
|
var props = mockProj.Properties.Where(p => p.Name.Equals("ServerGarbageCollection", StringComparison.Ordinal));
|
|
|
|
props.Count().Should().Be(0);
|
|
|
|
}
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
public void MigratingWebProjectJsonWithServerGCFalseProducesServerGarbageCollectionProperty()
|
|
|
|
{
|
|
|
|
var testDirectory = Temp.CreateDirectory().Path;
|
|
|
|
|
|
|
|
var pj = @"
|
|
|
|
{
|
|
|
|
""buildOptions"": {
|
|
|
|
""emitEntryPoint"": true
|
|
|
|
},
|
|
|
|
""dependencies"": {
|
|
|
|
""Microsoft.AspNetCore.Mvc"": ""1.0.0""
|
|
|
|
},
|
|
|
|
""runtimeOptions"": {
|
|
|
|
""configProperties"": {
|
|
|
|
""System.GC.Server"": false
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}";
|
|
|
|
|
|
|
|
var mockProj = RunMigrateRuntimeOptionsRulePj(pj, testDirectory);
|
|
|
|
var props = mockProj.Properties.Where(p => p.Name.Equals("ServerGarbageCollection", StringComparison.Ordinal));
|
|
|
|
props.Count().Should().Be(1);
|
|
|
|
props.First().Value.Should().Be("false");
|
|
|
|
}
|
|
|
|
|
|
|
|
private ProjectRootElement RunMigrateRuntimeOptionsRulePj(string s, string testDirectory = null)
|
|
|
|
{
|
|
|
|
testDirectory = testDirectory ?? Temp.CreateDirectory().Path;
|
|
|
|
return TemporaryProjectFileRuleRunner.RunRules(new IMigrationRule[]
|
|
|
|
{
|
|
|
|
new MigrateRuntimeOptionsRule()
|
|
|
|
}, s, testDirectory);
|
|
|
|
}
|
2016-08-22 19:24:10 +00:00
|
|
|
}
|
|
|
|
}
|