本文整理汇总了Golang中github.com/couchbase/sync_gateway/channels.SetOf函数的典型用法代码示例。如果您正苦于以下问题:Golang SetOf函数的具体用法?Golang SetOf怎么用?Golang SetOf使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SetOf函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: TestRebuildRoleChannels
func TestRebuildRoleChannels(t *testing.T) {
computer := mockComputer{channels: ch.AtSequence(ch.SetOf("derived1", "derived2"), 1)}
auth := NewAuthenticator(gTestBucket, &computer)
role, _ := auth.NewRole("testRole", ch.SetOf("explicit1"))
err := auth.InvalidateChannels(role)
assert.Equals(t, err, nil)
role2, err := auth.GetRole("testRole")
assert.Equals(t, err, nil)
assert.DeepEquals(t, role2.Channels(), ch.AtSequence(ch.SetOf("explicit1", "derived1", "derived2", "!"), 1))
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:11,代码来源:auth_test.go
示例2: TestRebuildUserChannels
func TestRebuildUserChannels(t *testing.T) {
computer := mockComputer{channels: ch.AtSequence(ch.SetOf("derived1", "derived2"), 1)}
auth := NewAuthenticator(gTestBucket, &computer)
user, _ := auth.NewUser("testUser", "password", ch.SetOf("explicit1"))
user.setChannels(nil)
err := auth.Save(user)
assert.Equals(t, err, nil)
user2, err := auth.GetUser("testUser")
assert.Equals(t, err, nil)
assert.DeepEquals(t, user2.Channels(), ch.AtSequence(ch.SetOf("explicit1", "derived1", "derived2", "!"), 1))
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:12,代码来源:auth_test.go
示例3: TestChangeIndexChanges
func TestChangeIndexChanges(t *testing.T) {
base.EnableLogKey("DIndex+")
db := setupTestDBForChangeIndex(t)
defer tearDownTestDB(t, db)
db.ChannelMapper = channels.NewDefaultChannelMapper()
// Create a user with access to channel ABC
authenticator := db.Authenticator()
user, _ := authenticator.NewUser("naomi", "letmein", channels.SetOf("ABC", "PBS", "NBC", "TBS"))
authenticator.Save(user)
// Write an entry to the bucket
WriteDirectWithKey(db, "1c856b5724dcf4273c3993619900ce7f", []string{}, 1)
time.Sleep(20 * time.Millisecond)
changes, err := db.GetChanges(base.SetOf("*"), ChangesOptions{Since: simpleClockSequence(0)})
assert.True(t, err == nil)
assert.Equals(t, len(changes), 1)
time.Sleep(20 * time.Millisecond)
// Write a few more entries to the bucket
WriteDirectWithKey(db, "12389b182ababd12fff662848edeb908", []string{}, 1)
time.Sleep(20 * time.Millisecond)
changes, err = db.GetChanges(base.SetOf("*"), ChangesOptions{Since: simpleClockSequence(0)})
assert.True(t, err == nil)
assert.Equals(t, len(changes), 2)
}
开发者ID:basotia,项目名称:sync_gateway,代码行数:27,代码来源:kv_change_index_test.go
示例4: TestChannelCacheBackfill
// Test backfill of late arriving sequences to the channel caches
func TestChannelCacheBackfill(t *testing.T) {
base.LogKeys["Cache"] = true
base.LogKeys["Changes"] = true
base.LogKeys["Changes+"] = true
db := setupTestDBWithCacheOptions(t, shortWaitCache())
defer tearDownTestDB(t, db)
db.ChannelMapper = channels.NewDefaultChannelMapper()
// Create a user with access to channel ABC
authenticator := db.Authenticator()
user, _ := authenticator.NewUser("naomi", "letmein", channels.SetOf("ABC", "PBS", "NBC", "TBS"))
authenticator.Save(user)
// Simulate seq 3 being delayed - write 1,2,4,5
WriteDirect(db, []string{"ABC", "NBC"}, 1)
WriteDirect(db, []string{"ABC"}, 2)
WriteDirect(db, []string{"ABC", "PBS"}, 5)
WriteDirect(db, []string{"ABC", "PBS"}, 6)
// Test that retrieval isn't blocked by skipped sequences
db.changeCache.waitForSequence(6)
db.user, _ = authenticator.GetUser("naomi")
changes, err := db.GetChanges(base.SetOf("*"), ChangesOptions{Since: SequenceID{Seq: 0}})
assertNoError(t, err, "Couldn't GetChanges")
assert.Equals(t, len(changes), 4)
assert.DeepEquals(t, changes[0], &ChangeEntry{
Seq: SequenceID{Seq: 1, TriggeredBy: 0, LowSeq: 2},
ID: "doc-1",
Changes: []ChangeRev{{"rev": "1-a"}}})
lastSeq := changes[len(changes)-1].Seq
// Validate insert to various cache states
WriteDirect(db, []string{"ABC", "NBC", "PBS", "TBS"}, 3)
WriteDirect(db, []string{"CBS"}, 7)
db.changeCache.waitForSequence(7)
// verify insert at start (PBS)
pbsCache := db.changeCache.channelCaches["PBS"]
assert.True(t, verifyCacheSequences(pbsCache, []uint64{3, 5, 6}))
// verify insert at middle (ABC)
abcCache := db.changeCache.channelCaches["ABC"]
assert.True(t, verifyCacheSequences(abcCache, []uint64{1, 2, 3, 5, 6}))
// verify insert at end (NBC)
nbcCache := db.changeCache.channelCaches["NBC"]
assert.True(t, verifyCacheSequences(nbcCache, []uint64{1, 3}))
// verify insert to empty cache (TBS)
tbsCache := db.changeCache.channelCaches["TBS"]
assert.True(t, verifyCacheSequences(tbsCache, []uint64{3}))
// verify changes has three entries (needs to resend all since previous LowSeq, which
// will be the late arriver (3) along with 5, 6)
changes, err = db.GetChanges(base.SetOf("*"), ChangesOptions{Since: lastSeq})
assert.Equals(t, len(changes), 3)
assert.DeepEquals(t, changes[0], &ChangeEntry{
Seq: SequenceID{Seq: 3, LowSeq: 3},
ID: "doc-3",
Changes: []ChangeRev{{"rev": "1-a"}}})
}
开发者ID:mindhash,项目名称:sync_gateway,代码行数:61,代码来源:change_cache_test.go
示例5: updateChannels
// Updates the Channels property of a document object with current & past channels.
// Returns the set of channels that have changed (document joined or left in this revision)
func (doc *document) updateChannels(newChannels base.Set) (changedChannels base.Set) {
var changed []string
oldChannels := doc.Channels
if oldChannels == nil {
oldChannels = channels.ChannelMap{}
doc.Channels = oldChannels
} else {
// Mark every no-longer-current channel as unsubscribed:
curSequence := doc.Sequence
for channel, removal := range oldChannels {
if removal == nil && !newChannels.Contains(channel) {
oldChannels[channel] = &channels.ChannelRemoval{
Seq: curSequence,
RevID: doc.CurrentRev,
Deleted: doc.hasFlag(channels.Deleted)}
changed = append(changed, channel)
}
}
}
// Mark every current channel as subscribed:
for channel, _ := range newChannels {
if value, exists := oldChannels[channel]; value != nil || !exists {
oldChannels[channel] = nil
changed = append(changed, channel)
}
}
if changed != nil {
base.LogTo("CRUD", "\tDoc %q in channels %q", doc.ID, newChannels)
changedChannels = channels.SetOf(changed...)
}
return
}
开发者ID:guoyu07,项目名称:sync_gateway,代码行数:35,代码来源:document.go
示例6: TestUpdatePrincipal
// Unit test for bug #673
func TestUpdatePrincipal(t *testing.T) {
base.LogKeys["Cache"] = true
base.LogKeys["Changes"] = true
base.LogKeys["Changes+"] = true
db := setupTestDB(t)
defer tearDownTestDB(t, db)
db.ChannelMapper = channels.NewDefaultChannelMapper()
// Create a user with access to channel ABC
authenticator := db.Authenticator()
user, _ := authenticator.NewUser("naomi", "letmein", channels.SetOf("ABC"))
authenticator.Save(user)
// Validate that a call to UpdatePrincipals with no changes to the user doesn't allocate a sequence
userInfo, err := db.GetPrincipal("naomi", true)
userInfo.ExplicitChannels = base.SetOf("ABC")
_, err = db.UpdatePrincipal(*userInfo, true, true)
assertNoError(t, err, "Unable to update principal")
nextSeq, err := db.sequences.nextSequence()
assert.Equals(t, nextSeq, uint64(1))
// Validate that a call to UpdatePrincipals with changes to the user does allocate a sequence
userInfo, err = db.GetPrincipal("naomi", true)
userInfo.ExplicitChannels = base.SetOf("ABC", "PBS")
_, err = db.UpdatePrincipal(*userInfo, true, true)
assertNoError(t, err, "Unable to update principal")
nextSeq, err = db.sequences.nextSequence()
assert.Equals(t, nextSeq, uint64(3))
}
开发者ID:mindhash,项目名称:sync_gateway,代码行数:32,代码来源:database_test.go
示例7: postChanges
func postChanges(t *testing.T, it indexTester) {
response := it.sendAdminRequest("PUT", "/_logging", `{"Changes":true, "Changes+":true, "HTTP":true, "DIndex+":true}`)
assert.True(t, response != nil)
// Create user:
a := it.ServerContext().Database("db").Authenticator()
bernard, err := a.NewUser("bernard", "letmein", channels.SetOf("PBS"))
assert.True(t, err == nil)
a.Save(bernard)
// Put several documents
response = it.sendAdminRequest("PUT", "/db/pbs1", `{"value":1, "channel":["PBS"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/abc1", `{"value":1, "channel":["ABC"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/pbs2", `{"value":2, "channel":["PBS"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/pbs3", `{"value":3, "channel":["PBS"]}`)
assertStatus(t, response, 201)
var changes struct {
Results []db.ChangeEntry
Last_Seq db.SequenceID
}
changesJSON := `{"style":"all_docs", "heartbeat":300000, "feed":"longpoll", "limit":50, "since":"0"}`
changesResponse := it.send(requestByUser("POST", "/db/_changes", changesJSON, "bernard"))
err = json.Unmarshal(changesResponse.Body.Bytes(), &changes)
assertNoError(t, err, "Error unmarshalling changes response")
assert.Equals(t, len(changes.Results), 3)
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:33,代码来源:changes_api_test.go
示例8: TestPostChangesSameVbucket
func TestPostChangesSameVbucket(t *testing.T) {
it := initIndexTester(true, `function(doc) {channel(doc.channel);}`)
defer it.Close()
response := it.sendAdminRequest("PUT", "/_logging", `{"Changes":true, "Changes+":true, "HTTP":true, "DIndex+":true}`)
assert.True(t, response != nil)
// Create user:
a := it.ServerContext().Database("db").Authenticator()
bernard, err := a.NewUser("bernard", "letmein", channels.SetOf("PBS"))
assert.True(t, err == nil)
a.Save(bernard)
// Put several documents with ids that hash to the same vbucket
response = it.sendAdminRequest("PUT", "/db/pbs0000609", `{"value":1, "channel":["PBS"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/pbs0000799", `{"value":2, "channel":["PBS"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/pbs0003428", `{"value":3, "channel":["PBS"]}`)
assertStatus(t, response, 201)
var changes struct {
Results []db.ChangeEntry
Last_Seq db.SequenceID
}
changesJSON := `{"style":"all_docs", "heartbeat":300000, "feed":"longpoll", "limit":50, "since":"0"}`
changesResponse := it.send(requestByUser("POST", "/db/_changes", changesJSON, "bernard"))
err = json.Unmarshal(changesResponse.Body.Bytes(), &changes)
assertNoError(t, err, "Error unmarshalling changes response")
assert.Equals(t, len(changes.Results), 3)
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:33,代码来源:changes_api_test.go
示例9: TestIndexChangesAdminBackfill
func TestIndexChangesAdminBackfill(t *testing.T) {
db := setupTestDBForChangeIndex(t)
defer tearDownTestDB(t, db)
base.EnableLogKey("IndexChanges")
base.EnableLogKey("Hash+")
base.EnableLogKey("Changes+")
base.EnableLogKey("Backfill")
db.ChannelMapper = channels.NewDefaultChannelMapper()
// Create a user with access to channel ABC
authenticator := db.Authenticator()
user, _ := authenticator.NewUser("naomi", "letmein", channels.SetOf("ABC"))
user.SetSequence(1)
authenticator.Save(user)
// Create docs on multiple channels:
db.Put("both_1", Body{"channels": []string{"ABC", "PBS"}})
db.Put("doc0000609", Body{"channels": []string{"PBS"}})
db.Put("doc0000799", Body{"channels": []string{"ABC"}})
time.Sleep(100 * time.Millisecond)
// Check the _changes feed:
db.user, _ = authenticator.GetUser("naomi")
changes, err := db.GetChanges(base.SetOf("*"), getZeroSequence(db))
assertNoError(t, err, "Couldn't GetChanges")
printChanges(changes)
assert.Equals(t, len(changes), 3)
// Modify user to have access to both channels:
log.Println("Get Principal")
userInfo, err := db.GetPrincipal("naomi", true)
assert.True(t, userInfo != nil)
userInfo.ExplicitChannels = base.SetOf("ABC", "PBS")
_, err = db.UpdatePrincipal(*userInfo, true, true)
assertNoError(t, err, "UpdatePrincipal failed")
time.Sleep(100 * time.Millisecond)
// Write a few more docs (that should be returned as non-backfill)
db.Put("doc_nobackfill_1", Body{"channels": []string{"PBS"}})
db.Put("doc_nobackfill_2", Body{"channels": []string{"PBS"}})
time.Sleep(100 * time.Millisecond)
// Check the _changes feed:
log.Println("Get User")
db.user, _ = authenticator.GetUser("naomi")
db.changeCache.waitForSequence(1)
time.Sleep(100 * time.Millisecond)
lastSeq := getLastSeq(changes)
lastSeq, _ = db.ParseSequenceID(lastSeq.String())
changes, err = db.GetChanges(base.SetOf("*"), ChangesOptions{Since: lastSeq})
assertNoError(t, err, "Couldn't GetChanges")
printChanges(changes)
assert.Equals(t, len(changes), 5)
verifyChange(t, changes, "both_1", true)
verifyChange(t, changes, "doc0000609", true)
verifyChange(t, changes, "doc_nobackfill_1", false)
verifyChange(t, changes, "doc_nobackfill_2", false)
}
开发者ID:diesal11,项目名称:sync_gateway,代码行数:60,代码来源:changes_test.go
示例10: TestChannelCacheBufferingWithUserDoc
// Test notification when buffered entries are processed after a user doc arrives.
func TestChannelCacheBufferingWithUserDoc(t *testing.T) {
base.EnableLogKey("Cache")
base.EnableLogKey("Cache+")
base.EnableLogKey("Changes")
base.EnableLogKey("Changes+")
db := setupTestDBWithCacheOptions(t, CacheOptions{})
defer tearDownTestDB(t, db)
db.ChannelMapper = channels.NewDefaultChannelMapper()
// Simulate seq 1 (user doc) being delayed - write 2 first
WriteDirect(db, []string{"ABC"}, 2)
// Start wait for doc in ABC
waiter := db.tapListener.NewWaiterWithChannels(channels.SetOf("ABC"), nil)
successChan := make(chan bool)
go func() {
waiter.Wait()
close(successChan)
}()
// Simulate a user doc update
WriteUserDirect(db, "bernard", 1)
// Wait 3 seconds for notification, else fail the test.
select {
case <-successChan:
log.Println("notification successful")
case <-time.After(time.Second * 3):
assertFailed(t, "No notification after 3 seconds")
}
}
开发者ID:paulharter,项目名称:sync_gateway,代码行数:35,代码来源:change_cache_test.go
示例11: TestIndexChangesMultipleRevisions
func TestIndexChangesMultipleRevisions(t *testing.T) {
it := initIndexTester(true, `function(doc) {channel(doc.channel);}`)
defer it.Close()
response := it.sendAdminRequest("PUT", "/_logging", `{"Changes":true, "Changes+":true, "HTTP":true}`)
assert.True(t, response != nil)
// Create user:
a := it.ServerContext().Database("db").Authenticator()
bernard, err := a.NewUser("bernard", "letmein", channels.SetOf("ABC"))
assert.True(t, err == nil)
a.Save(bernard)
var writeResponse struct {
Id string
Rev string
}
// Start 10 goroutines, creating 100 docs each, in channel ABC
var wg sync.WaitGroup
numWriters := 0
docsPerWriter := 100
for i := 0; i < numWriters; i++ {
wg.Add(1)
go func(i int) {
defer wg.Done()
revIds := make([]string, docsPerWriter)
for j := 0; j < docsPerWriter; j++ {
docID := fmt.Sprintf("doc-%d", i*docsPerWriter+j)
url := fmt.Sprintf("/db/%s", docID)
response = it.sendAdminRequest("PUT", url, `{"channel":["ABC"]}`)
json.Unmarshal(response.Body.Bytes(), &writeResponse)
revIds[j] = writeResponse.Rev
}
// write revisions
for j := 0; j < docsPerWriter; j++ {
docID := fmt.Sprintf("doc-%d", i*docsPerWriter+j)
url := fmt.Sprintf("/db/%s?rev=%s", docID, revIds[j])
response = it.sendAdminRequest("PUT", url, `{"modified":true, "channel":["ABC"]}`)
}
}(i)
}
wg.Wait()
// Wait for indexing
time.Sleep(1 * time.Second)
var changes struct {
Results []db.ChangeEntry
Last_Seq interface{}
}
changesResponse := it.send(requestByUser("GET", "/db/_changes", "", "bernard"))
err = json.Unmarshal(changesResponse.Body.Bytes(), &changes)
assertNoError(t, err, "Error unmarshalling changes response")
assert.Equals(t, len(changes.Results), numWriters*docsPerWriter)
}
开发者ID:ethanfrey,项目名称:sync_gateway,代码行数:58,代码来源:changes_api_test.go
示例12: TestMultiChannelUserAndDocs
func TestMultiChannelUserAndDocs(t *testing.T) {
it := initIndexTester(true, `function(doc) {channel(doc.channel);}`)
defer it.Close()
response := it.sendAdminRequest("PUT", "/_logging", `{"Changes":true, "Changes+":true, "HTTP":true, "Debug":true}`)
assert.True(t, response != nil)
// Create user:
a := it.ServerContext().Database("db").Authenticator()
bernard, err := a.NewUser("bernard", "letmein", channels.SetOf("ABC", "NBC", "CBS"))
assert.True(t, err == nil)
a.Save(bernard)
// Put documents in ABC
for a := 0; a < 30; a++ {
// Put a doc with id "ABC_[a]"
url := fmt.Sprintf("/db/ABC_%d", a)
response = it.sendAdminRequest("PUT", url, `{"channel":["ABC"]}`)
assertStatus(t, response, 201)
}
// Put documents in NBC, CBS
for nc := 0; nc < 40; nc++ {
url := fmt.Sprintf("/db/NBC_CBS_%d", nc)
response = it.sendAdminRequest("PUT", url, `{"channel":["NBC","CBS"]}`)
assertStatus(t, response, 201)
}
// Put documents in ABC, NBC, CBS
for anc := 0; anc < 60; anc++ {
url := fmt.Sprintf("/db/ABC_NBC_CBS_%d", anc)
response = it.sendAdminRequest("PUT", url, `{"channel":["ABC","NBC","CBS"]}`)
assertStatus(t, response, 201)
}
time.Sleep(10 * time.Millisecond)
type simpleChangeResult struct {
Seq string
ID string
}
var changes struct {
Results []simpleChangeResult
Last_Seq interface{}
}
//changesJSON := `{"filter":"sync_gateway/bychannel", "channels":"PBS"}`
changesResponse := it.send(requestByUser("GET", "/db/_changes", "", "bernard"))
err = json.Unmarshal(changesResponse.Body.Bytes(), &changes)
assertNoError(t, err, "Error unmarshalling changes response")
assert.Equals(t, len(changes.Results), 130)
/*
for _, result := range changes.Results {
log.Printf("result: {%+v, %+v}", result.ID, result.Seq)
}
log.Printf("last_seq:%v", changes.Last_Seq)
*/
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:58,代码来源:changes_api_test.go
示例13: TestLowSequenceHandlingAcrossChannels
// Test low sequence handling of late arriving sequences to a continuous changes feed, when the
// user doesn't have visibility to some of the late arriving sequences
func TestLowSequenceHandlingAcrossChannels(t *testing.T) {
//base.LogKeys["Cache"] = true
//base.LogKeys["Changes"] = true
//base.LogKeys["Changes+"] = true
db := setupTestDBWithCacheOptions(t, shortWaitCache())
defer tearDownTestDB(t, db)
db.ChannelMapper = channels.NewDefaultChannelMapper()
// Create a user with access to channel ABC
authenticator := db.Authenticator()
user, _ := authenticator.NewUser("naomi", "letmein", channels.SetOf("ABC"))
authenticator.Save(user)
// Simulate seq 3 and 4 being delayed - write 1,2,5,6
WriteDirect(db, []string{"ABC"}, 1)
WriteDirect(db, []string{"ABC"}, 2)
WriteDirect(db, []string{"PBS"}, 5)
WriteDirect(db, []string{"ABC", "PBS"}, 6)
db.changeCache.waitForSequence(6)
db.user, _ = authenticator.GetUser("naomi")
// Start changes feed
var options ChangesOptions
options.Since = SequenceID{Seq: 0}
options.Terminator = make(chan bool)
options.Continuous = true
options.Wait = true
feed, err := db.MultiChangesFeed(base.SetOf("*"), options)
assert.True(t, err == nil)
// Go-routine to work the feed channel and write to an array for use by assertions
var changes = make([]*ChangeEntry, 0, 50)
time.Sleep(50 * time.Millisecond)
err = appendFromFeed(&changes, feed, 3)
// Validate the initial sequences arrive as expected
assert.True(t, err == nil)
assert.Equals(t, len(changes), 3)
assert.True(t, verifyChangesFullSequences(changes, []string{"1", "2", "2::6"}))
// Test backfill of sequence the user doesn't have visibility to
WriteDirect(db, []string{"PBS"}, 3)
WriteDirect(db, []string{"ABC"}, 9)
db.changeCache.waitForSequenceWithMissing(9)
time.Sleep(50 * time.Millisecond)
err = appendFromFeed(&changes, feed, 1)
assert.Equals(t, len(changes), 4)
assert.True(t, verifyChangesFullSequences(changes, []string{"1", "2", "2::6", "3::9"}))
close(options.Terminator)
}
开发者ID:mindhash,项目名称:sync_gateway,代码行数:59,代码来源:change_cache_test.go
示例14: TestAccessFunction
func TestAccessFunction(t *testing.T) {
/*
var logKeys = map[string]bool {
"CRUD": true,
"Access": true,
}
base.UpdateLogKeys(logKeys, true)
*/
db := setupTestDB(t)
defer tearDownTestDB(t, db)
authenticator := auth.NewAuthenticator(db.Bucket, db)
var err error
db.ChannelMapper = channels.NewChannelMapper(`function(doc){access(doc.users,doc.userChannels);}`)
user, _ := authenticator.NewUser("naomi", "letmein", channels.SetOf("Netflix"))
user.SetExplicitRoles(channels.TimedSet{"animefan": channels.NewVbSimpleSequence(1), "tumblr": channels.NewVbSimpleSequence(1)})
assertNoError(t, authenticator.Save(user), "Save")
body := Body{"users": []string{"naomi"}, "userChannels": []string{"Hulu"}}
_, err = db.Put("doc1", body)
assertNoError(t, err, "")
body = Body{"users": []string{"role:animefan"}, "userChannels": []string{"CrunchyRoll"}}
_, err = db.Put("doc2", body)
assertNoError(t, err, "")
// Create the role _after_ creating the documents, to make sure the previously-indexed access
// privileges are applied.
role, _ := authenticator.NewRole("animefan", nil)
authenticator.Save(role)
user, err = authenticator.GetUser("naomi")
assertNoError(t, err, "GetUser")
expected := channels.AtSequence(channels.SetOf("Hulu", "Netflix", "!"), 1)
assert.DeepEquals(t, user.Channels(), expected)
expected.AddChannel("CrunchyRoll", 2)
assert.DeepEquals(t, user.InheritedChannels(), expected)
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:44,代码来源:database_test.go
示例15: TestSaveUsers
func TestSaveUsers(t *testing.T) {
auth := NewAuthenticator(gTestBucket, nil)
user, _ := auth.NewUser("testUser", "password", ch.SetOf("test"))
err := auth.Save(user)
assert.Equals(t, err, nil)
user2, err := auth.GetUser("testUser")
assert.Equals(t, err, nil)
assert.DeepEquals(t, user2, user)
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:10,代码来源:auth_test.go
示例16: TestSaveRoles
func TestSaveRoles(t *testing.T) {
auth := NewAuthenticator(gTestBucket, nil)
role, _ := auth.NewRole("testRole", ch.SetOf("test"))
err := auth.Save(role)
assert.Equals(t, err, nil)
role2, err := auth.GetRole("testRole")
assert.Equals(t, err, nil)
assert.DeepEquals(t, role2, role)
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:10,代码来源:auth_test.go
示例17: postChangesChannelFilter
// Test _changes with channel filter
func postChangesChannelFilter(t *testing.T, it indexTester) {
response := it.sendAdminRequest("PUT", "/_logging", `{"Changes":true, "Changes+":true, "HTTP":true, "DIndex+":true}`)
assert.True(t, response != nil)
// Create user:
a := it.ServerContext().Database("db").Authenticator()
bernard, err := a.NewUser("bernard", "letmein", channels.SetOf("PBS"))
assert.True(t, err == nil)
a.Save(bernard)
// Put several documents
response = it.sendAdminRequest("PUT", "/db/pbs1-0000609", `{"channel":["PBS"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/samevbdiffchannel-0000609", `{"channel":["ABC"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/samevbdiffchannel-0000799", `{"channel":["PBS"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/pbs2-0000609", `{"channel":["PBS"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/pbs3-0000609", `{"channel":["PBS"]}`)
assertStatus(t, response, 201)
var changes struct {
Results []db.ChangeEntry
Last_Seq interface{}
}
changesJSON := `{"filter":"sync_gateway/bychannel", "channels":"PBS"}`
changesResponse := it.send(requestByUser("POST", "/db/_changes", changesJSON, "bernard"))
err = json.Unmarshal(changesResponse.Body.Bytes(), &changes)
assertNoError(t, err, "Error unmarshalling changes response")
assert.Equals(t, len(changes.Results), 4)
// Put several more documents, some to the same vbuckets
response = it.sendAdminRequest("PUT", "/db/pbs1-0000799", `{"value":1, "channel":["PBS"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/abc1-0000609", `{"value":1, "channel":["ABC"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/pbs2-0000799", `{"value":2, "channel":["PBS"]}`)
assertStatus(t, response, 201)
response = it.sendAdminRequest("PUT", "/db/pbs4", `{"value":4, "channel":["PBS"]}`)
assertStatus(t, response, 201)
time.Sleep(10 * time.Millisecond)
changesResponse = it.send(requestByUser("POST", "/db/_changes", changesJSON, "bernard"))
err = json.Unmarshal(changesResponse.Body.Bytes(), &changes)
assertNoError(t, err, "Error unmarshalling changes response")
for _, result := range changes.Results {
log.Printf("changes result:%+v", result)
}
assert.Equals(t, len(changes.Results), 7)
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:55,代码来源:changes_api_test.go
示例18: TestChangesAfterChannelAdded
// Unit test for bug #314
func TestChangesAfterChannelAdded(t *testing.T) {
base.LogKeys["Cache"] = true
base.LogKeys["Changes"] = true
base.LogKeys["Changes+"] = true
db := setupTestDB(t)
defer tearDownTestDB(t, db)
db.ChannelMapper = channels.NewDefaultChannelMapper()
// Create a user with access to channel ABC
authenticator := db.Authenticator()
user, _ := authenticator.NewUser("naomi", "letmein", channels.SetOf("ABC"))
authenticator.Save(user)
// Create a doc on two channels (sequence 1):
revid, _ := db.Put("doc1", Body{"channels": []string{"ABC", "PBS"}})
// Modify user to have access to both channels (sequence 2):
userInfo, err := db.GetPrincipal("naomi", true)
assert.True(t, userInfo != nil)
userInfo.ExplicitChannels = base.SetOf("ABC", "PBS")
_, err = db.UpdatePrincipal(*userInfo, true, true)
assertNoError(t, err, "UpdatePrincipal failed")
// Check the _changes feed:
db.changeCache.waitForSequence(1)
db.user, _ = authenticator.GetUser("naomi")
changes, err := db.GetChanges(base.SetOf("*"), ChangesOptions{Since: SequenceID{Seq: 1}})
assertNoError(t, err, "Couldn't GetChanges")
assert.Equals(t, len(changes), 2)
assert.DeepEquals(t, changes[0], &ChangeEntry{
Seq: SequenceID{Seq: 1, TriggeredBy: 2},
ID: "doc1",
Changes: []ChangeRev{{"rev": revid}}})
assert.DeepEquals(t, changes[1], &ChangeEntry{
Seq: SequenceID{Seq: 2},
ID: "_user/naomi",
Changes: []ChangeRev{}})
// Add a new doc (sequence 3):
revid, _ = db.Put("doc2", Body{"channels": []string{"PBS"}})
// Check the _changes feed -- this is to make sure the changeCache properly received
// sequence 2 (the user doc) and isn't stuck waiting for it.
db.changeCache.waitForSequence(3)
changes, err = db.GetChanges(base.SetOf("*"), ChangesOptions{Since: SequenceID{Seq: 2}})
assertNoError(t, err, "Couldn't GetChanges (2nd)")
assert.Equals(t, len(changes), 1)
assert.DeepEquals(t, changes[0], &ChangeEntry{
Seq: SequenceID{Seq: 3},
ID: "doc2",
Changes: []ChangeRev{{"rev": revid}}})
}
开发者ID:mindhash,项目名称:sync_gateway,代码行数:55,代码来源:database_test.go
示例19: TestUpdateDesignDoc
func TestUpdateDesignDoc(t *testing.T) {
db := setupTestDB(t)
defer tearDownTestDB(t, db)
err := db.PutDesignDoc("official", DesignDoc{})
assertNoError(t, err, "add design doc as admin")
authenticator := auth.NewAuthenticator(db.Bucket, db)
db.user, _ = authenticator.NewUser("naomi", "letmein", channels.SetOf("Netflix"))
err = db.PutDesignDoc("_design/pwn3d", DesignDoc{})
assertHTTPError(t, err, 403)
}
开发者ID:mindhash,项目名称:sync_gateway,代码行数:12,代码来源:database_test.go
示例20: defaultGuestUser
func (auth *Authenticator) defaultGuestUser() User {
user := &userImpl{
roleImpl: roleImpl{
ExplicitChannels_: ch.AtSequence(ch.SetOf(), 1),
},
userImplBody: userImplBody{
Disabled_: true,
},
auth: auth,
}
user.Channels_ = user.ExplicitChannels_.Copy()
return user
}
开发者ID:guoyu07,项目名称:sync_gateway,代码行数:13,代码来源:user.go
注:本文中的github.com/couchbase/sync_gateway/channels.SetOf函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论