From aaa3143cb44f01e8686f3fef1b3233d6eb7ddf6d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 28 Jul 2022 06:25:48 +0000 Subject: [PATCH 1/4] Bump github.com/go-ldap/ldap/v3 from 3.4.3 to 3.4.4 Bumps [github.com/go-ldap/ldap/v3](https://github.com/go-ldap/ldap) from 3.4.3 to 3.4.4. - [Release notes](https://github.com/go-ldap/ldap/releases) - [Commits](https://github.com/go-ldap/ldap/compare/v3.4.3...v3.4.4) --- updated-dependencies: - dependency-name: github.com/go-ldap/ldap/v3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- go.mod | 4 ++-- go.sum | 7 +++++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index d5282be1f..184cd267d 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/go-chi/chi/v5 v5.0.7 github.com/go-chi/cors v1.2.1 github.com/go-chi/render v1.0.1 - github.com/go-ldap/ldap/v3 v3.4.3 + github.com/go-ldap/ldap/v3 v3.4.4 github.com/go-ldap/ldif v0.0.0-20200320164324-fd88d9b715b3 github.com/go-micro/plugins/v4/client/grpc v1.1.0 github.com/go-micro/plugins/v4/events/natsjs v1.1.0 @@ -84,7 +84,7 @@ require ( require ( contrib.go.opencensus.io/exporter/prometheus v0.4.1 // indirect - github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e // indirect + github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e // indirect github.com/BurntSushi/toml v1.2.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Masterminds/sprig v2.22.0+incompatible // indirect diff --git a/go.sum b/go.sum index a3d9fbc1d..043dc1f1b 100644 --- a/go.sum +++ b/go.sum @@ -83,8 +83,9 @@ github.com/Azure/go-autorest/tracing v0.1.0/go.mod h1:ROEEAFwXycQw7Sn3DXNtEedEvd github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= github.com/Azure/go-ntlmssp v0.0.0-20200615164410-66371956d46c/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= -github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e h1:ZU22z/2YRFLyf/P4ZwUYSdNCWsMEI0VeyrFoI2rAhJQ= github.com/Azure/go-ntlmssp v0.0.0-20211209120228-48547f28849e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= +github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e h1:NeAW1fUYUEWhft7pkxDf6WoUvEZJ/uOKsvtpjLnn8MU= +github.com/Azure/go-ntlmssp v0.0.0-20220621081337-cb9428e4ac1e/go.mod h1:chxPXzSsl7ZWRAuOIE23GDNzjWuZquvFlgA8xmpunjU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0= @@ -397,8 +398,9 @@ github.com/go-kit/log v0.2.0 h1:7i2K3eKTos3Vc0enKCfnVcgHh2olr/MyfboYq7cAcFw= github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-ldap/ldap/v3 v3.1.7/go.mod h1:5Zun81jBTabRaI8lzN7E1JjyEl1g6zI6u9pd8luAK4Q= github.com/go-ldap/ldap/v3 v3.4.2/go.mod h1:iYS1MdmrmceOJ1QOTnRXrIs7i3kloqtmGQjRvjKpyMg= -github.com/go-ldap/ldap/v3 v3.4.3 h1:JCKUtJPIcyOuG7ctGabLKMgIlKnGumD/iGjuWeEruDI= github.com/go-ldap/ldap/v3 v3.4.3/go.mod h1:7LdHfVt6iIOESVEe3Bs4Jp2sHEKgDeduAhgM1/f9qmo= +github.com/go-ldap/ldap/v3 v3.4.4 h1:qPjipEpt+qDa6SI/h1fzuGWoRUY+qqQ9sOZq67/PYUs= +github.com/go-ldap/ldap/v3 v3.4.4/go.mod h1:fe1MsuN5eJJ1FeLT/LEBVdWfNWKh459R7aXgXtJC+aI= github.com/go-ldap/ldif v0.0.0-20200320164324-fd88d9b715b3 h1:sfz1YppV05y4sYaW7kXZtrocU/+vimnIWt4cxAYh7+o= github.com/go-ldap/ldif v0.0.0-20200320164324-fd88d9b715b3/go.mod h1:ZXFhGda43Z2TVbfGZefXyMJzsDHhCh0go3bZUcwTx7o= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= @@ -1301,6 +1303,7 @@ golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.0.0-20211117183948-ae814b36b871/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220321153916-2c7772ba3064/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220331220935-ae2d96664a29/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa h1:zuSxTR4o9y82ebqCUJYNGJbGPo6sKVl54f/TVDObg1c= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= From fa36a73c540a528ccaa2aa131fbd38aecd93acff Mon Sep 17 00:00:00 2001 From: Ralf Haferkamp Date: Tue, 2 Aug 2022 14:55:27 +0200 Subject: [PATCH 2/4] Add missing new methods to fulfill ldap.Client interface --- services/graph/mocks/ldapclient.go | 49 +++++++++++++++++++ services/graph/pkg/identity/ldap/reconnect.go | 15 ++++++ services/graph/pkg/identity/ldap_test.go | 2 +- 3 files changed, 65 insertions(+), 1 deletion(-) diff --git a/services/graph/mocks/ldapclient.go b/services/graph/mocks/ldapclient.go index f2c10eb75..09a57cbc4 100644 --- a/services/graph/mocks/ldapclient.go +++ b/services/graph/mocks/ldapclient.go @@ -163,6 +163,20 @@ func (_m *Client) ModifyWithResult(_a0 *ldap.ModifyRequest) (*ldap.ModifyResult, return r0, r1 } +// NTLMUnauthenticatedBind provides a mock function with given fields: domain, username +func (_m *Client) NTLMUnauthenticatedBind(domain string, username string) error { + ret := _m.Called(domain, username) + + var r0 error + if rf, ok := ret.Get(0).(func(string, string) error); ok { + r0 = rf(domain, username) + } else { + r0 = ret.Error(0) + } + + return r0 +} + // PasswordModify provides a mock function with given fields: _a0 func (_m *Client) PasswordModify(_a0 *ldap.PasswordModifyRequest) (*ldap.PasswordModifyResult, error) { ret := _m.Called(_a0) @@ -279,6 +293,27 @@ func (_m *Client) StartTLS(_a0 *tls.Config) error { return r0 } +// TLSConnectionState provides a mock function with given fields: +func (_m *Client) TLSConnectionState() (tls.ConnectionState, bool) { + ret := _m.Called() + + var r0 tls.ConnectionState + if rf, ok := ret.Get(0).(func() tls.ConnectionState); ok { + r0 = rf() + } else { + r0 = ret.Get(0).(tls.ConnectionState) + } + + var r1 bool + if rf, ok := ret.Get(1).(func() bool); ok { + r1 = rf() + } else { + r1 = ret.Get(1).(bool) + } + + return r0, r1 +} + // UnauthenticatedBind provides a mock function with given fields: username func (_m *Client) UnauthenticatedBind(username string) error { ret := _m.Called(username) @@ -292,3 +327,17 @@ func (_m *Client) UnauthenticatedBind(username string) error { return r0 } + +// Unbind provides a mock function with given fields: +func (_m *Client) Unbind() error { + ret := _m.Called() + + var r0 error + if rf, ok := ret.Get(0).(func() error); ok { + r0 = rf() + } else { + r0 = ret.Error(0) + } + + return r0 +} diff --git a/services/graph/pkg/identity/ldap/reconnect.go b/services/graph/pkg/identity/ldap/reconnect.go index 8a5c405f6..0a4e92474 100644 --- a/services/graph/pkg/identity/ldap/reconnect.go +++ b/services/graph/pkg/identity/ldap/reconnect.go @@ -317,3 +317,18 @@ func (c ConnWithReconnect) Compare(dn, attribute, value string) (bool, error) { func (c ConnWithReconnect) SearchWithPaging(searchRequest *ldap.SearchRequest, pagingSize uint32) (*ldap.SearchResult, error) { return nil, ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) } + +// NTLMUnauthenticatedBind implements the ldap.Client interface +func (c ConnWithReconnect) NTLMUnauthenticatedBind(domain, username string) error { + return ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) +} + +// TLSConnectionState implements the ldap.Client interface +func (c ConnWithReconnect) TLSConnectionState() (tls.ConnectionState, bool) { + return tls.ConnectionState{}, false +} + +// Unbind implements the ldap.Client interface +func (c ConnWithReconnect) Unbind() error { + return ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) +} diff --git a/services/graph/pkg/identity/ldap_test.go b/services/graph/pkg/identity/ldap_test.go index 87d0b1716..5c2aed7f6 100644 --- a/services/graph/pkg/identity/ldap_test.go +++ b/services/graph/pkg/identity/ldap_test.go @@ -14,7 +14,7 @@ import ( "github.com/owncloud/ocis/v2/services/graph/pkg/config" ) -// ldapMock implements the ldap.Client interfac +// ldapMock implements the ldap.Client interface type ldapMock struct { SearchFunc *searchFunc } From f99e968dc80f7d580b6f91cdbd4b42d2d53f40a4 Mon Sep 17 00:00:00 2001 From: Ralf Haferkamp Date: Tue, 2 Aug 2022 15:17:00 +0200 Subject: [PATCH 3/4] Bump reva to latest edge --- changelog/unreleased/update-reva-beta.6.md | 3 ++- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/changelog/unreleased/update-reva-beta.6.md b/changelog/unreleased/update-reva-beta.6.md index 98b18edba..9a0fc10dd 100644 --- a/changelog/unreleased/update-reva-beta.6.md +++ b/changelog/unreleased/update-reva-beta.6.md @@ -4,4 +4,5 @@ Updated reva to version x.x.x. This update includes: * TODO: https://github.com/owncloud/ocis/pull/4272 -https://github.com/cs3org/reva/pull/3096 \ No newline at end of file +https://github.com/cs3org/reva/pull/3096 +https://github.com/owncloud/ocis/pull/4294 diff --git a/go.mod b/go.mod index 184cd267d..f5fbd09f1 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/blevesearch/bleve_index_api v1.0.2 github.com/coreos/go-oidc/v3 v3.2.0 github.com/cs3org/go-cs3apis v0.0.0-20220711084433-8f71d4e812a3 - github.com/cs3org/reva/v2 v2.7.3-0.20220729123357-51c6d5d0c041 + github.com/cs3org/reva/v2 v2.7.3-0.20220802131118-96f18567f9cf github.com/disintegration/imaging v1.6.2 github.com/ggwhite/go-masker v1.0.9 github.com/go-chi/chi/v5 v5.0.7 diff --git a/go.sum b/go.sum index 043dc1f1b..5202ef948 100644 --- a/go.sum +++ b/go.sum @@ -286,8 +286,8 @@ github.com/crewjam/saml v0.4.6 h1:XCUFPkQSJLvzyl4cW9OvpWUbRf0gE7VUpU8ZnilbeM4= github.com/crewjam/saml v0.4.6/go.mod h1:ZBOXnNPFzB3CgOkRm7Nd6IVdkG+l/wF+0ZXLqD96t1A= github.com/cs3org/go-cs3apis v0.0.0-20220711084433-8f71d4e812a3 h1:QSQ2DGKPMChB4vHSs1Os9TnOJl21BrzKX9D5EtQfDog= github.com/cs3org/go-cs3apis v0.0.0-20220711084433-8f71d4e812a3/go.mod h1:UXha4TguuB52H14EMoSsCqDj7k8a/t7g4gVP+bgY5LY= -github.com/cs3org/reva/v2 v2.7.3-0.20220729123357-51c6d5d0c041 h1:ObeKsyxTeYJoPyKqjz6qBjd9Q4kDjT1Fht3lGzOOfdc= -github.com/cs3org/reva/v2 v2.7.3-0.20220729123357-51c6d5d0c041/go.mod h1:9FpnWdVFw7ld3iOiuzHHQeCyVH/Ct9h03PZV9ZRplPM= +github.com/cs3org/reva/v2 v2.7.3-0.20220802131118-96f18567f9cf h1:Pxbm5ofc5M5jSEgGF/HsoSPFPHIHLcRLEPDOwASSu0s= +github.com/cs3org/reva/v2 v2.7.3-0.20220802131118-96f18567f9cf/go.mod h1:hitSH8NLDIjG0alybmNUgJ+FT9dcuBV8tzl6c4OAHIw= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8 h1:Z9lwXumT5ACSmJ7WGnFl+OMLLjpz5uR2fyz7dC255FI= github.com/cubewise-code/go-mime v0.0.0-20200519001935-8c5762b177d8/go.mod h1:4abs/jPXcmJzYoYGF91JF9Uq9s/KL5n1jvFDix8KcqY= github.com/cyberdelia/templates v0.0.0-20141128023046-ca7fffd4298c/go.mod h1:GyV+0YP4qX0UQ7r2MoYZ+AvYDp12OF5yg4q8rGnyNh4= From 53751339a65df436cfd5956a33db7cee43c90a28 Mon Sep 17 00:00:00 2001 From: Ralf Haferkamp Date: Tue, 2 Aug 2022 16:14:39 +0200 Subject: [PATCH 4/4] Use existing mockery mock instead of manual ldap.Client mock --- services/graph/pkg/identity/ldap_test.go | 197 ++++++++--------------- 1 file changed, 67 insertions(+), 130 deletions(-) diff --git a/services/graph/pkg/identity/ldap_test.go b/services/graph/pkg/identity/ldap_test.go index 5c2aed7f6..7db012edb 100644 --- a/services/graph/pkg/identity/ldap_test.go +++ b/services/graph/pkg/identity/ldap_test.go @@ -2,29 +2,19 @@ package identity import ( "context" - "crypto/tls" "errors" - "fmt" "net/url" "testing" - "time" "github.com/go-ldap/ldap/v3" "github.com/owncloud/ocis/v2/ocis-pkg/log" + "github.com/owncloud/ocis/v2/services/graph/mocks" "github.com/owncloud/ocis/v2/services/graph/pkg/config" + "github.com/test-go/testify/mock" ) -// ldapMock implements the ldap.Client interface -type ldapMock struct { - SearchFunc *searchFunc -} - -type searchFunc func(*ldap.SearchRequest) (*ldap.SearchResult, error) - -func getMockedBackend(sf *searchFunc, lc config.LDAP, logger *log.Logger) (*LDAP, error) { - // Mock a Sizelimit Error - lm := ldapMock{SearchFunc: sf} - return NewLDAPBackend(lm, lconfig, logger) +func getMockedBackend(l ldap.Client, lc config.LDAP, logger *log.Logger) (*LDAP, error) { + return NewLDAPBackend(l, lconfig, logger) } var lconfig = config.LDAP{ @@ -60,7 +50,7 @@ var logger = log.NewLogger(log.Level("debug")) func TestNewLDAPBackend(t *testing.T) { - l := ldapMock{} + l := &mocks.Client{} tc := lconfig tc.UserDisplayNameAttribute = "" @@ -93,7 +83,7 @@ func TestNewLDAPBackend(t *testing.T) { } func TestCreateUserModelFromLDAP(t *testing.T) { - l := ldapMock{} + l := &mocks.Client{} logger := log.NewLogger(log.Level("debug")) b, _ := NewLDAPBackend(l, lconfig, &logger) @@ -121,10 +111,12 @@ func TestCreateUserModelFromLDAP(t *testing.T) { func TestGetUser(t *testing.T) { // Mock a Sizelimit Error - var sf searchFunc = func(*ldap.SearchRequest) (*ldap.SearchResult, error) { - return nil, ldap.NewError(ldap.LDAPResultSizeLimitExceeded, errors.New("mock")) - } - b, _ := getMockedBackend(&sf, lconfig, &logger) + lm := &mocks.Client{} + lm.On("Search", mock.Anything, mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return( + nil, ldap.NewError(ldap.LDAPResultSizeLimitExceeded, errors.New("mock"))) + b, _ := getMockedBackend(lm, lconfig, &logger) queryParamExpand := url.Values{ "$expand": []string{"memberOf"}, @@ -148,10 +140,12 @@ func TestGetUser(t *testing.T) { } // Mock an empty Search Result - sf = func(*ldap.SearchRequest) (*ldap.SearchResult, error) { - return &ldap.SearchResult{}, nil - } - b, _ = getMockedBackend(&sf, lconfig, &logger) + lm = &mocks.Client{} + lm.On("Search", mock.Anything, mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return( + &ldap.SearchResult{}, nil) + b, _ = getMockedBackend(lm, lconfig, &logger) _, err = b.GetUser(context.Background(), "fred", nil) if err == nil || err.Error() != "itemNotFound" { t.Errorf("Expected 'itemNotFound' got '%s'", err.Error()) @@ -168,12 +162,16 @@ func TestGetUser(t *testing.T) { } // Mock a valid Search Result - sf = func(*ldap.SearchRequest) (*ldap.SearchResult, error) { - return &ldap.SearchResult{ - Entries: []*ldap.Entry{userEntry}, - }, nil - } - b, _ = getMockedBackend(&sf, lconfig, &logger) + lm = &mocks.Client{} + lm.On("Search", mock.Anything, mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return( + &ldap.SearchResult{ + Entries: []*ldap.Entry{userEntry}, + }, + nil) + + b, _ = getMockedBackend(lm, lconfig, &logger) u, err := b.GetUser(context.Background(), "user", nil) if err != nil { t.Errorf("Expected GetUser to succeed. Got %s", err.Error()) @@ -197,19 +195,23 @@ func TestGetUser(t *testing.T) { } func TestGetUsers(t *testing.T) { - var sf searchFunc = func(*ldap.SearchRequest) (*ldap.SearchResult, error) { - return nil, ldap.NewError(ldap.LDAPResultOperationsError, errors.New("mock")) - } - b, _ := getMockedBackend(&sf, lconfig, &logger) + // Mock a Sizelimit Error + lm := &mocks.Client{} + lm.On("Search", mock.Anything, mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(nil, ldap.NewError(ldap.LDAPResultOperationsError, errors.New("mock"))) + + b, _ := getMockedBackend(lm, lconfig, &logger) _, err := b.GetUsers(context.Background(), url.Values{}) if err == nil || err.Error() != "itemNotFound" { t.Errorf("Expected 'itemNotFound' got '%s'", err.Error()) } - sf = func(*ldap.SearchRequest) (*ldap.SearchResult, error) { - return &ldap.SearchResult{}, nil - } - b, _ = getMockedBackend(&sf, lconfig, &logger) + lm = &mocks.Client{} + lm.On("Search", mock.Anything, mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(&ldap.SearchResult{}, nil) + b, _ = getMockedBackend(lm, lconfig, &logger) g, err := b.GetUsers(context.Background(), url.Values{}) if err != nil { t.Errorf("Expected success, got '%s'", err.Error()) @@ -220,16 +222,18 @@ func TestGetUsers(t *testing.T) { func TestGetGroup(t *testing.T) { // Mock a Sizelimit Error - var sf searchFunc = func(*ldap.SearchRequest) (*ldap.SearchResult, error) { - return nil, ldap.NewError(ldap.LDAPResultSizeLimitExceeded, errors.New("mock")) - } + lm := &mocks.Client{} + lm.On("Search", mock.Anything, mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(nil, ldap.NewError(ldap.LDAPResultSizeLimitExceeded, errors.New("mock"))) + queryParamExpand := url.Values{ "$expand": []string{"memberOf"}, } queryParamSelect := url.Values{ "$select": []string{"memberOf"}, } - b, _ := getMockedBackend(&sf, lconfig, &logger) + b, _ := getMockedBackend(lm, lconfig, &logger) _, err := b.GetGroup(context.Background(), "group", nil) if err == nil || err.Error() != "itemNotFound" { t.Errorf("Expected 'itemNotFound' got '%s'", err.Error()) @@ -244,10 +248,11 @@ func TestGetGroup(t *testing.T) { } // Mock an empty Search Result - sf = func(*ldap.SearchRequest) (*ldap.SearchResult, error) { - return &ldap.SearchResult{}, nil - } - b, _ = getMockedBackend(&sf, lconfig, &logger) + lm = &mocks.Client{} + lm.On("Search", mock.Anything, mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(&ldap.SearchResult{}, nil) + b, _ = getMockedBackend(lm, lconfig, &logger) _, err = b.GetGroup(context.Background(), "group", nil) if err == nil || err.Error() != "itemNotFound" { t.Errorf("Expected 'itemNotFound' got '%s'", err.Error()) @@ -262,12 +267,13 @@ func TestGetGroup(t *testing.T) { } // Mock a valid Search Result - sf = func(*ldap.SearchRequest) (*ldap.SearchResult, error) { - return &ldap.SearchResult{ + lm = &mocks.Client{} + lm.On("Search", mock.Anything, mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(&ldap.SearchResult{ Entries: []*ldap.Entry{groupEntry}, - }, nil - } - b, _ = getMockedBackend(&sf, lconfig, &logger) + }, nil) + b, _ = getMockedBackend(lm, lconfig, &logger) g, err := b.GetGroup(context.Background(), "group", nil) if err != nil { t.Errorf("Expected GetGroup to succeed. Got %s", err.Error()) @@ -289,19 +295,21 @@ func TestGetGroup(t *testing.T) { } func TestGetGroups(t *testing.T) { - var sf searchFunc = func(*ldap.SearchRequest) (*ldap.SearchResult, error) { - return nil, ldap.NewError(ldap.LDAPResultOperationsError, errors.New("mock")) - } - b, _ := getMockedBackend(&sf, lconfig, &logger) + lm := &mocks.Client{} + lm.On("Search", mock.Anything, mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(nil, ldap.NewError(ldap.LDAPResultOperationsError, errors.New("mock"))) + b, _ := getMockedBackend(lm, lconfig, &logger) _, err := b.GetGroups(context.Background(), url.Values{}) if err == nil || err.Error() != "itemNotFound" { t.Errorf("Expected 'itemNotFound' got '%s'", err.Error()) } - sf = func(*ldap.SearchRequest) (*ldap.SearchResult, error) { - return &ldap.SearchResult{}, nil - } - b, _ = getMockedBackend(&sf, lconfig, &logger) + lm = &mocks.Client{} + lm.On("Search", mock.Anything, mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything). + Return(&ldap.SearchResult{}, nil) + b, _ = getMockedBackend(lm, lconfig, &logger) g, err := b.GetGroups(context.Background(), url.Values{}) if err != nil { t.Errorf("Expected success, got '%s'", err.Error()) @@ -309,74 +317,3 @@ func TestGetGroups(t *testing.T) { t.Errorf("Expected zero length user slice") } } - -// below here ldap.Client interface method for ldapMock - -func (c ldapMock) Start() {} - -func (c ldapMock) StartTLS(*tls.Config) error { - return ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) Close() {} - -func (c ldapMock) IsClosing() bool { - return false -} - -func (c ldapMock) SetTimeout(time.Duration) {} - -func (c ldapMock) Bind(username, password string) error { - return ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) UnauthenticatedBind(username string) error { - return ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) SimpleBind(*ldap.SimpleBindRequest) (*ldap.SimpleBindResult, error) { - return nil, ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) ExternalBind() error { - return ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) Add(*ldap.AddRequest) error { - return ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) Del(*ldap.DelRequest) error { - return ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) Modify(*ldap.ModifyRequest) error { - return ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) ModifyDN(*ldap.ModifyDNRequest) error { - return ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) ModifyWithResult(*ldap.ModifyRequest) (*ldap.ModifyResult, error) { - return nil, ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) Compare(dn, attribute, value string) (bool, error) { - return false, ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) PasswordModify(*ldap.PasswordModifyRequest) (*ldap.PasswordModifyResult, error) { - return nil, ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} - -func (c ldapMock) Search(searchRequest *ldap.SearchRequest) (*ldap.SearchResult, error) { - if c.SearchFunc != nil { - return (*c.SearchFunc)(searchRequest) - } - - return nil, ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -} -func (c ldapMock) SearchWithPaging(searchRequest *ldap.SearchRequest, pagingSize uint32) (*ldap.SearchResult, error) { - return nil, ldap.NewError(ldap.LDAPResultNotSupported, fmt.Errorf("not implemented")) -}