github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/kbfs/libkbfs/mdcache_test.go (about) 1 // Copyright 2016 Keybase Inc. All rights reserved. 2 // Use of this source code is governed by a BSD 3 // license that can be found in the LICENSE file. 4 5 package libkbfs 6 7 import ( 8 "context" 9 "fmt" 10 "testing" 11 "time" 12 13 idutiltest "github.com/keybase/client/go/kbfs/idutil/test" 14 "github.com/keybase/client/go/kbfs/kbfscodec" 15 "github.com/keybase/client/go/kbfs/kbfscrypto" 16 "github.com/keybase/client/go/kbfs/kbfsmd" 17 "github.com/keybase/client/go/kbfs/tlf" 18 "github.com/keybase/client/go/kbfs/tlfhandle" 19 kbname "github.com/keybase/client/go/kbun" 20 "github.com/keybase/client/go/protocol/keybase1" 21 "github.com/stretchr/testify/require" 22 ) 23 24 func testMdcacheMakeHandle(t *testing.T, n uint32) *tlfhandle.Handle { 25 id := keybase1.MakeTestUID(n).AsUserOrTeam() 26 bh, err := tlf.MakeHandle([]keybase1.UserOrTeamID{id}, nil, nil, nil, nil) 27 require.NoError(t, err) 28 29 nug := idutiltest.NormalizedUsernameGetter{ 30 id: kbname.NormalizedUsername(fmt.Sprintf("fake_user_%d", n)), 31 } 32 33 ctx := context.Background() 34 h, err := tlfhandle.MakeHandle( 35 ctx, bh, bh.Type(), nil, nug, nil, keybase1.OfflineAvailability_NONE) 36 require.NoError(t, err) 37 return h 38 } 39 40 func testMdcachePut(t *testing.T, tlfID tlf.ID, rev kbfsmd.Revision, 41 bid kbfsmd.BranchID, h *tlfhandle.Handle, mdcache *MDCacheStandard) { 42 rmd, err := makeInitialRootMetadata(defaultClientMetadataVer, tlfID, h) 43 require.NoError(t, err) 44 rmd.SetRevision(rev) 45 if bid != kbfsmd.NullBranchID { 46 rmd.SetUnmerged() 47 rmd.SetBranchID(bid) 48 } 49 50 signingKey := kbfscrypto.MakeFakeSigningKeyOrBust("fake signing key") 51 err = rmd.bareMd.SignWriterMetadataInternally(context.Background(), 52 kbfscodec.NewMsgpack(), 53 kbfscrypto.SigningKeySigner{Key: signingKey}) 54 require.NoError(t, err) 55 56 // put the md 57 irmd := MakeImmutableRootMetadata( 58 rmd, signingKey.GetVerifyingKey(), kbfsmd.FakeID(1), time.Now(), true) 59 if err := mdcache.Put(irmd); err != nil { 60 t.Errorf("Got error on put on md %v: %v", tlfID, err) 61 } 62 63 // make sure we can get it successfully 64 irmd2, err := mdcache.Get(tlfID, rev, bid) 65 require.NoError(t, err) 66 require.Equal(t, irmd, irmd2) 67 } 68 69 func TestMdcachePut(t *testing.T) { 70 tlfID := tlf.FakeID(1, tlf.Private) 71 h := testMdcacheMakeHandle(t, 1) 72 73 mdcache := NewMDCacheStandard(100) 74 testMdcachePut(t, tlfID, 1, kbfsmd.NullBranchID, h, mdcache) 75 } 76 77 func TestMdcachePutPastCapacity(t *testing.T) { 78 id0 := tlf.FakeID(1, tlf.Private) 79 h0 := testMdcacheMakeHandle(t, 0) 80 81 id1 := tlf.FakeID(2, tlf.Private) 82 h1 := testMdcacheMakeHandle(t, 1) 83 84 id2 := tlf.FakeID(3, tlf.Private) 85 h2 := testMdcacheMakeHandle(t, 2) 86 87 mdcache := NewMDCacheStandard(2) 88 testMdcachePut(t, id0, 0, kbfsmd.NullBranchID, h0, mdcache) 89 bid := kbfsmd.FakeBranchID(1) 90 testMdcachePut(t, id1, 0, bid, h1, mdcache) 91 testMdcachePut(t, id2, 1, kbfsmd.NullBranchID, h2, mdcache) 92 93 // id 0 should no longer be in the cache 94 _, err := mdcache.Get(id0, 0, kbfsmd.NullBranchID) 95 require.Equal(t, NoSuchMDError{id0, 0, kbfsmd.NullBranchID}, err) 96 } 97 98 func TestMdcacheReplace(t *testing.T) { 99 id := tlf.FakeID(1, tlf.Private) 100 h := testMdcacheMakeHandle(t, 1) 101 102 mdcache := NewMDCacheStandard(100) 103 testMdcachePut(t, id, 1, kbfsmd.NullBranchID, h, mdcache) 104 105 irmd, err := mdcache.Get(id, 1, kbfsmd.NullBranchID) 106 require.NoError(t, err) 107 108 // Change the BID 109 bid := kbfsmd.FakeBranchID(1) 110 newRmd, err := irmd.deepCopy(kbfscodec.NewMsgpack()) 111 require.NoError(t, err) 112 113 newRmd.SetBranchID(bid) 114 err = mdcache.Replace(MakeImmutableRootMetadata(newRmd, 115 irmd.LastModifyingWriterVerifyingKey(), kbfsmd.FakeID(2), time.Now(), 116 true), kbfsmd.NullBranchID) 117 require.NoError(t, err) 118 119 _, err = mdcache.Get(id, 1, kbfsmd.NullBranchID) 120 require.IsType(t, NoSuchMDError{}, err) 121 _, err = mdcache.Get(id, 1, bid) 122 require.NoError(t, err) 123 }