From 806757d91c70e284250ed7dd09fcc0f80bcdccc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Carlos=20Nieto?= <jose.carlos@menteslibres.net> Date: Mon, 17 Oct 2016 19:53:20 -0500 Subject: [PATCH] Fix tests --- Makefile | 4 +-- internal/sqladapter/testing/adapter.go.tpl | 40 ++++------------------ mongo/result.go | 13 +++++++ 3 files changed, 21 insertions(+), 36 deletions(-) diff --git a/Makefile b/Makefile index a02ce8f0..b72e1662 100644 --- a/Makefile +++ b/Makefile @@ -5,8 +5,8 @@ DB_HOST ?= 127.0.0.1 export DB_HOST test: - go test -v -bench=. ./lib/... && \ - go test -v -bench=. ./internal/... && \ + go test -v -benchtime=500ms -bench=. ./lib/... && \ + go test -v -benchtime=500ms -bench=. ./internal/... && \ for ADAPTER in postgresql mysql sqlite ql mongo; do \ $(MAKE) -C $$ADAPTER test; \ done && \ diff --git a/internal/sqladapter/testing/adapter.go.tpl b/internal/sqladapter/testing/adapter.go.tpl index 8fbbb368..81774a2c 100644 --- a/internal/sqladapter/testing/adapter.go.tpl +++ b/internal/sqladapter/testing/adapter.go.tpl @@ -94,23 +94,23 @@ func TestPreparedStatementsCache(t *testing.T) { const maxPreparedStatements = 128 * 2 var wg sync.WaitGroup - for i := 0; i < 500; i++ { + for i := 0; i < 1000; i++ { wg.Add(1) go func(i int) { defer wg.Done() // This query is different with each iteration and thus generates a new // prepared statement everytime it's called. - res := sess.Collection("artist").Find().Select(db.Raw(fmt.Sprintf("COUNT(%d)", i))) + res := sess.Collection("artist").Find().Select(db.Raw(fmt.Sprintf("count(%d)", i))) var count map[string]uint64 err := res.One(&count) if err != nil { tFatal(err) } - if sqladapter.NumActiveStatements() > maxPreparedStatements { - tFatal(fmt.Errorf("The number of active statements cannot exceed %d.", maxPreparedStatements)) + if activeStatements := sqladapter.NumActiveStatements(); activeStatements > maxPreparedStatements { + tFatal(fmt.Errorf("The number of active statements cannot exceed %d (got %d).", maxPreparedStatements, activeStatements)) } }(i) - if i%maxPreparedStatements == 0 { + if i%50 == 0 { wg.Wait() } } @@ -1192,7 +1192,7 @@ func TestUpdateWithNullColumn(t *testing.T) { assert.NotEqual(t, nil, item.Name) assert.Equal(t, name, *item.Name) - artist.Find(db.Cond{"id": id}).Update(Artist{Name: nil}) + artist.Find(id).Update(Artist{Name: nil}) assert.NoError(t, err) var item2 Artist @@ -1429,34 +1429,6 @@ func TestBuilder(t *testing.T) { assert.NotZero(t, all) } -func TestStressPreparedStatementCache(t *testing.T) { - sess := mustOpen() - defer sess.Close() - - var tMu sync.Mutex - tFatal := func(err error) { - tMu.Lock() - defer tMu.Unlock() - t.Fatal(err) - } - - var wg sync.WaitGroup - - for i := 1; i < 1000; i++ { - wg.Add(1) - go func(i int) { - defer wg.Done() - res := sess.Collection("artist").Find().Select(db.Raw(fmt.Sprintf("COUNT(%d)", i%5))) - var data map[string]interface{} - if err := res.One(&data); err != nil { - tFatal(err) - } - }(i) - } - - wg.Wait() -} - func TestExhaustConnectionPool(t *testing.T) { if Adapter == "ql" { t.Skip("Currently not supported.") diff --git a/mongo/result.go b/mongo/result.go index 0fa0a794..f871edab 100644 --- a/mongo/result.go +++ b/mongo/result.go @@ -77,6 +77,19 @@ func (r *result) setCursor() error { return nil } +func (r *result) And(terms ...interface{}) db.Result { + if r.queryChunks.Conditions == nil { + return r.Where(terms) + } + r.queryChunks.Conditions = map[string]interface{}{ + "$and": []interface{}{ + r.queryChunks.Conditions, + r.c.compileQuery(terms...), + }, + } + return r +} + func (r *result) Where(terms ...interface{}) db.Result { r.queryChunks.Conditions = r.c.compileQuery(terms...) return r -- GitLab