diff options
| author | lhchavez <[email protected]> | 2021-09-05 15:44:18 -0700 |
|---|---|---|
| committer | GitHub <[email protected]> | 2021-09-05 15:44:18 -0700 |
| commit | f1fa96c7b7f548389c7560d3a1a0bce83be56c9f (patch) | |
| tree | d78a98f00e1d1e1419ca14223784f15db2de2b18 /transport_test.go | |
| parent | dbe032c347b1a1308a4b880e7c5a06d8dfb4d507 (diff) | |
Add support for custom smart transports (#806)
This change adds support for git smart transports. This will be then
used to implement http, https, and ssh transports that don't rely on the
libgit2 library.
Diffstat (limited to 'transport_test.go')
| -rw-r--r-- | transport_test.go | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/transport_test.go b/transport_test.go new file mode 100644 index 0000000..9f50047 --- /dev/null +++ b/transport_test.go @@ -0,0 +1,72 @@ +package git + +import ( + "io" + "reflect" + "testing" +) + +type testSmartSubtransport struct { +} + +func (t *testSmartSubtransport) Action(url string, action SmartServiceAction) (SmartSubtransportStream, error) { + return &testSmartSubtransportStream{}, nil +} + +func (t *testSmartSubtransport) Close() error { + return nil +} + +func (t *testSmartSubtransport) Free() { +} + +type testSmartSubtransportStream struct { +} + +func (s *testSmartSubtransportStream) Read(buf []byte) (int, error) { + payload := "" + + "001e# service=git-upload-pack\n" + + "0000005d0000000000000000000000000000000000000000 HEAD\x00symref=HEAD:refs/heads/master agent=libgit\n" + + "003f0000000000000000000000000000000000000000 refs/heads/master\n" + + "0000" + + return copy(buf, []byte(payload)), io.EOF +} + +func (s *testSmartSubtransportStream) Write(buf []byte) (int, error) { + return 0, io.EOF +} + +func (s *testSmartSubtransportStream) Free() { +} + +func TestTransport(t *testing.T) { + t.Parallel() + repo := createTestRepo(t) + defer cleanupTestRepo(t, repo) + + callback := func(remote *Remote, transport *Transport) (SmartSubtransport, error) { + return &testSmartSubtransport{}, nil + } + registeredSmartTransport, err := NewRegisteredSmartTransport("foo", true, callback) + checkFatal(t, err) + defer registeredSmartTransport.Free() + + remote, err := repo.Remotes.Create("test", "foo://bar") + checkFatal(t, err) + defer remote.Free() + + err = remote.ConnectFetch(nil, nil, nil) + checkFatal(t, err) + + remoteHeads, err := remote.Ls() + checkFatal(t, err) + + expectedRemoteHeads := []RemoteHead{ + {&Oid{}, "HEAD"}, + {&Oid{}, "refs/heads/master"}, + } + if !reflect.DeepEqual(expectedRemoteHeads, remoteHeads) { + t.Errorf("mismatched remote heads. expected %v, got %v", expectedRemoteHeads, remoteHeads) + } +} |
