github.com/lamielle/terraform@v0.3.2-0.20141121070651-81f008ba53d5/command/command_test.go (about) 1 package command 2 3 import ( 4 "io/ioutil" 5 "os" 6 "path/filepath" 7 "testing" 8 9 "github.com/hashicorp/terraform/config/module" 10 "github.com/hashicorp/terraform/terraform" 11 ) 12 13 // This is the directory where our test fixtures are. 14 var fixtureDir = "./test-fixtures" 15 16 func init() { 17 test = true 18 19 // Expand the fixture dir on init because we change the working 20 // directory in some tests. 21 var err error 22 fixtureDir, err = filepath.Abs(fixtureDir) 23 if err != nil { 24 panic(err) 25 } 26 } 27 28 func tempDir(t *testing.T) string { 29 dir, err := ioutil.TempDir("", "tf") 30 if err != nil { 31 t.Fatalf("err: %s", err) 32 } 33 if err := os.RemoveAll(dir); err != nil { 34 t.Fatalf("err: %s", err) 35 } 36 37 return dir 38 } 39 40 func testFixturePath(name string) string { 41 return filepath.Join(fixtureDir, name) 42 } 43 44 func testCtxConfig(p terraform.ResourceProvider) *terraform.ContextOpts { 45 return &terraform.ContextOpts{ 46 Providers: map[string]terraform.ResourceProviderFactory{ 47 "test": func() (terraform.ResourceProvider, error) { 48 return p, nil 49 }, 50 }, 51 } 52 } 53 54 func testModule(t *testing.T, name string) *module.Tree { 55 mod, err := module.NewTreeModule("", filepath.Join(fixtureDir, name)) 56 if err != nil { 57 t.Fatalf("err: %s", err) 58 } 59 60 s := &module.FolderStorage{StorageDir: tempDir(t)} 61 if err := mod.Load(s, module.GetModeGet); err != nil { 62 t.Fatalf("err: %s", err) 63 } 64 65 return mod 66 } 67 68 func testPlanFile(t *testing.T, plan *terraform.Plan) string { 69 path := testTempFile(t) 70 71 f, err := os.Create(path) 72 if err != nil { 73 t.Fatalf("err: %s", err) 74 } 75 defer f.Close() 76 77 if err := terraform.WritePlan(plan, f); err != nil { 78 t.Fatalf("err: %s", err) 79 } 80 81 return path 82 } 83 84 func testReadPlan(t *testing.T, path string) *terraform.Plan { 85 f, err := os.Open(path) 86 if err != nil { 87 t.Fatalf("err: %s", err) 88 } 89 defer f.Close() 90 91 p, err := terraform.ReadPlan(f) 92 if err != nil { 93 t.Fatalf("err: %s", err) 94 } 95 96 return p 97 } 98 99 // testState returns a test State structure that we use for a lot of tests. 100 func testState() *terraform.State { 101 return &terraform.State{ 102 Modules: []*terraform.ModuleState{ 103 &terraform.ModuleState{ 104 Path: []string{"root"}, 105 Resources: map[string]*terraform.ResourceState{ 106 "test_instance.foo": &terraform.ResourceState{ 107 Type: "test_instance", 108 Primary: &terraform.InstanceState{ 109 ID: "bar", 110 }, 111 }, 112 }, 113 }, 114 }, 115 } 116 } 117 118 func testStateFile(t *testing.T, s *terraform.State) string { 119 path := testTempFile(t) 120 121 f, err := os.Create(path) 122 if err != nil { 123 t.Fatalf("err: %s", err) 124 } 125 defer f.Close() 126 127 if err := terraform.WriteState(s, f); err != nil { 128 t.Fatalf("err: %s", err) 129 } 130 131 return path 132 } 133 134 func testProvider() *terraform.MockResourceProvider { 135 p := new(terraform.MockResourceProvider) 136 p.DiffReturn = &terraform.InstanceDiff{} 137 p.RefreshFn = func( 138 info *terraform.InstanceInfo, 139 s *terraform.InstanceState) (*terraform.InstanceState, error) { 140 return s, nil 141 } 142 p.ResourcesReturn = []terraform.ResourceType{ 143 terraform.ResourceType{ 144 Name: "test_instance", 145 }, 146 } 147 148 return p 149 } 150 151 func testTempFile(t *testing.T) string { 152 tf, err := ioutil.TempFile("", "tf") 153 if err != nil { 154 t.Fatalf("err: %s", err) 155 } 156 157 result := tf.Name() 158 159 if err := tf.Close(); err != nil { 160 t.Fatalf("err: %s", err) 161 } 162 if err := os.Remove(result); err != nil { 163 t.Fatalf("err: %s", err) 164 } 165 166 return result 167 } 168 169 func testTempDir(t *testing.T) string { 170 d, err := ioutil.TempDir("", "tf") 171 if err != nil { 172 t.Fatalf("err: %s", err) 173 } 174 175 return d 176 }