Skip to content

Commit

Permalink
added test
Browse files Browse the repository at this point in the history
  • Loading branch information
wph95 committed Oct 26, 2019
1 parent 4f8140f commit c5ab3f2
Show file tree
Hide file tree
Showing 7 changed files with 191 additions and 15 deletions.
10 changes: 5 additions & 5 deletions executor/ddl_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,6 @@ package executor_test
import (
"context"
"fmt"
"math"
"strconv"
"strings"
"time"

. "github.com/pingcap/check"
"github.com/pingcap/failpoint"
"github.com/pingcap/parser/model"
Expand All @@ -41,6 +36,10 @@ import (
"github.com/pingcap/tidb/util/chunk"
"github.com/pingcap/tidb/util/testkit"
"github.com/pingcap/tidb/util/testutil"
"math"
"strconv"
"strings"
"time"
)

func (s *testSuite6) TestTruncateTable(c *C) {
Expand Down Expand Up @@ -1005,3 +1004,4 @@ func (s *testSuite6) TestTimestampMinDefaultValue(c *C) {
tk.MustExec("create table tdv(a int);")
tk.MustExec("ALTER TABLE tdv ADD COLUMN ts timestamp DEFAULT '1970-01-01 08:00:01';")
}

8 changes: 5 additions & 3 deletions executor/executor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3948,9 +3948,7 @@ func (s *testSuite6) TearDownTest(c *C) {
}
}

type testSuite7 struct {
*baseTestSuite
}


func (s *testSuite7) TearDownTest(c *C) {
tk := testkit.NewTestKit(c, s.store)
Expand Down Expand Up @@ -5053,3 +5051,7 @@ func (s *testSuiteP2) TestPointUpdatePreparedPlanWithCommitMode(c *C) {

tk2.MustQuery("select * from t where a = 3").Check(testkit.Rows("3 3 11"))
}

type testSuite7 struct {
*baseTestSuite
}
3 changes: 0 additions & 3 deletions executor/plugin_executor.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package executor

import (
"fmt"
"github.com/davecgh/go-spew/spew"
"github.com/pingcap/parser/model"
"github.com/pingcap/tidb/plugin"
"github.com/pingcap/tidb/util/chunk"
Expand Down Expand Up @@ -30,7 +28,6 @@ func (e *PluginScanExecutor) Open(ctx context.Context) error {
func (e *PluginScanExecutor) Next(ctx context.Context, chk *chunk.Chunk) error {
chk.Reset()
err := e.pm.OnReaderNext(ctx, chk, e.meta)
fmt.Println("pe next finished", spew.Sdump(err))
return err
}

Expand Down
1 change: 0 additions & 1 deletion plugin/csv/csv.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ func OnReaderOpen(ctx context.Context, meta *plugin.ExecutorMeta) {

func OnReaderNext(ctx context.Context, chk *chunk.Chunk, meta *plugin.ExecutorMeta) error {
if _, ok := Files[meta.Table.Name.L]; !ok {
fmt.Println("have some problem")
return nil
}
e := Files[meta.Table.Name.L]
Expand Down
23 changes: 20 additions & 3 deletions plugin/plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -384,20 +384,37 @@ func Shutdown(ctx context.Context) {
}
}

// Get finds and returns plugin by kind and name parameters.
var TestP map[Kind][]Plugin

func Set(kind Kind, p Plugin) {
if TestP == nil {
TestP = make(map[Kind][]Plugin)
}
TestP[kind] = append(TestP[kind], p)
}

// Get finds and returns plugin by kind and name parameters.
func Get(kind Kind, name string) *Plugin {
plugins := pluginGlobal.plugins()
if plugins == nil {
return nil
if plugins != nil {
for _, p := range plugins.plugins[kind] {
if p.Name == name {
return &p
}
}
}
for _, p := range plugins.plugins[kind] {

for _, p := range TestP[kind] {
if p.Name == name {
return &p
}
}

return nil
}


func List(kind Kind) []Plugin {
plugins := pluginGlobal.plugins()
if plugins == nil {
Expand Down
96 changes: 96 additions & 0 deletions plugin/plugin_engine_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
package plugin_test

import (
"flag"
. "github.com/pingcap/check"
"github.com/pingcap/parser"
"github.com/pingcap/tidb/domain"
"github.com/pingcap/tidb/kv"
"github.com/pingcap/tidb/plugin"
"github.com/pingcap/tidb/session"
"github.com/pingcap/tidb/store/mockstore"
"github.com/pingcap/tidb/store/mockstore/mocktikv"
"github.com/pingcap/tidb/util/mock"
"github.com/pingcap/tidb/util/testkit"
"testing"
"unsafe"
)

type baseTestSuite struct {
cluster *mocktikv.Cluster
mvccStore mocktikv.MVCCStore
store kv.Storage
domain *domain.Domain
*parser.Parser
ctx *mock.Context
}

var mockTikv = flag.Bool("mockTikv", true, "use mock tikv store in executor test")

func (s *baseTestSuite) SetUpSuite(c *C) {
s.Parser = parser.New()
flag.Lookup("mockTikv")
useMockTikv := *mockTikv
if useMockTikv {
s.cluster = mocktikv.NewCluster()
mocktikv.BootstrapWithSingleStore(s.cluster)
s.mvccStore = mocktikv.MustNewMVCCStore()
store, err := mockstore.NewMockTikvStore(
mockstore.WithCluster(s.cluster),
mockstore.WithMVCCStore(s.mvccStore),
)
c.Assert(err, IsNil)
s.store = store
session.SetSchemaLease(0)
session.DisableStats4Test()
}
d, err := session.BootstrapSession(s.store)
c.Assert(err, IsNil)
d.SetStatsUpdating(true)
s.domain = d
}

func (s *baseTestSuite) TearDownSuite(c *C) {
s.domain.Close()
s.store.Close()
}

var _ = Suite(&testPlugin{&baseTestSuite{}})

type testPlugin struct{ *baseTestSuite }

func TestPlugin(t *testing.T) {
//rescueStdout := os.Stdout
//_, w, _ := os.Pipe()
//os.Stdout = w
//
//os.Stdout = rescueStdout
//
//runConf := RunConf{Output: rescueStdout, Verbose: true, KeepWorkDir: true}
TestingT(t)
}

func (s *testPlugin) TestPlugin(c *C) {
tk := testkit.NewTestKit(c, s.store)
manifest := plugin.EngineManifest{
Manifest: plugin.Manifest{
Name: "csv",
},
OnReaderOpen: plugin.OnReaderOpen,
OnReaderNext: plugin.OnReaderNext,
//OnReaderClose: plugin.OnReaderClose,
}
plugin.Set(plugin.Engine, plugin.Plugin{
Manifest: (*plugin.Manifest)(unsafe.Pointer(&manifest)),
Path: "",
Disabled: 0,
State: 0,
})

tk.MustExec("use test")
tk.MustExec("create table t1(a int, b char(255)) ENGINE = csv")
result := tk.MustQuery("select * from t1")
result.Check(testkit.Rows("0 233333", "1 233333", "2 233333", "3 233333", "4 233333", "5 233333"))
result = tk.MustQuery("select * from t1 where a = 2")
result.Check(testkit.Rows("2 233333", ))
}
65 changes: 65 additions & 0 deletions plugin/test_engine.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// Copyright 2019 PingCAP, Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// See the License for the specific language governing permissions and
// limitations under the License.

package plugin

import (
"context"
"fmt"
"github.com/pingcap/tidb/util/chunk"
)

type ReadExecutor struct {
pos int
}

var Files = make(map[string]*ReadExecutor)

// Validate implements TiDB plugin's Validate SPI.
func Validate(ctx context.Context, m *Manifest) error {
fmt.Println("csv plugin validate")
return nil
}

// OnInit implements TiDB plugin's OnInit SPI.
func OnInit(ctx context.Context, manifest *Manifest) error {
fmt.Println("csv init called")
return nil
}

// OnShutdown implements TiDB plugin's OnShutdown SPI.
func OnShutdown(ctx context.Context, manifest *Manifest) error {
fmt.Println("csv shutdown called")
return nil
}

func OnReaderOpen(ctx context.Context, meta *ExecutorMeta) {
Files[meta.Table.Name.L] = &ReadExecutor{
pos: 0,
}
}

func OnReaderNext(ctx context.Context, chk *chunk.Chunk, meta *ExecutorMeta) error {
if _, ok := Files[meta.Table.Name.L]; !ok {
fmt.Println("have some problem")
return nil
}
e := Files[meta.Table.Name.L]
if e.pos > 5 {
return nil
}
chk.AppendInt64(0, int64(e.pos))
chk.AppendString(1, "233333")
e.pos += 1
return nil
}

0 comments on commit c5ab3f2

Please sign in to comment.