-
Notifications
You must be signed in to change notification settings - Fork 45
Expand file tree
/
Copy pathGZippedMessageSerializationTest.cs
More file actions
157 lines (128 loc) · 5.87 KB
/
Copy pathGZippedMessageSerializationTest.cs
File metadata and controls
157 lines (128 loc) · 5.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
using System;
using System.Text;
using System.IO;
using Moq;
using Obvs.Types;
using Obvs.Serialization;
using Xunit;
namespace Obvs.Tests {
/// <summary>
/// Test Gzipped message serialization
/// </summary>
public class GZippedMessageSerializationTest {
public class TestMessage: IMessage {
public string Content {get; set;} = null;
public override bool Equals(object obj)
{
//
// See the full list of guidelines at
// http://go.microsoft.com/fwlink/?LinkID=85237
// and also the guidance for operator== at
// http://go.microsoft.com/fwlink/?LinkId=85238
//
if (obj == null || GetType() != obj.GetType())
{
return false;
}
return this.Content.Equals(((TestMessage) obj).Content);
}
// override object.GetHashCode
public override int GetHashCode()
{
return Content.GetHashCode();
}
}
#region "Serialization tests"
[Fact]
public void Test_GZippedMessageSerializerNullActionConstruction_Fails() {
Assert.Throws(typeof(ArgumentNullException),
() => new GZippedMessageSerializer(null as Action<Stream, object>));
}
[Fact]
public void Test_GZippedMessageSerializerNullGzippedSerializerConstruction_Fails() {
Assert.Throws(typeof(ArgumentNullException),
() => new GZippedMessageSerializer(null as GZippedMessageSerializer));
}
[Fact]
public void Test_GZippedMessageSerializerGzippedSerializerConstruction_Fails() {
Assert.Throws(typeof(ArgumentException),
() => new GZippedMessageSerializer(new GZippedMessageSerializer( (Stream stream, object obj) => {})));
}
#endregion
#region "Deserialization tests"
[Fact]
public void Test_GZippedMessageDeserializerNullActionConstruction_Fails() {
Assert.Throws(
typeof(ArgumentNullException),
() => new GZippedMessageDeserializer<TestMessage>(null as Func<System.IO.Stream, TestMessage>));
}
[Fact]
public void Test_GZippedMessageDeserializerNullGzippedSerializerConstruction_Fails() {
Assert.Throws(typeof(ArgumentNullException),
() => new GZippedMessageDeserializer<Obvs.Types.IMessage>(null as GZippedMessageDeserializer<TestMessage>));
}
#endregion
[Fact]
public void Test_GZippedMessageDeserializerGzippedSerializerConstruction_Fails() {
Assert.Throws(typeof(ArgumentException),
() => new GZippedMessageDeserializer<TestMessage>(new GZippedMessageDeserializer<TestMessage>( (Stream stream) => new TestMessage{})));
}
[Fact]
public void Test_GzippedMessageFullSerialization_Succeeds() {
var content = "test";
var wasSerializeActionCalled = false;
Action<Stream, object> serializeAction = (stream, obj) => {
wasSerializeActionCalled = true;
var message = obj as TestMessage;
var contentBytes = Encoding.UTF8.GetBytes(message.Content);
stream.Write(contentBytes, 0, contentBytes.Length);
};
var messageSerializer = new GZippedMessageSerializer(serializeAction);
var wasDeserializeFuncCalled = false;
Func<Stream, TestMessage> deserializeFunction = stream => {
wasDeserializeFuncCalled = true;
var buffer = new byte[Encoding.UTF8.GetByteCount(content)];
var numBytesRead = stream.Read(buffer, 0, buffer.Length);
var deserializedMessage = new TestMessage {
Content = Encoding.UTF8.GetString(buffer)
};
return deserializedMessage;
};
var messageDeserializer = new GZippedMessageDeserializer<TestMessage>(deserializeFunction);
var testMessage = new TestMessage {
Content = content
};
var messageStream = new MemoryStream();
messageSerializer.Serialize(messageStream, testMessage);
Assert.True(wasSerializeActionCalled);
messageStream.Position = 0;
var deserializedTestMessage = messageDeserializer.Deserialize(messageStream);
Assert.True(wasDeserializeFuncCalled);
Assert.Equal(testMessage, deserializedTestMessage);
}
#region "IMessage serializer extensions"
[Fact]
public void Test_SerializeGZipped_Fails() {
var messageSerializer = new GZippedMessageSerializer((stream, obj) => {});
Assert.Throws(typeof(ArgumentException), () => messageSerializer.SerializeGZipped());
}
[Fact]
public void Test_DeserializeGZipped_Fails() {
var messageDeserializer = new GZippedMessageDeserializer<TestMessage>((stream) => new TestMessage{});
Assert.Throws(typeof(ArgumentException), () => messageDeserializer.DeserializeGZipped());
}
[Fact]
public void Test_SerializeGZipped_Success() {
var messageSerializerMock = new Mock<IMessageSerializer>();
var gzippedMessageSerializer = messageSerializerMock.Object.SerializeGZipped();
Assert.NotNull(gzippedMessageSerializer);
}
[Fact]
public void Test_DeserializeGZipped_Success() {
var messageDeserializerMock = new Mock<IMessageDeserializer<TestMessage>>();
var gzippedMessageDeserializer = messageDeserializerMock.Object.DeserializeGZipped<TestMessage>();
Assert.NotNull(gzippedMessageDeserializer);
}
#endregion
}
}