github.com/Ali-iotechsys/sqlboiler/v4@v4.0.0-20221208124957-6aec9a5f1f71/drivers/binary_driver_test.go (about) 1 package drivers 2 3 import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "os" 8 "reflect" 9 "runtime" 10 "strings" 11 "testing" 12 ) 13 14 var testBinaryDriver = fmt.Sprintf("#!/bin/sh\ncat <<EOF%s\nEOF\n", testBinaryJSON) 15 var testWarningBinaryDriver = `#!/bin/sh 16 echo "warning binary" 1>&2 17 echo "{}" 18 ` 19 var testBadBinaryDriver = `#!/bin/sh 20 echo "bad binary" 1>&2 21 exit 1 22 ` 23 24 func TestBinaryDriver(t *testing.T) { 25 if runtime.GOOS == "windows" { 26 t.Skip("cannot run binary test on windows (needs bin/sh)") 27 } 28 29 var want, got *DBInfo 30 if err := json.Unmarshal([]byte(testBinaryJSON), &want); err != nil { 31 t.Fatal(err) 32 } 33 34 bin, err := os.CreateTemp("", "test_binary_driver") 35 if err != nil { 36 t.Fatal(err) 37 } 38 fmt.Fprint(bin, testBinaryDriver) 39 if err := bin.Chmod(0774); err != nil { 40 t.Fatal(err) 41 } 42 if err := bin.Close(); err != nil { 43 t.Fatal(err) 44 } 45 46 name := bin.Name() 47 48 exe := binaryDriver(name) 49 got, err = exe.Assemble(nil) 50 if err != nil { 51 t.Fatal(err) 52 } 53 54 if !reflect.DeepEqual(want, got) { 55 t.Errorf("want:\n%#v\ngot:\n%#v\n", want, got) 56 } 57 } 58 59 func TestBinaryWarningDriver(t *testing.T) { 60 if runtime.GOOS == "windows" { 61 t.Skip("cannot run binary test on windows (needs bin/sh)") 62 } 63 64 bin, err := os.CreateTemp("", "test_binary_driver") 65 if err != nil { 66 t.Fatal(err) 67 } 68 fmt.Fprint(bin, testWarningBinaryDriver) 69 if err := bin.Chmod(0774); err != nil { 70 t.Fatal(err) 71 } 72 if err := bin.Close(); err != nil { 73 t.Fatal(err) 74 } 75 76 stderr := &bytes.Buffer{} 77 err = execute(bin.Name(), "method", nil, nil, stderr) 78 if err != nil { 79 t.Error(err) 80 } else if !strings.Contains(stderr.String(), "warning binary") { 81 t.Error("it should have written to stderr") 82 } 83 } 84 85 func TestBinaryBadDriver(t *testing.T) { 86 if runtime.GOOS == "windows" { 87 t.Skip("cannot run binary test on windows (needs bin/sh)") 88 } 89 90 bin, err := os.CreateTemp("", "test_binary_driver") 91 if err != nil { 92 t.Fatal(err) 93 } 94 fmt.Fprint(bin, testBadBinaryDriver) 95 if err := bin.Chmod(0774); err != nil { 96 t.Fatal(err) 97 } 98 if err := bin.Close(); err != nil { 99 t.Fatal(err) 100 } 101 102 stderr := &bytes.Buffer{} 103 err = execute(bin.Name(), "method", nil, nil, stderr) 104 if err == nil { 105 t.Error("it should have failed when the program exited 1") 106 } else if !strings.Contains(stderr.String(), "bad binary") { 107 t.Error("it should have written to stderr") 108 } else if !strings.Contains(err.Error(), "non-zero") { 109 t.Error("it should have reported non-zero exit") 110 } 111 } 112 113 var testBinaryJSON = ` 114 { 115 "tables": [ 116 { 117 "name": "users", 118 "schema_name": "dbo", 119 "columns": [ 120 { 121 "name": "id", 122 "type": "int", 123 "db_type": "integer", 124 "default": "", 125 "nullable": false, 126 "unique": true, 127 "validated": false, 128 "arr_type": null, 129 "udt_name": "", 130 "full_db_type": "", 131 "auto_generated": false 132 }, 133 { 134 "name": "profile_id", 135 "type": "int", 136 "db_type": "integer", 137 "default": "", 138 "nullable": false, 139 "unique": true, 140 "validated": false, 141 "arr_type": null, 142 "udt_name": "", 143 "full_db_type": "", 144 "auto_generated": false 145 } 146 ], 147 "p_key": { 148 "name": "pk_users", 149 "columns": ["id"] 150 }, 151 "f_keys": [ 152 { 153 "table": "users", 154 "name": "fk_users_profile", 155 "column": "profile_id", 156 "nullable": false, 157 "unique": true, 158 "foreign_table": "profiles", 159 "foreign_column": "id", 160 "foreign_column_nullable": false, 161 "foreign_column_unique": true 162 } 163 ], 164 "is_join_table": false, 165 "to_one_relationships": [ 166 { 167 "table": "users", 168 "name": "fk_users_profile", 169 "column": "profile_id", 170 "nullable": false, 171 "unique": true, 172 "foreign_table": "profiles", 173 "foreign_column": "id", 174 "foreign_column_nullable": false, 175 "foreign_column_unique": true 176 } 177 ] 178 } 179 ], 180 "dialect": { 181 "lq": 91, 182 "rq": 93, 183 184 "use_index_placeholders": false, 185 "use_last_insert_id": true, 186 "use_top_clause": false 187 } 188 } 189 `