From bd0c1d388cc65f31d2d91eced1bdbbeafe1d684b Mon Sep 17 00:00:00 2001 From: jgramoll Date: Thu, 1 Aug 2019 12:10:12 -0500 Subject: [PATCH] refactor type checks on dynamics to better handle errors --- README.md | 2 - .../job_build_discarder_property_strategy.go | 2 +- ...discarder_property_strategy_log_rotator.go | 13 +++-- ...rder_property_strategy_log_rotator_test.go | 20 ++----- ...ld_discarder_property_strategy_resource.go | 6 ++- ..._build_discarder_property_strategy_test.go | 12 +---- provider/job_datadog_job_property_test.go | 5 +- provider/job_declarative_job_action_test.go | 10 +--- ...rative_job_property_tracker_action_test.go | 10 +--- provider/job_definition.go | 2 +- provider/job_definition_resource.go | 6 ++- provider/job_definition_test.go | 30 +---------- provider/job_gerrit_trigger.go | 53 ++++++++++++------- ...ob_gerrit_trigger_draft_published_event.go | 12 ++++- ...rrit_trigger_draft_published_event_test.go | 22 +------- provider/job_gerrit_trigger_event.go | 2 +- provider/job_gerrit_trigger_event_resource.go | 6 ++- provider/job_gerrit_trigger_event_test.go | 10 ---- ...b_gerrit_trigger_patchset_created_event.go | 13 +++-- ...rit_trigger_patchset_created_event_test.go | 18 +++---- provider/job_gerrit_trigger_test.go | 24 ++++----- provider/job_git_scm.go | 13 +++-- ...git_scm_clean_before_checkout_extension.go | 12 ++++- ...cm_clean_before_checkout_extension_test.go | 18 +------ provider/job_git_scm_extension.go | 2 +- provider/job_git_scm_extension_resource.go | 6 ++- provider/job_git_scm_extension_test.go | 3 -- provider/job_git_scm_test.go | 5 -- provider/job_trigger.go | 2 +- provider/job_trigger_resource.go | 6 ++- provider/job_trigger_test.go | 3 -- 31 files changed, 137 insertions(+), 211 deletions(-) diff --git a/README.md b/README.md index c707a58..a7517d6 100644 --- a/README.md +++ b/README.md @@ -146,6 +146,4 @@ resource "jenkins_job_datadog_job_property" "main" { ## TODO 1. import resources -1. Refactor unmarshall to use map -1. Refactor types = reflect checks 1. Fragile TestAccJobBuildDiscarderPropertyStrategyLogRotatorBasic test diff --git a/provider/job_build_discarder_property_strategy.go b/provider/job_build_discarder_property_strategy.go index df5d16d..908cb3e 100644 --- a/provider/job_build_discarder_property_strategy.go +++ b/provider/job_build_discarder_property_strategy.go @@ -6,7 +6,7 @@ import ( ) type jobBuildDiscarderPropertyStrategy interface { - fromClientStrategy(client.JobBuildDiscarderPropertyStrategy) jobBuildDiscarderPropertyStrategy + fromClientStrategy(client.JobBuildDiscarderPropertyStrategy) (jobBuildDiscarderPropertyStrategy, error) toClientStrategy(id string) client.JobBuildDiscarderPropertyStrategy setResourceData(*schema.ResourceData) error } diff --git a/provider/job_build_discarder_property_strategy_log_rotator.go b/provider/job_build_discarder_property_strategy_log_rotator.go index f9e2fae..47775df 100644 --- a/provider/job_build_discarder_property_strategy_log_rotator.go +++ b/provider/job_build_discarder_property_strategy_log_rotator.go @@ -1,6 +1,9 @@ package provider import ( + "fmt" + "reflect" + "github.com/hashicorp/terraform/helper/schema" "github.com/jgramoll/terraform-provider-jenkins/client" ) @@ -31,14 +34,18 @@ func (strategy *jobBuildDiscarderPropertyStrategyLogRotator) toClientStrategy(id return clientStrategy } -func (s *jobBuildDiscarderPropertyStrategyLogRotator) fromClientStrategy(cs client.JobBuildDiscarderPropertyStrategy) jobBuildDiscarderPropertyStrategy { - clientStrategy := cs.(*client.JobBuildDiscarderPropertyStrategyLogRotator) +func (s *jobBuildDiscarderPropertyStrategyLogRotator) fromClientStrategy(clientStrategyInterface client.JobBuildDiscarderPropertyStrategy) (jobBuildDiscarderPropertyStrategy, error) { + clientStrategy, ok := clientStrategyInterface.(*client.JobBuildDiscarderPropertyStrategyLogRotator) + if !ok { + return nil, fmt.Errorf("Strategy is not of expected type, expected *client.JobBuildDiscarderPropertyStrategyLogRotator, actually %s", + reflect.TypeOf(clientStrategyInterface).String()) + } strategy := newJobBuildDiscarderPropertyStrategyLogRotator() strategy.DaysToKeep = clientStrategy.DaysToKeep strategy.NumToKeep = clientStrategy.NumToKeep strategy.ArtifactDaysToKeep = clientStrategy.ArtifactDaysToKeep strategy.ArtifactNumToKeep = clientStrategy.ArtifactNumToKeep - return strategy + return strategy, nil } func (strategy *jobBuildDiscarderPropertyStrategyLogRotator) setResourceData(d *schema.ResourceData) error { diff --git a/provider/job_build_discarder_property_strategy_log_rotator_test.go b/provider/job_build_discarder_property_strategy_log_rotator_test.go index 7aa0c01..ba8bec1 100644 --- a/provider/job_build_discarder_property_strategy_log_rotator_test.go +++ b/provider/job_build_discarder_property_strategy_log_rotator_test.go @@ -2,7 +2,6 @@ package provider import ( "fmt" - "reflect" "testing" "github.com/hashicorp/terraform/helper/acctest" @@ -11,10 +10,6 @@ import ( "github.com/jgramoll/terraform-provider-jenkins/client" ) -func init() { - jobBuildDiscarderPropertyStrategyTypes["jenkins_job_build_discarder_property_log_rotator_strategy"] = reflect.TypeOf((*client.JobBuildDiscarderPropertyStrategyLogRotator)(nil)) -} - func TestAccJobBuildDiscarderPropertyStrategyLogRotatorBasic(t *testing.T) { var jobRef client.Job var strategyRefs []client.JobBuildDiscarderPropertyStrategy @@ -72,20 +67,13 @@ resource "jenkins_job_build_discarder_property_log_rotator_strategy" "main" { }`, daysToKeep) } -func ensureJobBuildDiscarderPropertyStrategyLogRotator(strategyInterface client.JobBuildDiscarderPropertyStrategy, rs *terraform.ResourceState) error { - strategy, ok := strategyInterface.(*client.JobBuildDiscarderPropertyStrategyLogRotator) - if !ok { - return fmt.Errorf("Strategy is not of expected type, expected *client.JobBuildDiscarderPropertyStrategyLogRotator, actually %s", - reflect.TypeOf(strategyInterface).String()) - } - - _, _, strategyId, err := resourceJobPropertyStrategyId(rs.Primary.Attributes["id"]) +func ensureJobBuildDiscarderPropertyStrategyLogRotator(clientStrategyInterface client.JobBuildDiscarderPropertyStrategy, rs *terraform.ResourceState) error { + strategyInterface, err := newJobBuildDiscarderPropertyStrategyLogRotator().fromClientStrategy(clientStrategyInterface) if err != nil { return err } - if strategyId != strategy.Id { - return fmt.Errorf("JobBuildDiscarderPropertyStrategyLogRotator id should be %v, was %v", strategyId, strategy.Id) - } + strategy := strategyInterface.(*jobBuildDiscarderPropertyStrategyLogRotator) + err = testCompareResourceInt("JobBuildDiscarderPropertyStrategyLogRotator", "DaysToKeep", rs.Primary.Attributes["days_to_keep"], strategy.DaysToKeep) if err != nil { return err diff --git a/provider/job_build_discarder_property_strategy_resource.go b/provider/job_build_discarder_property_strategy_resource.go index c639ac2..b42c655 100644 --- a/provider/job_build_discarder_property_strategy_resource.go +++ b/provider/job_build_discarder_property_strategy_resource.go @@ -91,8 +91,10 @@ func resourceJobBuildDiscarderPropertyStrategyRead(d *schema.ResourceData, m int d.SetId("") return nil } - strategy := createJobBuildDiscarderPropertyStrategy().fromClientStrategy(discardProperty.Strategy.Item) - + strategy, err := createJobBuildDiscarderPropertyStrategy().fromClientStrategy(discardProperty.Strategy.Item) + if err != nil { + return err + } log.Println("[INFO] Reading build discarder propety strategy", d.Id()) return strategy.setResourceData(d) } diff --git a/provider/job_build_discarder_property_strategy_test.go b/provider/job_build_discarder_property_strategy_test.go index 7bde3a6..70189d9 100644 --- a/provider/job_build_discarder_property_strategy_test.go +++ b/provider/job_build_discarder_property_strategy_test.go @@ -3,15 +3,12 @@ package provider import ( "errors" "fmt" - "reflect" "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/terraform" "github.com/jgramoll/terraform-provider-jenkins/client" ) -var jobBuildDiscarderPropertyStrategyTypes = map[string]reflect.Type{} - func testAccCheckBuildDiscarderPropertyStrategies( jobRef *client.Job, expectedStrategyResourceNames []string, @@ -56,7 +53,7 @@ func ensureJobBuildDiscarderPropertyStrategy( resource *terraform.ResourceState, ensureStrategyFunc func(client.JobBuildDiscarderPropertyStrategy, *terraform.ResourceState) error, ) (client.JobBuildDiscarderPropertyStrategy, error) { - _, propertyId, strategyId, err := resourceJobPropertyStrategyId(resource.Primary.Attributes["id"]) + _, propertyId, _, err := resourceJobPropertyStrategyId(resource.Primary.Attributes["id"]) if err != nil { return nil, err } @@ -73,13 +70,6 @@ func ensureJobBuildDiscarderPropertyStrategy( return nil, errors.New("Property does not have strategy") } - expectedType := jobBuildDiscarderPropertyStrategyTypes[resource.Type] - strategyType := reflect.TypeOf(strategy) - if expectedType != strategyType { - return nil, fmt.Errorf("Job Property Strategy %s was type \"%s\", expected type \"%s\"", - strategyId, strategyType, expectedType) - } - err = ensureStrategyFunc(strategy, resource) if err != nil { return nil, err diff --git a/provider/job_datadog_job_property_test.go b/provider/job_datadog_job_property_test.go index 6d68cf2..ace56f3 100644 --- a/provider/job_datadog_job_property_test.go +++ b/provider/job_datadog_job_property_test.go @@ -66,8 +66,5 @@ resource "jenkins_job_datadog_job_property" "prop_%v" { func ensureJobDatadogJobProperty(propertyInterface client.JobProperty, resource *terraform.ResourceState) error { _, err := newJobDatadogJobProperty().fromClientJobProperty(propertyInterface) - if err != nil { - return err - } - return nil + return err } diff --git a/provider/job_declarative_job_action_test.go b/provider/job_declarative_job_action_test.go index 6222afb..d0e8a7a 100644 --- a/provider/job_declarative_job_action_test.go +++ b/provider/job_declarative_job_action_test.go @@ -2,7 +2,6 @@ package provider import ( "fmt" - "reflect" "testing" "github.com/hashicorp/terraform/helper/acctest" @@ -51,11 +50,6 @@ resource "jenkins_job_declarative_job_action" "main" { } func ensureJobDeclarativeJobAction(actionInterface client.JobAction, rs *terraform.ResourceState) error { - _, ok := actionInterface.(*client.JobDeclarativeJobAction) - if !ok { - return fmt.Errorf("Action is not of expected type, expected *client.JobDeclarativeJobAction, actually %s", - reflect.TypeOf(actionInterface).String()) - } - - return nil + _, err := newJobDeclarativeJobAction().fromClientAction(actionInterface) + return err } diff --git a/provider/job_declarative_job_property_tracker_action_test.go b/provider/job_declarative_job_property_tracker_action_test.go index 3ddb95d..f5ff184 100644 --- a/provider/job_declarative_job_property_tracker_action_test.go +++ b/provider/job_declarative_job_property_tracker_action_test.go @@ -2,7 +2,6 @@ package provider import ( "fmt" - "reflect" "testing" "github.com/hashicorp/terraform/helper/acctest" @@ -51,11 +50,6 @@ resource "jenkins_job_declarative_job_property_tracker_action" "main" { } func ensureJobDeclarativeJobPropertyTrackerAction(actionInterface client.JobAction, rs *terraform.ResourceState) error { - _, ok := actionInterface.(*client.JobDeclarativeJobPropertyTrackerAction) - if !ok { - return fmt.Errorf("Action is not of expected type, expected *client.JobDeclarativeJobPropertyTrackerAction, actually %s", - reflect.TypeOf(actionInterface).String()) - } - - return nil + _, err := newJobDeclarativeJobPropertyTrackerAction().fromClientAction(actionInterface) + return err } diff --git a/provider/job_definition.go b/provider/job_definition.go index d3b5a22..bb857dd 100644 --- a/provider/job_definition.go +++ b/provider/job_definition.go @@ -6,7 +6,7 @@ import ( ) type jobDefinition interface { - fromClientJobDefintion(client.JobDefinition) jobDefinition + fromClientJobDefintion(client.JobDefinition) (jobDefinition, error) toClientDefinition(definitionId string) client.JobDefinition setResourceData(*schema.ResourceData) error } diff --git a/provider/job_definition_resource.go b/provider/job_definition_resource.go index 26e7a2f..8e1198e 100644 --- a/provider/job_definition_resource.go +++ b/provider/job_definition_resource.go @@ -73,8 +73,10 @@ func resourceJobDefinitionRead(d *schema.ResourceData, m interface{}, createJobD return nil } - definition := createJobDefinition().fromClientJobDefintion(j.Definition) - + definition, err := createJobDefinition().fromClientJobDefintion(j.Definition) + if err != nil { + return err + } log.Println("[INFO] Reading from job definition", d.Id()) return definition.setResourceData(d) } diff --git a/provider/job_definition_test.go b/provider/job_definition_test.go index 8b2f313..909809b 100644 --- a/provider/job_definition_test.go +++ b/provider/job_definition_test.go @@ -3,15 +3,12 @@ package provider import ( "errors" "fmt" - "reflect" "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/terraform" "github.com/jgramoll/terraform-provider-jenkins/client" ) -var jobDefinitionTypes = map[string]reflect.Type{} - func testAccCheckJobDefinition(jobRef *client.Job, expectedDefinitionResourceName string, ensureJobDefinitionFunc func(client.JobDefinition, *terraform.ResourceState) error) resource.TestCheckFunc { return func(s *terraform.State) error { definitionResource, ok := s.RootModule().Resources[expectedDefinitionResourceName] @@ -19,33 +16,8 @@ func testAccCheckJobDefinition(jobRef *client.Job, expectedDefinitionResourceNam return fmt.Errorf("Job Defintion Resource not found: %s", expectedDefinitionResourceName) } - _, err := ensureJobDefinition(jobRef, definitionResource, ensureJobDefinitionFunc) - if err != nil { - return err - } - return nil - } -} - -func ensureJobDefinition(jobRef *client.Job, rs *terraform.ResourceState, ensureJobDefinitionFunc func(client.JobDefinition, *terraform.ResourceState) error) (client.JobDefinition, error) { - _, definitionId, err := resourceJobDefinitionId(rs.Primary.Attributes["id"]) - if err != nil { - return nil, err + return ensureJobDefinitionFunc(jobRef.Definition, definitionResource) } - - expectedType := jobDefinitionTypes[rs.Type] - definitionType := reflect.TypeOf(jobRef.Definition) - if expectedType != definitionType { - return nil, fmt.Errorf("Job Defintion %s was type \"%s\", expected type \"%s\"", - definitionId, definitionType, expectedType) - } - - err = ensureJobDefinitionFunc(jobRef.Definition, rs) - if err != nil { - return nil, err - } - - return jobRef.Definition, nil } func testAccCheckNoJobDefinition(jobRef *client.Job) resource.TestCheckFunc { diff --git a/provider/job_gerrit_trigger.go b/provider/job_gerrit_trigger.go index 410eb0b..4dc2b39 100644 --- a/provider/job_gerrit_trigger.go +++ b/provider/job_gerrit_trigger.go @@ -1,36 +1,46 @@ package provider import ( + "fmt" + "reflect" + "github.com/hashicorp/terraform/helper/schema" "github.com/jgramoll/terraform-provider-jenkins/client" ) type jobGerritTrigger struct { - Plugin string `mapstructure:"plugin"` - ServerName string `mapstructure:"server_name"` - SilentMode bool `mapstructure:"silent_mode"` - SilentStartMode bool `mapstructure:"silent_start_mode"` - EscapeQuotes bool `mapstructure:"escape_quotes"` - NameAndEmailParameterMode string `mapstructure:"name_and_email_parameter_mode"` - CommitMessageParameterMode string `mapstructure:"commit_message_parameter_mode"` - ChangeSubjectParameterMode string `mapstructure:"change_subject_parameter_mode"` - CommentTextParameterMode string `mapstructure:"comment_text_parameter_mode"` - SkipVote *[]*skipVote `mapstructure:"skip_vote"` + Plugin string `mapstructure:"plugin"` + ServerName string `mapstructure:"server_name"` + SilentMode bool `mapstructure:"silent_mode"` + SilentStartMode bool `mapstructure:"silent_start_mode"` + EscapeQuotes bool `mapstructure:"escape_quotes"` + NameAndEmailParameterMode string `mapstructure:"name_and_email_parameter_mode"` + CommitMessageParameterMode string `mapstructure:"commit_message_parameter_mode"` + ChangeSubjectParameterMode string `mapstructure:"change_subject_parameter_mode"` + CommentTextParameterMode string `mapstructure:"comment_text_parameter_mode"` + DynamicTriggerConfiguration bool `mapstructure:"dynamic_trigger_configuration"` + SkipVote *[]*skipVote `mapstructure:"skip_vote"` } func newJobGerritTrigger() *jobGerritTrigger { return &jobGerritTrigger{ - EscapeQuotes: true, - NameAndEmailParameterMode: "PLAIN", - CommitMessageParameterMode: "BASE64", - ChangeSubjectParameterMode: "PLAIN", - CommentTextParameterMode: "BASE64", - SkipVote: &[]*skipVote{}, + EscapeQuotes: true, + NameAndEmailParameterMode: "PLAIN", + CommitMessageParameterMode: "BASE64", + ChangeSubjectParameterMode: "PLAIN", + CommentTextParameterMode: "BASE64", + DynamicTriggerConfiguration: false, + SkipVote: &[]*skipVote{}, } } -func (t *jobGerritTrigger) fromClientJobTrigger(clientTriggerInterface client.JobTrigger) jobTrigger { - clientTrigger := clientTriggerInterface.(*client.JobGerritTrigger) +func (t *jobGerritTrigger) fromClientJobTrigger(clientTriggerInterface client.JobTrigger) (jobTrigger, error) { + clientTrigger, ok := clientTriggerInterface.(*client.JobGerritTrigger) + if !ok { + return nil, fmt.Errorf("Strategy is not of expected type, expected *client.JobGerritTrigger, actually %s", + reflect.TypeOf(clientTriggerInterface).String()) + } + trigger := newJobGerritTrigger() trigger.Plugin = clientTrigger.Plugin trigger.ServerName = clientTrigger.ServerName @@ -41,8 +51,9 @@ func (t *jobGerritTrigger) fromClientJobTrigger(clientTriggerInterface client.Jo trigger.CommitMessageParameterMode = clientTrigger.CommitMessageParameterMode.String() trigger.ChangeSubjectParameterMode = clientTrigger.ChangeSubjectParameterMode.String() trigger.CommentTextParameterMode = clientTrigger.CommentTextParameterMode.String() + trigger.DynamicTriggerConfiguration = clientTrigger.DynamicTriggerConfiguration *trigger.SkipVote = []*skipVote{newSkipVotefromClient(clientTrigger.SkipVote)} - return trigger + return trigger, nil } func (t *jobGerritTrigger) toClientJobTrigger(id string) (client.JobTrigger, error) { @@ -57,6 +68,7 @@ func (t *jobGerritTrigger) toClientJobTrigger(id string) (client.JobTrigger, err if err != nil { return nil, err } + clientTrigger.DynamicTriggerConfiguration = t.DynamicTriggerConfiguration clientTrigger.SkipVote = newClientSkipVote(t.SkipVote) return clientTrigger, nil } @@ -113,5 +125,8 @@ func (t *jobGerritTrigger) setResourceData(d *schema.ResourceData) error { if err := d.Set("comment_text_parameter_mode", t.CommentTextParameterMode); err != nil { return err } + if err := d.Set("dynamic_trigger_configuration", t.DynamicTriggerConfiguration); err != nil { + return err + } return d.Set("skip_vote", t.SkipVote) } diff --git a/provider/job_gerrit_trigger_draft_published_event.go b/provider/job_gerrit_trigger_draft_published_event.go index 727688e..ad3351f 100644 --- a/provider/job_gerrit_trigger_draft_published_event.go +++ b/provider/job_gerrit_trigger_draft_published_event.go @@ -1,6 +1,9 @@ package provider import ( + "fmt" + "reflect" + "github.com/hashicorp/terraform/helper/schema" "github.com/jgramoll/terraform-provider-jenkins/client" ) @@ -12,8 +15,13 @@ func newJobGerritTriggerDraftPublishedEvent() *jobGerritTriggerDraftPublishedEve return &jobGerritTriggerDraftPublishedEvent{} } -func (event *jobGerritTriggerDraftPublishedEvent) fromClientJobTriggerEvent(clientEvent client.JobGerritTriggerOnEvent) jobGerritTriggerEvent { - return newJobGerritTriggerDraftPublishedEvent() +func (event *jobGerritTriggerDraftPublishedEvent) fromClientJobTriggerEvent(clientEventInterface client.JobGerritTriggerOnEvent) (jobGerritTriggerEvent, error) { + _, ok := clientEventInterface.(*client.JobGerritTriggerPluginDraftPublishedEvent) + if !ok { + return nil, fmt.Errorf("Failed to parse client action, expected *client.JobGerritTriggerPluginDraftPublishedEvent, got %s", + reflect.TypeOf(clientEventInterface).String()) + } + return newJobGerritTriggerDraftPublishedEvent(), nil } func (event *jobGerritTriggerDraftPublishedEvent) toClientJobTriggerEvent(eventId string) (client.JobGerritTriggerOnEvent, error) { diff --git a/provider/job_gerrit_trigger_draft_published_event_test.go b/provider/job_gerrit_trigger_draft_published_event_test.go index 35454ef..39a9847 100644 --- a/provider/job_gerrit_trigger_draft_published_event_test.go +++ b/provider/job_gerrit_trigger_draft_published_event_test.go @@ -2,7 +2,6 @@ package provider import ( "fmt" - "reflect" "testing" "github.com/hashicorp/terraform/helper/acctest" @@ -11,10 +10,6 @@ import ( "github.com/jgramoll/terraform-provider-jenkins/client" ) -func init() { - jobTriggerEventTypes["jenkins_job_gerrit_trigger_draft_published_event"] = reflect.TypeOf((*client.JobGerritTriggerPluginDraftPublishedEvent)(nil)) -} - func TestAccJobGerritTriggerDraftPublishedEventBasic(t *testing.T) { var jobRef client.Job var events []client.JobGerritTriggerOnEvent @@ -57,19 +52,6 @@ func ensureJobGerritTriggerDraftPublishedEvent( eventInterface client.JobGerritTriggerOnEvent, rs *terraform.ResourceState, ) error { - event, ok := eventInterface.(*client.JobGerritTriggerPluginDraftPublishedEvent) - if !ok { - return fmt.Errorf("Unexpected event type got %s, expected *client.JobGerritTriggerPluginDraftPublishedEvent", - reflect.TypeOf(eventInterface).String()) - } - - _, _, _, eventId, err := resourceJobTriggerEventId(rs.Primary.Attributes["id"]) - if err != nil { - return err - } - if eventId != event.Id { - return fmt.Errorf("JobGerritTriggerPluginDraftPublishedEvent id should be %v, was %v", eventId, event.Id) - } - - return nil + _, err := newJobGerritTriggerDraftPublishedEvent().fromClientJobTriggerEvent(eventInterface) + return err } diff --git a/provider/job_gerrit_trigger_event.go b/provider/job_gerrit_trigger_event.go index 450436c..e47c78c 100644 --- a/provider/job_gerrit_trigger_event.go +++ b/provider/job_gerrit_trigger_event.go @@ -6,7 +6,7 @@ import ( ) type jobGerritTriggerEvent interface { - fromClientJobTriggerEvent(client.JobGerritTriggerOnEvent) jobGerritTriggerEvent + fromClientJobTriggerEvent(client.JobGerritTriggerOnEvent) (jobGerritTriggerEvent, error) toClientJobTriggerEvent(id string) (client.JobGerritTriggerOnEvent, error) setResourceData(*schema.ResourceData) error } diff --git a/provider/job_gerrit_trigger_event_resource.go b/provider/job_gerrit_trigger_event_resource.go index 1e08cfc..22f587c 100644 --- a/provider/job_gerrit_trigger_event_resource.go +++ b/provider/job_gerrit_trigger_event_resource.go @@ -113,8 +113,10 @@ func resourceJobTriggerEventRead(d *schema.ResourceData, m interface{}, createJo if err != nil { return err } - event := createJobTriggerEvent().fromClientJobTriggerEvent(clientEvent) - + event, err := createJobTriggerEvent().fromClientJobTriggerEvent(clientEvent) + if err != nil { + return err + } log.Println("[INFO] Updating state for job trigger event", d.Id()) return event.setResourceData(d) } diff --git a/provider/job_gerrit_trigger_event_test.go b/provider/job_gerrit_trigger_event_test.go index bcc008f..47e61c0 100644 --- a/provider/job_gerrit_trigger_event_test.go +++ b/provider/job_gerrit_trigger_event_test.go @@ -2,15 +2,12 @@ package provider import ( "fmt" - "reflect" "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/terraform" "github.com/jgramoll/terraform-provider-jenkins/client" ) -var jobTriggerEventTypes = map[string]reflect.Type{} - func testAccCheckJobGerritTriggerEvents( jobRef *client.Job, expectedResourceNames []string, @@ -68,13 +65,6 @@ func ensureTriggerEvent( return nil, err } - expectedType := jobTriggerEventTypes[resource.Type] - eventType := reflect.TypeOf(event) - if expectedType != eventType { - return nil, fmt.Errorf("Job Event %s was type \"%s\", expected type \"%s\"", - propertyId, eventType, expectedType) - } - err = ensureTriggerEventFunc(event, resource) if err != nil { return nil, err diff --git a/provider/job_gerrit_trigger_patchset_created_event.go b/provider/job_gerrit_trigger_patchset_created_event.go index 957719e..538112a 100644 --- a/provider/job_gerrit_trigger_patchset_created_event.go +++ b/provider/job_gerrit_trigger_patchset_created_event.go @@ -1,6 +1,9 @@ package provider import ( + "fmt" + "reflect" + "github.com/hashicorp/terraform/helper/schema" "github.com/jgramoll/terraform-provider-jenkins/client" ) @@ -17,15 +20,19 @@ func newJobGerritTriggerPatchSetCreatedEvent() *jobGerritTriggerPatchSetCreatedE return &jobGerritTriggerPatchSetCreatedEvent{} } -func (e *jobGerritTriggerPatchSetCreatedEvent) fromClientJobTriggerEvent(clientEventInterface client.JobGerritTriggerOnEvent) jobGerritTriggerEvent { - clientEvent := clientEventInterface.(*client.JobGerritTriggerPluginPatchsetCreatedEvent) +func (e *jobGerritTriggerPatchSetCreatedEvent) fromClientJobTriggerEvent(clientEventInterface client.JobGerritTriggerOnEvent) (jobGerritTriggerEvent, error) { + clientEvent, ok := clientEventInterface.(*client.JobGerritTriggerPluginPatchsetCreatedEvent) + if !ok { + return nil, fmt.Errorf("Unexpected event type got %s, expected *client.JobGerritTriggerPluginPatchsetCreatedEvent", + reflect.TypeOf(clientEventInterface).String()) + } event := newJobGerritTriggerPatchSetCreatedEvent() event.ExcludeDrafts = clientEvent.ExcludeDrafts event.ExcludeTrivialRebase = clientEvent.ExcludeTrivialRebase event.ExcludeNoCodeChange = clientEvent.ExcludeNoCodeChange event.ExcludePrivateState = clientEvent.ExcludePrivateState event.ExcludeWipState = clientEvent.ExcludeWipState - return event + return event, nil } func (event *jobGerritTriggerPatchSetCreatedEvent) toClientJobTriggerEvent(eventId string) (client.JobGerritTriggerOnEvent, error) { diff --git a/provider/job_gerrit_trigger_patchset_created_event_test.go b/provider/job_gerrit_trigger_patchset_created_event_test.go index 05e306c..48e6cd4 100644 --- a/provider/job_gerrit_trigger_patchset_created_event_test.go +++ b/provider/job_gerrit_trigger_patchset_created_event_test.go @@ -2,7 +2,6 @@ package provider import ( "fmt" - "reflect" "testing" "github.com/hashicorp/terraform/helper/acctest" @@ -11,10 +10,6 @@ import ( "github.com/jgramoll/terraform-provider-jenkins/client" ) -func init() { - jobTriggerEventTypes["jenkins_job_gerrit_trigger_patchset_created_event"] = reflect.TypeOf((*client.JobGerritTriggerPluginPatchsetCreatedEvent)(nil)) -} - func TestAccJobGerritTriggerPatchsetCreatedEventBasic(t *testing.T) { var jobRef client.Job var events []client.JobGerritTriggerOnEvent @@ -67,16 +62,15 @@ resource "jenkins_job_gerrit_trigger_patchset_created_event" "main" { } func ensureJobGerritTriggerPatchsetCreatedEvent( - eventInterface client.JobGerritTriggerOnEvent, + clientEventInterface client.JobGerritTriggerOnEvent, rs *terraform.ResourceState, ) error { - event, ok := eventInterface.(*client.JobGerritTriggerPluginPatchsetCreatedEvent) - if !ok { - return fmt.Errorf("Unexpected event type got %s, expected *client.JobGerritTriggerPluginPatchsetCreatedEvent", - reflect.TypeOf(eventInterface).String()) + eventInterface, err := newJobGerritTriggerPatchSetCreatedEvent().fromClientJobTriggerEvent(clientEventInterface) + if err != nil { + return err } - - err := testCompareResourceBool("JobGerritTriggerPluginPatchsetCreatedEvent", "ExcludeDrafts", rs.Primary.Attributes["exclude_drafts"], event.ExcludeDrafts) + event := eventInterface.(*jobGerritTriggerPatchSetCreatedEvent) + err = testCompareResourceBool("JobGerritTriggerPluginPatchsetCreatedEvent", "ExcludeDrafts", rs.Primary.Attributes["exclude_drafts"], event.ExcludeDrafts) if err != nil { return err } diff --git a/provider/job_gerrit_trigger_test.go b/provider/job_gerrit_trigger_test.go index d2a26a6..73532de 100644 --- a/provider/job_gerrit_trigger_test.go +++ b/provider/job_gerrit_trigger_test.go @@ -2,7 +2,6 @@ package provider import ( "fmt" - "reflect" "testing" "github.com/hashicorp/terraform/helper/acctest" @@ -11,10 +10,6 @@ import ( "github.com/jgramoll/terraform-provider-jenkins/client" ) -func init() { - jobTriggerTypes["jenkins_job_gerrit_trigger"] = reflect.TypeOf((*client.JobGerritTrigger)(nil)) -} - func TestAccJobGerritTriggerBasic(t *testing.T) { var jobRef client.Job var triggers []client.JobTrigger @@ -105,14 +100,13 @@ resource "jenkins_job_gerrit_trigger" "trigger_%v" { return t } -func ensureJobGerritTrigger(triggerInterface client.JobTrigger, rs *terraform.ResourceState) error { - trigger, ok := triggerInterface.(*client.JobGerritTrigger) - if !ok { - return fmt.Errorf("Strategy is not of expected type, expected *client.JobGerritTrigger, actually %s", - reflect.TypeOf(triggerInterface).String()) +func ensureJobGerritTrigger(clientTriggerInterface client.JobTrigger, rs *terraform.ResourceState) error { + triggerInterface, err := newJobGerritTrigger().fromClientJobTrigger(clientTriggerInterface) + if err != nil { + return err } + trigger := triggerInterface.(*jobGerritTrigger) - var err error err = testCompareResourceBool("JobGerritTrigger", "SilentMode", rs.Primary.Attributes["silent_mode"], trigger.SilentMode) if err != nil { return err @@ -125,19 +119,19 @@ func ensureJobGerritTrigger(triggerInterface client.JobTrigger, rs *terraform.Re if err != nil { return err } - if trigger.NameAndEmailParameterMode.String() != rs.Primary.Attributes["name_and_email_parameter_mode"] { + if trigger.NameAndEmailParameterMode != rs.Primary.Attributes["name_and_email_parameter_mode"] { return fmt.Errorf("expected name_and_email_parameter_mode %s, got %s", rs.Primary.Attributes["name_and_email_parameter_mode"], trigger.NameAndEmailParameterMode) } - if trigger.CommitMessageParameterMode.String() != rs.Primary.Attributes["commit_message_parameter_mode"] { + if trigger.CommitMessageParameterMode != rs.Primary.Attributes["commit_message_parameter_mode"] { return fmt.Errorf("expected commit_message_parameter_mode %s, got %s", rs.Primary.Attributes["commit_message_parameter_mode"], trigger.CommitMessageParameterMode) } - if trigger.ChangeSubjectParameterMode.String() != rs.Primary.Attributes["change_subject_parameter_mode"] { + if trigger.ChangeSubjectParameterMode != rs.Primary.Attributes["change_subject_parameter_mode"] { return fmt.Errorf("expected change_subject_parameter_mode %s, got %s", rs.Primary.Attributes["change_subject_parameter_mode"], trigger.ChangeSubjectParameterMode) } - if trigger.CommentTextParameterMode.String() != rs.Primary.Attributes["comment_text_parameter_mode"] { + if trigger.CommentTextParameterMode != rs.Primary.Attributes["comment_text_parameter_mode"] { return fmt.Errorf("expected comment_text_parameter_mode %s, got %s", rs.Primary.Attributes["comment_text_parameter_mode"], trigger.CommentTextParameterMode) } diff --git a/provider/job_git_scm.go b/provider/job_git_scm.go index 1c141c6..0800c11 100644 --- a/provider/job_git_scm.go +++ b/provider/job_git_scm.go @@ -1,8 +1,10 @@ package provider import ( + "fmt" "github.com/hashicorp/terraform/helper/schema" "github.com/jgramoll/terraform-provider-jenkins/client" + "reflect" ) type jobGitScm struct { @@ -17,17 +19,18 @@ func newJobGitScm() *jobGitScm { } } -func (scm *jobGitScm) fromClientJobDefintion(clientDefinition client.JobDefinition) jobDefinition { - if clientDefinition == nil { - return nil +func (scm *jobGitScm) fromClientJobDefintion(clientDefinitionInterface client.JobDefinition) (jobDefinition, error) { + clientScmDefinition, ok := clientDefinitionInterface.(*client.CpsScmFlowDefinition) + if !ok { + return nil, fmt.Errorf("Strategy is not of expected type, expected *client.CpsScmFlowDefinition, actually %s", + reflect.TypeOf(clientDefinitionInterface).String()) } - clientScmDefinition := clientDefinition.(*client.CpsScmFlowDefinition) definition := newJobGitScm() definition.ConfigVersion = clientScmDefinition.SCM.ConfigVersion definition.ScriptPath = clientScmDefinition.ScriptPath definition.Lightweight = clientScmDefinition.Lightweight - return definition + return definition, nil } func (scm *jobGitScm) setResourceData(*schema.ResourceData) error { diff --git a/provider/job_git_scm_clean_before_checkout_extension.go b/provider/job_git_scm_clean_before_checkout_extension.go index 6a5208a..b49ef9d 100644 --- a/provider/job_git_scm_clean_before_checkout_extension.go +++ b/provider/job_git_scm_clean_before_checkout_extension.go @@ -1,6 +1,9 @@ package provider import ( + "fmt" + "reflect" + "github.com/hashicorp/terraform/helper/schema" "github.com/jgramoll/terraform-provider-jenkins/client" ) @@ -13,8 +16,13 @@ func newJobGitScmCleanBeforeCheckoutExtension() *jobGitScmCleanBeforeCheckoutExt return &jobGitScmCleanBeforeCheckoutExtension{} } -func (branch *jobGitScmCleanBeforeCheckoutExtension) fromClientExtension(clientExtension client.GitScmExtension) jobGitScmExtension { - return newJobGitScmCleanBeforeCheckoutExtension() +func (branch *jobGitScmCleanBeforeCheckoutExtension) fromClientExtension(clientExtensionInterface client.GitScmExtension) (jobGitScmExtension, error) { + _, ok := clientExtensionInterface.(*client.GitScmCleanBeforeCheckoutExtension) + if !ok { + return nil, fmt.Errorf("Strategy is not of expected type, expected *client.GitScmCleanBeforeCheckoutExtension, actually %s", + reflect.TypeOf(clientExtensionInterface).String()) + } + return newJobGitScmCleanBeforeCheckoutExtension(), nil } func (branch *jobGitScmCleanBeforeCheckoutExtension) toClientExtension(extensionId string) (client.GitScmExtension, error) { diff --git a/provider/job_git_scm_clean_before_checkout_extension_test.go b/provider/job_git_scm_clean_before_checkout_extension_test.go index 664a6ec..b0bf446 100644 --- a/provider/job_git_scm_clean_before_checkout_extension_test.go +++ b/provider/job_git_scm_clean_before_checkout_extension_test.go @@ -2,7 +2,6 @@ package provider import ( "fmt" - "reflect" "testing" "github.com/hashicorp/terraform/helper/acctest" @@ -11,10 +10,6 @@ import ( "github.com/jgramoll/terraform-provider-jenkins/client" ) -func init() { - jobGitScmExtensionTypes["jenkins_job_git_scm_clean_before_checkout_extension"] = reflect.TypeOf((*client.GitScmCleanBeforeCheckoutExtension)(nil)) -} - func TestAccJobGitScmCleanBeforeCheckoutExtensionBasic(t *testing.T) { var jobRef client.Job var extensions []client.GitScmExtension @@ -57,15 +52,6 @@ func ensureJobGitScmCleanBeforeCheckoutExtension( extensionInterface client.GitScmExtension, rs *terraform.ResourceState, ) error { - extension := extensionInterface.(*client.GitScmCleanBeforeCheckoutExtension) - - _, _, extensionId, err := resourceJobGitScmExtensionId(rs.Primary.Attributes["id"]) - if err != nil { - return err - } - if extension.Id != extensionId { - return fmt.Errorf("GitScmCleanBeforeCheckoutExtension id should be %v, was %v", extensionId, extension.Id) - } - - return nil + _, err := newJobGitScmCleanBeforeCheckoutExtension().fromClientExtension(extensionInterface) + return err } diff --git a/provider/job_git_scm_extension.go b/provider/job_git_scm_extension.go index df5e8c5..e841556 100644 --- a/provider/job_git_scm_extension.go +++ b/provider/job_git_scm_extension.go @@ -6,7 +6,7 @@ import ( ) type jobGitScmExtension interface { - fromClientExtension(client.GitScmExtension) jobGitScmExtension + fromClientExtension(client.GitScmExtension) (jobGitScmExtension, error) toClientExtension(id string) (client.GitScmExtension, error) setResourceData(*schema.ResourceData) error } diff --git a/provider/job_git_scm_extension_resource.go b/provider/job_git_scm_extension_resource.go index ae7ba3c..95dd20f 100644 --- a/provider/job_git_scm_extension_resource.go +++ b/provider/job_git_scm_extension_resource.go @@ -92,8 +92,10 @@ func resourceJobGitScmExtensionRead(d *schema.ResourceData, m interface{}, creat d.SetId("") return nil } - extension := createGitScmExtension().fromClientExtension(clientExtension) - + extension, err := createGitScmExtension().fromClientExtension(clientExtension) + if err != nil { + return err + } log.Println("[INFO] Updating state for job git scm extension", d.Id()) return extension.setResourceData(d) } diff --git a/provider/job_git_scm_extension_test.go b/provider/job_git_scm_extension_test.go index 9c3acf8..a8a30d8 100644 --- a/provider/job_git_scm_extension_test.go +++ b/provider/job_git_scm_extension_test.go @@ -2,15 +2,12 @@ package provider import ( "fmt" - "reflect" "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/terraform" "github.com/jgramoll/terraform-provider-jenkins/client" ) -var jobGitScmExtensionTypes = map[string]reflect.Type{} - func testAccCheckJobGitScmExtensions( jobRef *client.Job, expectedResourceNames []string, diff --git a/provider/job_git_scm_test.go b/provider/job_git_scm_test.go index 4cd8aa3..137c500 100644 --- a/provider/job_git_scm_test.go +++ b/provider/job_git_scm_test.go @@ -2,7 +2,6 @@ package provider import ( "fmt" - "reflect" "testing" "github.com/hashicorp/terraform/helper/acctest" @@ -11,10 +10,6 @@ import ( "github.com/jgramoll/terraform-provider-jenkins/client" ) -func init() { - jobDefinitionTypes["jenkins_job_git_scm"] = reflect.TypeOf((*client.CpsScmFlowDefinition)(nil)) -} - func TestAccJobGitScmBasic(t *testing.T) { var jobRef client.Job jobName := fmt.Sprintf("%s/tf-acc-test-%s", jenkinsFolder, acctest.RandStringFromCharSet(10, acctest.CharSetAlphaNum)) diff --git a/provider/job_trigger.go b/provider/job_trigger.go index 1efaca6..5e90f13 100644 --- a/provider/job_trigger.go +++ b/provider/job_trigger.go @@ -6,7 +6,7 @@ import ( ) type jobTrigger interface { - fromClientJobTrigger(client.JobTrigger) jobTrigger + fromClientJobTrigger(client.JobTrigger) (jobTrigger, error) toClientJobTrigger(id string) (client.JobTrigger, error) setResourceData(*schema.ResourceData) error } diff --git a/provider/job_trigger_resource.go b/provider/job_trigger_resource.go index e477721..ba0a945 100644 --- a/provider/job_trigger_resource.go +++ b/provider/job_trigger_resource.go @@ -101,8 +101,10 @@ func resourceJobTriggerRead(d *schema.ResourceData, m interface{}, createJobTrig if err != nil { return err } - trigger := createJobTrigger().fromClientJobTrigger(clientTrigger) - + trigger, err := createJobTrigger().fromClientJobTrigger(clientTrigger) + if err != nil { + return err + } log.Println("[INFO] Updating state for job trigger", d.Id()) return trigger.setResourceData(d) } diff --git a/provider/job_trigger_test.go b/provider/job_trigger_test.go index 4fdb2be..f39cbbb 100644 --- a/provider/job_trigger_test.go +++ b/provider/job_trigger_test.go @@ -2,15 +2,12 @@ package provider import ( "fmt" - "reflect" "github.com/hashicorp/terraform/helper/resource" "github.com/hashicorp/terraform/terraform" "github.com/jgramoll/terraform-provider-jenkins/client" ) -var jobTriggerTypes = map[string]reflect.Type{} - func testAccCheckJobTriggers( jobRef *client.Job, expectedResourceNames []string,