github.com/arvindram03/terraform@v0.3.7-0.20150212015210-408f838db36d/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 } 177 178 // testCwdDir is used to change the current working directory 179 // into a test directory that should be remoted after 180 func testCwd(t *testing.T) (string, string) { 181 tmp, err := ioutil.TempDir("", "remote") 182 if err != nil { 183 t.Fatalf("err: %v", err) 184 } 185 cwd, err := os.Getwd() 186 if err != nil { 187 t.Fatalf("err: %v", err) 188 } 189 if err := os.Chdir(tmp); err != nil { 190 t.Fatalf("err: %v", err) 191 } 192 return tmp, cwd 193 } 194 195 // testFixCwd is used to as a defer to testDir 196 func testFixCwd(t *testing.T, tmp, cwd string) { 197 if err := os.Chdir(cwd); err != nil { 198 t.Fatalf("err: %v", err) 199 } 200 if err := os.RemoveAll(tmp); err != nil { 201 t.Fatalf("err: %v", err) 202 } 203 }