github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/state/testing/storage.go (about)

     1  // Copyright 2014 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package testing
     5  
     6  import (
     7  	"bytes"
     8  	"io"
     9  	"io/ioutil"
    10  
    11  	"github.com/juju/errors"
    12  
    13  	"github.com/juju/juju/state/storage"
    14  )
    15  
    16  type MapStorage struct {
    17  	storage.Storage
    18  	Map map[string][]byte
    19  }
    20  
    21  var _ storage.Storage = (*MapStorage)(nil)
    22  
    23  func (s *MapStorage) Get(path string) (r io.ReadCloser, length int64, err error) {
    24  	data, ok := s.Map[path]
    25  	if !ok {
    26  		return nil, -1, errors.NotFoundf("%s", path)
    27  	}
    28  	return ioutil.NopCloser(bytes.NewReader(data)), int64(len(data)), nil
    29  }
    30  
    31  func (s *MapStorage) Put(path string, r io.Reader, length int64) error {
    32  	if s.Map == nil {
    33  		s.Map = make(map[string][]byte)
    34  	}
    35  	buf := make([]byte, int(length))
    36  	_, err := io.ReadFull(r, buf)
    37  	if err != nil {
    38  		return err
    39  	}
    40  	s.Map[path] = buf
    41  	return nil
    42  }
    43  
    44  func (s *MapStorage) Remove(path string) error {
    45  	if _, ok := s.Map[path]; !ok {
    46  		return errors.NotFoundf("%s", path)
    47  	}
    48  	delete(s.Map, path)
    49  	return nil
    50  }