github.com/rstandt/terraform@v0.12.32-0.20230710220336-b1063613405c/builtin/providers/test/resource_timeout.go (about)

     1  package test
     2  
     3  import (
     4  	"fmt"
     5  	"time"
     6  
     7  	"github.com/hashicorp/terraform/helper/schema"
     8  )
     9  
    10  func testResourceTimeout() *schema.Resource {
    11  	return &schema.Resource{
    12  		Create: testResourceTimeoutCreate,
    13  		Read:   testResourceTimeoutRead,
    14  		Update: testResourceTimeoutUpdate,
    15  		Delete: testResourceTimeoutDelete,
    16  
    17  		// Due to the schema version also being stashed in the private/meta
    18  		// data, we need to ensure that it does not overwrite the map
    19  		// containing the timeouts.
    20  		SchemaVersion: 1,
    21  
    22  		Timeouts: &schema.ResourceTimeout{
    23  			Create: schema.DefaultTimeout(time.Second),
    24  			Update: schema.DefaultTimeout(time.Second),
    25  			Delete: schema.DefaultTimeout(time.Second),
    26  		},
    27  
    28  		Importer: &schema.ResourceImporter{
    29  			State: schema.ImportStatePassthrough,
    30  		},
    31  
    32  		Schema: map[string]*schema.Schema{
    33  			"create_delay": {
    34  				Type:     schema.TypeString,
    35  				Optional: true,
    36  			},
    37  			"read_delay": {
    38  				Type:     schema.TypeString,
    39  				Optional: true,
    40  			},
    41  			"update_delay": {
    42  				Type:     schema.TypeString,
    43  				Optional: true,
    44  			},
    45  			"delete_delay": {
    46  				Type:     schema.TypeString,
    47  				Optional: true,
    48  			},
    49  		},
    50  	}
    51  }
    52  
    53  func testResourceTimeoutCreate(d *schema.ResourceData, meta interface{}) error {
    54  	delayString := d.Get("create_delay").(string)
    55  	var delay time.Duration
    56  	var err error
    57  	if delayString != "" {
    58  		delay, err = time.ParseDuration(delayString)
    59  		if err != nil {
    60  			return err
    61  		}
    62  	}
    63  
    64  	if delay > d.Timeout(schema.TimeoutCreate) {
    65  		return fmt.Errorf("timeout while creating resource")
    66  	}
    67  
    68  	d.SetId("testId")
    69  
    70  	return testResourceRead(d, meta)
    71  }
    72  
    73  func testResourceTimeoutRead(d *schema.ResourceData, meta interface{}) error {
    74  	delayString := d.Get("read_delay").(string)
    75  	var delay time.Duration
    76  	var err error
    77  	if delayString != "" {
    78  		delay, err = time.ParseDuration(delayString)
    79  		if err != nil {
    80  			return err
    81  		}
    82  	}
    83  
    84  	if delay > d.Timeout(schema.TimeoutRead) {
    85  		return fmt.Errorf("timeout while reading resource")
    86  	}
    87  
    88  	return nil
    89  }
    90  
    91  func testResourceTimeoutUpdate(d *schema.ResourceData, meta interface{}) error {
    92  	delayString := d.Get("update_delay").(string)
    93  	var delay time.Duration
    94  	var err error
    95  	if delayString != "" {
    96  		delay, err = time.ParseDuration(delayString)
    97  		if err != nil {
    98  			return err
    99  		}
   100  	}
   101  
   102  	if delay > d.Timeout(schema.TimeoutUpdate) {
   103  		return fmt.Errorf("timeout while updating resource")
   104  	}
   105  	return nil
   106  }
   107  
   108  func testResourceTimeoutDelete(d *schema.ResourceData, meta interface{}) error {
   109  	delayString := d.Get("delete_delay").(string)
   110  	var delay time.Duration
   111  	var err error
   112  	if delayString != "" {
   113  		delay, err = time.ParseDuration(delayString)
   114  		if err != nil {
   115  			return err
   116  		}
   117  	}
   118  
   119  	if delay > d.Timeout(schema.TimeoutDelete) {
   120  		return fmt.Errorf("timeout while deleting resource")
   121  	}
   122  
   123  	d.SetId("")
   124  	return nil
   125  }