Skip to content

Commit

Permalink
Merge pull request #138 from MindscapeHQ/message-filter
Browse files Browse the repository at this point in the history
Message filter
  • Loading branch information
QuantumNightmare committed May 30, 2014
2 parents 0375755 + b1d6459 commit d004dc1
Show file tree
Hide file tree
Showing 21 changed files with 410 additions and 147 deletions.
4 changes: 2 additions & 2 deletions AssemblyVersionInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.0.6.0")]
[assembly: AssemblyFileVersion("2.0.6.0")]
[assembly: AssemblyVersion("2.1.0.0")]
[assembly: AssemblyFileVersion("2.1.0.0")]
2 changes: 1 addition & 1 deletion Mindscape.Raygun4Net.Signed.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="2.5">
<id>Mindscape.Raygun4Net.Signed</id>
<version>2.0.6</version>
<version>2.1.0</version>
<title />
<authors>Mindscape</authors>
<owners />
Expand Down
8 changes: 4 additions & 4 deletions Mindscape.Raygun4Net.Tests/Model/FakeRaygunClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,19 @@ public FakeRaygunClient(string apiKey)
{
}

public RaygunMessage CreateMessage(Exception exception, [Optional] IList<string> tags, [Optional] IDictionary userCustomData)
public RaygunMessage ExposeBuildMessage(Exception exception, [Optional] IList<string> tags, [Optional] IDictionary userCustomData)
{
return BuildMessage(exception, tags, userCustomData);
}

public bool Validate()
public bool ExposeValidateApiKey()
{
return ValidateApiKey();
}

public bool ExposeFilterShouldPreventSend(RaygunMessage raygunMessage)
public bool ExposeOnSendingMessage(RaygunMessage raygunMessage)
{
return FilterShouldPreventSend(raygunMessage);
return OnSendingMessage(raygunMessage);
}
}
}
139 changes: 77 additions & 62 deletions Mindscape.Raygun4Net.Tests/RaygunClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public void MessageWithUser()
{
_client.User = "Robbie Robot";

RaygunMessage message = _client.CreateMessage(_exception);
RaygunMessage message = _client.ExposeBuildMessage(_exception);
Assert.AreEqual("Robbie Robot", message.Details.User.Identifier);
}

Expand All @@ -64,7 +64,7 @@ public void SetCustomApplicationVersion()
{
_client.ApplicationVersion = "Custom Version";

RaygunMessage message = _client.CreateMessage(_exception);
RaygunMessage message = _client.ExposeBuildMessage(_exception);
Assert.AreEqual("Custom Version", message.Details.Version);
}

Expand All @@ -75,7 +75,7 @@ public void StripTargetInvocationExceptionByDefault()
{
TargetInvocationException wrapper = new TargetInvocationException(_exception);

RaygunMessage message = _client.CreateMessage(wrapper);
RaygunMessage message = _client.ExposeBuildMessage(wrapper);
Assert.AreEqual("System.NullReferenceException", message.Details.Error.ClassName);
}

Expand All @@ -84,7 +84,7 @@ public void StripHttpUnhandledExceptionByDefault()
{
HttpUnhandledException wrapper = new HttpUnhandledException("Something went wrong", _exception);

RaygunMessage message = _client.CreateMessage(wrapper);
RaygunMessage message = _client.ExposeBuildMessage(wrapper);
Assert.AreEqual("System.NullReferenceException", message.Details.Error.ClassName);
}

Expand All @@ -95,7 +95,7 @@ public void StripSpecifiedWrapperException()

WrapperException wrapper = new WrapperException(_exception);

RaygunMessage message = _client.CreateMessage(wrapper);
RaygunMessage message = _client.ExposeBuildMessage(wrapper);
Assert.AreEqual("System.NullReferenceException", message.Details.Error.ClassName);
}

Expand All @@ -104,7 +104,7 @@ public void DontStripIfNoInnerException()
{
HttpUnhandledException wrapper = new HttpUnhandledException();

RaygunMessage message = _client.CreateMessage(wrapper);
RaygunMessage message = _client.ExposeBuildMessage(wrapper);
Assert.AreEqual("System.Web.HttpUnhandledException", message.Details.Error.ClassName);
Assert.IsNull(message.Details.Error.InnerError);
}
Expand All @@ -115,7 +115,7 @@ public void StripMultipleWrapperExceptions()
HttpUnhandledException wrapper = new HttpUnhandledException("Something went wrong", _exception);
TargetInvocationException wrapper2 = new TargetInvocationException(wrapper);

