From 106c018ef1aa9061fd9898e1299efea9c4d07a1c Mon Sep 17 00:00:00 2001 From: Umputun Date: Mon, 26 Aug 2019 00:58:27 -0500 Subject: [PATCH] mem store example updated with adm.Enabled support --- .../_example/memory_store/accessor/admin.go | 16 ++++++++-- .../memory_store/accessor/admin_test.go | 16 ++++++++-- backend/_example/memory_store/go.sum | 3 ++ backend/_example/memory_store/server/rpc.go | 21 ++++++++++++-- .../_example/memory_store/server/rpc_test.go | 29 +++++++++++++++++-- 5 files changed, 74 insertions(+), 11 deletions(-) diff --git a/backend/_example/memory_store/accessor/admin.go b/backend/_example/memory_store/accessor/admin.go index 6e375dfd..70581bfa 100644 --- a/backend/_example/memory_store/accessor/admin.go +++ b/backend/_example/memory_store/accessor/admin.go @@ -19,9 +19,10 @@ type MemAdmin struct { // AdminRec is a records per site with all admin info in type AdminRec struct { - SiteID string `bson:"site"` - IDs []string `bson:"ids"` // admin ids - Email string `bson:"email"` // admin email + SiteID string + IDs []string // admin ids + Email string // admin email + Enabled bool // site enabled } // NewMemAdminStore makes admin Store in memory @@ -55,6 +56,15 @@ func (m *MemAdmin) Email(siteID string) (email string, err error) { return resp.Email, nil } +// Enabled return +func (m *MemAdmin) Enabled(siteID string) (ok bool, err error) { + resp, ok := m.data[siteID] + if !ok { + return false, errors.Errorf("site %s not found", siteID) + } + return resp.Enabled, nil +} + // Set admin data for siteID func (m *MemAdmin) Set(siteID string, arec AdminRec) { m.data[siteID] = arec diff --git a/backend/_example/memory_store/accessor/admin_test.go b/backend/_example/memory_store/accessor/admin_test.go index 1fe18688..e05bc956 100644 --- a/backend/_example/memory_store/accessor/admin_test.go +++ b/backend/_example/memory_store/accessor/admin_test.go @@ -20,8 +20,9 @@ func TestMemAdmin_Get(t *testing.T) { var ms admin.Store = adm adm.data = map[string]AdminRec{ - "site1": {"site1", []string{"i11", "i12"}, "e1"}, - "site2": {"site2", []string{"i21", "i22"}, "e2"}, + "site1": {"site1", []string{"i11", "i12"}, "e1", true}, + "site2": {"site2", []string{"i21", "i22"}, "e2", true}, + "site3": {"site3", []string{"i21", "i22"}, "e3", false}, } admins, err := ms.Admins("site1") @@ -49,4 +50,15 @@ func TestMemAdmin_Get(t *testing.T) { email, err = ms.Email("no-site-in-db") assert.EqualError(t, err, "site no-site-in-db not found") + + enabled, err := ms.Enabled("site1") + assert.NoError(t, err) + assert.True(t, enabled) + + enabled, err = ms.Enabled("site3") + assert.NoError(t, err) + assert.False(t, enabled) + + enabled, err = ms.Enabled("no-site-in-db") + assert.EqualError(t, err, "site no-site-in-db not found") } diff --git a/backend/_example/memory_store/go.sum b/backend/_example/memory_store/go.sum index 28489590..7cbe30e7 100644 --- a/backend/_example/memory_store/go.sum +++ b/backend/_example/memory_store/go.sum @@ -160,6 +160,7 @@ github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoH github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/tidwall/btree v0.0.0-20170113224114-9876f1454cf0/go.mod h1:huei1BkDWJ3/sLXmO+bsCNELL+Bp2Kks9OLyQFkzvA8= github.com/tidwall/buntdb v1.0.0/go.mod h1:Y39xhcDW10WlyYXeLgGftXVbjtM0QP+/kpz8xl9cbzE= @@ -232,6 +233,7 @@ golang.org/x/net v0.0.0-20190611141213-3f473d35a33a/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80 h1:Ao/3l156eZf2AW5wK8a7/smtodRU+gha3+BeqJ69lRk= golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7 h1:fHDIZ2oxGnUZRN6WgWFCbYBjH9uqVPRCUVUDhs0wnbA= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -311,6 +313,7 @@ gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMy gopkg.in/oauth2.v3 v3.10.1/go.mod h1:nTG+m2PRcHR9jzGNrGdxSsUKz7vvwkqSlhFrstgZcRU= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/backend/_example/memory_store/server/rpc.go b/backend/_example/memory_store/server/rpc.go index 47bcc824..68a08f66 100644 --- a/backend/_example/memory_store/server/rpc.go +++ b/backend/_example/memory_store/server/rpc.go @@ -42,9 +42,10 @@ func (s *RPC) addHandlers() { // admin store handlers s.Group("admin", jrpc.HandlersGroup{ - "key": s.admKeyHndl, - "admins": s.admAdminsHndl, - "email": s.admEmailHndl, + "key": s.admKeyHndl, + "admins": s.admAdminsHndl, + "email": s.admEmailHndl, + "enabled": s.admEnabledHndl, }) } @@ -181,3 +182,17 @@ func (s *RPC) admEmailHndl(id uint64, params json.RawMessage) (rr jrpc.Response) } return jrpc.EncodeResponse(id, email, err) } + +// get admin email +func (s *RPC) admEnabledHndl(id uint64, params json.RawMessage) (rr jrpc.Response) { + var siteID string + if err := json.Unmarshal(params, &siteID); err != nil { + return jrpc.Response{Error: err.Error()} + } + + ok, err := s.adm.Enabled(siteID) + if err != nil { + return jrpc.Response{Error: err.Error()} + } + return jrpc.EncodeResponse(id, ok, err) +} diff --git a/backend/_example/memory_store/server/rpc_test.go b/backend/_example/memory_store/server/rpc_test.go index 30f3942c..f0c5194a 100644 --- a/backend/_example/memory_store/server/rpc_test.go +++ b/backend/_example/memory_store/server/rpc_test.go @@ -293,6 +293,24 @@ func TestRPC_admEmailHndl(t *testing.T) { assert.Equal(t, "admin@example.com", email) } +func TestRPC_admEnabledHndl(t *testing.T) { + _, port, teardown := prepTestStore(t) + defer teardown() + api := fmt.Sprintf("http://localhost:%d/test", port) + + ra := admin.RPC{Client: jrpc.Client{API: api, Client: http.Client{Timeout: 1 * time.Second}}} + _, err := ra.Enabled("bad site") + assert.EqualError(t, err, "site bad site not found") + + ok, err := ra.Enabled("test-site") + assert.NoError(t, err) + assert.Equal(t, true, ok) + + ok, err = ra.Enabled("test-site-disabled") + assert.NoError(t, err) + assert.Equal(t, false, ok) +} + func prepTestStore(t *testing.T) (s *RPC, port int, teardown func()) { port = 40000 + int(rand.Int31n(10000)) @@ -301,12 +319,17 @@ func prepTestStore(t *testing.T) (s *RPC, port int, teardown func()) { s = NewRPC(mg, adm, &jrpc.Server{API: "/test", Logger: jrpc.NoOpLogger}) admRec := accessor.AdminRec{ - SiteID: "test-site", - IDs: []string{"id1", "id2"}, - Email: "admin@example.com", + SiteID: "test-site", + IDs: []string{"id1", "id2"}, + Email: "admin@example.com", + Enabled: true, } adm.Set("test-site", admRec) + admRecDisabled := admRec + admRecDisabled.Enabled = false + adm.Set("test-site-disabled", admRecDisabled) + go func() { t.Log(s.Run(port)) }()