MCPcopy
hub / github.com/containerd/containerd / TestFetcherOpen

Function TestFetcherOpen

core/remotes/docker/fetcher_test.go:52–137  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

50func (f writeFunc) Write(p []byte) (int, error) { return f(p) }
51
52func 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

Callers

nothing calls this directly

Calls 10

openMethod · 0.95
HeaderMethod · 0.80
FatalMethod · 0.80
requestMethod · 0.80
ReadMethod · 0.65
SetMethod · 0.65
GetMethod · 0.65
WriteMethod · 0.65
CloseMethod · 0.65
ClientMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…