Skip to content

Commit

Permalink
plugin: implement ResourceProvider.Stop
Browse files Browse the repository at this point in the history
  • Loading branch information
mitchellh committed Oct 25, 2016
1 parent 990df48 commit 045ddf3
Show file tree
Hide file tree
Showing 2 changed files with 83 additions and 0 deletions.
28 changes: 28 additions & 0 deletions plugin/resource_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,19 @@ type ResourceProvider struct {
Client *rpc.Client
}

func (p *ResourceProvider) Stop() error {
var resp ResourceProviderStopResponse
err := p.Client.Call("Plugin.Stop", new(interface{}), &resp)
if err != nil {
return err
}
if resp.Error != nil {
err = resp.Error
}

return err
}

func (p *ResourceProvider) Input(
input terraform.UIInput,
c *terraform.ResourceConfig) (*terraform.ResourceConfig, error) {
Expand Down Expand Up @@ -295,6 +308,10 @@ type ResourceProviderServer struct {
Provider terraform.ResourceProvider
}

type ResourceProviderStopResponse struct {
Error *plugin.BasicError
}

type ResourceProviderConfigureResponse struct {
Error *plugin.BasicError
}
Expand Down Expand Up @@ -390,6 +407,17 @@ type ResourceProviderValidateResourceResponse struct {
Errors []*plugin.BasicError
}

func (s *ResourceProviderServer) Stop(
_ interface{},
reply *ResourceProviderStopResponse) error {
err := s.Provider.Stop()
*reply = ResourceProviderStopResponse{
Error: plugin.NewBasicError(err),
}

return nil
}

func (s *ResourceProviderServer) Input(
args *ResourceProviderInputArgs,
reply *ResourceProviderInputResponse) error {
Expand Down
55 changes: 55 additions & 0 deletions plugin/resource_provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,61 @@ func TestResourceProvider_impl(t *testing.T) {
var _ terraform.ResourceProvider = new(ResourceProvider)
}

func TestResourceProvider_stop(t *testing.T) {
// Create a mock provider
p := new(terraform.MockResourceProvider)
client, _ := plugin.TestPluginRPCConn(t, pluginMap(&ServeOpts{
ProviderFunc: testProviderFixed(p),
}))
defer client.Close()

// Request the provider
raw, err := client.Dispense(ProviderPluginName)
if err != nil {
t.Fatalf("err: %s", err)
}
provider := raw.(terraform.ResourceProvider)

// Stop
e := provider.Stop()
if !p.StopCalled {
t.Fatal("stop should be called")
}
if e != nil {
t.Fatalf("bad: %#v", e)
}
}

func TestResourceProvider_stopErrors(t *testing.T) {
p := new(terraform.MockResourceProvider)
p.StopReturnError = errors.New("foo")

// Create a mock provider
client, _ := plugin.TestPluginRPCConn(t, pluginMap(&ServeOpts{
ProviderFunc: testProviderFixed(p),
}))
defer client.Close()

// Request the provider
raw, err := client.Dispense(ProviderPluginName)
if err != nil {
t.Fatalf("err: %s", err)
}
provider := raw.(terraform.ResourceProvider)

// Stop
e := provider.Stop()
if !p.StopCalled {
t.Fatal("stop should be called")
}
if e == nil {
t.Fatal("should have error")
}
if e.Error() != "foo" {
t.Fatalf("bad: %s", e)
}
}

func TestResourceProvider_input(t *testing.T) {
// Create a mock provider
p := new(terraform.MockResourceProvider)
Expand Down

0 comments on commit 045ddf3

Please sign in to comment.