github.com/keybase/client/go@v0.0.0-20241007131713-f10651d043c8/engine/untrack_test.go (about) 1 // Copyright 2015 Keybase, Inc. All rights reserved. Use of 2 // this source code is governed by the included BSD license. 3 4 package engine 5 6 import ( 7 "testing" 8 9 "github.com/keybase/client/go/libkb" 10 keybase1 "github.com/keybase/client/go/protocol/keybase1" 11 ) 12 13 func runUntrack(tc libkb.TestContext, fu *FakeUser, username string, sigVersion libkb.SigVersion) error { 14 arg := UntrackEngineArg{ 15 Username: libkb.NewNormalizedUsername(username), 16 SigVersion: sigVersion, 17 } 18 uis := libkb.UIs{ 19 LogUI: tc.G.UI.GetLogUI(), 20 SecretUI: fu.NewSecretUI(), 21 } 22 eng := NewUntrackEngine(tc.G, &arg) 23 m := libkb.NewMetaContextForTest(tc).WithUIs(uis) 24 return RunEngine2(m, eng) 25 } 26 27 func assertUntracked(tc libkb.TestContext, username string) { 28 me, err := libkb.LoadMe(libkb.NewLoadUserArg(tc.G)) 29 if err != nil { 30 tc.T.Fatal(err) 31 } 32 them, err := libkb.LoadUser(libkb.NewLoadUserByNameArg(tc.G, username)) 33 if err != nil { 34 tc.T.Fatal(err) 35 } 36 37 m := NewMetaContextForTest(tc) 38 s, err := me.TrackChainLinkFor(m, them.GetNormalizedName(), them.GetUID()) 39 if err != nil { 40 tc.T.Fatal(err) 41 } 42 if s != nil { 43 tc.T.Fatal("expected not to get a tracking statement; but got one") 44 } 45 46 s, err = libkb.LocalTrackChainLinkFor(m, me.GetUID(), them.GetUID()) 47 if err != nil { 48 tc.T.Fatal(err) 49 } 50 if s != nil { 51 tc.T.Fatal("expected not to get a local tracking statement; but got one") 52 } 53 } 54 55 func untrackAlice(tc libkb.TestContext, fu *FakeUser, sigVersion libkb.SigVersion) { 56 err := runUntrack(tc, fu, "t_alice", sigVersion) 57 if err != nil { 58 tc.T.Fatal(err) 59 } 60 } 61 62 func untrackBob(tc libkb.TestContext, fu *FakeUser, sigVersion libkb.SigVersion) { 63 err := runUntrack(tc, fu, "t_bob", sigVersion) 64 if err != nil { 65 tc.T.Fatal(err) 66 } 67 } 68 69 func TestUntrack(t *testing.T) { 70 doWithSigChainVersions(func(sigVersion libkb.SigVersion) { 71 _testUntrack(t, sigVersion) 72 }) 73 } 74 func _testUntrack(t *testing.T, sigVersion libkb.SigVersion) { 75 tc := SetupEngineTest(t, "untrack") 76 defer tc.Cleanup() 77 fu := CreateAndSignupFakeUser(tc, "untrk") 78 79 // Local-tracked only. 80 sv := keybase1.SigVersion(sigVersion) 81 trackAliceWithOptions(tc, fu, keybase1.TrackOptions{LocalOnly: true, BypassConfirm: true, SigVersion: &sv}, fu.NewSecretUI()) 82 assertTracking(tc, "t_alice") 83 untrackAlice(tc, fu, sigVersion) 84 assertUntracked(tc, "t_alice") 85 86 // Remote-tracked only. 87 trackAliceWithOptions(tc, fu, keybase1.TrackOptions{LocalOnly: false, BypassConfirm: true, SigVersion: &sv}, fu.NewSecretUI()) 88 untrackAlice(tc, fu, sigVersion) 89 assertUntracked(tc, "t_alice") 90 91 // Both local- and remote-tracked. 92 trackAliceWithOptions(tc, fu, keybase1.TrackOptions{LocalOnly: true, BypassConfirm: true, SigVersion: &sv}, fu.NewSecretUI()) 93 trackAliceWithOptions(tc, fu, keybase1.TrackOptions{LocalOnly: false, BypassConfirm: true, SigVersion: &sv}, fu.NewSecretUI()) 94 untrackAlice(tc, fu, sigVersion) 95 assertUntracked(tc, "t_alice") 96 97 // Assert that we gracefully handle cases where there is nothing to untrack. 98 err := runUntrack(tc, fu, "t_alice", sigVersion) 99 if err == nil { 100 t.Fatal("expected untrack error; got no error") 101 } else if _, ok := err.(libkb.UntrackError); !ok { 102 t.Fatalf("expected an UntrackError; got %s", err) 103 } 104 105 err = runUntrack(tc, fu, "t_bob", sigVersion) 106 if err == nil { 107 t.Fatal("expected untrack error; got no error") 108 } else if _, ok := err.(libkb.UntrackError); !ok { 109 t.Fatalf("expected an UntrackError; got %s", err) 110 } 111 } 112 113 func TestUntrackRemoteOnly(t *testing.T) { 114 tc := SetupEngineTest(t, "untrack") 115 defer tc.Cleanup() 116 sigVersion := libkb.GetDefaultSigVersion(tc.G) 117 fu := CreateAndSignupFakeUser(tc, "untrk") 118 119 sv := keybase1.SigVersion(sigVersion) 120 trackAliceWithOptions(tc, fu, keybase1.TrackOptions{LocalOnly: false, BypassConfirm: true, SigVersion: &sv}, fu.NewSecretUI()) 121 untrackAlice(tc, fu, sigVersion) 122 assertUntracked(tc, "t_alice") 123 }