package mock import ( "errors" "path" "strings" "time" "github.com/xordataexchange/crypt/backend" ) var mockedStore map[string][]byte type Client struct{} func New(machines []string) (*Client, error) { if mockedStore == nil { mockedStore = make(map[string][]byte, 2) } return &Client{}, nil } func (c *Client) Get(key string) ([]byte, error) { if v, ok := mockedStore[key]; ok { return v, nil } err := errors.New("Could not find key: " + key) return nil, err } func (c *Client) List(key string) (backend.KVPairs, error) { var list backend.KVPairs dir := path.Clean(key) + "/" for k, v := range mockedStore { if strings.HasPrefix(k, dir) { list = append(list, &backend.KVPair{Key: k, Value: v}) } } return list, nil } func (c *Client) Set(key string, value []byte) error { mockedStore[key] = value return nil } func (c *Client) Watch(key string, stop chan bool) <-chan *backend.Response { respChan := make(chan *backend.Response, 0) go func() { for { b, err := c.Get(key) if err != nil { respChan <- &backend.Response{nil, err} time.Sleep(time.Second * 5) continue } respChan <- &backend.Response{b, nil} } }() return respChan }