xxl-job的dotnet core 执行器实现
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

167 lines
5.2 KiB

using System.IO;
using System.Runtime.Serialization;
using Hessian.Net;
using Xunit;
namespace Hessian.NET.Tests
{
public class HessianSerializerTests
{
[Fact]
public void SimpleSerialize()
{
byte[] expected =
{
0x43, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x31, 0x92, 0x06, 0x43, 0x6c,
0x61, 0x73, 0x73, 0x32, 0x04, 0x4e, 0x65, 0x78, 0x74, 0x60, 0x43, 0x0a, 0x54, 0x65, 0x73, 0x74,
0x43, 0x6c, 0x61, 0x73, 0x73, 0x32, 0x93, 0x03, 0x49, 0x6e, 0x74, 0x06, 0x53, 0x74, 0x72, 0x69,
0x6e, 0x67, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x61, 0x91, 0x0b, 0x4c, 0x6f, 0x72, 0x65, 0x6d, 0x20,
0x49, 0x70, 0x73, 0x75, 0x6d, 0x51, 0x90, 0x51, 0x90
};
var graph = new TestClass1
{
Class2 = new TestClass2
{
IntValue = 1,
StringValue = "Lorem Ipsum"
}
};
graph.Next = graph;
graph.Class2.Parent = graph;
using (var stream = new MemoryStream())
{
var serializer = new DataContractHessianSerializer(typeof (TestClass1));
serializer.WriteObject(stream, graph);
stream.Flush();
Assert.True(ByteArray.Equals(expected, stream.ToArray()));
}
}
[Fact]
public void SimpleDeserialize()
{
byte[] expected =
{
0x43, 0x0a, 0x54, 0x65, 0x73, 0x74, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x31, 0x92, 0x06, 0x43, 0x6c,
0x61, 0x73, 0x73, 0x32, 0x04, 0x4e, 0x65, 0x78, 0x74, 0x60, 0x43, 0x0a, 0x54, 0x65, 0x73, 0x74,
0x43, 0x6c, 0x61, 0x73, 0x73, 0x32, 0x93, 0x03, 0x49, 0x6e, 0x74, 0x06, 0x53, 0x74, 0x72, 0x69,
0x6e, 0x67, 0x04, 0x4c, 0x69, 0x6e, 0x6b, 0x61, 0x91, 0x0b, 0x4c, 0x6f, 0x72, 0x65, 0x6d, 0x20,
0x49, 0x70, 0x73, 0x75, 0x6d, 0x51, 0x90, 0x51, 0x90
};
var graph = new TestClass1
{
Class2 = new TestClass2
{
IntValue = 1,
StringValue = "Lorem Ipsum"
}
};
graph.Next = graph;
graph.Class2.Parent = graph;
using (var stream = new MemoryStream(expected))
{
var serializer = new DataContractHessianSerializer(typeof (TestClass1));
var instance = serializer.ReadObject(stream) as TestClass1;
Assert.NotNull(instance);
Assert.Equal(graph.GetType(), instance.GetType());
Assert.Equal(instance, instance.Next);
Assert.Equal(typeof (TestClass2), instance.Class2.GetType());
Assert.Equal(instance, instance.Class2.Parent);
Assert.Equal(graph.Class2.IntValue, instance.Class2.IntValue);
Assert.Equal(graph.Class2.StringValue, instance.Class2.StringValue);
}
}
/*
private static void WriteOutput(IReadOnlyList<byte> bytes)
{
const int size = 16;
var pattern = new String(' ', 3);
for (var offset = 0; offset < bytes.Count; )
{
var count = Math.Min(bytes.Count - offset, size);
var line = new StringBuilder();
line.AppendFormat("{0:X08}: ", offset);
for (var position = 0; position < size; position++)
{
if (position < count)
{
line.AppendFormat("{0:x02} ", bytes[position + offset]);
}
else
{
line.Append(pattern);
}
}
line.Append(new string(' ', 2));
for (var position = 0; position < count; position++)
{
var ch = (char) bytes[position + offset];
line.Append(Char.IsLetterOrDigit(ch) ? ch : '.');
}
Debug.WriteLine(line.ToString());
offset += count;
}
}
*/
[DataContract(Name = "TestClass1")]
public class TestClass1
{
[DataMember(Name = "Class2")]
public TestClass2 Class2
{
get;
set;
}
[DataMember(Name = "Next")]
public TestClass1 Next
{
get;
set;
}
}
[DataContract(Name = "TestClass2")]
public class TestClass2
{
[DataMember(Name = "Int", Order = 1)]
public int IntValue
{
get;
set;
}
[DataMember(Name = "String", Order = 2)]
public string StringValue
{
get;
set;
}
[DataMember(Name = "Link", Order = 3)]
public TestClass1 Parent
{
get;
set;
}
}
}
}