github.com/ezbercih/terraform@v0.1.1-0.20140729011846-3c33865e0839/plugin/plugin_test.go (about) 1 package plugin 2 3 import ( 4 "fmt" 5 "log" 6 "os" 7 "os/exec" 8 "testing" 9 "time" 10 11 "github.com/hashicorp/terraform/terraform" 12 ) 13 14 func helperProcess(s ...string) *exec.Cmd { 15 cs := []string{"-test.run=TestHelperProcess", "--"} 16 cs = append(cs, s...) 17 env := []string{ 18 "GO_WANT_HELPER_PROCESS=1", 19 "TF_PLUGIN_MIN_PORT=10000", 20 "TF_PLUGIN_MAX_PORT=25000", 21 } 22 23 cmd := exec.Command(os.Args[0], cs...) 24 cmd.Env = append(env, os.Environ()...) 25 return cmd 26 } 27 28 // This is not a real test. This is just a helper process kicked off by 29 // tests. 30 func TestHelperProcess(*testing.T) { 31 if os.Getenv("GO_WANT_HELPER_PROCESS") != "1" { 32 return 33 } 34 35 defer os.Exit(0) 36 37 args := os.Args 38 for len(args) > 0 { 39 if args[0] == "--" { 40 args = args[1:] 41 break 42 } 43 44 args = args[1:] 45 } 46 47 if len(args) == 0 { 48 fmt.Fprintf(os.Stderr, "No command\n") 49 os.Exit(2) 50 } 51 52 cmd, args := args[0], args[1:] 53 switch cmd { 54 case "bad-version": 55 fmt.Printf("%s1|tcp|:1234|foo\n", APIVersion) 56 <-make(chan int) 57 case "resource-provider": 58 err := Serve(new(terraform.MockResourceProvider)) 59 if err != nil { 60 log.Printf("[ERR] %s", err) 61 os.Exit(1) 62 } 63 case "resource-provisioner": 64 err := Serve(new(terraform.MockResourceProvisioner)) 65 if err != nil { 66 log.Printf("[ERR] %s", err) 67 os.Exit(1) 68 } 69 case "invalid-rpc-address": 70 fmt.Println("lolinvalid") 71 case "mock": 72 fmt.Printf("%s|tcp|:1234|foo\n", APIVersion) 73 <-make(chan int) 74 case "start-timeout": 75 time.Sleep(1 * time.Minute) 76 os.Exit(1) 77 case "stderr": 78 fmt.Printf("%s|tcp|:1234|foo\n", APIVersion) 79 log.Println("HELLO") 80 log.Println("WORLD") 81 case "stdin": 82 fmt.Printf("%s|tcp|:1234|foo\n", APIVersion) 83 data := make([]byte, 5) 84 if _, err := os.Stdin.Read(data); err != nil { 85 log.Printf("stdin read error: %s", err) 86 os.Exit(100) 87 } 88 89 if string(data) == "hello" { 90 os.Exit(0) 91 } 92 93 os.Exit(1) 94 default: 95 fmt.Fprintf(os.Stderr, "Unknown command: %q\n", cmd) 96 os.Exit(2) 97 } 98 }