diff --git a/src/Sdk/RSWebApi/Contracts/AcquireJobRequest.cs b/src/Sdk/RSWebApi/Contracts/AcquireJobRequest.cs index 022f34b42..895e29afa 100644 --- a/src/Sdk/RSWebApi/Contracts/AcquireJobRequest.cs +++ b/src/Sdk/RSWebApi/Contracts/AcquireJobRequest.cs @@ -1,13 +1,16 @@ -using System.Collections.Generic; using System.Runtime.Serialization; -using GitHub.DistributedTask.WebApi; namespace GitHub.Actions.RunService.WebApi { [DataContract] public class AcquireJobRequest { + [DataMember(Name = "jobMessageId", EmitDefaultValue = false)] + public string JobMessageId { get; set; } + + // This field will be removed in an upcoming Runner release. + // It's left here temporarily to facilitate the transition to the new field name, JobMessageId. [DataMember(Name = "streamId", EmitDefaultValue = false)] - public string StreamID { get; set; } + public string StreamId { get; set; } } -} \ No newline at end of file +} diff --git a/src/Sdk/RSWebApi/RunServiceHttpClient.cs b/src/Sdk/RSWebApi/RunServiceHttpClient.cs index e1e416d27..65259c5ba 100644 --- a/src/Sdk/RSWebApi/RunServiceHttpClient.cs +++ b/src/Sdk/RSWebApi/RunServiceHttpClient.cs @@ -64,7 +64,8 @@ namespace GitHub.Actions.RunService.WebApi HttpMethod httpMethod = new HttpMethod("POST"); var payload = new AcquireJobRequest { - StreamID = messageId + JobMessageId = messageId, + StreamId = messageId, }; requestUri = new Uri(requestUri, "acquirejob"); diff --git a/src/Test/L0/Sdk/RSWebApi/AcquireJobRequestL0.cs b/src/Test/L0/Sdk/RSWebApi/AcquireJobRequestL0.cs new file mode 100644 index 000000000..c8883b071 --- /dev/null +++ b/src/Test/L0/Sdk/RSWebApi/AcquireJobRequestL0.cs @@ -0,0 +1,63 @@ +using System.Collections.Generic; +using System.IO; +using System.Runtime.Serialization.Json; +using System.Text; +using Xunit; + +namespace GitHub.Actions.RunService.WebApi.Tests; + +public sealed class AcquireJobRequestL0 +{ + + [Fact] + [Trait("Level", "L0")] + [Trait("Category", "Common")] + public void VerifySerialization() + { + var jobMessageId = "1526919030369-33"; + var request = new AcquireJobRequest + { + JobMessageId = jobMessageId, + StreamId = jobMessageId + }; + var serializer = new DataContractJsonSerializer(typeof(AcquireJobRequest)); + using var stream = new MemoryStream(); + serializer.WriteObject(stream, request); + + stream.Position = 0; + using var reader = new StreamReader(stream, Encoding.UTF8); + string json = reader.ReadToEnd(); + string expected = DoubleQuotify(string.Format("{{'jobMessageId':'{0}','streamId':'{0}'}}", request.JobMessageId)); + Assert.Equal(expected, json); + + } + + [Fact] + [Trait("Level", "L0")] + [Trait("Category", "Common")] + public void VerifyDeserialization() + { + var serializer = new DataContractJsonSerializer(typeof(AcquireJobRequest)); + var variations = new Dictionary() + { + ["{'streamId': 'legacy', 'jobMessageId': 'new-1'}"] = "new-1", + ["{'jobMessageId': 'new-2', 'streamId': 'legacy'}"] = "new-2", + ["{'jobMessageId': 'new-3'}"] = "new-3" + }; + + foreach (var (source, expected) in variations) + { + using var stream = new MemoryStream(); + stream.Write(Encoding.UTF8.GetBytes(DoubleQuotify(source))); + stream.Position = 0; + var recoveredRecord = serializer.ReadObject(stream) as AcquireJobRequest; + Assert.NotNull(recoveredRecord); + Assert.Equal(expected, recoveredRecord.JobMessageId); + } + } + + private static string DoubleQuotify(string text) + { + return text.Replace('\'', '"'); + } +}