From 5b65f21ae40536004d83f5992466af31011acadc Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 27 May 2017 13:50:57 +0800 Subject: [PATCH] add some tests for tag and cache related with #330 --- lru_cacher.go => cache_lru.go | 0 memory_store.go => cache_memory_store.go | 0 cache_test.go | 108 +++++++++++++++++++++++ session_find.go | 5 +- tag_test.go | 39 ++++++++ xorm_test.go | 2 + 6 files changed, 153 insertions(+), 1 deletion(-) rename lru_cacher.go => cache_lru.go (100%) rename memory_store.go => cache_memory_store.go (100%) create mode 100644 cache_test.go create mode 100644 tag_test.go diff --git a/lru_cacher.go b/cache_lru.go similarity index 100% rename from lru_cacher.go rename to cache_lru.go diff --git a/memory_store.go b/cache_memory_store.go similarity index 100% rename from memory_store.go rename to cache_memory_store.go diff --git a/cache_test.go b/cache_test.go new file mode 100644 index 00000000..9b77b6b9 --- /dev/null +++ b/cache_test.go @@ -0,0 +1,108 @@ +// Copyright 2017 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xorm + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" +) + +func TestCacheFind(t *testing.T) { + assert.NoError(t, prepareEngine()) + + type MailBox struct { + Id int64 + Username string + Password string + } + + cacher := NewLRUCacher2(NewMemoryStore(), time.Hour, 10000) + testEngine.SetDefaultCacher(cacher) + + assert.NoError(t, testEngine.Sync2(new(MailBox))) + + var inserts = []*MailBox{ + { + Username: "user1", + Password: "pass1", + }, + { + Username: "user2", + Password: "pass2", + }, + } + _, err := testEngine.Insert(inserts[0], inserts[1]) + assert.NoError(t, err) + + var boxes []MailBox + assert.NoError(t, testEngine.Find(&boxes)) + assert.EqualValues(t, 2, len(boxes)) + for i, box := range boxes { + assert.Equal(t, inserts[i].Id, box.Id) + assert.Equal(t, inserts[i].Username, box.Username) + assert.Equal(t, inserts[i].Password, box.Password) + } + + boxes = make([]MailBox, 0, 2) + assert.NoError(t, testEngine.Find(&boxes)) + assert.EqualValues(t, 2, len(boxes)) + for i, box := range boxes { + assert.Equal(t, inserts[i].Id, box.Id) + assert.Equal(t, inserts[i].Username, box.Username) + assert.Equal(t, inserts[i].Password, box.Password) + } + + testEngine.SetDefaultCacher(nil) +} + +func TestCacheFind2(t *testing.T) { + assert.NoError(t, prepareEngine()) + + type MailBox struct { + Id uint64 + Username string + Password string + } + + cacher := NewLRUCacher2(NewMemoryStore(), time.Hour, 10000) + testEngine.SetDefaultCacher(cacher) + + assert.NoError(t, testEngine.Sync2(new(MailBox))) + + var inserts = []*MailBox{ + { + Username: "user1", + Password: "pass1", + }, + { + Username: "user2", + Password: "pass2", + }, + } + _, err := testEngine.Insert(inserts[0], inserts[1]) + assert.NoError(t, err) + + var boxes []MailBox + assert.NoError(t, testEngine.Find(&boxes)) + assert.EqualValues(t, 2, len(boxes)) + for i, box := range boxes { + assert.Equal(t, inserts[i].Id, box.Id) + assert.Equal(t, inserts[i].Username, box.Username) + assert.Equal(t, inserts[i].Password, box.Password) + } + + boxes = make([]MailBox, 0, 2) + assert.NoError(t, testEngine.Find(&boxes)) + assert.EqualValues(t, 2, len(boxes)) + for i, box := range boxes { + assert.Equal(t, inserts[i].Id, box.Id) + assert.Equal(t, inserts[i].Username, box.Username) + assert.Equal(t, inserts[i].Password, box.Password) + } + + testEngine.SetDefaultCacher(nil) +} diff --git a/session_find.go b/session_find.go index 16c6ff4f..9ee37201 100644 --- a/session_find.go +++ b/session_find.go @@ -122,7 +122,10 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{}) } } - condSQL, condArgs, _ := builder.ToSQL(session.Statement.cond.And(autoCond)) + condSQL, condArgs, err := builder.ToSQL(session.Statement.cond.And(autoCond)) + if err != nil { + return err + } args = append(session.Statement.joinArgs, condArgs...) sqlStr = session.Statement.genSelectSQL(columnStr, condSQL) diff --git a/tag_test.go b/tag_test.go new file mode 100644 index 00000000..14a65fb8 --- /dev/null +++ b/tag_test.go @@ -0,0 +1,39 @@ +// Copyright 2017 The Xorm Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package xorm + +import ( + "testing" + + "github.com/stretchr/testify/assert" +) + +func TestCacheTag(t *testing.T) { + assert.NoError(t, prepareEngine()) + + type CacheDomain struct { + Id int64 `xorm:"pk cache"` + Name string + } + + assert.NoError(t, testEngine.CreateTables(&CacheDomain{})) + + table := testEngine.TableInfo(&CacheDomain{}) + assert.True(t, table.Cacher != nil) +} + +func TestNoCacheTag(t *testing.T) { + assert.NoError(t, prepareEngine()) + + type NoCacheDomain struct { + Id int64 `xorm:"pk nocache"` + Name string + } + + assert.NoError(t, testEngine.CreateTables(&NoCacheDomain{})) + + table := testEngine.TableInfo(&NoCacheDomain{}) + assert.True(t, table.Cacher == nil) +} diff --git a/xorm_test.go b/xorm_test.go index 98b42b66..0d861707 100644 --- a/xorm_test.go +++ b/xorm_test.go @@ -7,6 +7,7 @@ import ( "testing" _ "github.com/go-sql-driver/mysql" + "github.com/go-xorm/core" _ "github.com/lib/pq" _ "github.com/mattn/go-sqlite3" ) @@ -31,6 +32,7 @@ func createEngine(dbType, connStr string) error { } testEngine.ShowSQL(*showSQL) + testEngine.logger.SetLevel(core.LOG_DEBUG) } tables, err := testEngine.DBMetas()