80727ae90b
* adds netstate rpc server pagination, mocks pagination in test/util.go * updates ns client example, combines ns client and server test to netstate_test, adds pagination to bolt client * better organizes netstate test calls * wip breaking netstate test into smaller tests * wip modularizing netstate tests * adds some test panics * wip netstate test attempts * testing bug in netstate TestDeleteAuth * wip fixes global variable problem, still issues with list * wip fixes get request params and args * fixes bug in path when using MakePointers helper fn * updates mockdb list func, adds test, changes Limit to int * fixes merge conflicts * fixes broken tests from merge * remove unnecessary PointerEntry struct * removes error when Get returns nil value from boltdb * breaks boltdb client tests into smaller tests * renames AssertNoErr test helper to HandleErr * adds StartingKey and Limit parameters to redis list func, adds beginning of redis tests * adds helper func for mockdb List function * if no starting key provided for netstate List, the first value in storage will be used * adds basic pagination for redis List function, adds tests * adds list limit to call in overlay/server.go * streamlines/fixes some nits from review * removes use of obsolete EncryptedUnencryptedSize * uses MockKeyValueStore instead of redis instance in redis client test * changes test to expect nil returned for getting missing key * remove error from `KeyValueStore#Get` * fix bolt test * Merge pull request #1 from bryanchriswhite/nat-pagination remove error from `KeyValueStore#Get` * adds Get returning error back to KeyValueStore interface and affected clients * trying to appease travis: returns errors in Get calls in overlay/cache and cache_test * handles redis get error when no key found
63 lines
1.6 KiB
Go
63 lines
1.6 KiB
Go
// Copyright (C) 2018 Storj Labs, Inc.
|
|
// See LICENSE for copying information.
|
|
|
|
package storage
|
|
|
|
// Key is the type for the keys in a `KeyValueStore`
|
|
type Key []byte
|
|
|
|
// Value is the type for the values in a `ValueValueStore`
|
|
type Value []byte
|
|
|
|
// Keys is the type for a slice of keys in a `KeyValueStore`
|
|
type Keys []Key
|
|
|
|
// Limit indicates how many keys to return when calling List
|
|
type Limit int
|
|
|
|
// KeyValueStore is an interface describing key/value stores like redis and boltdb
|
|
type KeyValueStore interface {
|
|
// Put adds a value to the provided key in the KeyValueStore, returning an error on failure.
|
|
Put(Key, Value) error
|
|
Get(Key) (Value, error)
|
|
List(Key, Limit) (Keys, error)
|
|
Delete(Key) error
|
|
Close() error
|
|
}
|
|
|
|
// IsZero returns true if the value struct is it's zero value
|
|
func (v *Value) IsZero() (_ bool) {
|
|
return len(*v) == 0
|
|
}
|
|
|
|
// IsZero returns true if the key struct is it's zero value
|
|
func (k *Key) IsZero() (_ bool) {
|
|
return len(*k) == 0
|
|
}
|
|
|
|
// MarshalBinary implements the encoding.BinaryMarshaler interface for the Value type
|
|
func (v *Value) MarshalBinary() (_ []byte, _ error) {
|
|
return *v, nil
|
|
}
|
|
|
|
// MarshalBinary implements the encoding.BinaryMarshaler interface for the Key type
|
|
func (k *Key) MarshalBinary() (_ []byte, _ error) {
|
|
return *k, nil
|
|
}
|
|
|
|
// ByteSlices converts a `Keys` struct to a slice of byte-slices (i.e. `[][]byte`)
|
|
func (k *Keys) ByteSlices() [][]byte {
|
|
result := make([][]byte, len(*k))
|
|
|
|
for _k, v := range *k {
|
|
result[_k] = []byte(v)
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
// String implements the Stringer interface
|
|
func (k *Key) String() string {
|
|
return string(*k)
|
|
}
|