• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

lucaslorentz / durabletask-extensions / 16865518913

10 Aug 2025 07:29PM UTC coverage: 83.085% (-0.04%) from 83.12%
16865518913

push

github

web-flow
Merge 34982023f into 6b8f51038

8 of 8 new or added lines in 3 files covered. (100.0%)

16 existing lines in 2 files now uncovered.

2397 of 2885 relevant lines covered (83.08%)

140.96 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

67.74
/src/LLL.DurableTask.Worker/Activities/MethodTaskActivity.cs
1
using System;
2
using System.Collections.Generic;
3
using System.Reflection;
4
using System.Runtime.ExceptionServices;
5
using System.Threading.Tasks;
6
using DurableTask.Core;
7
using DurableTask.Core.Serializing;
8
using LLL.DurableTask.Core.Serializing;
9
using LLL.DurableTask.Worker.Utils;
10
using Newtonsoft.Json.Linq;
11

12
namespace LLL.DurableTask.Worker.Orchestrations;
13

14
public class MethodTaskActivity : TaskActivity
15
{
16
    private readonly MethodInfo _methodInfo;
17
    private readonly DataConverter _dataConverter;
18

19
    public MethodTaskActivity(
10✔
20
        object instance,
10✔
21
        MethodInfo methodInfo)
10✔
22
    {
23
        Instance = instance;
10✔
24
        _methodInfo = methodInfo;
10✔
25
        _dataConverter = new TypelessJsonDataConverter();
10✔
26
    }
27

28
    public object Instance { get; }
10✔
29

30
    public override string Run(TaskContext context, string input)
31
    {
UNCOV
32
        throw new NotImplementedException();
×
33
    }
34

35
    public override async Task<string> RunAsync(TaskContext context, string input)
36
    {
37
        var parameters = PrepareParameters(input, new Dictionary<Type, Func<object>>
10✔
38
        {
10✔
39
            [typeof(TaskContext)] = () => context
10✔
40
        });
10✔
41

42
        try
43
        {
44
            var result = _methodInfo.Invoke(Instance, parameters);
10✔
45
            return await SerializeResult(result);
9✔
46
        }
47
        catch (TargetInvocationException ex)
48
        {
49
            ExceptionDispatchInfo.Capture(ex.InnerException).Throw();
1✔
UNCOV
50
            throw;
×
51
        }
52
    }
53

54
    private object[] PrepareParameters(
55
        string input,
56
        Dictionary<Type, Func<object>> factories)
57
    {
58
        var jsonParameters = _dataConverter.Deserialize<JToken[]>(input);
10✔
59

60
        var inputPosition = 0;
10✔
61

62
        var parameters = new List<object>();
10✔
63

64
        foreach (var parameter in _methodInfo.GetParameters())
20✔
65
        {
66
            object value;
67

UNCOV
68
            if (factories.TryGetValue(parameter.ParameterType, out var factory))
×
69
            {
UNCOV
70
                value = factory();
×
71
            }
UNCOV
72
            else if (inputPosition < jsonParameters.Length)
×
73
            {
UNCOV
74
                value = jsonParameters[inputPosition++].ToObject(parameter.ParameterType);
×
75
            }
UNCOV
76
            else if (parameter.IsOptional)
×
77
            {
UNCOV
78
                value = parameter.DefaultValue;
×
79
            }
80
            else
UNCOV
81
                throw new Exception($"Activity expects at least {inputPosition + 1} parameters but {jsonParameters.Length} were provided.");
×
82

UNCOV
83
            parameters.Add(value);
×
84
        }
85

86
        return parameters.ToArray();
10✔
87
    }
88

89
    private async Task<string> SerializeResult(object result)
90
    {
91
        var awaitedResult = await TaskUtils.MaybeAwait(result, _methodInfo.ReturnType);
9✔
92
        return _dataConverter.Serialize(awaitedResult);
8✔
93
    }
94
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc