Bound remote control object reads
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"strings"
|
||||
"testing"
|
||||
"time"
|
||||
@@ -119,6 +120,50 @@ func TestLoadCurrentStateReadsCoherentLegacyPair(t *testing.T) {
|
||||
if state.Commit != nil || state.Pointer != nil {
|
||||
t.Fatalf("legacy current state unexpectedly includes immutable commit data: %#v", state)
|
||||
}
|
||||
if len(store.Downloads) != 0 {
|
||||
t.Fatalf("legacy current-state downloads = %#v, want direct bounded reads", store.Downloads)
|
||||
}
|
||||
wantReads := []string{state.CurrentRunIDKey, state.CurrentManifestKey}
|
||||
if len(store.Reads) != len(wantReads) {
|
||||
t.Fatalf("legacy current-state reads = %#v, want %q", store.Reads, wantReads)
|
||||
}
|
||||
for index, want := range wantReads {
|
||||
if store.Reads[index].Key != want {
|
||||
t.Fatalf("legacy current-state read %d = %q, want %q", index, store.Reads[index].Key, want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestCurrentStateControlObjectLimitsAcceptExactAndRejectLimitPlusOne(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
category string
|
||||
key string
|
||||
limit int64
|
||||
}{
|
||||
{name: "commit pointer", category: "current commit pointer", key: "current/commit-pointer.json", limit: MaxCurrentCommitPointerBytes},
|
||||
{name: "commit manifest", category: "remote commit manifest", key: "runs/run/commit.json", limit: MaxRemoteCommitManifestBytes},
|
||||
{name: "session manifest", category: "committed session manifest", key: "runs/run/session-manifest.json", limit: MaxRemoteSessionManifestBytes},
|
||||
{name: "legacy run pointer", category: "legacy current run pointer", key: "current/run_id.txt", limit: MaxLegacyCurrentRunPointerBytes},
|
||||
{name: "legacy manifest", category: "legacy current manifest", key: "current/manifest.json", limit: MaxLegacyCurrentManifestBytes},
|
||||
}
|
||||
for _, test := range tests {
|
||||
t.Run(test.name, func(t *testing.T) {
|
||||
store := &storage.FakeBackend{}
|
||||
exact := strings.Repeat("x", int(test.limit))
|
||||
store.SeedObject(storage.FakeObject{Key: test.key, Data: []byte(exact)})
|
||||
_, data, err := readCurrentStateControlObject(context.Background(), store, test.key, test.category, test.limit)
|
||||
if err != nil || string(data) != exact {
|
||||
t.Fatalf("exact-limit read data length=%d error=%v", len(data), err)
|
||||
}
|
||||
|
||||
store.SeedObject(storage.FakeObject{Key: test.key, Data: []byte(exact + "x")})
|
||||
_, _, err = readCurrentStateControlObject(context.Background(), store, test.key, test.category, test.limit)
|
||||
if err == nil || !strings.Contains(err.Error(), test.category) || !strings.Contains(err.Error(), test.key) || !strings.Contains(err.Error(), fmt.Sprint(test.limit)) {
|
||||
t.Fatalf("limit-plus-one error = %v, want category, key, and limit", err)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestLoadCurrentStateRejectsTornLegacyPair(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user