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