Repository navigation
Expand file tree
/
Copy pathsession_fs_provider_test.go
More file actions
64 lines (57 loc) · 2.42 KB
/
Copy pathsession_fs_provider_test.go
File metadata and controls
64 lines (57 loc) · 2.42 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
// Copyright (c) Microsoft Corporation. All rights reserved.
package copilot
import (
"errors"
"fmt"
"os"
"testing"
"github.com/github/copilot-sdk/go/rpc"
)
type failingWriteProvider struct {
SessionFSProvider
err error
}
func (p failingWriteProvider) WriteFile(string, string, *int) error { return p.err }
func (p failingWriteProvider) AppendFile(string, string, *int) error { return p.err }
func TestSessionFSWriteFailure(t *testing.T) {
for _, tc := range []struct {
name string
err error
wantChanged bool
wantCode rpc.SessionFSErrorCode
wantMessage string
}{
{"rejected", errors.New("rejected"), false, rpc.SessionFSErrorCodeUNKNOWN, "rejected"},
{"partial", &SessionFSWriteFailure{Err: errors.New("disk full")}, true, rpc.SessionFSErrorCodeUNKNOWN, "disk full"},
{"wrapped", fmt.Errorf("write failed: %w", &SessionFSWriteFailure{Err: os.ErrNotExist}), true, rpc.SessionFSErrorCodeENOENT, "write failed: file does not exist"},
{"nil cause", &SessionFSWriteFailure{}, true, rpc.SessionFSErrorCodeUNKNOWN, "session filesystem write failed after changing the target"},
{"nil marker", (*SessionFSWriteFailure)(nil), false, rpc.SessionFSErrorCodeUNKNOWN, "session filesystem write failed after changing the target"},
} {
t.Run(tc.name, func(t *testing.T) {
adapter := newSessionFSAdapter(failingWriteProvider{err: tc.err})
wire, err := adapter.WriteFile(&rpc.SessionFSWriteFileRequest{Path: "/file", Content: "data"})
if err != nil || wire == nil {
t.Fatalf("WriteFile = %v, %v; want wire error", wire, err)
}
if wire.Code != tc.wantCode {
t.Errorf("code = %v; want %v", wire.Code, tc.wantCode)
}
if wire.Message == nil || *wire.Message != tc.wantMessage {
t.Errorf("message = %v; want %q", wire.Message, tc.wantMessage)
}
gotChanged := wire.WriteChanged != nil && *wire.WriteChanged
if gotChanged != tc.wantChanged || !tc.wantChanged && wire.WriteChanged != nil {
t.Errorf("writeChanged = %v; want %v", wire.WriteChanged, tc.wantChanged)
}
})
}
}
func TestSessionFSWriteFailureDoesNotMarkAppend(t *testing.T) {
adapter := newSessionFSAdapter(failingWriteProvider{
err: &SessionFSWriteFailure{Err: errors.New("append failed")},
})
wire, err := adapter.AppendFile(&rpc.SessionFSAppendFileRequest{Path: "/file", Content: "data"})
if err != nil || wire == nil || wire.WriteChanged != nil {
t.Fatalf("AppendFile = %v, %v; want unmarked wire error", wire, err)
}
}