From 5b1769e8abcbde9aad6f54c925c4cc6086a155b2 Mon Sep 17 00:00:00 2001
From: Clint Byrum <clint@fewbar.com>
Date: Wed, 8 May 2013 09:53:49 -0700
Subject: [PATCH] Fix leaky tempfiles during test suite.

Each test run was producing 5 abandoned temp files.

Change-Id: I1c682b8e5a8782b1123b4a1bdb06dddca534e84b
---
 heat_cfntools/tests/test_cfn_helper.py | 47 ++++++++++----------------
 1 file changed, 18 insertions(+), 29 deletions(-)

diff --git a/heat_cfntools/tests/test_cfn_helper.py b/heat_cfntools/tests/test_cfn_helper.py
index 5cbe2a8..103dc30 100644
--- a/heat_cfntools/tests/test_cfn_helper.py
+++ b/heat_cfntools/tests/test_cfn_helper.py
@@ -15,6 +15,7 @@
 # under the License.
 
 import boto.cloudformation as cfn
+import fixtures
 import json
 import mox
 import os
@@ -510,6 +511,11 @@ class TestCfnHelper(testtools.TestCase):
 
 class TestMetadataRetrieve(testtools.TestCase):
 
+    def setUp(self):
+        super(TestMetadataRetrieve, self).setUp()
+        self.tdir = self.useFixture(fixtures.TempDir())
+        self.last_file = os.path.join(self.tdir.path, 'last_metadata')
+
     def test_metadata_retrieve_files(self):
 
         md_data = {"AWS::CloudFormation::Init": {"config": {"files": {
@@ -518,9 +524,6 @@ class TestMetadataRetrieve(testtools.TestCase):
 
         md = cfn_helper.Metadata('teststack', None)
 
-        with tempfile.NamedTemporaryFile() as last_file:
-            pass
-
         with tempfile.NamedTemporaryFile(mode='w+') as default_file:
             default_file.write(md_str)
             default_file.flush()
@@ -528,28 +531,25 @@ class TestMetadataRetrieve(testtools.TestCase):
 
             md.retrieve(
                 default_path=default_file.name,
-                last_path=last_file.name)
+                last_path=self.last_file)
 
-            self.assertThat(last_file.name, ttm.FileContains(md_str))
+            self.assertThat(self.last_file, ttm.FileContains(md_str))
             self.assertThat(md_data, ttm.Equals(md._metadata))
 
         md = cfn_helper.Metadata('teststack', None)
         md.retrieve(
             default_path=default_file.name,
-            last_path=last_file.name)
+            last_path=self.last_file)
         self.assertThat(md_data, ttm.Equals(md._metadata))
 
     def test_metadata_retrieve_none(self):
 
         md = cfn_helper.Metadata('teststack', None)
-        with tempfile.NamedTemporaryFile() as last_file:
-            pass
-        with tempfile.NamedTemporaryFile() as default_file:
-            pass
+        default_file = os.path.join(self.tdir.path, 'default_file')
 
         md.retrieve(
-            default_path=default_file.name,
-            last_path=last_file.name)
+            default_path=default_file,
+            last_path=self.last_file)
         self.assertIsNone(md._metadata)
 
     def test_metadata_retrieve_passed(self):
@@ -558,15 +558,12 @@ class TestMetadataRetrieve(testtools.TestCase):
             "/tmp/foo": {"content": "bar"}}}}}
         md_str = json.dumps(md_data)
 
-        with tempfile.NamedTemporaryFile() as last_file:
-            pass
-
         md = cfn_helper.Metadata('teststack', None)
-        md.retrieve(meta_str=md_str, last_path=last_file.name)
+        md.retrieve(meta_str=md_str, last_path=self.last_file)
         self.assertThat(md_data, ttm.Equals(md._metadata))
 
         md = cfn_helper.Metadata('teststack', None)
-        md.retrieve(meta_str=md_data, last_path=last_file.name)
+        md.retrieve(meta_str=md_data, last_path=self.last_file)
         self.assertThat(md_data, ttm.Equals(md._metadata))
         self.assertEqual(md_str, str(md))
 
@@ -600,10 +597,8 @@ class TestMetadataRetrieve(testtools.TestCase):
         md_data = {"AWS::CloudFormation::Init": {"config": {"files": {
             "/tmp/foo": {"content": "bar"}}}}}
 
-        with tempfile.NamedTemporaryFile() as last_file:
-            pass
         md = cfn_helper.Metadata('teststack', None)
-        md.retrieve(meta_str=md_data, last_path=last_file.name)
+        md.retrieve(meta_str=md_data, last_path=self.last_file)
 
         self.assertThat(md_data, ttm.Equals(md._metadata))
         self.assertTrue(md._is_valid_metadata())
@@ -627,16 +622,13 @@ class TestMetadataRetrieve(testtools.TestCase):
 
         m.ReplayAll()
 
-        with tempfile.NamedTemporaryFile() as last_file:
-            pass
-
         try:
             md = cfn_helper.Metadata(
                 'teststack',
                 None,
                 access_key='foo',
                 secret_key='bar')
-            md.retrieve(last_path=last_file.name)
+            md.retrieve(last_path=self.last_file)
             self.assertThat(md_data, ttm.Equals(md._metadata))
 
             with tempfile.NamedTemporaryFile(mode='w') as fcreds:
@@ -644,7 +636,7 @@ class TestMetadataRetrieve(testtools.TestCase):
                 fcreds.flush()
                 md = cfn_helper.Metadata(
                     'teststack', None, credentials_file=fcreds.name)
-                md.retrieve(last_path=last_file.name)
+                md.retrieve(last_path=self.last_file)
             self.assertThat(md_data, ttm.Equals(md._metadata))
 
             m.VerifyAll()
@@ -653,15 +645,12 @@ class TestMetadataRetrieve(testtools.TestCase):
 
     def test_cfn_init(self):
 
-        with tempfile.NamedTemporaryFile() as last_file:
-            pass
-
         with tempfile.NamedTemporaryFile(mode='w+') as foo_file:
             md_data = {"AWS::CloudFormation::Init": {"config": {"files": {
                 foo_file.name: {"content": "bar"}}}}}
 
             md = cfn_helper.Metadata('teststack', None)
-            md.retrieve(meta_str=md_data, last_path=last_file.name)
+            md.retrieve(meta_str=md_data, last_path=self.last_file)
             md.cfn_init()
             self.assertThat(foo_file.name, ttm.FileContains('bar'))