Skip to content

Commit 47d2839

Browse files
committed
Fixing issue with function name processing
1 parent eea9bc4 commit 47d2839

File tree

2 files changed

+47
-4
lines changed

2 files changed

+47
-4
lines changed

src/WebJobs.Script/Host/ScriptHost.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,9 @@ public void NotifyDebug()
158158
}
159159
}
160160

161-
internal void AddFunctionError(string functionName, string error)
161+
internal void AddFunctionError(string functionName, string error, bool isFunctionShortName = false)
162162
{
163-
functionName = Utility.GetFunctionShortName(functionName);
163+
functionName = isFunctionShortName ? functionName : Utility.GetFunctionShortName(functionName);
164164

165165
Collection<string> functionErrors = new Collection<string>();
166166
if (!FunctionErrors.TryGetValue(functionName, out functionErrors))
@@ -601,7 +601,7 @@ private Collection<FunctionDescriptor> ReadFunctions(IEnumerable<FunctionDescrip
601601
continue;
602602
}
603603

604-
functionName = Path.GetFileNameWithoutExtension(scriptDir);
604+
functionName = Path.GetFileName(scriptDir);
605605

606606
if (ScriptConfig.Functions != null &&
607607
!ScriptConfig.Functions.Contains(functionName, StringComparer.OrdinalIgnoreCase))
@@ -635,7 +635,7 @@ private Collection<FunctionDescriptor> ReadFunctions(IEnumerable<FunctionDescrip
635635
catch (Exception ex)
636636
{
637637
// log any unhandled exceptions and continue
638-
AddFunctionError(functionName, Utility.FlattenException(ex, includeSource: false));
638+
AddFunctionError(functionName, Utility.FlattenException(ex, includeSource: false), isFunctionShortName: true);
639639
}
640640
}
641641

test/WebJobs.Script.Tests/ScriptHostTests.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,47 @@ public void Create_InvalidHostJson_ThrowsInformativeException()
293293
Assert.Equal("Invalid property identifier character: ~. Path '', line 2, position 4.", ex.InnerException.Message);
294294
}
295295

296+
[Theory]
297+
[InlineData("host")]
298+
[InlineData("-function")]
299+
[InlineData("_function")]
300+
[InlineData("function test")]
301+
[InlineData("function.test")]
302+
[InlineData("function0.1")]
303+
public void Create_InvalidFunctionNames_DoesNotCreateFunctionAndLogsFailure(string functionName)
304+
{
305+
string rootPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString());
306+
string invalidFunctionNamePath = Path.Combine(rootPath, functionName);
307+
try
308+
{
309+
Directory.CreateDirectory(invalidFunctionNamePath);
310+
311+
JObject config = new JObject();
312+
config["id"] = ID;
313+
314+
File.WriteAllText(Path.Combine(rootPath, ScriptConstants.HostMetadataFileName), config.ToString());
315+
File.WriteAllText(Path.Combine(invalidFunctionNamePath, ScriptConstants.FunctionMetadataFileName), string.Empty);
316+
317+
ScriptHostConfiguration scriptConfig = new ScriptHostConfiguration()
318+
{
319+
RootScriptPath = rootPath
320+
};
321+
322+
var scriptHost = ScriptHost.Create(_settingsManager, scriptConfig);
323+
324+
Assert.Equal(1, scriptHost.FunctionErrors.Count);
325+
Assert.Equal(functionName, scriptHost.FunctionErrors.First().Key);
326+
Assert.Equal($"'{functionName}' is not a valid function name.", scriptHost.FunctionErrors.First().Value.First());
327+
}
328+
finally
329+
{
330+
if (Directory.Exists(rootPath))
331+
{
332+
Directory.Delete(rootPath, true);
333+
}
334+
}
335+
}
336+
296337
[Fact]
297338
public void ApplyConfiguration_TopLevel()
298339
{
@@ -612,6 +653,8 @@ public void TryGetFunctionFromException_FunctionMatch()
612653
[InlineData("-function")]
613654
[InlineData("_function")]
614655
[InlineData("function test")]
656+
[InlineData("function.test")]
657+
[InlineData("function0.1")]
615658
public void ValidateFunctionName_ThrowsOnInvalidName(string functionName)
616659
{
617660
var ex = Assert.Throws<InvalidOperationException>(() =>

0 commit comments

Comments
 (0)