Skip to content

Commit

Permalink
writer package and tests to ginkgo
Browse files Browse the repository at this point in the history
  • Loading branch information
Sotirios Mantziaris committed Mar 3, 2016
1 parent b3a1f9c commit a6994a2
Show file tree
Hide file tree
Showing 7 changed files with 153 additions and 151 deletions.
8 changes: 5 additions & 3 deletions appender.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@ package incata

import (
"errors"

"github.com/mantzas/incata/model"
"github.com/mantzas/incata/writer"
)

// Appender interface
Expand All @@ -12,13 +14,13 @@ type Appender interface {

// EventAppender Append events to storage
type EventAppender struct {
Writer Writer
Writer writer.Writer
}

var wr Writer
var wr writer.Writer

// SetupAppender setting up the appender
func SetupAppender(writer Writer) {
func SetupAppender(writer writer.Writer) {
wr = writer
}

Expand Down
3 changes: 2 additions & 1 deletion examples/example.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import (
"github.com/mantzas/incata/model"
"github.com/mantzas/incata/reader"
"github.com/mantzas/incata/storage"
"github.com/mantzas/incata/writer"
"github.com/satori/go.uuid"
)

Expand Down Expand Up @@ -55,7 +56,7 @@ func main() {
}

sr := marshal.NewJSONMarshaller()
wr := incata.NewSQLWriter(storage, sr)
wr := writer.NewSQLWriter(storage, sr)

incata.SetupAppender(wr)

Expand Down
145 changes: 0 additions & 145 deletions sql_writer_test.go

This file was deleted.

2 changes: 1 addition & 1 deletion sql_writer.go → writer/sql_writer.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package incata
package writer

import (
"github.com/mantzas/incata/marshal"
Expand Down
131 changes: 131 additions & 0 deletions writer/sql_writer_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
package writer_test

import (
"errors"
"testing"

"database/sql/driver"

"github.com/DATA-DOG/go-sqlmock"
. "github.com/mantzas/incata/marshal"
. "github.com/mantzas/incata/mocks"
. "github.com/mantzas/incata/model"
. "github.com/mantzas/incata/storage"
. "github.com/mantzas/incata/writer"
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"

"time"

"github.com/satori/go.uuid"
)

type AnyTime struct{}

// Match satisfies sqlmock.Argument interface
func (a AnyTime) Match(v driver.Value) bool {
_, ok := v.(time.Time)
return ok
}

var _ = Describe("Reader", func() {

It("write data to mocked storage succeeds", func() {

db, mock, _ := sqlmock.New()
defer db.Close()

ser := NewJSONMarshaller()
storage, _ := NewStorageFinalized(db, MSSQL, "Event")
wr := NewSQLWriter(storage, ser)

event := NewEvent(uuid.NewV4(), 1, "TEST", 1)
payload, _ := ser.Serialize(event.Payload)

mock.ExpectExec("INSERT INTO Event").WithArgs(event.SourceID.String(), AnyTime{}, "TEST", event.Version, payload).WillReturnResult(sqlmock.NewResult(1, 1))

err := wr.Write(*event)
Expect(err).NotTo(HaveOccurred())

err = mock.ExpectationsWereMet()
Expect(err).NotTo(HaveOccurred(), "there were unfulfilled expections: %s", err)
})

It("write data to mocked storage returns db error", func() {

db, mock, _ := sqlmock.New()
defer db.Close()

ser := NewJSONMarshaller()
storage, _ := NewStorageFinalized(db, MSSQL, "Event")
wr := NewSQLWriter(storage, ser)

event := NewEvent(uuid.NewV4(), 1, "TEST", 1)
payload, _ := ser.Serialize(event.Payload)

mock.ExpectExec("INSERT INTO Event").WithArgs(event.SourceID.String(), AnyTime{}, "TEST", event.Version, payload).WillReturnError(errors.New("TEST"))

err := wr.Write(*event)
Expect(err).To(HaveOccurred())

err = mock.ExpectationsWereMet()
Expect(err).NotTo(HaveOccurred(), "there were unfulfilled expections: %s", err)
})

It("write data to mocked storage returns serialization error", func() {

db, _, _ := sqlmock.New()
defer db.Close()

ser := NewJSONMarshaller()
storage, _ := NewStorageFinalized(db, MSSQL, "Event")
wr := NewSQLWriter(storage, ser)

event := NewEvent(uuid.NewV4(), make(map[int]int), "TEST", 1)

err := wr.Write(*event)
Expect(err).To(HaveOccurred())
})

})

func BenchmarkAppenderPostgresql(b *testing.B) {

b.Skipf("Postgresql benchmark!")

storage, err := NewStorage(PostgreSQL, "postgres://user:pwd@server/linear?sslmode=disable", "linearevents")

if err != nil {
b.Fatalf("Fatal error %s", err.Error())
}

runDatabaseBenchmark(b, storage)
}

func BenchmarkAppenderMsSql(b *testing.B) {

b.Skipf("SQL Server benchmark!")

db, err := NewStorage(MSSQL, "Server=xxx;Database=sss;User Id=xx;Password=xxx;", "Event")

if err != nil {
b.Fatalf("Fatal error %s", err.Error())
}

runDatabaseBenchmark(b, db)
}

func runDatabaseBenchmark(b *testing.B, storage *Storage) {

ser := NewJSONMarshaller()
wr := NewSQLWriter(storage, ser)

event := NewEvent(uuid.NewV4(), GetTestData(), "TEST", 1)

for n := 0; n < b.N; n++ {
err := wr.Write(*event)
if err != nil {
b.Fatalf("Append error occured! %s", err.Error())
}
}
}
2 changes: 1 addition & 1 deletion writer.go → writer/writer.go
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package incata
package writer

import "github.com/mantzas/incata/model"

Expand Down
13 changes: 13 additions & 0 deletions writer/writer_suite_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package writer_test

import (
. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"

"testing"
)

func TestWriter(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Writer Suite")
}

0 comments on commit a6994a2

Please sign in to comment.