diff --git a/hooks/sentry/sentry.go b/hooks/sentry/sentry.go
index 5c07eb2..74e8bbe 100644
--- a/hooks/sentry/sentry.go
+++ b/hooks/sentry/sentry.go
@@ -1,4 +1,4 @@
-package sentry_hook
+package logrus_sentry
 
 import (
 	"github.com/Sirupsen/logrus"
diff --git a/hooks/sentry/sentry_test.go b/hooks/sentry/sentry_test.go
new file mode 100644
index 0000000..747d75f
--- /dev/null
+++ b/hooks/sentry/sentry_test.go
@@ -0,0 +1,93 @@
+package logrus_sentry
+
+import (
+	"encoding/json"
+	"fmt"
+	"io/ioutil"
+	"net/http"
+	"net/http/httptest"
+	"strings"
+	"testing"
+
+	"github.com/Sirupsen/logrus"
+	"github.com/getsentry/raven-go"
+)
+
+const (
+	message     = "error message"
+	server_name = "testserver.internal"
+	logger_name = "test.logger"
+)
+
+func getTestLogger() *logrus.Logger {
+	l := logrus.New()
+	l.Out = ioutil.Discard
+	return l
+}
+
+func getTestDSN(t *testing.T) (string, <-chan *raven.Packet, func()) {
+	pch := make(chan *raven.Packet, 1)
+	s := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
+		defer req.Body.Close()
+		d := json.NewDecoder(req.Body)
+		p := &raven.Packet{}
+		err := d.Decode(p)
+		if err != nil {
+			t.Fatal(err.Error())
+		}
+
+		pch <- p
+	}))
+
+	fragments := strings.SplitN(s.URL, "://", 2)
+	dsn := "%s://public:secret@%s/sentry/project-id"
+
+	return fmt.Sprintf(dsn, fragments[0], fragments[1]), pch, s.Close
+}
+
+func TestSpecialFields(t *testing.T) {
+	logger := getTestLogger()
+	dsn, pch, closeFn := getTestDSN(t)
+	defer closeFn()
+
+	hook, err := NewSentryHook(dsn, []logrus.Level{
+		logrus.ErrorLevel,
+	})
+
+	if err != nil {
+		t.Fatal(err.Error())
+	}
+	logger.Hooks.Add(hook)
+	logger.WithFields(logrus.Fields{
+		"server_name": server_name,
+		"logger":      logger_name,
+	}).Error(message)
+
+	packet := <-pch
+	if packet.Logger != logger_name {
+		t.Errorf("logger should have been %s, was %s", logger_name, packet.Logger)
+	}
+
+	if packet.ServerName != server_name {
+		t.Errorf("server_name should have been %s, was %s", server_name, packet.ServerName)
+	}
+}
+
+func TestSentryHandler(t *testing.T) {
+	logger := getTestLogger()
+	dsn, pch, closeFn := getTestDSN(t)
+	defer closeFn()
+	hook, err := NewSentryHook(dsn, []logrus.Level{
+		logrus.ErrorLevel,
+	})
+	if err != nil {
+		t.Fatal(err.Error())
+	}
+	logger.Hooks.Add(hook)
+
+	logger.Error(message)
+	packet := <-pch
+	if packet.Message != message {
+		t.Errorf("message should have been %s, was %s", message, packet.Message)
+	}
+}
