@@ -1051,6 +1051,80 @@ public void Initialize_AppliesLoggerConfig()
1051
1051
}
1052
1052
}
1053
1053
1054
+ [ Fact ]
1055
+ public void Initialize_Sanitizes_HostJsonLog ( )
1056
+ {
1057
+ TestTraceWriter traceWriter = new TestTraceWriter ( TraceLevel . Info ) ;
1058
+ TestLoggerProvider loggerProvider = null ;
1059
+ var loggerFactoryHookMock = new Mock < ILoggerFactoryBuilder > ( MockBehavior . Strict ) ;
1060
+ loggerFactoryHookMock
1061
+ . Setup ( m => m . AddLoggerProviders ( It . IsAny < ILoggerFactory > ( ) , It . IsAny < ScriptHostConfiguration > ( ) , It . IsAny < ScriptSettingsManager > ( ) ) )
1062
+ . Callback < ILoggerFactory , ScriptHostConfiguration , ScriptSettingsManager > ( ( factory , scriptConfig , settings ) =>
1063
+ {
1064
+ loggerProvider = new TestLoggerProvider ( scriptConfig . LogFilter . Filter ) ;
1065
+ factory . AddProvider ( loggerProvider ) ;
1066
+ } ) ;
1067
+
1068
+ string rootPath = Path . Combine ( Environment . CurrentDirectory , "ScriptHostTests" ) ;
1069
+ if ( ! Directory . Exists ( rootPath ) )
1070
+ {
1071
+ Directory . CreateDirectory ( rootPath ) ;
1072
+ }
1073
+
1074
+ // Turn off all logging. We shouldn't see any output.
1075
+ string hostJsonContent = @"
1076
+ {
1077
+ 'functionTimeout': '00:05:00',
1078
+ 'functions': [ 'FunctionA', 'FunctionB' ],
1079
+ 'logger': {
1080
+ 'categoryFilter': {
1081
+ 'defaultLevel': 'Information'
1082
+ }
1083
+ },
1084
+ 'Values': {
1085
+ 'MyCustomValue': 'abc'
1086
+ }
1087
+ }" ;
1088
+
1089
+ File . WriteAllText ( Path . Combine ( rootPath , "host.json" ) , hostJsonContent ) ;
1090
+
1091
+ ScriptHostConfiguration config = new ScriptHostConfiguration ( )
1092
+ {
1093
+ RootScriptPath = rootPath ,
1094
+ TraceWriter = traceWriter
1095
+ } ;
1096
+
1097
+ config . LoggerFactoryBuilder = loggerFactoryHookMock . Object ;
1098
+
1099
+ config . HostConfig . HostId = ID ;
1100
+ var environment = new Mock < IScriptHostEnvironment > ( ) ;
1101
+ var eventManager = new Mock < IScriptEventManager > ( ) ;
1102
+
1103
+ ScriptHost . Create ( environment . Object , eventManager . Object , config , _settingsManager ) ;
1104
+
1105
+ string hostJsonSanitized = @"
1106
+ {
1107
+ 'functionTimeout': '00:05:00',
1108
+ 'functions': [ 'FunctionA', 'FunctionB' ],
1109
+ 'logger': {
1110
+ 'categoryFilter': {
1111
+ 'defaultLevel': 'Information'
1112
+ }
1113
+ }
1114
+ }" ;
1115
+
1116
+ // for formatting
1117
+ var hostJson = JObject . Parse ( hostJsonSanitized ) ;
1118
+ string expectedMessgae = $ "Host configuration file read:{ Environment . NewLine } { hostJson } ";
1119
+
1120
+ var logger = loggerProvider . CreatedLoggers . Single ( l => l . Category == LogCategories . Startup ) ;
1121
+ var logMessage = logger . LogMessages . Single ( l => l . FormattedMessage . StartsWith ( "Host configuration " ) ) . FormattedMessage ;
1122
+ Assert . Equal ( expectedMessgae , logMessage ) ;
1123
+
1124
+ var traceMessage = traceWriter . Traces . Single ( t => t . Message . StartsWith ( "Host configuration " ) ) . Message ;
1125
+ Assert . Equal ( expectedMessgae , traceMessage ) ;
1126
+ }
1127
+
1054
1128
[ Fact ]
1055
1129
public void Initialize_LogsException_IfParseError ( )
1056
1130
{
0 commit comments