carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package release
2
3import (
4 "context"
5 "errors"
6 "io"
7 "testing"
8)
9
10type requiredStreamGetOnly struct {
11 Store
12 gets int
13}
14
15func (s *requiredStreamGetOnly) Get(ctx context.Context, key string) ([]byte, string, error) {
16 s.gets++
17 return s.Store.Get(ctx, key)
18}
19func TestOpenObjectStreamingRequiresWholeWrapperChain(t *testing.T) {
20 raw := NewDirStore(t.TempDir())
21 if _, err := raw.Put(t.Context(), "outer/inner/object", []byte("small"), ""); err != nil {
22 t.Fatal(err)
23 }
24 base := &requiredStreamGetOnly{Store: raw}
25 s := NewPrefixStore(NewPrefixStore(base, "outer"), "inner")
26 if r, _, err := OpenObjectStreaming(t.Context(), s, "object"); r != nil || !errors.Is(err, errors.ErrUnsupported) || base.gets != 0 {
27 t.Fatalf("stream=%v err=%v gets=%d", r, err, base.gets)
28 }
29 r, _, err := OpenObject(t.Context(), s, "object")
30 if err != nil {
31 t.Fatal(err)
32 }
33 body, err := io.ReadAll(r)
34 r.Close()
35 if err != nil || string(body) != "small" || base.gets != 1 {
36 t.Fatalf("fallback %q %v gets=%d", body, err, base.gets)
37 }
38}
39