Browse Source

unittests further improved

master
Bernd-René Predota 5 years ago
parent
commit
28dbc1ab98
  1. 2
      README.md
  2. 3
      lib/cache/cache.go
  3. 55
      lib/cache/cache_test.go
  4. 5
      lib/common/guid.go
  5. 57
      lib/database/database_test.go
  6. 43
      lib/response/response_test.go

2
README.md

@ -1,6 +1,6 @@
# golang API Skeleton
[![Build Status](https://drone.devices.local/api/badges/mawas/golang-api-skeleton/status.svg)](https://drone.devices.local/mawas/golang-api-skeleton)<a href='https://github.com/jpoles1/gopherbadger' target='_blank'>![gopherbadger-tag-do-not-edit](https://img.shields.io/badge/Go%20Coverage-75%25-brightgreen.svg?longCache=true&style=flat)</a>
[![Build Status](https://drone.devices.local/api/badges/mawas/golang-api-skeleton/status.svg)](https://drone.devices.local/mawas/golang-api-skeleton)<a href='https://github.com/jpoles1/gopherbadger' target='_blank'>![gopherbadger-tag-do-not-edit](https://img.shields.io/badge/Go%20Coverage-77%25-brightgreen.svg?longCache=true&style=flat)</a>
refined skeleton future apis should be based on

3
lib/cache/cache.go

@ -44,6 +44,7 @@ func (cache bCache) Get(key string) (*string, error) {
if err := cache.db.View(func(txn *badger.Txn) error {
item, err := txn.Get([]byte(key))
if err != nil {
fmt.Println(err.Error())
if err.Error() != "Key not found" {
return nil
}
@ -70,7 +71,7 @@ func (cache bCache) Get(key string) (*string, error) {
return nil, nil
}
// SetWithTTL sets a cache entry
// Set sets a cache entry
func (cache bCache) Set(key string, value string) error {
if err := cache.db.Update(func(txn *badger.Txn) error {
err := txn.Set([]byte(key), []byte(value))

55
lib/cache/cache_test.go

@ -0,0 +1,55 @@
package cache
import (
"testing"
"time"
)
func TestCache(t *testing.T) {
appCache, err := Bootstrap()
if err != nil {
t.Errorf("bootstrap cache failed: %v\n", err)
}
if err := appCache.Set("key", "value"); err != nil {
t.Errorf("set cache failed: %v\n", err)
}
// real result
value, err := appCache.Get("key")
if err != nil {
t.Errorf("get cache failed: %v\n", err)
}
if value == nil {
t.Error("get cache didn't fetch a value for set key")
} else if *value != "value" {
t.Errorf("get cache value should be \"value\" but is \"%s\"", *value)
}
// nil result
value, err = appCache.Get("notExisting")
if err != nil {
t.Errorf("get cache failed: %v\n", err)
}
if value != nil {
t.Error("get cache must return nil for non existing key")
}
if err := appCache.SetWithTTL("ttl", "10", 3); err != nil {
t.Errorf("set cache failed: %v\n", err)
}
value, err = appCache.Get("ttl")
if err != nil {
t.Errorf("get cache failed: %v\n", err)
}
if value == nil {
t.Error("get cache didn't fetch a value for set key")
} else if *value != "10" {
t.Errorf("get cache value should be \"10\" but is \"%s\"", *value)
}
time.Sleep(3 * time.Second)
value, err = appCache.Get("ttl")
if err != nil {
t.Errorf("get cache failed: %v\n", err)
}
if value != nil {
t.Error("get cache must return nil for expired key")
}
appCache.Close()
}

5
lib/common/guid.go

@ -10,6 +10,7 @@ import (
// GUID our new ULID based datatype
type GUID ulid.ULID
// NewGUID returns a new ulid
func NewGUID() (GUID, error) {
id, err := ulid.New(ulid.Now(), rand.Reader)
return GUID(id), err
@ -17,7 +18,7 @@ func NewGUID() (GUID, error) {
// StringToGUID -> parse string to ULID GUID
func StringToGUID(s string) (GUID, error) {
id, err := ulid.Parse(s) // maybe ParseStrict
id, err := ulid.Parse(s)
return GUID(id), err
}
@ -37,7 +38,7 @@ func (guid GUID) MarshalJSON() ([]byte, error) {
}
func (guid *GUID) UnmarshalJSON(data []byte) error {
id, err := ulid.Parse(string(data)) // maybe ParseStrict
id, err := ulid.Parse(string(data))
*guid = GUID(id)
return err
}

57
lib/database/database_test.go

@ -0,0 +1,57 @@
package database
import (
"strings"
"testing"
)
// FIXME make real unit tests
func TestConnect(t *testing.T) {
if _, err := Connect(Credentials{
Host: "127.0.0.1",
Port: 3308,
Dialect: "mySQL",
User: "unittest",
Password: "secret",
Database: "unittest",
}); err != nil {
if !strings.HasSuffix(err.Error(), "connect: connection refused") {
t.Error(err)
}
}
if _, err := Connect(Credentials{
Socket: "/tmp/unittest.socket",
Dialect: "mySQL",
User: "unittest",
Password: "secret",
Database: "unittest",
}); err != nil {
if !strings.HasSuffix(err.Error(), "no such file or directory") {
t.Error(err)
}
}
if _, err := Connect(Credentials{
Host: "127.0.0.1",
Port: 3309,
Dialect: "msSQL",
User: "unittest",
Password: "secret",
Database: "unittest",
}); err != nil {
if !strings.HasSuffix(err.Error(), "connect: connection refused") {
t.Error(err)
}
}
if _, err := Connect(Credentials{
Host: "127.0.0.1",
Port: 3310,
Dialect: "PostGRES",
User: "unittest",
Password: "secret",
Database: "unittest",
}); err != nil {
if !strings.HasSuffix(err.Error(), "connect: connection refused)") {
t.Error(err)
}
}
}

43
lib/response/response_test.go

@ -0,0 +1,43 @@
package response
import (
"errors"
"testing"
)
func TestAppendError(t *testing.T) {
const errMsg = "expected error"
envelope := Envelope{}
e := envelope.AppendError(errors.New(errMsg))
if e.Success {
t.Error("error response Success must be false")
}
if e.Result != nil {
t.Error("error response Result must be nil")
}
if len(e.Errors) != 1 {
t.Error("error response Errors must be set")
} else if e.Errors[0] != errMsg {
t.Errorf("error response error message must be \"%s\" but is \"%s\"", errMsg, e.Errors[0])
}
}
func TestSetSuccess(t *testing.T) {
const result = "expected result"
envelope := Envelope{}
e := envelope.SetSuccess(result)
if !e.Success {
t.Error("success response Success must be true")
}
if e.Result == nil {
t.Error("success response Result must be set")
}
if msg, ok := e.Result.(string); ok {
if msg != result {
t.Errorf("success response result must be \"%s\" but is \"%s\"", result, msg)
}
}
if len(e.Errors) > 0 {
t.Error("success response Errors must be empty")
}
}
Loading…
Cancel
Save