github.com/keybase/client/go@v0.0.0-20240309051027-028f7c731f8b/tlfupgrade/tlfupgrade_test.go (about) 1 package tlfupgrade 2 3 import ( 4 "context" 5 "testing" 6 "time" 7 8 "github.com/keybase/client/go/kbtest" 9 "github.com/keybase/client/go/libkb" 10 "github.com/keybase/client/go/protocol/chat1" 11 "github.com/keybase/client/go/protocol/keybase1" 12 "github.com/keybase/clockwork" 13 "github.com/stretchr/testify/require" 14 ) 15 16 type testAPIServer struct { 17 libkb.API 18 responseFn func() getUpgradeRes 19 } 20 21 func (t *testAPIServer) GetDecode(mctx libkb.MetaContext, arg libkb.APIArg, resp libkb.APIResponseWrapper) error { 22 *(resp.(*getUpgradeRes)) = t.responseFn() 23 return nil 24 } 25 26 type testChatHelper struct { 27 libkb.ChatHelper 28 } 29 30 func (t *testChatHelper) UpgradeKBFSToImpteam(context.Context, string, chat1.TLFID, bool) error { 31 return nil 32 } 33 34 func TestBackgroundTLFUpdater(t *testing.T) { 35 tc := libkb.SetupTest(t, "TestBackgroundTLFUpdater", 1) 36 defer tc.Cleanup() 37 _, err := kbtest.CreateAndSignupFakeUser("gregr", tc.G) 38 require.NoError(t, err) 39 40 api := &testAPIServer{} 41 u := NewBackgroundTLFUpdater(tc.G) 42 u.testingDisableKBFS = true 43 u.testingAPIServer = api 44 u.testingChatHelper = &testChatHelper{} 45 upgradeCh := make(chan keybase1.TLFID, 5) 46 u.upgradeCh = &upgradeCh 47 48 refTLFID := keybase1.TLFID("hi") 49 f := func() getUpgradeRes { 50 return getUpgradeRes{ 51 GetTLFForUpgradeRes: NewGetTLFForUpgradeResWithTlfavailable(GetTLFForUpgradeAvailableRes{ 52 TlfID: refTLFID, 53 })} 54 } 55 api.responseFn = f 56 clock := clockwork.NewFakeClock() 57 u.clock = clock 58 u.Run() 59 attempt := func(attempt int) { 60 clock.BlockUntil(attempt) 61 clock.Advance(time.Hour) 62 select { 63 case tlfID := <-upgradeCh: 64 require.Equal(t, refTLFID, tlfID) 65 case <-time.After(20 * time.Second): 66 require.Fail(t, "no upgrade") 67 } 68 } 69 attempt(1) 70 mctx := libkb.NewMetaContextForTest(tc) 71 err = u.Shutdown(mctx) 72 require.NoError(t, err) 73 }