Files
services/test/kv/handler/handler.go
Asim Aslam 285fcef4e8 bump micro
2021-01-27 11:03:21 +00:00

135 lines
3.8 KiB
Go

package handler
import (
"context"
"fmt"
"time"
log "github.com/micro/micro/v3/service/logger"
store "github.com/micro/micro/v3/service/store"
pb "github.com/micro/services/test/kv/proto"
)
type Example struct{}
// TestExpiry tests writing a record with expiry
func (e *Example) TestExpiry(ctx context.Context, req *pb.Request, rsp *pb.Response) error {
if err := writeWithExpiry("WriteExpiry", "bar", 5*time.Second); err != nil {
return err
}
recs, err := store.Read("WriteExpiry")
if err != nil {
log.Errorf("Error reading %s", err)
return fmt.Errorf("Error reading record WriteExpiry with expiry %s", err)
}
if len(recs) != 1 {
return fmt.Errorf("Error reading record WriteExpiry, expected 1 record. Received %d", len(recs))
}
if err := writeWithExpiry("Record.Expiry", "bar", 5*time.Second); err != nil {
return err
}
recs, err = store.Read("Record.Expiry")
if err != nil {
log.Errorf("Error reading %s", err)
return fmt.Errorf("Error reading record Record.Expiry with expiry %s", err)
}
if len(recs) != 1 {
return fmt.Errorf("Error reading record Record.Expiry, expected 1 record. Received %d", len(recs))
}
if err := writeWithExpiry("WriteTTL", "bar", 5*time.Second); err != nil {
return err
}
recs, err = store.Read("WriteTTL")
if err != nil {
log.Errorf("Error reading %s", err)
return fmt.Errorf("Error reading record WriteTTL with expiry %s", err)
}
if len(recs) != 1 {
return fmt.Errorf("Error reading record WriteTTL, expected 1 record. Received %d", len(recs))
}
time.Sleep(6 * time.Second)
recs, err = store.Read("Record.Expiry")
if err != store.ErrNotFound {
log.Errorf("Error reading %s", err)
return fmt.Errorf("Error reading record Record.Expiry. Expected not found. Received %s and %d records", err, len(recs))
}
rsp.Msg = "Success"
return nil
}
func writeWithExpiry(key, val string, duration time.Duration) error {
if err := store.Write(&store.Record{Key: key, Value: []byte(val), Expiry: duration}); err != nil {
log.Errorf("Error writing %s", err)
return fmt.Errorf("Error writing record %s with expiry %s", key, err)
}
return nil
}
func (e *Example) TestList(ctx context.Context, req *pb.Request, rsp *pb.Response) error {
// Test Limit()
for i := 0; i < 3; i++ {
if err := writeWithExpiry(fmt.Sprintf("TestList%d", i), "bar", 5*time.Second); err != nil {
return err
}
}
recs, err := store.List(store.ListPrefix("TestList"))
if err != nil {
return fmt.Errorf("Error listing from store %s", err)
}
log.Infof("Recs %+v", recs)
if len(recs) != 3 {
return fmt.Errorf("Error listing records, expected 3, received %d", len(recs))
}
rsp.Msg = "Success"
return nil
}
func (e *Example) TestListLimit(ctx context.Context, req *pb.Request, rsp *pb.Response) error {
for i := 0; i < 10; i++ {
if err := writeWithExpiry(fmt.Sprintf("TestLimit%d", i), "bar", 5*time.Second); err != nil {
return err
}
}
recs, err := store.List(store.ListPrefix("TestLimit"), store.ListLimit(2))
if err != nil {
return fmt.Errorf("Error listing from store %s", err)
}
log.Infof("Recs limit %+v", recs)
if len(recs) != 2 {
return fmt.Errorf("Error listing records with limit, expected 2, received %d", len(recs))
}
rsp.Msg = "Success"
return nil
}
func (e *Example) TestListOffset(ctx context.Context, req *pb.Request, rsp *pb.Response) error {
for i := 0; i < 20; i++ {
if err := writeWithExpiry(fmt.Sprintf("TestOffset%d", i), "bar", 5*time.Second); err != nil {
return err
}
}
recs, err := store.List(store.ListPrefix("TestOffset"), store.ListOffset(5))
if err != nil {
return fmt.Errorf("Error listing from store %s", err)
}
log.Infof("Recs offset %+v", recs)
if len(recs) != 15 {
return fmt.Errorf("Error listing records with offset, expected 15, received %d", len(recs))
}
rsp.Msg = "Success"
return nil
}