mirror of https://github.com/docker/docs.git
113 lines
2.7 KiB
Go
113 lines
2.7 KiB
Go
package mcnutils
|
|
|
|
import (
|
|
"fmt"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"bytes"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestGetLatestBoot2DockerReleaseUrl(t *testing.T) {
|
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
respText := `[{"tag_name": "0.1"}]`
|
|
w.Write([]byte(respText))
|
|
}))
|
|
defer ts.Close()
|
|
|
|
b := NewB2dUtils("/tmp/isos")
|
|
isoURL, err := b.GetLatestBoot2DockerReleaseURL(ts.URL + "/repos/org/repo/releases")
|
|
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, fmt.Sprintf("%s/org/repo/releases/download/0.1/boot2docker.iso", ts.URL), isoURL)
|
|
}
|
|
|
|
func TestDownloadIso(t *testing.T) {
|
|
testData := "test-download"
|
|
ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
|
w.Write([]byte(testData))
|
|
}))
|
|
defer ts.Close()
|
|
|
|
filename := "test"
|
|
|
|
tmpDir, err := ioutil.TempDir("", "machine-test-")
|
|
|
|
assert.NoError(t, err)
|
|
|
|
b := NewB2dUtils("/tmp/artifacts")
|
|
err = b.DownloadISO(tmpDir, filename, ts.URL)
|
|
|
|
assert.NoError(t, err)
|
|
|
|
data, err := ioutil.ReadFile(filepath.Join(tmpDir, filename))
|
|
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, testData, string(data))
|
|
}
|
|
|
|
func TestGetReleasesRequestNoToken(t *testing.T) {
|
|
GithubAPIToken = ""
|
|
|
|
b2d := NewB2dUtils("/tmp/store")
|
|
req, err := b2d.getReleasesRequest("http://some.github.api")
|
|
|
|
assert.NoError(t, err)
|
|
assert.Empty(t, req.Header.Get("Authorization"))
|
|
}
|
|
|
|
func TestGetReleasesRequest(t *testing.T) {
|
|
expectedToken := "CATBUG"
|
|
GithubAPIToken = expectedToken
|
|
|
|
b2d := NewB2dUtils("/tmp/store")
|
|
req, err := b2d.getReleasesRequest("http://some.github.api")
|
|
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, fmt.Sprintf("token %s", expectedToken), req.Header.Get("Authorization"))
|
|
}
|
|
|
|
type MockReadCloser struct {
|
|
blockLengths []int
|
|
currentBlock int
|
|
}
|
|
|
|
func (r *MockReadCloser) Read(p []byte) (n int, err error) {
|
|
n = r.blockLengths[r.currentBlock]
|
|
r.currentBlock++
|
|
return
|
|
}
|
|
|
|
func (r *MockReadCloser) Close() error {
|
|
return nil
|
|
}
|
|
|
|
func TestReaderWithProgress(t *testing.T) {
|
|
readCloser := MockReadCloser{blockLengths: []int{5, 45, 50}}
|
|
output := new(bytes.Buffer)
|
|
buffer := make([]byte, 100)
|
|
|
|
readerWithProgress := ReaderWithProgress{
|
|
ReadCloser: &readCloser,
|
|
out: output,
|
|
expectedLength: 100,
|
|
}
|
|
|
|
readerWithProgress.Read(buffer)
|
|
assert.Equal(t, "0%..", output.String())
|
|
|
|
readerWithProgress.Read(buffer)
|
|
assert.Equal(t, "0%....10%....20%....30%....40%....50%", output.String())
|
|
|
|
readerWithProgress.Read(buffer)
|
|
assert.Equal(t, "0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%", output.String())
|
|
|
|
readerWithProgress.Close()
|
|
assert.Equal(t, "0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100%\n", output.String())
|
|
}
|