github.com/pingcap/tidb/parser@v0.0.0-20231013125129-93a834a6bf8d/mysql/privs_test.go (about) 1 // Copyright 2021 PingCAP, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package mysql 15 16 import ( 17 "testing" 18 19 "github.com/stretchr/testify/require" 20 ) 21 22 func TestPrivString(t *testing.T) { 23 for i := 0; ; i++ { 24 p := PrivilegeType(1 << i) 25 if p > AllPriv { 26 break 27 } 28 require.NotEqualf(t, "", p.String(), "%d-th", i) 29 } 30 } 31 32 func TestPrivColumn(t *testing.T) { 33 for _, p := range AllGlobalPrivs { 34 require.NotEmptyf(t, p.ColumnString(), "%s", p) 35 np, ok := NewPrivFromColumn(p.ColumnString()) 36 require.Truef(t, ok, "%s", p) 37 require.Equal(t, p, np) 38 } 39 for _, p := range StaticGlobalOnlyPrivs { 40 require.NotEmptyf(t, p.ColumnString(), "%s", p) 41 np, ok := NewPrivFromColumn(p.ColumnString()) 42 require.Truef(t, ok, "%s", p) 43 require.Equal(t, p, np) 44 } 45 for _, p := range AllDBPrivs { 46 require.NotEmptyf(t, p.ColumnString(), "%s", p) 47 np, ok := NewPrivFromColumn(p.ColumnString()) 48 require.Truef(t, ok, "%s", p) 49 require.Equal(t, p, np) 50 } 51 } 52 53 func TestPrivSetString(t *testing.T) { 54 for _, p := range AllTablePrivs { 55 require.NotEmptyf(t, p.SetString(), "%s", p) 56 np, ok := NewPrivFromSetEnum(p.SetString()) 57 require.Truef(t, ok, "%s", p) 58 require.Equal(t, p, np) 59 } 60 for _, p := range AllColumnPrivs { 61 require.NotEmptyf(t, p.SetString(), "%s", p) 62 np, ok := NewPrivFromSetEnum(p.SetString()) 63 require.Truef(t, ok, "%s", p) 64 require.Equal(t, p, np) 65 } 66 } 67 68 func TestPrivsHas(t *testing.T) { 69 // it is a simple helper, does not handle all&dynamic privs 70 privs := Privileges{AllPriv} 71 require.True(t, privs.Has(AllPriv)) 72 require.False(t, privs.Has(InsertPriv)) 73 74 // multiple privs 75 privs = Privileges{InsertPriv, SelectPriv} 76 require.True(t, privs.Has(SelectPriv)) 77 require.True(t, privs.Has(InsertPriv)) 78 require.False(t, privs.Has(DropPriv)) 79 } 80 81 func TestPrivAllConsistency(t *testing.T) { 82 // AllPriv in mysql.user columns. 83 for priv := CreatePriv; priv != AllPriv; priv = priv << 1 { 84 _, ok := Priv2UserCol[priv] 85 require.Truef(t, ok, "priv fail %d", priv) 86 } 87 88 require.Equal(t, len(AllGlobalPrivs)+1, len(Priv2UserCol)) 89 90 // USAGE privilege doesn't have a column in Priv2UserCol 91 // ALL privilege doesn't have a column in Priv2UserCol 92 // so it's +2 93 require.Equal(t, len(Priv2UserCol)+2, len(Priv2Str)) 94 }