Store pointer to data instead of serialized form (#1196)

## Description

Remove JSON [de]serialization from mock model store and just use assignments. Model Store tests check that all fields are properly filled out so using JSON here is not required.

Unblocks #1089 as mock model store no longer relies on JSON serialization (and tags associated with models)

## Type of change

<!--- Please check the type of change your PR introduces: --->
- [ ] 🌻 Feature
- [ ] 🐛 Bugfix
- [ ] 🗺️ Documentation
- [ ] 🤖 Test
- [ ] 💻 CI/Deployment
- [x] 🐹 Trivial/Minor

## Issue(s)

* #1085 

## Test Plan

<!-- How will this be tested prior to merging.-->
- [ ] 💪 Manual
- [x]  Unit test
- [ ] 💚 E2E
This commit is contained in:
ashmrtn 2022-10-18 13:48:08 -07:00 committed by GitHub
parent 4800904b04
commit 0a91a3e097
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -2,7 +2,6 @@ package mock
import (
"context"
"encoding/json"
"github.com/kopia/kopia/repo/manifest"
"github.com/pkg/errors"
@ -17,29 +16,19 @@ import (
// ------------------------------------------------------------
type MockModelStore struct {
backup []byte
details []byte
backup *backup.Backup
details *details.Details
err error
}
func NewMock(b *backup.Backup, d *details.Details, err error) *MockModelStore {
return &MockModelStore{
backup: marshal(b),
details: marshal(d),
backup: b,
details: d,
err: err,
}
}
func marshal(a any) []byte {
bs, _ := json.Marshal(a)
return bs
}
func unmarshal(b []byte, a any) {
//nolint:errcheck
json.Unmarshal(b, a)
}
// ------------------------------------------------------------
// deleter iface
// ------------------------------------------------------------
@ -68,9 +57,13 @@ func (mms *MockModelStore) Get(
switch s {
case model.BackupSchema:
unmarshal(mms.backup, data)
bm := data.(*backup.Backup)
*bm = *mms.backup
case model.BackupDetailsSchema:
unmarshal(mms.details, data)
dm := data.(*details.Details)
dm.DetailsModel = mms.details.DetailsModel
default:
return errors.Errorf("schema %s not supported by mock Get", s)
}
@ -89,13 +82,12 @@ func (mms *MockModelStore) GetIDsForType(
switch s {
case model.BackupSchema:
b := backup.Backup{}
unmarshal(mms.backup, &b)
b := *mms.backup
return []*model.BaseModel{&b.BaseModel}, nil
case model.BackupDetailsSchema:
d := details.Details{}
unmarshal(mms.backup, &d)
d.DetailsModel = mms.details.DetailsModel
return []*model.BaseModel{&d.BaseModel}, nil
}
@ -115,9 +107,13 @@ func (mms *MockModelStore) GetWithModelStoreID(
switch s {
case model.BackupSchema:
unmarshal(mms.backup, data)
bm := data.(*backup.Backup)
*bm = *mms.backup
case model.BackupDetailsSchema:
unmarshal(mms.details, data)
dm := data.(*details.Details)
dm.DetailsModel = mms.details.DetailsModel
default:
return errors.Errorf("schema %s not supported by mock GetWithModelStoreID", s)
}
@ -132,9 +128,13 @@ func (mms *MockModelStore) GetWithModelStoreID(
func (mms *MockModelStore) Put(ctx context.Context, s model.Schema, m model.Model) error {
switch s {
case model.BackupSchema:
mms.backup = marshal(m)
bm := m.(*backup.Backup)
mms.backup = bm
case model.BackupDetailsSchema:
mms.details = marshal(m)
dm := m.(*details.Details)
mms.details = dm
default:
return errors.Errorf("schema %s not supported by mock Put", s)
}
@ -145,9 +145,13 @@ func (mms *MockModelStore) Put(ctx context.Context, s model.Schema, m model.Mode
func (mms *MockModelStore) Update(ctx context.Context, s model.Schema, m model.Model) error {
switch s {
case model.BackupSchema:
mms.backup = marshal(m)
bm := m.(*backup.Backup)
mms.backup = bm
case model.BackupDetailsSchema:
mms.details = marshal(m)
dm := m.(*details.Details)
mms.details = dm
default:
return errors.Errorf("schema %s not supported by mock Update", s)
}