vitess.io/vitess@v0.16.2/go/vt/vtgate/engine/dbddl_test.go (about) 1 package engine 2 3 import ( 4 "context" 5 "fmt" 6 "testing" 7 "time" 8 9 "github.com/stretchr/testify/assert" 10 11 "github.com/stretchr/testify/require" 12 ) 13 14 type dbddlTestFake struct { 15 createCalled, dropCalled bool 16 sleep int 17 } 18 19 func (d *dbddlTestFake) CreateDatabase(ctx context.Context, name string) error { 20 if d.sleep > 0 { 21 time.Sleep(time.Duration(d.sleep) * time.Second) 22 } 23 d.createCalled = true 24 return nil 25 } 26 27 func (d *dbddlTestFake) DropDatabase(ctx context.Context, name string) error { 28 if d.sleep > 0 { 29 time.Sleep(time.Duration(d.sleep) * time.Second) 30 } 31 d.dropCalled = true 32 return nil 33 } 34 35 var _ DBDDLPlugin = (*dbddlTestFake)(nil) 36 37 func TestDBDDLCreateExecute(t *testing.T) { 38 pluginName := "createFake" 39 plugin := &dbddlTestFake{} 40 DBDDLRegister(pluginName, plugin) 41 42 primitive := &DBDDL{ 43 name: "ks", 44 create: true, 45 } 46 47 vc := &loggingVCursor{dbDDLPlugin: pluginName} 48 49 _, err := primitive.TryExecute(context.Background(), vc, nil, false) 50 require.NoError(t, err) 51 require.True(t, plugin.createCalled) 52 require.False(t, plugin.dropCalled) 53 } 54 55 func TestDBDDLDropExecute(t *testing.T) { 56 pluginName := "dropFake" 57 plugin := &dbddlTestFake{} 58 DBDDLRegister(pluginName, plugin) 59 60 primitive := &DBDDL{name: "ks"} 61 62 vc := &loggingVCursor{dbDDLPlugin: pluginName, ksAvailable: false} 63 64 _, err := primitive.TryExecute(context.Background(), vc, nil, false) 65 require.NoError(t, err) 66 require.False(t, plugin.createCalled) 67 require.True(t, plugin.dropCalled) 68 } 69 70 func TestDBDDLTimeout(t *testing.T) { 71 pluginName := "timeoutFake" 72 plugin := &dbddlTestFake{sleep: 2} 73 DBDDLRegister(pluginName, plugin) 74 75 primitive := &DBDDL{name: "ks", create: true, queryTimeout: 100} 76 vc := &loggingVCursor{dbDDLPlugin: pluginName, shardErr: fmt.Errorf("db not available")} 77 _, err := primitive.TryExecute(context.Background(), vc, nil, false) 78 assert.EqualError(t, err, "could not validate create database: destination not resolved") 79 80 primitive = &DBDDL{name: "ks", queryTimeout: 100} 81 vc = &loggingVCursor{dbDDLPlugin: pluginName, ksAvailable: true} 82 _, err = primitive.TryExecute(context.Background(), vc, nil, false) 83 assert.EqualError(t, err, "could not validate drop database: keyspace still available in vschema") 84 }