diff --git a/go.mod b/go.mod index 821b9d91dc9c9aaed475345f6bfff8b5d2921620..1adbb17a314ae7c3bcf0aac921961fd59c28a201 100644 --- a/go.mod +++ b/go.mod @@ -23,7 +23,7 @@ require ( gitlab.com/elixxir/primitives v0.0.3-0.20211208211148-752546cf2e46 gitlab.com/xx_network/comms v0.0.4-0.20211202195810-9dfc0b6cdb28 gitlab.com/xx_network/crypto v0.0.5-0.20211014163843-57b345890686 - gitlab.com/xx_network/primitives v0.0.4-0.20211215010517-1917372c5ecc + gitlab.com/xx_network/primitives v0.0.4-0.20211215214631-b245b75e5caf golang.org/x/crypto v0.0.0-20210921155107-089bfa567519 golang.org/x/net v0.0.0-20210525063256-abc453219eb5 google.golang.org/genproto v0.0.0-20210105202744-fe13368bc0e1 // indirect diff --git a/go.sum b/go.sum index b5183588849d9beaa656331aadf64bc2846487f2..63dc75111fc69d4f66b1f692a2a98c0bb1652c9d 100644 --- a/go.sum +++ b/go.sum @@ -281,6 +281,8 @@ gitlab.com/xx_network/primitives v0.0.4-0.20211014163031-53405cf191fb h1:0K9dyxF gitlab.com/xx_network/primitives v0.0.4-0.20211014163031-53405cf191fb/go.mod h1:9imZHvYwNFobxueSvVtHneZLk9wTK7HQTzxPm+zhFhE= gitlab.com/xx_network/primitives v0.0.4-0.20211215010517-1917372c5ecc h1:a3FIvYTY5b5+wN6LzQpgkFSkdlfxR0u95xSSRFvi3Ho= gitlab.com/xx_network/primitives v0.0.4-0.20211215010517-1917372c5ecc/go.mod h1:9imZHvYwNFobxueSvVtHneZLk9wTK7HQTzxPm+zhFhE= +gitlab.com/xx_network/primitives v0.0.4-0.20211215214631-b245b75e5caf h1:lhkq8CQATHg2h/VQC0zFy/9iAelFlY2ciKetFcU8GUE= +gitlab.com/xx_network/primitives v0.0.4-0.20211215214631-b245b75e5caf/go.mod h1:9imZHvYwNFobxueSvVtHneZLk9wTK7HQTzxPm+zhFhE= gitlab.com/xx_network/ring v0.0.3-0.20210527191221-ce3f170aabd5 h1:FY+4Rh1Q2rgLyv10aKJjhWApuKRCR/054XhreudfAvw= gitlab.com/xx_network/ring v0.0.3-0.20210527191221-ce3f170aabd5/go.mod h1:aLzpP2TiZTQut/PVHR40EJAomzugDdHXetbieRClXIM= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= diff --git a/storage/utility/bucketParams.go b/storage/utility/bucketParams.go index 05a6dffb8c9de56fadec17dbdb1e971ec2ad41f1..e07797719349cb7fa2c809709d08d3207f95886c 100644 --- a/storage/utility/bucketParams.go +++ b/storage/utility/bucketParams.go @@ -77,8 +77,7 @@ func (s *BucketParamStore) UpdateParams(capacity, leakedTokens uint32, // LoadBucketParamsStore loads the bucket params data from storage and constructs // a BucketParamStore. -func LoadBucketParamsStore( - kv *versioned.KV) (*BucketParamStore, error) { +func LoadBucketParamsStore(kv *versioned.KV) (*BucketParamStore, error) { bps := &BucketParamStore{ params: &rateLimiting.MapParams{}, mux: sync.RWMutex{}, diff --git a/storage/utility/bucketParams_test.go b/storage/utility/bucketParams_test.go index aadf01f3b05ecf51c87bf3c2ce988f9724cc8511..c2ce1bdbfdb99bb0dd0dba059216556805cb03bc 100644 --- a/storage/utility/bucketParams_test.go +++ b/storage/utility/bucketParams_test.go @@ -7,4 +7,64 @@ package utility +import ( + "gitlab.com/elixxir/client/storage/versioned" + "gitlab.com/elixxir/ekv" + "reflect" + "testing" + "time" +) + // todo: write tests + +func TestNewBucketParamsStore(t *testing.T) { + kv := versioned.NewKV(make(ekv.Memstore)) + capacity, leakedTokens, leakDuration := uint32(10), uint32(11), time.Duration(12) + bps, err := NewBucketParamsStore(capacity, leakedTokens, leakDuration, kv) + if err != nil { + t.Fatalf("NewBucketParamsStore error: %v", err) + } + + newParams := bps.params + if newParams.Capacity != capacity || newParams.LeakedTokens != leakedTokens || + newParams.LeakDuration != leakDuration { + t.Fatalf("Unexpected values in BucketParamStore!"+ + "\n\tExpected params {capacity: %d, leakedToken %d, leakDuration: %d}"+ + "\n\tReceived params {capacity: %d, leakedToken %d, leakDuration: %d}", + capacity, leakedTokens, leakDuration, + newParams.Capacity, newParams.LeakedTokens, newParams.LeakDuration) + } + + vo, err := kv.Prefix(bucketParamsPrefix).Get(bucketParamsKey, bucketParamsVersion) + if err != nil { + t.Fatalf("Failed to load from KV: %v", err) + } + + loadedParams := unmarshalBucketParams(vo.Data) + + if !reflect.DeepEqual(newParams, loadedParams) { + t.Fatalf("Loaded params from store does not match initialized values."+ + "\n\tExpected: %v"+ + "\n\tReceived: %v", newParams, loadedParams) + } +} + +func TestLoadBucketParamsStore(t *testing.T) { + kv := versioned.NewKV(make(ekv.Memstore)) + capacity, leakedTokens, leakDuration := uint32(10), uint32(11), time.Duration(12) + bps, err := NewBucketParamsStore(capacity, leakedTokens, leakDuration, kv) + if err != nil { + t.Fatalf("NewBucketParamsStore error: %v", err) + } + + loadedBps, err := LoadBucketParamsStore(kv) + if err != nil { + t.Fatalf("LoadBucketParamsStore error: %v", err) + } + + if !reflect.DeepEqual(loadedBps, bps) { + t.Fatalf("Loaded params from store does not match initialized values."+ + "\n\tExpected: %v"+ + "\n\tReceived: %v", bps, loadedBps) + } +} diff --git a/storage/utility/bucket_test.go b/storage/utility/bucket_test.go deleted file mode 100644 index 4378cd300cde5d6677177dba878615b6cfb8e7e4..0000000000000000000000000000000000000000 --- a/storage/utility/bucket_test.go +++ /dev/null @@ -1,130 +0,0 @@ -/////////////////////////////////////////////////////////////////////////////// -// Copyright © 2020 xx network SEZC // -// // -// Use of this source code is governed by a license that can be found in the // -// LICENSE file // -/////////////////////////////////////////////////////////////////////////////// - -package utility - -import ( - "gitlab.com/elixxir/client/storage/versioned" - "gitlab.com/elixxir/ekv" - "gitlab.com/xx_network/primitives/rateLimiting" - "reflect" - "testing" -) - -// NewBucketStore happy path. -func TestNewBucketStore(t *testing.T) { - // Create initializers - params := &rateLimiting.BucketParams{ - Capacity: 10, - Remaining: 11, - LeakRate: 12, - LastUpdate: 13, - } - kv := versioned.NewKV(make(ekv.Memstore)) - - // Initialize bucket - bs, err := NewBucketStore(params, kv) - if err != nil { - t.Fatalf("Error received creating BucketStore: %v", err) - } - - // Load new bucket from storage - vo, err := bs.kv.Get(bucketStoreKey, bucketStoreVersion) - if err != nil { - t.Fatalf("Failed to get bucket from EKV: %v", err) - } - - // Unmarshal stored data into separate bucket - receivedBs := rateLimiting.CreateBucketFromParams(params, nil) - err = receivedBs.UnmarshalJSON(vo.Data) - if err != nil { - t.Fatalf("UnmarshalJSON error: %v", err) - } - - // Ensure bucket in RAM and bucket in storage are consistent - if !reflect.DeepEqual(receivedBs, bs.bucket) { - t.Fatalf("Loaded bucket and created bucket did not match."+ - "\n\tExpected: %v"+ - "\n\tReceived: %v ", bs.bucket, receivedBs) - } - -} - -// BucketStore.AddWithExternalParams happy path. -func TestBucketStore_AddWithExternalParams(t *testing.T) { - // Create initializers - params := &rateLimiting.BucketParams{ - Capacity: 10, - Remaining: 11, - LeakRate: 12, - LastUpdate: 13, - } - kv := versioned.NewKV(make(ekv.Memstore)) - - // Create bucket - bs, err := NewBucketStore(params, kv) - if err != nil { - t.Fatalf("Error received creating BucketStore: %v", err) - } - - // Modify internal state of bucket - err = bs.AddWithExternalParams(10, 11, 12) - if err != nil { - t.Fatalf("AddWithExternalParams error: %v", err) - } - - // Load stored bucket - vo, err := bs.kv.Get(bucketStoreKey, bucketStoreVersion) - if err != nil { - t.Fatalf("Failed to get bucket from EKV: %v", err) - } - - // Unmarshal stored data into separate bucket - receivedBs := rateLimiting.CreateBucketFromParams(params, nil) - err = receivedBs.UnmarshalJSON(vo.Data) - if err != nil { - t.Fatalf("UnmarshalJSON error: %v", err) - } - - // Ensure bucket in RAM and bucket in storage are consistent - if !reflect.DeepEqual(receivedBs, bs.bucket) { - t.Fatalf("Loaded bucket and created bucket did not match."+ - "\n\tExpected: %v"+ - "\n\tReceived: %v ", bs.bucket, receivedBs) - } - -} - -// LoadBucketStore happy path. -func TestLoadBucketStore(t *testing.T) { - // Create initializers - params := &rateLimiting.BucketParams{ - Capacity: 10, - Remaining: 11, - LeakRate: 12, - LastUpdate: 13, - } - kv := versioned.NewKV(make(ekv.Memstore)) - - // Create bucket - bs, err := NewBucketStore(params, kv) - if err != nil { - t.Fatalf("Error received creating BucketStore: %v", err) - } - - receivedBs, err := LoadBucketStore(params, kv) - if err != nil { - t.Fatalf("LoadBucketStore error: %v", err) - } - - // Ensure bucket in RAM and bucket in storage are consistent - if !reflect.DeepEqual(receivedBs, bs) { - t.Fatalf("Loaded bucket store and created bucket did not match."+ - "\n\tExpected: %v"+ - "\n\tReceived: %v ", bs, receivedBs) - } -}