github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/rundeck/resource_job_test.go (about)

     1  package rundeck
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	"github.com/apparentlymart/go-rundeck-api/rundeck"
     8  	"github.com/hashicorp/terraform/helper/resource"
     9  	"github.com/hashicorp/terraform/terraform"
    10  )
    11  
    12  func TestAccJob_basic(t *testing.T) {
    13  	var job rundeck.JobDetail
    14  
    15  	resource.Test(t, resource.TestCase{
    16  		PreCheck:     func() { testAccPreCheck(t) },
    17  		Providers:    testAccProviders,
    18  		CheckDestroy: testAccJobCheckDestroy(&job),
    19  		Steps: []resource.TestStep{
    20  			resource.TestStep{
    21  				Config: testAccJobConfig_basic,
    22  				Check: resource.ComposeTestCheckFunc(
    23  					testAccJobCheckExists("rundeck_job.test", &job),
    24  					func(s *terraform.State) error {
    25  						if expected := "basic-job"; job.Name != expected {
    26  							return fmt.Errorf("wrong name; expected %v, got %v", expected, job.Name)
    27  						}
    28  						if expected := "Prints Hello World"; job.CommandSequence.Commands[0].Description != expected {
    29  							return fmt.Errorf("failed to set command description; expected %v, got %v", expected, job.CommandSequence.Commands[0].Description)
    30  						}
    31  						return nil
    32  					},
    33  				),
    34  			},
    35  		},
    36  	})
    37  }
    38  
    39  func testAccJobCheckDestroy(job *rundeck.JobDetail) resource.TestCheckFunc {
    40  	return func(s *terraform.State) error {
    41  		client := testAccProvider.Meta().(*rundeck.Client)
    42  		_, err := client.GetJob(job.ID)
    43  		if err == nil {
    44  			return fmt.Errorf("key still exists")
    45  		}
    46  		if _, ok := err.(*rundeck.NotFoundError); !ok {
    47  			return fmt.Errorf("got something other than NotFoundError (%v) when getting key", err)
    48  		}
    49  
    50  		return nil
    51  	}
    52  }
    53  
    54  func testAccJobCheckExists(rn string, job *rundeck.JobDetail) resource.TestCheckFunc {
    55  	return func(s *terraform.State) error {
    56  		rs, ok := s.RootModule().Resources[rn]
    57  		if !ok {
    58  			return fmt.Errorf("resource not found: %s", rn)
    59  		}
    60  
    61  		if rs.Primary.ID == "" {
    62  			return fmt.Errorf("job id not set")
    63  		}
    64  
    65  		client := testAccProvider.Meta().(*rundeck.Client)
    66  		gotJob, err := client.GetJob(rs.Primary.ID)
    67  		if err != nil {
    68  			return fmt.Errorf("error getting job details: %s", err)
    69  		}
    70  
    71  		*job = *gotJob
    72  
    73  		return nil
    74  	}
    75  }
    76  
    77  const testAccJobConfig_basic = `
    78  resource "rundeck_project" "test" {
    79    name = "terraform-acc-test-job"
    80    description = "parent project for job acceptance tests"
    81    resource_model_source {
    82      type = "file"
    83      config = {
    84          format = "resourcexml"
    85          file = "/tmp/terraform-acc-tests.xml"
    86      }
    87    }
    88  }
    89  resource "rundeck_job" "test" {
    90    project_name = "${rundeck_project.test.name}"
    91    name = "basic-job"
    92    description = "A basic job"
    93    node_filter_query = "example"
    94    allow_concurrent_executions = 1
    95    max_thread_count = 1
    96    rank_order = "ascending"
    97    schedule = "0 0 12 * * * *"
    98    option {
    99      name = "foo"
   100      default_value = "bar"
   101    }
   102    command {
   103      description = "Prints Hello World"
   104      shell_command = "echo Hello World"
   105    }
   106  }
   107  `