f1fa96c7b7
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.
73 lines
1.7 KiB
Go
73 lines
1.7 KiB
Go
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)
|
|
}
|
|
}
|