Move utils.TestDirectory to pkg/testutil/tempfile

Signed-off-by: Vincent Demeester <vincent@sbr.pm>
This commit is contained in:
Vincent Demeester 2016-12-12 09:28:32 +01:00
Родитель b1322e3de9
Коммит 0ab9320ab2
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 083CC6FD6EB699A3
3 изменённых файлов: 40 добавлений и 48 удалений

Просмотреть файл

@ -1,19 +1,23 @@
package distribution package distribution
import ( import (
"fmt"
"io/ioutil"
"net/http" "net/http"
"net/http/httptest" "net/http/httptest"
"net/url" "net/url"
"os" "os"
"runtime"
"strings" "strings"
"testing" "testing"
"github.com/Sirupsen/logrus" "github.com/Sirupsen/logrus"
"github.com/docker/docker/api/types" "github.com/docker/docker/api/types"
registrytypes "github.com/docker/docker/api/types/registry" registrytypes "github.com/docker/docker/api/types/registry"
"github.com/docker/docker/pkg/archive"
"github.com/docker/docker/pkg/stringid"
"github.com/docker/docker/reference" "github.com/docker/docker/reference"
"github.com/docker/docker/registry" "github.com/docker/docker/registry"
"github.com/docker/docker/utils"
"golang.org/x/net/context" "golang.org/x/net/context"
) )
@ -38,7 +42,7 @@ func (h *tokenPassThruHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)
} }
func testTokenPassThru(t *testing.T, ts *httptest.Server) { func testTokenPassThru(t *testing.T, ts *httptest.Server) {
tmp, err := utils.TestDirectory("") tmp, err := testDirectory("")
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
@ -131,3 +135,36 @@ func TestTokenPassThruDifferentHost(t *testing.T) {
t.Fatal("Redirect should not forward Authorization header to another host") t.Fatal("Redirect should not forward Authorization header to another host")
} }
} }
// TestDirectory creates a new temporary directory and returns its path.
// The contents of directory at path `templateDir` is copied into the
// new directory.
func testDirectory(templateDir string) (dir string, err error) {
testID := stringid.GenerateNonCryptoID()[:4]
prefix := fmt.Sprintf("docker-test%s-%s-", testID, getCallerName(2))
if prefix == "" {
prefix = "docker-test-"
}
dir, err = ioutil.TempDir("", prefix)
if err = os.Remove(dir); err != nil {
return
}
if templateDir != "" {
if err = archive.CopyWithTar(templateDir, dir); err != nil {
return
}
}
return
}
// getCallerName introspects the call stack and returns the name of the
// function `depth` levels down in the stack.
func getCallerName(depth int) string {
// Use the caller function name as a prefix.
// This helps trace temp directories back to their test.
pc, _, _, _ := runtime.Caller(depth + 1)
callerLongName := runtime.FuncForPC(pc).Name()
parts := strings.Split(callerLongName, ".")
callerShortName := parts[len(parts)-1]
return callerShortName
}

Просмотреть файл

@ -1,10 +1,9 @@
package tempfile package tempfile
import ( import (
"github.com/docker/docker/pkg/testutil/assert"
"io/ioutil" "io/ioutil"
"os" "os"
"github.com/docker/docker/pkg/testutil/assert"
) )
// TempFile is a temporary file that can be used with unit tests. TempFile // TempFile is a temporary file that can be used with unit tests. TempFile

Просмотреть файл

@ -1,53 +1,9 @@
package utils package utils
import ( import (
"fmt"
"io/ioutil"
"os"
"runtime"
"strings" "strings"
"github.com/docker/docker/pkg/archive"
"github.com/docker/docker/pkg/stringid"
) )
var globalTestID string
// TestDirectory creates a new temporary directory and returns its path.
// The contents of directory at path `templateDir` is copied into the
// new directory.
func TestDirectory(templateDir string) (dir string, err error) {
if globalTestID == "" {
globalTestID = stringid.GenerateNonCryptoID()[:4]
}
prefix := fmt.Sprintf("docker-test%s-%s-", globalTestID, GetCallerName(2))
if prefix == "" {
prefix = "docker-test-"
}
dir, err = ioutil.TempDir("", prefix)
if err = os.Remove(dir); err != nil {
return
}
if templateDir != "" {
if err = archive.CopyWithTar(templateDir, dir); err != nil {
return
}
}
return
}
// GetCallerName introspects the call stack and returns the name of the
// function `depth` levels down in the stack.
func GetCallerName(depth int) string {
// Use the caller function name as a prefix.
// This helps trace temp directories back to their test.
pc, _, _, _ := runtime.Caller(depth + 1)
callerLongName := runtime.FuncForPC(pc).Name()
parts := strings.Split(callerLongName, ".")
callerShortName := parts[len(parts)-1]
return callerShortName
}
// ReplaceOrAppendEnvValues returns the defaults with the overrides either // ReplaceOrAppendEnvValues returns the defaults with the overrides either
// replaced by env key or appended to the list // replaced by env key or appended to the list
func ReplaceOrAppendEnvValues(defaults, overrides []string) []string { func ReplaceOrAppendEnvValues(defaults, overrides []string) []string {