gopkg.in/openshift/source-to-image.v1@v1.2.0/pkg/scripts/download_test.go (about)

     1  package scripts
     2  
     3  import (
     4  	"fmt"
     5  	"io"
     6  	"io/ioutil"
     7  	"net/http"
     8  	"net/url"
     9  	"os"
    10  	"strings"
    11  	"testing"
    12  
    13  	s2ierr "github.com/openshift/source-to-image/pkg/errors"
    14  )
    15  
    16  type FakeHTTPGet struct {
    17  	url        string
    18  	content    string
    19  	err        error
    20  	body       io.ReadCloser
    21  	statusCode int
    22  }
    23  
    24  func (f *FakeHTTPGet) get(url string) (*http.Response, error) {
    25  	f.url = url
    26  	f.body = ioutil.NopCloser(strings.NewReader(f.content))
    27  	return &http.Response{
    28  		Body:       f.body,
    29  		StatusCode: f.statusCode,
    30  	}, f.err
    31  }
    32  
    33  func getHTTPReader() (*HTTPURLReader, *FakeHTTPGet) {
    34  	sr := &HTTPURLReader{}
    35  	g := &FakeHTTPGet{content: "test content", statusCode: 200}
    36  	sr.Get = g.get
    37  	return sr, g
    38  }
    39  
    40  func TestHTTPRead(t *testing.T) {
    41  	u, _ := url.Parse("http://test.url/test")
    42  	sr, fg := getHTTPReader()
    43  	rc, err := sr.Read(u)
    44  	if rc != fg.body {
    45  		t.Errorf("Unexpected readcloser returned: %#v", rc)
    46  	}
    47  	if err != nil {
    48  		t.Errorf("Unexpected error returned: %v", err)
    49  	}
    50  }
    51  
    52  func TestHTTPReadGetError(t *testing.T) {
    53  	u, _ := url.Parse("http://test.url/test")
    54  	sr, fg := getHTTPReader()
    55  	fg.err = fmt.Errorf("URL Error")
    56  	rc, err := sr.Read(u)
    57  	if rc != nil {
    58  		t.Errorf("Unexpected stream returned: %#v", rc)
    59  	}
    60  	if err != fg.err {
    61  		t.Errorf("Unexpected error returned: %#v", err)
    62  	}
    63  }
    64  
    65  func TestHTTPReadErrorCode(t *testing.T) {
    66  	u, _ := url.Parse("http://test.url/test")
    67  	sr, fg := getHTTPReader()
    68  	fg.statusCode = 500
    69  	rc, err := sr.Read(u)
    70  	if rc != nil {
    71  		t.Errorf("Unexpected stream returned: %#v", rc)
    72  	}
    73  	if err == nil {
    74  		t.Errorf("Error expeccted and not returned")
    75  	}
    76  }
    77  
    78  type FakeSchemeReader struct {
    79  	content string
    80  	err     error
    81  }
    82  
    83  func (f *FakeSchemeReader) Read(url *url.URL) (io.ReadCloser, error) {
    84  	return ioutil.NopCloser(strings.NewReader(f.content)), f.err
    85  }
    86  
    87  func getDownloader() (Downloader, *FakeSchemeReader) {
    88  	fakeReader := &FakeSchemeReader{}
    89  	return &downloader{
    90  		schemeReaders: map[string]schemeReader{
    91  			"http":  fakeReader,
    92  			"https": fakeReader,
    93  			"file":  fakeReader,
    94  		},
    95  	}, fakeReader
    96  }
    97  
    98  func TestDownload(t *testing.T) {
    99  	dl, fr := getDownloader()
   100  	fr.content = "test file content"
   101  	temp, err := ioutil.TempFile("", "testdownload")
   102  	if err != nil {
   103  		t.Fatalf("Cannot create temp directory for test: %v", err)
   104  	}
   105  	defer os.Remove(temp.Name())
   106  	u, _ := url.Parse("http://www.test.url/a/file")
   107  	temp.Close()
   108  	info, err := dl.Download(u, temp.Name())
   109  	if err != nil {
   110  		t.Fatalf("Unexpected error: %v", err)
   111  	}
   112  	if len(info.Location) == 0 {
   113  		t.Errorf("Expected info.Location to be set, got %v", info)
   114  	}
   115  	content, _ := ioutil.ReadFile(temp.Name())
   116  	if string(content) != fr.content {
   117  		t.Errorf("Unexpected file content: %s", string(content))
   118  	}
   119  }
   120  
   121  func TestNoDownload(t *testing.T) {
   122  	dl := &downloader{
   123  		schemeReaders: map[string]schemeReader{
   124  			"image": &ImageReader{},
   125  		},
   126  	}
   127  	u, _ := url.Parse("image:///tmp/testfile")
   128  	_, err := dl.Download(u, "")
   129  	if err == nil {
   130  		t.Error("Expected error with information about scripts inside the image!")
   131  	}
   132  	if e, ok := err.(s2ierr.Error); !ok || e.ErrorCode != s2ierr.ScriptsInsideImageError {
   133  		t.Errorf("Unexpected error %v", err)
   134  	}
   135  }
   136  
   137  func TestNoDownloader(t *testing.T) {
   138  	dl := &downloader{
   139  		schemeReaders: map[string]schemeReader{},
   140  	}
   141  	u, _ := url.Parse("http://www.test.url/a/file")
   142  	_, err := dl.Download(u, "")
   143  	if err == nil {
   144  		t.Errorf("Expected error, got nil!")
   145  	}
   146  }