RaygunMessage message = _client.CreateMessage(wrapper2);
RaygunMessage message = _client.ExposeBuildMessage(wrapper2);
Assert.AreEqual("System.NullReferenceException", message.Details.Error.ClassName);
}

Expand All @@ -124,22 +124,22 @@ public void StripMultipleWrapperExceptions()
[Test]
public void NoAPIKeyIsInvalid()
{
Assert.IsFalse(_client.Validate());
Assert.IsFalse(_client.ExposeValidateApiKey());
}

[Test]
public void APIKeyIsValid()
{
FakeRaygunClient client = new FakeRaygunClient("MY_API_KEY");
Assert.IsTrue(client.Validate());
Assert.IsTrue(client.ExposeValidateApiKey());
}

// Tags and user custom data tests

[Test]
public void TagsAreNullByDefault()
{
RaygunMessage message = _client.CreateMessage(_exception);
RaygunMessage message = _client.ExposeBuildMessage(_exception);
Assert.IsNull(message.Details.Tags);
}

Expand All @@ -150,7 +150,7 @@ public void Tags()
tags.Add("Very Important");
tags.Add("WPF");

RaygunMessage message = _client.CreateMessage(_exception, tags);
RaygunMessage message = _client.ExposeBuildMessage(_exception, tags);
Assert.IsNotNull(message.Details.Tags);
Assert.AreEqual(2, message.Details.Tags.Count);
Assert.Contains("Very Important", (ICollection)message.Details.Tags);
Expand All @@ -160,7 +160,7 @@ public void Tags()
[Test]
public void UserCustomDataIsNullByDefault()
{
RaygunMessage message = _client.CreateMessage(_exception);
RaygunMessage message = _client.ExposeBuildMessage(_exception);
Assert.IsNull(message.Details.UserCustomData);
}

Expand All @@ -171,107 +171,122 @@ public void UserCustomData()
data.Add("x", "42");
data.Add("obj", "NULL");

RaygunMessage message = _client.CreateMessage(_exception, null, data);
RaygunMessage message = _client.ExposeBuildMessage(_exception, null, data);
Assert.IsNotNull(message.Details.UserCustomData);
Assert.AreEqual(2, message.Details.UserCustomData.Count);
Assert.AreEqual("42", message.Details.UserCustomData["x"]);
Assert.AreEqual("NULL", message.Details.UserCustomData["obj"]);
}


// Filter tests
// Cancel send tests

[Test]
public void NoFilterPassesAll()
public void NoHandlerSendsAll()
{
_client.MessageSendFilter = null;
Assert.IsFalse(_client.ExposeFilterShouldPreventSend(_client.CreateMessage(_exception)));
Assert.IsTrue(_client.ExposeOnSendingMessage(_client.ExposeBuildMessage(_exception)));
}

[Test]
public void FilterIsChecked()
public void HandlerIsChecked()
{
bool filterCalled = false;
_client.MessageSendFilter = x =>
_client.SendingMessage += (object o, RaygunSendingMessageEventArgs e) =>
{
Assert.AreEqual("NullReferenceException: The thing is null", x.Details.Error.Message);
Assert.AreEqual("NullReferenceException: The thing is null", e.Message.Details.Error.Message);
filterCalled = true;
return false;
e.Cancel = true;
};
Assert.IsTrue(_client.ExposeFilterShouldPreventSend(_client.CreateMessage(_exception)));
Assert.IsFalse(_client.ExposeOnSendingMessage(_client.ExposeBuildMessage(_exception)));
Assert.IsTrue(filterCalled);
}

[Test]
public void FilterCanAllowSend()
public void HandlerCanAllowSend()
{
_client.MessageSendFilter = x =>
_client.SendingMessage += (object o, RaygunSendingMessageEventArgs e) =>
{
return true;
// Allow send by not setting e.Cancel
};
Assert.IsFalse(_client.ExposeFilterShouldPreventSend(_client.CreateMessage(_exception)));
Assert.IsTrue(_client.ExposeOnSendingMessage(_client.ExposeBuildMessage(_exception)));
}

