1package goose 2 3import ( 4 "fmt" 5 "io/ioutil" 6 "os" 7 "os/exec" 8 "strings" 9 "testing" 10 "time" 11) 12 13func TestSequential(t *testing.T) { 14 t.Parallel() 15 16 dir, err := ioutil.TempDir("", "tmptest") 17 if err != nil { 18 t.Fatal(err) 19 } 20 21 defer os.RemoveAll(dir) // clean up 22 defer os.Remove("./bin/create-goose") // clean up 23 24 commands := []string{ 25 "go build -o ./bin/create-goose ./cmd/goose", 26 fmt.Sprintf("./bin/create-goose -s -dir=%s create create_table", dir), 27 fmt.Sprintf("./bin/create-goose -s -dir=%s create add_users", dir), 28 fmt.Sprintf("./bin/create-goose -s -dir=%s create add_indices", dir), 29 fmt.Sprintf("./bin/create-goose -s -dir=%s create update_users", dir), 30 } 31 32 for _, cmd := range commands { 33 args := strings.Split(cmd, " ") 34 time.Sleep(1 * time.Second) 35 cmd := exec.Command(args[0], args[1:]...) 36 cmd.Env = os.Environ() 37 out, err := cmd.CombinedOutput() 38 if err != nil { 39 t.Fatalf("%s:\n%v\n\n%s", err, cmd, out) 40 } 41 } 42 43 files, err := ioutil.ReadDir(dir) 44 if err != nil { 45 t.Fatal(err) 46 } 47 48 // check that the files are in order 49 for i, f := range files { 50 expected := fmt.Sprintf("%05v", i+1) 51 if !strings.HasPrefix(f.Name(), expected) { 52 t.Errorf("failed to find %s prefix in %s", expected, f.Name()) 53 } 54 } 55} 56