-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathimage_test.go
More file actions
82 lines (67 loc) · 1.55 KB
/
image_test.go
File metadata and controls
82 lines (67 loc) · 1.55 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
package main
import (
"context"
"errors"
"io"
"os"
"path/filepath"
"runtime"
"testing"
"time"
"github.com/go-quicktest/qt"
)
func TestCacheAcquire(t *testing.T) {
cache := imageCache{t.TempDir()}
img1, err := cache.Acquire(context.Background(), "busybox", io.Discard)
qt.Assert(t, qt.IsNil(err))
defer img1.Close()
start := time.Now()
img2, err := cache.Acquire(context.Background(), "busybox", io.Discard)
delta := time.Since(start)
qt.Assert(t, qt.IsTrue(delta < 100*time.Millisecond))
qt.Assert(t, qt.IsNil(err))
defer img2.Close()
qt.Assert(t, qt.Equals(img2.Directory, img1.Directory))
}
func TestFetchAndExtractImage(t *testing.T) {
tmp := t.TempDir()
err := fetchImage(context.Background(), "busybox", tmp, io.Discard)
qt.Assert(t, qt.IsNil(err))
_, err = os.Stat(filepath.Join(tmp, "bin", "sh"))
qt.Assert(t, qt.IsNil(err))
}
func TestPopulateDirectoryOnce(t *testing.T) {
tmp := t.TempDir()
waiting := make(chan struct{})
quit := make(chan struct{})
errs := make(chan error, 2)
go func() {
f, _, err := populateDirectoryOnce(tmp, func(s string) error {
close(waiting)
<-quit
return nil
})
if err == nil {
f.Close()
}
errs <- err
}()
select {
case <-waiting:
case err := <-errs:
t.Fatal("Got error from first invoke:", err)
}
go func() {
f, _, err := populateDirectoryOnce(tmp, func(s string) error {
return errors.New("invoked second fn")
})
if err == nil {
f.Close()
}
errs <- err
}()
runtime.Gosched()
close(quit)
qt.Assert(t, qt.IsNil(<-errs))
qt.Assert(t, qt.IsNil(<-errs))
}