[Test]
public void AllFiltersAreChecked()
public void AllHandlersAreChecked()
{
bool filterCalled = false;
bool filter1Called = false;
bool filter2Called = false;
_client.MessageSendFilter += x =>
{
Assert.AreEqual("NullReferenceException: The thing is null", x.Details.Error.Message);
filterCalled = true;
return false;
};
_client.MessageSendFilter += x =>
{
Assert.AreEqual("NullReferenceException: The thing is null", x.Details.Error.Message);
filter2Called = true;
return false;
};
Assert.IsTrue(_client.ExposeFilterShouldPreventSend(_client.CreateMessage(_exception)));
Assert.IsTrue(filterCalled);
_client.SendingMessage += (object o, RaygunSendingMessageEventArgs e) =>
{
Assert.AreEqual("NullReferenceException: The thing is null", e.Message.Details.Error.Message);
filter1Called = true;
e.Cancel = true;
};
_client.SendingMessage += (object o, RaygunSendingMessageEventArgs e) =>
{
Assert.AreEqual("NullReferenceException: The thing is null", e.Message.Details.Error.Message);
filter2Called = true;
e.Cancel = true;
};
Assert.IsFalse(_client.ExposeOnSendingMessage(_client.ExposeBuildMessage(_exception)));
Assert.IsTrue(filter1Called);
Assert.IsTrue(filter2Called);
}

[Test]
public void DontSendIfOneFilterReturnsFalse()
public void DontSendIfFirstHandlerCancels()
{
_client.MessageSendFilter += x =>
_client.SendingMessage += (object o, RaygunSendingMessageEventArgs e) =>
{
return true; // Allow send
e.Cancel = true;
};
_client.MessageSendFilter += x =>
_client.SendingMessage += (object o, RaygunSendingMessageEventArgs e) =>
{
return false; // Don't allow send
// Allow send by not setting e.Cancel
};
Assert.IsTrue(_client.ExposeFilterShouldPreventSend(_client.CreateMessage(_exception)));

// Also test reverse order:
Assert.IsFalse(_client.ExposeOnSendingMessage(_client.ExposeBuildMessage(_exception)));
}

_client.MessageSendFilter += x =>
[Test]
public void DontSendIfSecondHandlerCancels()
{
_client.SendingMessage += (object o, RaygunSendingMessageEventArgs e) =>
{
return false; // Don't allow send
// Allow send by not setting e.Cancel
};
_client.MessageSendFilter += x =>
_client.SendingMessage += (object o, RaygunSendingMessageEventArgs e) =>
{
return true; // Allow send
e.Cancel = true;
};
Assert.IsTrue(_client.ExposeFilterShouldPreventSend(_client.CreateMessage(_exception)));
Assert.IsFalse(_client.ExposeOnSendingMessage(_client.ExposeBuildMessage(_exception)));
}

[Test]
public void AllowSendIfAllFiltersReturnTrue()
public void AllowSendIfNoHandlerCancels()
{
_client.MessageSendFilter += x =>
_client.SendingMessage += (object o, RaygunSendingMessageEventArgs e) =>
{
return true;
// Allow send by not setting e.Cancel
};
_client.MessageSendFilter += x =>
_client.SendingMessage += (object o, RaygunSendingMessageEventArgs e) =>
{
return true;
// Allow send by not setting e.Cancel
};
Assert.IsFalse(_client.ExposeFilterShouldPreventSend(_client.CreateMessage(_exception)));
Assert.IsTrue(_client.ExposeOnSendingMessage(_client.ExposeBuildMessage(_exception)));
}

[Test]
public void HandlerCanModifyMessage()
{
RaygunMessage message = _client.ExposeBuildMessage(_exception);
Assert.AreEqual("NullReferenceException: The thing is null", message.Details.Error.Message);

_client.SendingMessage += (object o, RaygunSendingMessageEventArgs e) =>
{
e.Message.Details.Error.Message = "Custom error message";
};

Assert.IsTrue(_client.ExposeOnSendingMessage(message));
Assert.AreEqual("Custom error message", message.Details.Error.Message);
}
}
}
2 changes: 1 addition & 1 deletion Mindscape.Raygun4Net.nuspec
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata minClientVersion="2.5">
<id>Mindscape.Raygun4Net</id>
<version>2.0.6</version>
<version>2.1.0</version>
<title />
<authors>Mindscape</authors>
<owners />
Expand Down
1 change: 1 addition & 0 deletions Mindscape.Raygun4Net/Mindscape.Raygun4Net.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@
<Compile Include="RaygunClient.cs" />
<Compile Include="RaygunHttpModule.cs" />
<Compile Include="RaygunMessageBuilder.cs" />
<Compile Include="RaygunSendingMessageEventArgs.cs" />
<Compile Include="RaygunSettings.cs" />
<Compile Include="SimpleJson.cs" />
</ItemGroup>
Expand Down
Loading

0 comments on commit d004dc1

Please sign in to comment.