diff --git a/cmd/helm/repo_add_test.go b/cmd/helm/repo_add_test.go
index 21835317413d9daece99f3ec5c4a17216cfee445..055ee0bfd40a6d0cc859affe9e32371d4127a376 100644
--- a/cmd/helm/repo_add_test.go
+++ b/cmd/helm/repo_add_test.go
@@ -29,19 +29,21 @@ import (
 var testName = "test-name"
 
 func TestRepoAddCmd(t *testing.T) {
-	srv := repotest.NewServer("testdata/testserver")
-	defer srv.Stop()
-
-	thome, err := tempHelmHome(t)
+	srv, thome, err := repotest.NewTempServer("testdata/testserver/*.*")
 	if err != nil {
 		t.Fatal(err)
 	}
+
 	oldhome := homePath()
 	helmHome = thome
 	defer func() {
+		srv.Stop()
 		helmHome = oldhome
 		os.Remove(thome)
 	}()
+	if err := ensureTestHome(helmpath.Home(thome), t); err != nil {
+		t.Fatal(err)
+	}
 
 	tests := []releaseCase{
 		{
@@ -61,15 +63,22 @@ func TestRepoAddCmd(t *testing.T) {
 }
 
 func TestRepoAdd(t *testing.T) {
-	ts := repotest.NewServer("testdata/testserver")
-	defer ts.Stop()
-
-	thome, err := tempHelmHome(t)
+	ts, thome, err := repotest.NewTempServer("testdata/testserver/*.*")
 	if err != nil {
 		t.Fatal(err)
 	}
-	defer os.Remove(thome)
+
+	oldhome := homePath()
+	helmHome = thome
 	hh := helmpath.Home(thome)
+	defer func() {
+		ts.Stop()
+		helmHome = oldhome
+		os.Remove(thome)
+	}()
+	if err := ensureTestHome(hh, t); err != nil {
+		t.Fatal(err)
+	}
 
 	if err := addRepository(testName, ts.URL(), hh); err != nil {
 		t.Error(err)
diff --git a/cmd/helm/repo_update_test.go b/cmd/helm/repo_update_test.go
index 6ec59c410b06ed324d7b4a54b1cb97a4bd1f266d..857fbbf8806c885f7888ce458e321fc2132a6725 100644
--- a/cmd/helm/repo_update_test.go
+++ b/cmd/helm/repo_update_test.go
@@ -62,19 +62,21 @@ func TestUpdateCmd(t *testing.T) {
 }
 
 func TestUpdateCharts(t *testing.T) {
-	srv := repotest.NewServer("testdata/testserver")
-	defer srv.Stop()
-
-	thome, err := tempHelmHome(t)
+	srv, thome, err := repotest.NewTempServer("testdata/testserver/*.*")
 	if err != nil {
 		t.Fatal(err)
 	}
+
 	oldhome := homePath()
 	helmHome = thome
 	defer func() {
+		srv.Stop()
 		helmHome = oldhome
 		os.Remove(thome)
 	}()
+	if err := ensureTestHome(helmpath.Home(thome), t); err != nil {
+		t.Fatal(err)
+	}
 
 	buf := bytes.NewBuffer(nil)
 	repos := []*repo.Entry{
diff --git a/pkg/repo/repotest/server.go b/pkg/repo/repotest/server.go
index 8023dbc5c77e95489acd0b5cabc12c65259901f2..9223ed0a37de0366bbabd4b04ca333bf67bf5531 100644
--- a/pkg/repo/repotest/server.go
+++ b/pkg/repo/repotest/server.go
@@ -27,6 +27,30 @@ import (
 	"k8s.io/helm/pkg/repo"
 )
 
+// NewTempServer creates a server inside of a temp dir.
+//
+// If the passed in string is not "", it will be treated as a shell glob, and files
+// will be copied from that path to the server's docroot.
+//
+// The caller is responsible for destroying the temp directory as well as stopping
+// the server.
+func NewTempServer(glob string) (*Server, string, error) {
+	tdir, err := ioutil.TempDir("", "helm-repotest-")
+	if err != nil {
+		return nil, tdir, err
+	}
+	srv := NewServer(tdir)
+
+	if glob != "" {
+		if _, err := srv.CopyCharts(glob); err != nil {
+			srv.Stop()
+			return srv, tdir, err
+		}
+	}
+
+	return srv, tdir, nil
+}
+
 // NewServer creates a repository server for testing.
 //
 // docroot should be a temp dir managed by the caller.
diff --git a/pkg/repo/repotest/server_test.go b/pkg/repo/repotest/server_test.go
index b2a9a5b005cf8b5f2b8e570af57116065765923c..1d4c78e415868cff0e7707dfd1dce78d1d1df16b 100644
--- a/pkg/repo/repotest/server_test.go
+++ b/pkg/repo/repotest/server_test.go
@@ -102,3 +102,26 @@ func TestServer(t *testing.T) {
 		t.Errorf("Expected 404, got %d", res.StatusCode)
 	}
 }
+
+func TestNewTempServer(t *testing.T) {
+	srv, tdir, err := NewTempServer("testdata/examplechart-0.1.0.tgz")
+	if err != nil {
+		t.Fatal(err)
+	}
+	defer func() {
+		srv.Stop()
+		os.RemoveAll(tdir)
+	}()
+
+	if _, err := os.Stat(tdir); err != nil {
+		t.Fatal(err)
+	}
+
+	res, err := http.Head(srv.URL() + "/examplechart-0.1.0.tgz")
+	if err != nil {
+		t.Error(err)
+	}
+	if res.StatusCode != 200 {
+		t.Errorf("Expected 200, got %d", res.StatusCode)
+	}
+}