Makes http request cached for tests
This commit is contained in:
@@ -81,7 +81,7 @@ func (c *AlbumCoverCache) fetch(a *Album) (io.ReadCloser, error) {
|
|||||||
}
|
}
|
||||||
f, err := os.Create(c.coverPath(a))
|
f, err := os.Create(c.coverPath(a))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
resp.Body.Close()
|
closeOrPanic(resp.Body, "GET:"+a.CoverURL)
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -24,28 +24,18 @@ func (g *errorGetter) Get(URL string) (*http.Response, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *AlbumCoverCacheSuite) TestCanFetchCache(c *C) {
|
func (s *AlbumCoverCacheSuite) TestCanFetchCache(c *C) {
|
||||||
data := []*Album{
|
|
||||||
&Album{
|
|
||||||
ID: 41693,
|
|
||||||
CoverURL: "http://www.bedetheque.com/media/Couvertures/Couv_41693.jpg",
|
|
||||||
},
|
|
||||||
&Album{
|
|
||||||
ID: 1285,
|
|
||||||
CoverURL: "http://www.bedetheque.com/media/Couvertures/OumpahPahLepeauxrouge.jpg",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
tmpdir, err := ioutil.TempDir("", "satbdexplorer-tests-cache")
|
tmpdir, err := ioutil.TempDir("", "satbdexplorer-tests-cache")
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
defer os.RemoveAll(tmpdir)
|
defer os.RemoveAll(tmpdir)
|
||||||
|
|
||||||
cache, err := NewAlbumCoverCache(tmpdir, 10, 10*time.Second)
|
cache, err := NewAlbumCoverCache(tmpdir, 10, 10*time.Second)
|
||||||
|
cache.getter = testGetter
|
||||||
c.Assert(err, IsNil)
|
c.Assert(err, IsNil)
|
||||||
|
|
||||||
var resData = []bytes.Buffer{}
|
var resData = []bytes.Buffer{}
|
||||||
|
|
||||||
for _, a := range data {
|
for _, a := range albumsDataTest {
|
||||||
cover, err := cache.GetCover(a)
|
cover, err := cache.GetCover(&a)
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
if c.Check(err, IsNil) == true {
|
if c.Check(err, IsNil) == true {
|
||||||
_, err := io.Copy(&buf, cover)
|
_, err := io.Copy(&buf, cover)
|
||||||
@@ -59,8 +49,8 @@ func (s *AlbumCoverCacheSuite) TestCanFetchCache(c *C) {
|
|||||||
|
|
||||||
// now we check that we get it again, but from the disk, not
|
// now we check that we get it again, but from the disk, not
|
||||||
// hitting the web
|
// hitting the web
|
||||||
for i, a := range data {
|
for i, a := range albumsDataTest {
|
||||||
cover, err := cache.GetCover(a)
|
cover, err := cache.GetCover(&a)
|
||||||
var buf bytes.Buffer
|
var buf bytes.Buffer
|
||||||
if c.Check(err, IsNil) == true {
|
if c.Check(err, IsNil) == true {
|
||||||
_, err := io.Copy(&buf, cover)
|
_, err := io.Copy(&buf, cover)
|
||||||
@@ -74,8 +64,8 @@ func (s *AlbumCoverCacheSuite) TestCanFetchCache(c *C) {
|
|||||||
// now if we it the TTL, we will reftech and get error
|
// now if we it the TTL, we will reftech and get error
|
||||||
cache.TTL = 0
|
cache.TTL = 0
|
||||||
|
|
||||||
for _, a := range data {
|
for _, a := range albumsDataTest {
|
||||||
cover, err := cache.GetCover(a)
|
cover, err := cache.GetCover(&a)
|
||||||
c.Check(cover, IsNil)
|
c.Check(cover, IsNil)
|
||||||
c.Check(err, ErrorMatches, "I will always have an error")
|
c.Check(err, ErrorMatches, "I will always have an error")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ func (g *AlbumDescriptionGetter) Get(a *Album) error {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
defer resp.Body.Close()
|
defer closeOrPanic(resp.Body, "GET:http://"+URL)
|
||||||
|
|
||||||
doc, err := goquery.NewDocumentFromReader(resp.Body)
|
doc, err := goquery.NewDocumentFromReader(resp.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
13
data_test.go
13
data_test.go
@@ -9,10 +9,16 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"regexp"
|
"regexp"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/gregjones/httpcache"
|
||||||
|
"github.com/gregjones/httpcache/diskcache"
|
||||||
|
"github.com/peterbourgon/diskv"
|
||||||
)
|
)
|
||||||
|
|
||||||
var albumsDataTest []Album
|
var albumsDataTest []Album
|
||||||
|
|
||||||
|
var testGetter HTTPGetter
|
||||||
|
|
||||||
// StripNonCsvField strips all the fields which are not in the Csv
|
// StripNonCsvField strips all the fields which are not in the Csv
|
||||||
func StripNonCsvField(a Album) Album {
|
func StripNonCsvField(a Album) Album {
|
||||||
return Album{
|
return Album{
|
||||||
@@ -89,4 +95,11 @@ func init() {
|
|||||||
if err = dec.Decode(&albumsDataTest); err != nil {
|
if err = dec.Decode(&albumsDataTest); err != nil {
|
||||||
panic(fmt.Sprintf("Could not parse '%s': %s", albumsPath, err))
|
panic(fmt.Sprintf("Could not parse '%s': %s", albumsPath, err))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dv := diskv.New(diskv.Options{
|
||||||
|
BasePath: filepath.Join("testdata", "web-cache"),
|
||||||
|
CacheSizeMax: 100 * 1024 * 1024, // 100MB
|
||||||
|
})
|
||||||
|
testGetter = httpcache.NewTransport(diskcache.NewWithDiskv(dv)).Client()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
2
main.go
2
main.go
@@ -39,7 +39,7 @@ func Execute() error {
|
|||||||
errors <- err
|
errors <- err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer csvFile.Close()
|
defer closeOrLog(csvFile, "Could not close '"+os.Args[1]+"': %s")
|
||||||
csvReader, err := NewAlbumCsvReader(csvFile)
|
csvReader, err := NewAlbumCsvReader(csvFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errors <- err
|
errors <- err
|
||||||
|
|||||||
Reference in New Issue
Block a user