github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/testutils/reduce/reducesql/reducesql_test.go (about) 1 // Copyright 2019 The Cockroach Authors. 2 // 3 // Use of this software is governed by the Business Source License 4 // included in the file licenses/BSL.txt. 5 // 6 // As of the Change Date specified in that file, in accordance with 7 // the Business Source License, use of this software will be governed 8 // by the Apache License, Version 2.0, included in the file 9 // licenses/APL.txt. 10 11 package reducesql_test 12 13 import ( 14 "context" 15 "flag" 16 "net/url" 17 "strings" 18 "testing" 19 20 "github.com/cockroachdb/cockroach/pkg/base" 21 "github.com/cockroachdb/cockroach/pkg/security" 22 "github.com/cockroachdb/cockroach/pkg/server" 23 "github.com/cockroachdb/cockroach/pkg/testutils/reduce" 24 "github.com/cockroachdb/cockroach/pkg/testutils/reduce/reducesql" 25 "github.com/jackc/pgx" 26 ) 27 28 var printUnknown = flag.Bool("unknown", false, "print unknown types during walk") 29 30 func TestReduceSQL(t *testing.T) { 31 // These take a bit too long to need to run every time. 32 t.Skip("unnecessary") 33 reducesql.LogUnknown = *printUnknown 34 35 reduce.Walk(t, "testdata", reducesql.Pretty, isInterestingSQL, reduce.ModeInteresting, reducesql.SQLPasses) 36 } 37 38 func isInterestingSQL(contains string) reduce.InterestingFn { 39 return func(ctx context.Context, f reduce.File) bool { 40 args := base.TestServerArgs{ 41 Insecure: true, 42 } 43 server := server.TestServerFactory.New(args).(*server.TestServer) 44 if err := server.Start(args); err != nil { 45 panic(err) 46 } 47 defer server.Stopper().Stop(ctx) 48 49 options := url.Values{} 50 options.Add("sslmode", "disable") 51 url := url.URL{ 52 Scheme: "postgres", 53 User: url.User(security.RootUser), 54 Host: server.ServingSQLAddr(), 55 RawQuery: options.Encode(), 56 } 57 58 conf, err := pgx.ParseURI(url.String()) 59 if err != nil { 60 panic(err) 61 } 62 db, err := pgx.Connect(conf) 63 if err != nil { 64 panic(err) 65 } 66 _, err = db.ExecEx(ctx, string(f), nil) 67 if err == nil { 68 return false 69 } 70 return strings.Contains(err.Error(), contains) 71 } 72 }