mirror of
https://github.com/kevin-DL/services.git
synced 2026-01-11 19:04:35 +00:00
135 lines
3.8 KiB
Go
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
|
|
|
|
}
|