Skip to content

Commit

Permalink
Run integration and unit tests separately
Browse files Browse the repository at this point in the history
  • Loading branch information
ejholmes committed Jan 15, 2017
1 parent cc54c36 commit 0792dbe
Show file tree
Hide file tree
Showing 5 changed files with 113 additions and 7 deletions.
5 changes: 4 additions & 1 deletion .travis.yml
Expand Up @@ -3,6 +3,9 @@ sudo: required
env:
global:
secure: IZM73JJwd/vZ7W/0rYcIs9p4xClp1MlHZbsdOLJUSUXHTuoZtoXxqZBaoWI7emechR8grR/0wPUMBayuFvgFEPwmzerbJVjZivWqGipTBzr2xz/UdIet4wgFmpk50GHZ++31mdHL2P6uee2s8EBlRldBW47A7nTK67FJJvgQLzvMYqSroINegAeDO0q+FlQm17vnEmi/+mzro5dh6DPRJeELbkK9BEyZmmqsW54N/3y2cR0NodCBmJqkV/yXNUZ70uyHESR8RFFSaCBRxpcnkGp1/MdZ5qSMfzDUYd15qZDJpCa2kcGoJ6YwwCzCbsqBvVFuhiM5mH/itq7fPRXbRkV7g0WtrAt6lhdX/WSaEOd5MESepjPCIloeetlKbXmAqumiNglCHAjnWPtIgoXc+87ssiqoQ1thrZS2HCAdRrEfnrNlxAyTIMtoXseIvaOpGOsPpyS8u0aRFjOTK2iKvXOldnHUG0D2l7YxKlQDmdm7Y2v8o0S356OJDz18TXddqkZLjyyCiWoJ+W8dvsN1vd0gONaJfyX6p65rzwK9MJWkGXXjzCPYqNS99BqKxhTwppXUTK0jVKAh+jf/xB+bFe28KTBLHMHpRQ/8DryVLOg0QhwwTCQtlDlooT1gZqwHbEB7OrzEZ29aHRxB7RibhCPzMuYNng1KVQz64SX3eHg=
matrix:
- SUITE=unit
- SUITE=integration
language: go

go:
Expand All @@ -15,4 +18,4 @@ install:
- go get github.com/aktau/github-release
- go install .

script: walk -v test
script: walk -v test/$SUITE
93 changes: 93 additions & 0 deletions internal/prefix/main.go
@@ -0,0 +1,93 @@
package main

import (
"bytes"
"flag"
"fmt"
"io"
"os"
"os/exec"
"os/signal"
"syscall"
)

func main() {
var (
pre = flag.String("prefix", "", "A string to prefix stdout/stderr with.")
)
flag.Parse()
args := flag.Args()
cmd := exec.Command(args[0], args[1:]...)
cmd.Stdout = prefix(os.Stdout, *pre)
cmd.Stderr = prefix(os.Stderr, *pre)
cmd.Stdin = os.Stdin

err := cmd.Start()
must(err)

ch := make(chan os.Signal)
signal.Notify(ch)
go func() {
for sig := range ch {
cmd.Process.Signal(sig)
}
}()

err = cmd.Wait()
if exiterr, ok := err.(*exec.ExitError); ok {
if status, ok := exiterr.ProcessState.Sys().(syscall.WaitStatus); ok {
os.Exit(status.ExitStatus())
}
}
must(err)
}

func must(err error) {
if err != nil {
fmt.Fprintf(os.Stderr, "err: %v\n", err)
os.Exit(1)
}
}

// prefixWriter wraps an io.Writer to append a prefix to each line written.
type prefixWriter struct {
prefix []byte

// The underlying io.Writer where prefixed lines will be written.
w io.Writer

// Buffer to hold the last line, which doesn't have a newline yet.
b []byte
}

func prefix(w io.Writer, prefix string) io.Writer {
if w == nil {
return w
}
return &prefixWriter{
prefix: []byte(prefix),
w: w,
}
}

func (w *prefixWriter) Write(b []byte) (int, error) {
p := b
for {
i := bytes.IndexRune(p, '\n')

if i >= 0 {
w.b = append(w.b, p[:i+1]...)
p = p[i+1:]
_, err := w.w.Write(append(w.prefix, w.b...))
w.b = nil
if err != nil {
return len(b), err
}
continue
}

w.b = append(w.b, p...)
break
}
return len(b), nil
}
7 changes: 1 addition & 6 deletions test/all.walk
@@ -1,12 +1,7 @@
#!/bin/bash

deps() {
echo bundled
echo 110-compile/all
echo 111-compile/all
echo 200-frontend/all
echo 300-docker/all
echo unit
echo integration
}

case $1 in
Expand Down
13 changes: 13 additions & 0 deletions test/integration.walk
@@ -0,0 +1,13 @@
#!/bin/bash

deps() {
echo bundled
echo 110-compile/all
echo 111-compile/all
echo 200-frontend/all
echo 300-docker/all
}

case $1 in
deps) deps ;;
esac
2 changes: 2 additions & 0 deletions test/unit.walk
@@ -1,5 +1,7 @@
#!/bin/bash

target=$1

deps() {
find .. -type f -iname '*.go'
}
Expand Down

0 comments on commit 0792dbe

Please sign in to comment.