summaryrefslogtreecommitdiff
path: root/transport_test.go
diff options
context:
space:
mode:
authorlhchavez <[email protected]>2021-09-05 15:44:18 -0700
committerGitHub <[email protected]>2021-09-05 15:44:18 -0700
commitf1fa96c7b7f548389c7560d3a1a0bce83be56c9f (patch)
treed78a98f00e1d1e1419ca14223784f15db2de2b18 /transport_test.go
parentdbe032c347b1a1308a4b880e7c5a06d8dfb4d507 (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.go72
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)
+ }
+}