github.com/square/finch@v0.0.0-20240412205204-6530c03e2b96/boot/boot_test.go (about) 1 package boot_test 2 3 import ( 4 "os" 5 "testing" 6 "time" 7 8 "github.com/square/finch/boot" 9 "github.com/square/finch/test" 10 ) 11 12 var cwd, _ = os.Getwd() 13 14 func TestBootAndRuntime(t *testing.T) { 15 if test.Build { 16 t.Skip("GitHub Actions build") 17 } 18 19 defer os.Chdir(cwd) 20 21 dsn, db, err := test.Connection() 22 if err != nil { 23 t.Fatal(err) 24 } 25 defer db.Close() 26 27 env := boot.Env{ 28 Args: []string{ 29 "./finch", // fake like it was run from cmd line (required) 30 "--dsn", dsn, 31 "../test/run/select-1/test.yaml", 32 }, 33 } 34 35 // Benchmark just runs SELECT 1 for 1s 36 t0 := time.Now() 37 err = boot.Up(env) 38 if err != nil { 39 t.Error(err) 40 } 41 42 d := time.Now().Sub(t0) 43 if d.Seconds() < 0.8 || d.Seconds() > 1.2 { 44 t.Errorf("ran for %.1f seconds, epxected 1.0 +/- 0.2", d.Seconds()) 45 } 46 } 47 48 func TestColumns(t *testing.T) { 49 if test.Build { 50 t.Skip("GitHub Actions build") 51 } 52 53 defer os.Chdir(cwd) 54 55 dsn, db, err := test.Connection() 56 if err != nil { 57 t.Fatal(err) 58 } 59 defer db.Close() 60 61 env := boot.Env{ 62 Args: []string{ 63 "./finch", // fake like it was run from cmd line (required) 64 "--dsn", dsn, 65 "../test/run/columns/test.yaml", 66 }, 67 } 68 69 err = boot.Up(env) 70 if err != nil { 71 t.Error(err) 72 } 73 74 /* 75 finch> select * from coltest1; select * from coltest2; select * from coltest3; 76 +---+---+ 77 | a | b | 78 +---+---+ 79 | 1 | 0 | 80 +---+---+ 81 82 +---+------+---+ 83 | x | y | z | 84 +---+------+---+ 85 | 1 | 0x75 | 0 | 86 +---+------+---+ 87 88 +---+------+ 89 | x | y | 90 +---+------+ 91 | 1 | 0x75 | 92 +---+------+ 93 94 The first statement uses save-insert-id, which should get value 1 -> @a. 95 The second statement inserts @d and "0x75" into coltest2, to verify that save-insert-id works. 96 The third statements selects from coltest2 using save-columns: @x, @y, _. 97 The fourth statement inserts @x and @y into coltest3 to ensure save-columns works. 98 The "0x75" is a trick to ensure that quote-value: yes on @y works: if it does then we 99 get "0x75", but if it fails then MySQL changes 0x75 -> "u" and the t3 test fails. 100 All this also tests that columns default to trx scope, else none of it works. 101 */ 102 103 t1, err := test.OneRow(db, "SELECT CONCAT_WS(',',a,b) FROM finch.coltest1") 104 if err != nil { 105 t.Error(err) 106 } 107 if t1 != "1,0" { 108 t.Errorf("coltest1 row = '%s', expected '1,0'", t1) 109 } 110 111 t2, err := test.OneRow(db, "SELECT CONCAT_WS(',',x,y,z) FROM finch.coltest2") 112 if err != nil { 113 t.Error(err) 114 } 115 if t2 != "1,0x75,0" { 116 t.Errorf("coltest1 row = '%s', expected '1,0x75,0'", t2) 117 } 118 119 t3, err := test.OneRow(db, "SELECT CONCAT_WS(',',x,y) FROM finch.coltest3") 120 if err != nil { 121 t.Error(err) 122 } 123 if t3 != "1,0x75" { 124 t.Errorf("coltest1 row = '%s', expected '1,0x75'", t3) 125 } 126 }