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  }