github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/logentries/expect/expect.go (about) 1 package test 2 3 import ( 4 "fmt" 5 "github.com/hashicorp/terraform/helper/resource" 6 "github.com/hashicorp/terraform/terraform" 7 "reflect" 8 "regexp" 9 ) 10 11 type TestExistsCheckFactoryFunc func(resource string, fact interface{}) resource.TestCheckFunc 12 13 type TestExpectValue interface { 14 Execute(val interface{}) error 15 String() string 16 } 17 18 func TestCheckResourceExpectation(res string, fact interface{}, existsFunc TestExistsCheckFactoryFunc, expectation map[string]TestExpectValue) resource.TestCheckFunc { 19 return func(s *terraform.State) error { 20 if err := existsFunc(res, fact)(s); err != nil { 21 return fmt.Errorf("Expectation existence check error: %s", err) 22 } 23 24 value := reflect.ValueOf(fact).Elem() 25 for i := 0; i < value.NumField(); i++ { 26 t := value.Type().Field(i).Tag 27 tv := t.Get("tfresource") 28 29 // TODO: Support data types other than string 30 fv := value.Field(i).Interface().(string) 31 if expect, ok := expectation[tv]; ok { 32 if err := expect.Execute(fv); err != nil { 33 return fmt.Errorf("Expected %s, got \"%s\" (for %s)", expectation[tv], fv, tv) 34 } 35 } 36 } 37 return nil 38 } 39 } 40 41 type RegexTestExpectValue struct { 42 Value interface{} 43 TestExpectValue 44 } 45 46 func (t *RegexTestExpectValue) Execute(val interface{}) error { 47 expr := t.Value.(string) 48 if !regexp.MustCompile(expr).MatchString(val.(string)) { 49 return fmt.Errorf("Expected regexp match for \"%s\": %s", expr, val) 50 } 51 return nil 52 } 53 54 func (t *RegexTestExpectValue) String() string { 55 return fmt.Sprintf("regex[%s]", t.Value.(string)) 56 } 57 58 func RegexMatches(exp string) TestExpectValue { 59 return &RegexTestExpectValue{Value: exp} 60 } 61 62 type EqualsTestExpectValue struct { 63 Value interface{} 64 TestExpectValue 65 } 66 67 func (t *EqualsTestExpectValue) Execute(val interface{}) error { 68 expr := t.Value.(string) 69 if val.(string) != t.Value.(string) { 70 return fmt.Errorf("Expected %s and %s to be equal", expr, val) 71 } 72 return nil 73 } 74 75 func (t *EqualsTestExpectValue) String() string { 76 return fmt.Sprintf("equals[%s]", t.Value.(string)) 77 } 78 79 func Equals(exp string) TestExpectValue { 80 return &EqualsTestExpectValue{Value: exp} 81 }