github.com/Bytom/bytom@v1.1.2-0.20210127130405-ae40204c0b09/accesstoken/accesstoken_test.go (about) 1 package accesstoken 2 3 import ( 4 "context" 5 "os" 6 "strings" 7 "testing" 8 9 "github.com/bytom/bytom/errors" 10 dbm "github.com/bytom/bytom/database/leveldb" 11 ) 12 13 func TestCreate(t *testing.T) { 14 testDB := dbm.NewDB("testdb", "leveldb", "temp") 15 defer os.RemoveAll("temp") 16 cs := NewStore(testDB) 17 18 cases := []struct { 19 id, typ string 20 want error 21 }{ 22 {"a", "client", nil}, 23 {"b", "network", nil}, 24 {"", "client", ErrBadID}, 25 {"bad:id", "client", ErrBadID}, 26 {"a", "network", ErrDuplicateID}, // this aborts the transaction, so no tests can follow 27 } 28 29 for _, c := range cases { 30 _, err := cs.Create(c.id, c.typ) 31 if errors.Root(err) != c.want { 32 t.Errorf("Create(%s, %s) error = %s want %s", c.id, c.typ, err, c.want) 33 } 34 } 35 } 36 37 func TestList(t *testing.T) { 38 ctx := context.Background() 39 testDB := dbm.NewDB("testdb", "leveldb", "temp") 40 defer os.RemoveAll("temp") 41 cs := NewStore(testDB) 42 43 tokenMap := make(map[string]*Token) 44 tokenMap["ab"] = mustCreateToken(ctx, t, cs, "ab", "test") 45 tokenMap["bc"] = mustCreateToken(ctx, t, cs, "bc", "test") 46 tokenMap["cd"] = mustCreateToken(ctx, t, cs, "cd", "test") 47 48 got, err := cs.List() 49 if err != nil { 50 t.Errorf("List errored: get list error") 51 } 52 53 if len(got) != len(tokenMap) { 54 t.Error("List errored: get invalid length") 55 } 56 for _, v := range got { 57 if v.Token != tokenMap[v.ID].Token { 58 t.Errorf("List error: ID: %s, expected token: %s, DB token: %s", v.ID, *tokenMap[v.ID], v.Token) 59 } 60 continue 61 } 62 } 63 64 func TestCheck(t *testing.T) { 65 ctx := context.Background() 66 testDB := dbm.NewDB("testdb", "leveldb", "temp") 67 defer os.RemoveAll("temp") 68 cs := NewStore(testDB) 69 70 token := mustCreateToken(ctx, t, cs, "x", "client") 71 tokenParts := strings.Split(token.Token, ":") 72 73 if err := cs.Check(tokenParts[0], tokenParts[1]); err != nil { 74 t.Fatal(err) 75 } 76 77 if err := cs.Check("x", "badsecret"); err != ErrInvalidToken { 78 t.Fatal("invalid token check passed") 79 } 80 } 81 82 func TestDelete(t *testing.T) { 83 ctx := context.Background() 84 testDB := dbm.NewDB("testdb", "leveldb", "temp") 85 defer os.RemoveAll("temp") 86 cs := NewStore(testDB) 87 88 const id = "Y" 89 mustCreateToken(ctx, t, cs, id, "client") 90 91 err := cs.Delete(id) 92 if err != nil { 93 t.Fatal(err) 94 } 95 96 value := cs.DB.Get([]byte(id)) 97 if len(value) > 0 { 98 t.Fatal("delete fail") 99 } 100 } 101 102 func TestDeleteWithInvalidId(t *testing.T) { 103 testDB := dbm.NewDB("testdb", "leveldb", "temp") 104 defer os.RemoveAll("temp") 105 cs := NewStore(testDB) 106 107 err := cs.Delete("@") 108 if errors.Root(err) != ErrBadID { 109 t.Errorf("Deletion with invalid id success, while it should not") 110 } 111 } 112 113 func mustCreateToken(ctx context.Context, t *testing.T, cs *CredentialStore, id, typ string) *Token { 114 token, err := cs.Create(id, typ) 115 if err != nil { 116 t.Fatal(err) 117 } 118 return token 119 }