github.com/matrixorigin/matrixone@v0.7.0/pkg/util/metric/test/cron_task_test.go (about) 1 // Copyright 2022 Matrix Origin 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 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package test 16 17 import ( 18 "context" 19 "testing" 20 "time" 21 22 "github.com/matrixorigin/matrixone/pkg/config" 23 "github.com/matrixorigin/matrixone/pkg/defines" 24 "github.com/matrixorigin/matrixone/pkg/frontend" 25 mock_frontend "github.com/matrixorigin/matrixone/pkg/frontend/test" 26 "github.com/matrixorigin/matrixone/pkg/logutil" 27 "github.com/matrixorigin/matrixone/pkg/pb/txn" 28 "github.com/matrixorigin/matrixone/pkg/tests/service" 29 ie "github.com/matrixorigin/matrixone/pkg/util/internalExecutor" 30 "github.com/matrixorigin/matrixone/pkg/util/metric" 31 "github.com/matrixorigin/matrixone/pkg/vm/engine" 32 33 "github.com/golang/mock/gomock" 34 "github.com/lni/goutils/leaktest" 35 "github.com/prashantv/gostub" 36 dto "github.com/prometheus/client_model/go" 37 "github.com/stretchr/testify/require" 38 "go.uber.org/zap" 39 ) 40 41 const defaultTestTimeout = 3 * time.Minute 42 43 // TestCalculateStorageUsage 44 // example like tasks.TestCronTask in task_test.go 45 func TestCalculateStorageUsage(t *testing.T) { 46 t.Skip() 47 defer leaktest.AfterTest(t)() 48 if testing.Short() { 49 t.Skip("skipping in short mode.") 50 return 51 } 52 53 // initialize cluster 54 opt := service.DefaultOptions() 55 c, err := service.NewCluster(t, opt.WithLogLevel(zap.ErrorLevel)) 56 require.NoError(t, err) 57 // close the cluster 58 defer func(c service.Cluster) { 59 require.NoError(t, c.Close()) 60 }(c) 61 // start the cluster 62 require.NoError(t, c.Start()) 63 64 ctx, cancel := context.WithTimeout(context.Background(), defaultTestTimeout) 65 defer cancel() 66 67 ctrl := gomock.NewController(t) 68 txnOperator := mock_frontend.NewMockTxnOperator(ctrl) 69 txnOperator.EXPECT().Txn().Return(txn.TxnMeta{}).AnyTimes() 70 txnOperator.EXPECT().Commit(gomock.Any()).Return(nil).AnyTimes() 71 txnOperator.EXPECT().Rollback(gomock.Any()).Return(nil).AnyTimes() 72 txnClient := mock_frontend.NewMockTxnClient(ctrl) 73 txnClient.EXPECT().New().Return(txnOperator, nil).AnyTimes() 74 table := mock_frontend.NewMockRelation(ctrl) 75 table.EXPECT().Ranges(gomock.Any(), gomock.Any()).Return(nil, nil).AnyTimes() 76 table.EXPECT().TableDefs(gomock.Any()).Return(nil, nil).AnyTimes() 77 table.EXPECT().GetPrimaryKeys(gomock.Any()).Return(nil, nil).AnyTimes() 78 table.EXPECT().GetHideKeys(gomock.Any()).Return(nil, nil).AnyTimes() 79 table.EXPECT().Stats(gomock.Any(), gomock.Any()).Return(int32(100), int64(1000000), int64(1000000), nil).AnyTimes() 80 table.EXPECT().TableColumns(gomock.Any()).Return(nil, nil).AnyTimes() 81 table.EXPECT().GetTableID(gomock.Any()).Return(uint64(10)).AnyTimes() 82 db := mock_frontend.NewMockDatabase(ctrl) 83 db.EXPECT().Relations(gomock.Any()).Return(nil, nil).AnyTimes() 84 db.EXPECT().Relation(gomock.Any(), gomock.Any()).Return(table, nil).AnyTimes() 85 eng := mock_frontend.NewMockEngine(ctrl) 86 eng.EXPECT().New(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() 87 eng.EXPECT().Commit(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() 88 eng.EXPECT().Rollback(gomock.Any(), gomock.Any()).Return(nil).AnyTimes() 89 eng.EXPECT().Database(gomock.Any(), gomock.Any(), txnOperator).Return(db, nil).AnyTimes() 90 eng.EXPECT().Hints().Return(engine.Hints{CommitOrRollbackTimeout: time.Second}).AnyTimes() 91 pu := config.NewParameterUnit(&config.FrontendParameters{}, eng, txnClient, nil, nil) 92 pu.SV.SetDefaultValues() 93 94 // Mock autoIncrCache 95 aic := defines.AutoIncrCaches{} 96 97 ieFactory := func() ie.InternalExecutor { 98 return frontend.NewInternalExecutor(pu, aic) 99 } 100 101 qStub := gostub.Stub(&metric.QuitableWait, func(ctx2 context.Context) (*time.Ticker, error) { 102 cancel() 103 return nil, ctx2.Err() 104 }) 105 defer qStub.Reset() 106 107 err = metric.CalculateStorageUsage(ctx, ieFactory) 108 require.Nil(t, err) 109 110 s := metric.StorageUsage("sys") 111 dm := &dto.Metric{} 112 s.Write(dm) 113 logutil.Infof("size: %f", dm.GetGauge().GetValue()) 114 t.Logf("size: %f", dm.GetGauge().GetValue()) 115 116 } 117 118 func TestGetTenantInfo(t *testing.T) { 119 ctx := context.TODO() 120 tenant, err := frontend.GetTenantInfo(ctx, "sys:internal:moadmin") 121 require.Nil(t, err) 122 require.Equal(t, "moadmin", tenant.GetDefaultRole()) 123 }