Skip to content

Commit 571c7ed

Browse files
authored
allowing workers to handle .dll file extensions (#6420)
1 parent 112c10a commit 571c7ed

File tree

3 files changed

+29
-20
lines changed

3 files changed

+29
-20
lines changed

src/WebJobs.Script/Host/FunctionMetadataProvider.cs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,13 @@ internal static string ParseLanguage(string scriptFilePath, IEnumerable<RpcWorke
172172

173173
// determine the script type based on the primary script file extension
174174
string extension = Path.GetExtension(scriptFilePath).ToLowerInvariant().TrimStart('.');
175+
var workerConfig = workerConfigs.FirstOrDefault(config => config.Description.Extensions.Contains("." + extension));
176+
if (workerConfig != null)
177+
{
178+
return workerConfig.Description.Language;
179+
}
180+
181+
// If no worker claimed these extensions, use in-proc.
175182
switch (extension)
176183
{
177184
case "csx":
@@ -180,11 +187,7 @@ internal static string ParseLanguage(string scriptFilePath, IEnumerable<RpcWorke
180187
case "dll":
181188
return DotNetScriptTypes.DotNetAssembly;
182189
}
183-
var workerConfig = workerConfigs.FirstOrDefault(config => config.Description.Extensions.Contains("." + extension));
184-
if (workerConfig != null)
185-
{
186-
return workerConfig.Description.Language;
187-
}
190+
188191
return null;
189192
}
190193

test/WebJobs.Script.Tests.Shared/TestHelpers.cs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -250,16 +250,21 @@ public static async Task<string> ReadStreamToEnd(Stream stream)
250250
}
251251
}
252252

253-
public static IList<RpcWorkerConfig> GetTestWorkerConfigs()
253+
public static IList<RpcWorkerConfig> GetTestWorkerConfigs(bool includeDllWorker = false)
254254
{
255-
var nodeWorkerDesc = GetTestWorkerDescription("node", ".js");
256-
var javaWorkerDesc = GetTestWorkerDescription("java", ".jar");
257-
258-
return new List<RpcWorkerConfig>()
255+
var workerConfigs = new List<RpcWorkerConfig>
259256
{
260-
new RpcWorkerConfig() { Description = nodeWorkerDesc },
261-
new RpcWorkerConfig() { Description = javaWorkerDesc },
257+
new RpcWorkerConfig() { Description = GetTestWorkerDescription("node", ".js") },
258+
new RpcWorkerConfig() { Description = GetTestWorkerDescription("java", ".jar") }
262259
};
260+
261+
// Allow tests to have a worker that claims the .dll extension.
262+
if (includeDllWorker)
263+
{
264+
workerConfigs.Add(new RpcWorkerConfig() { Description = GetTestWorkerDescription("dllWorker", ".dll") });
265+
}
266+
267+
return workerConfigs;
263268
}
264269

265270
public static IList<RpcWorkerConfig> GetTestWorkerConfigsNoLanguage()

test/WebJobs.Script.Tests/FunctionMetadataProviderTests.cs

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -115,15 +115,16 @@ public void ValidateFunctionName_DoesNotThrowOnValidName(string functionName)
115115
}
116116

117117
[Theory]
118-
[InlineData("node", "test.js")]
119-
[InlineData("java", "test.jar")]
120-
[InlineData("CSharp", "test.cs")]
121-
[InlineData("CSharp", "test.csx")]
122-
[InlineData("DotNetAssembly", "test.dll")]
123-
[InlineData(null, "test.x")]
124-
public void ParseLanguage_Returns_ExpectedLanguage(string language, string scriptFile)
118+
[InlineData("node", "test.js", false)]
119+
[InlineData("java", "test.jar", false)]
120+
[InlineData("CSharp", "test.cs", false)]
121+
[InlineData("CSharp", "test.csx", false)]
122+
[InlineData("dllWorker", "test.dll", true)] // The test "dllWorker" will claim ".dll" extensions before falling back to DotNetAssembly
123+
[InlineData("DotNetAssembly", "test.dll", false)]
124+
[InlineData(null, "test.x", false)]
125+
public void ParseLanguage_Returns_ExpectedLanguage(string language, string scriptFile, bool includeDllWorker)
125126
{
126-
Assert.Equal(language, FunctionMetadataProvider.ParseLanguage(scriptFile, TestHelpers.GetTestWorkerConfigs()));
127+
Assert.Equal(language, FunctionMetadataProvider.ParseLanguage(scriptFile, TestHelpers.GetTestWorkerConfigs(includeDllWorker: includeDllWorker)));
127128
}
128129

129130
[Theory]

0 commit comments

Comments
 (0)