(t *testing.T)
| 50 | func (f writeFunc) Write(p []byte) (int, error) { return f(p) } |
| 51 | |
| 52 | func TestFetcherOpen(t *testing.T) { |
| 53 | content := make([]byte, 128) |
| 54 | rand.New(rand.NewSource(1)).Read(content) |
| 55 | start := 0 |
| 56 | |
| 57 | s := httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { |
| 58 | if start > 0 { |
| 59 | rw.Header().Set("content-range", fmt.Sprintf("bytes %d-127/128", start)) |
| 60 | } else if r.Header.Get("Range") == "bytes=0-" { |
| 61 | // Simulate registries which do not support range requests |
| 62 | rw.WriteHeader(http.StatusBadRequest) |
| 63 | return |
| 64 | } |
| 65 | rw.Header().Set("content-length", strconv.Itoa(len(content[start:]))) |
| 66 | _, _ = rw.Write(content[start:]) |
| 67 | })) |
| 68 | defer s.Close() |
| 69 | |
| 70 | u, err := url.Parse(s.URL) |
| 71 | if err != nil { |
| 72 | t.Fatal(err) |
| 73 | } |
| 74 | |
| 75 | f := dockerFetcher{&dockerBase{ |
| 76 | repository: "nonempty", |
| 77 | }} |
| 78 | |
| 79 | host := RegistryHost{ |
| 80 | Client: s.Client(), |
| 81 | Host: u.Host, |
| 82 | Scheme: u.Scheme, |
| 83 | Path: u.Path, |
| 84 | } |
| 85 | |
| 86 | ctx := context.Background() |
| 87 | |
| 88 | req := f.request(host, http.MethodGet) |
| 89 | |
| 90 | checkReader := func(o int64) { |
| 91 | t.Helper() |
| 92 | |
| 93 | rc, _, err := f.open(ctx, req, "", o, true) |
| 94 | if err != nil { |
| 95 | t.Fatalf("failed to open: %+v", err) |
| 96 | } |
| 97 | b, err := io.ReadAll(rc) |
| 98 | if err != nil { |
| 99 | t.Fatal(err) |
| 100 | } |
| 101 | expected := content[o:] |
| 102 | if len(b) != len(expected) { |
| 103 | t.Errorf("unexpected length %d, expected %d", len(b), len(expected)) |
| 104 | return |
| 105 | } |
| 106 | for i, c := range expected { |
| 107 | if b[i] != c { |
| 108 | t.Errorf("unexpected byte %x at %d, expected %x", b[i], i, c) |
| 109 | return |
nothing calls this directly
no test coverage detected
searching dependent graphs…