Adam Sadovsky | 82f2c00 | 2014-11-26 11:06:27 -0800 | [diff] [blame] | 1 | // Runs the servicerunner binary and checks that it outputs a JSON line to |
| 2 | // stdout with the expected variables. |
| 3 | package main |
| 4 | |
| 5 | import ( |
| 6 | "bufio" |
| 7 | "encoding/json" |
| 8 | "fmt" |
| 9 | "io/ioutil" |
Robin Thellend | cf140c0 | 2014-12-08 14:56:24 -0800 | [diff] [blame] | 10 | "os" |
Adam Sadovsky | 82f2c00 | 2014-11-26 11:06:27 -0800 | [diff] [blame] | 11 | "os/exec" |
| 12 | "path" |
| 13 | "testing" |
Ankur | 0003fdc | 2015-01-22 10:59:41 -0800 | [diff] [blame] | 14 | |
| 15 | "v.io/core/veyron/lib/testutil" |
Adam Sadovsky | 82f2c00 | 2014-11-26 11:06:27 -0800 | [diff] [blame] | 16 | ) |
| 17 | |
Matt Rosencrantz | 2fa2c02 | 2015-01-08 15:36:05 -0800 | [diff] [blame] | 18 | func TestMain(t *testing.T) { |
Ankur | 0003fdc | 2015-01-22 10:59:41 -0800 | [diff] [blame] | 19 | testutil.UnsetPrincipalEnvVars() |
Matt Rosencrantz | 2fa2c02 | 2015-01-08 15:36:05 -0800 | [diff] [blame] | 20 | tmpdir, err := ioutil.TempDir("", "servicerunner_test") |
Adam Sadovsky | 82f2c00 | 2014-11-26 11:06:27 -0800 | [diff] [blame] | 21 | if err != nil { |
| 22 | t.Fatal(err) |
| 23 | } |
Robin Thellend | cf140c0 | 2014-12-08 14:56:24 -0800 | [diff] [blame] | 24 | defer os.RemoveAll(tmpdir) |
| 25 | os.Setenv("TMPDIR", tmpdir) |
Adam Sadovsky | 82f2c00 | 2014-11-26 11:06:27 -0800 | [diff] [blame] | 26 | |
| 27 | bin := path.Join(tmpdir, "servicerunner") |
| 28 | fmt.Println("Building", bin) |
Matt Rosencrantz | 2fa2c02 | 2015-01-08 15:36:05 -0800 | [diff] [blame] | 29 | err = exec.Command("v23", "go", "build", "-o", bin, "v.io/core/veyron/tools/servicerunner").Run() |
| 30 | if err != nil { |
| 31 | t.Fatal(err) |
| 32 | } |
Adam Sadovsky | 82f2c00 | 2014-11-26 11:06:27 -0800 | [diff] [blame] | 33 | |
| 34 | cmd := exec.Command(bin) |
| 35 | stdout, err := cmd.StdoutPipe() |
Matt Rosencrantz | 2fa2c02 | 2015-01-08 15:36:05 -0800 | [diff] [blame] | 36 | if err != nil { |
| 37 | t.Fatal(err) |
| 38 | } |
| 39 | if err = cmd.Start(); err != nil { |
| 40 | t.Fatal(err) |
| 41 | } |
Adam Sadovsky | 82f2c00 | 2014-11-26 11:06:27 -0800 | [diff] [blame] | 42 | |
| 43 | line, err := bufio.NewReader(stdout).ReadBytes('\n') |
Matt Rosencrantz | 2fa2c02 | 2015-01-08 15:36:05 -0800 | [diff] [blame] | 44 | if err != nil { |
| 45 | t.Fatal(err) |
| 46 | } |
Adam Sadovsky | 82f2c00 | 2014-11-26 11:06:27 -0800 | [diff] [blame] | 47 | vars := map[string]string{} |
Matt Rosencrantz | 2fa2c02 | 2015-01-08 15:36:05 -0800 | [diff] [blame] | 48 | if err = json.Unmarshal(line, &vars); err != nil { |
| 49 | t.Fatal(err) |
| 50 | } |
Adam Sadovsky | 82f2c00 | 2014-11-26 11:06:27 -0800 | [diff] [blame] | 51 | fmt.Println(vars) |
Nicolas LaCasse | c7cdf42 | 2015-01-08 14:11:29 -0800 | [diff] [blame] | 52 | expectedVars := []string{ |
Nicolas LaCasse | c7cdf42 | 2015-01-08 14:11:29 -0800 | [diff] [blame] | 53 | "MT_NAME", |
Cosmos Nicolaou | 8bd8e10 | 2015-01-13 21:52:53 -0800 | [diff] [blame] | 54 | "PROXY_NAME", |
Nicolas LaCasse | c7cdf42 | 2015-01-08 14:11:29 -0800 | [diff] [blame] | 55 | "WSPR_ADDR", |
Cosmos Nicolaou | 8bd8e10 | 2015-01-13 21:52:53 -0800 | [diff] [blame] | 56 | "TEST_IDENTITYD_NAME", |
Nicolas LaCasse | c7cdf42 | 2015-01-08 14:11:29 -0800 | [diff] [blame] | 57 | "TEST_IDENTITYD_HTTP_ADDR", |
| 58 | } |
| 59 | for _, name := range expectedVars { |
Adam Sadovsky | 82f2c00 | 2014-11-26 11:06:27 -0800 | [diff] [blame] | 60 | if _, ok := vars[name]; !ok { |
| 61 | t.Error("Missing", name) |
| 62 | } |
| 63 | } |
| 64 | |
Matt Rosencrantz | 2fa2c02 | 2015-01-08 15:36:05 -0800 | [diff] [blame] | 65 | if err != cmd.Process.Kill() { |
| 66 | t.Fatal(err) |
| 67 | } |
Adam Sadovsky | 82f2c00 | 2014-11-26 11:06:27 -0800 | [diff] [blame] | 68 | } |