Jiri Simsa | d7616c9 | 2015-03-24 23:44:30 -0700 | [diff] [blame] | 1 | // Copyright 2015 The Vanadium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 5 | package rt_test |
| 6 | |
| 7 | import ( |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 8 | "bufio" |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 9 | "fmt" |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 10 | "io" |
| 11 | "os" |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 12 | "syscall" |
| 13 | "testing" |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 14 | "time" |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 15 | |
Suharsh Sivakumar | dcc11d7 | 2015-05-11 12:19:20 -0700 | [diff] [blame] | 16 | _ "v.io/x/ref/runtime/factories/generic" |
Cosmos Nicolaou | 1381f8a | 2015-03-13 09:40:34 -0700 | [diff] [blame] | 17 | "v.io/x/ref/test" |
Cosmos Nicolaou | 1381f8a | 2015-03-13 09:40:34 -0700 | [diff] [blame] | 18 | "v.io/x/ref/test/modules" |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 19 | ) |
| 20 | |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 21 | func simpleEchoProgram(stdin io.Reader, stdout io.Writer) { |
| 22 | fmt.Fprintf(stdout, "ready\n") |
| 23 | scanner := bufio.NewScanner(stdin) |
| 24 | if scanner.Scan() { |
| 25 | fmt.Fprintf(stdout, "%s\n", scanner.Text()) |
| 26 | } |
| 27 | modules.WaitForEOF(stdin) |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 28 | } |
| 29 | |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 30 | var withRuntime = modules.Register(func(env *modules.Env, args ...string) error { |
Todd Wang | 60052d8 | 2015-05-22 15:00:10 -0700 | [diff] [blame] | 31 | _, shutdown := test.V23Init() |
Suharsh Sivakumar | d5049b7 | 2015-01-21 14:11:35 -0800 | [diff] [blame] | 32 | defer shutdown() |
| 33 | |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 34 | simpleEchoProgram(env.Stdin, env.Stdout) |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 35 | return nil |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 36 | }, "withRuntime") |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 37 | |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 38 | var withoutRuntime = modules.Register(func(env *modules.Env, args ...string) error { |
| 39 | simpleEchoProgram(env.Stdin, env.Stdout) |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 40 | return nil |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 41 | }, "withoutRuntime") |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 42 | |
| 43 | func TestWithRuntime(t *testing.T) { |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 44 | sh, err := modules.NewShell(nil, nil, testing.Verbose(), t) |
Cosmos Nicolaou | 344cc4a | 2014-11-26 15:38:43 -0800 | [diff] [blame] | 45 | if err != nil { |
| 46 | t.Fatalf("unexpected error: %s", err) |
| 47 | } |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 48 | defer sh.Cleanup(os.Stderr, os.Stderr) |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 49 | h, err := sh.Start(nil, withRuntime) |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 50 | if err != nil { |
| 51 | t.Fatalf("unexpected error: %s", err) |
| 52 | } |
| 53 | defer h.Shutdown(os.Stderr, os.Stderr) |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 54 | h.Expect("ready") |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 55 | syscall.Kill(h.Pid(), syscall.SIGHUP) |
| 56 | h.Stdin().Write([]byte("foo\n")) |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 57 | h.Expect("foo") |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 58 | h.CloseStdin() |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 59 | h.ExpectEOF() |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 60 | } |
| 61 | |
| 62 | func TestWithoutRuntime(t *testing.T) { |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 63 | sh, err := modules.NewShell(nil, nil, testing.Verbose(), t) |
Cosmos Nicolaou | 344cc4a | 2014-11-26 15:38:43 -0800 | [diff] [blame] | 64 | if err != nil { |
| 65 | t.Fatalf("unexpected error: %s", err) |
| 66 | } |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 67 | defer sh.Cleanup(os.Stderr, os.Stderr) |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 68 | opts := sh.DefaultStartOpts() |
| 69 | opts.ShutdownTimeout = 5 * time.Second |
Todd Wang | 9587390 | 2015-05-22 14:21:30 -0700 | [diff] [blame] | 70 | h, err := sh.StartWithOpts(opts, nil, withoutRuntime) |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 71 | if err != nil { |
| 72 | t.Fatalf("unexpected error: %s", err) |
| 73 | } |
| 74 | defer h.Shutdown(os.Stderr, os.Stderr) |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 75 | h.Expect("ready") |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 76 | syscall.Kill(h.Pid(), syscall.SIGHUP) |
Cosmos Nicolaou | 9e90984 | 2015-03-17 11:58:59 -0700 | [diff] [blame] | 77 | h.ExpectEOF() |
Cosmos Nicolaou | 59496fe | 2014-10-14 11:21:05 -0700 | [diff] [blame] | 78 | err = h.Shutdown(os.Stderr, os.Stderr) |
| 79 | want := "exit status 2" |
| 80 | if err == nil || err.Error() != want { |
| 81 | t.Errorf("got %s, want %s", err, want) |
| 82 | |
| 83 | } |
Jiri Simsa | 5293dcb | 2014-05-10 09:56:38 -0700 | [diff] [blame] | 84 | } |